Let [yl1,...,yln] represent a list of variable lists,
each of length zero or more, and xl1,...,xln each represent a
vector of zero or more variables, so that the variables in each of
yl1...yln have the same types as the corresponding xli.
X_CASES_THEN expects such a list of variable lists, [yl1,...,yln], a tactic
generating function f:thm->tactic, and a disjunctive theorem,
where each disjunct may be existentially quantified:
th = |-(?xl1.B1) \/...\/ (?xln.Bn)
each disjunct having the form (?xi1 ... xim. Bi). If
applying f to the theorem obtained by introducing witness variables yli
for the objects xli whose existence is asserted by each disjunct, typically
({Bi[yli/xli]} |- Bi[yli/xli]), produce the following results when
applied to a goal (A ?- t):
A ?- t
========= f ({B1[yl1/xl1]} |- B1[yl1/xl1])
A ?- t1
...
A ?- t
========= f ({Bn[yln/xln]} |- Bn[yln/xln])
A ?- tn
then applying (X_CHOOSE_THEN [yl1,...,yln] f th)
to the goal (A ?- t) produces n subgoals.
A ?- t
======================= X_CHOOSE_THEN [yl1,...,yln] f th
A ?- t1 ... A ?- tn