Ltac cases n := induction_maker n ltac:(apply case_analysis).

(* Specifications: *)
Theorem neq_0 : ~ forall n, n == 0.
Theorem neq_0_r n : n ~= 0 <-> exists m, n == S m.
Theorem zero_or_succ n : n == 0 \/ exists m, n == S m.
Theorem eq_pred_0 n : P n == 0 <-> n == 0 \/ n == 1.
Theorem succ_pred n : n ~= 0 -> S (P n) == n.
Theorem pred_inj n m : n ~= 0 -> m ~= 0 -> P n == P m -> n == m.
Theorem pair_induction : A 0 -> A 1 -> (forall n, A n -> A (S n) -> A (S (S n))) -> forall n, A n.
Theorem two_dim_induction : R 0 0 -> (forall n m, R n m -> R n (S m)) -> (forall n, (forall m, R n m) -> R (S n) 0) -> forall n m, R n m.
Theorem double_induction : (forall m, R 0 m) -> (forall n, R (S n) 0) -> (forall n m, R n m -> R (S n) (S m)) -> forall n m, R n m.