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)
    A ?- t
   ========= f ({B1[yl1/xl1]} |- B1[yl1/xl1])
    A ?- t1
    ...
    A ?- t
   =========  f ({Bn[yln/xln]} |- Bn[yln/xln])
    A ?- tn
           A ?- t
   =======================  X_CHOOSE_THEN [yl1,...,yln] f th
    A ?- t1  ...  A ?- tn