that is, performs a case split over the possible constructions (the
ti) of a term, providing as assumptions the given constraints, having
split conjoined constraints into separate assumptions. Note that unless A'
is a subset of A, this is an invalid tactic.

FAILURE CONDITIONS

Fails unless the theorem has the above form, namely a conjunction of
(possibly multiply existentially quantified) terms which assert the equality
of the same variable x and the given terms.

EXAMPLE

Suppose we have the goal:

# g `~(l:(A)list = []) ==> LENGTH l > 0`;;

then we can get rid of the universal quantifier from the
inbuilt list theorem list_CASES:

list_CASES = !l. l = [] \/ (?h t. l = CONS h t)

and then use STRUCT_CASES_TAC. This amounts to applying the
following tactic: