Cases : tactic
The cases theorem for a type ty will be of the form:
   |- !v:ty. (?x11...x1n1. v = C1 x11 ... x1n1) \/ .... \/
             (?xm1...xmnm. v = Cm xm1 ... xmnm)
|- !n. (n = 0) \/ (?m. n = SUC m)
- Hol_datatype `foo = Bar of num | Baz of bool`; > val it = () : unit
   - val foofn_def = Define `(foofn (Bar n) = n + 10) /\
                             (foofn (Baz x) = 10)`;
   > val foofn_def =
       |- (!n. foofn (Bar n) = n + 10) /\
           !x. foofn (Baz x) = 10 : thm
                    ?- !x. foofn x >= 10
   ======================================================  Cases
    ?- foofn (Bar n) >= 10        ?- foofn (Baz b) >= 10