The following goal might be solved by case analysis:
> g `!n:num. n <= n * n`;
We can “manually” perform induction by using the following theorem:
> numTheory.INDUCTION;
- val it : thm = |- !P. P 0 /\ (!n. P n ==> P (SUC n)) ==> (!n. P n)
which is useful with HO_MATCH_MP_TAC because of higher-order matching:
> e(HO_MATCH_MP_TAC numTheory.INDUCTION);
- val it : goalstack = 1 subgoal (1 total)
`0 <= 0 * 0 /\ (!n. n <= n * n ==> SUC n <= SUC n * SUC n)`
The goal can be finished with SIMP_TAC arith_ss [].