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. The function X_CASES_THENL expects a list of variable
lists, [yl1,...,yln], a list of tactic-generating functions
[f1,...,fn]:(thm->tactic)list, and a disjunctive theorem, where each disjunct
may be existentially quantified:
   th = |-(?xl1.B1)  \/...\/  (?xln.Bn)
    A ?- t
   =========  f1 ({B1[yl1/xl1]} |- B1[yl1/xl1])
    A ?- t1
    ...
    A ?- t
   =========  fn ({Bn[yln/xln]} |- Bn[yln/xln])
    A ?- tn
           A ?- t
   =======================  X_CASES_THENL [yl1,...,yln] [f1,...,fn] th
    A ?- t1  ...  A ?- tn