For "x", "y", "z1" and "z2" of type ":*", and "P:*->bool",
COND_CASES_TAC ([], "x = (P y => z1 | z2)");;
([(["P y"], "x = z1"); (["~P y"], "x = z2")], -) : subgoals
but it fails, for example, if "y" is not free in the
term part of the goal:
COND_CASES_TAC ([], "!y. x = (P y => z1 | z2)");;
evaluation failed COND_CASES_TAC
In contrast, ASM_CASES_TAC does not perform the replacement:
ASM_CASES_TAC "P y" ([], "x = (P y => z1 | z2)");;
([(["P y"], "x = (P y => z1 | z2)"); (["~P y"], "x = (P y => z1 | z2)")],
-)
: subgoals