End Induction.
(* Time to prove theorems in the language of Z *)

(* Specifications: *)
Theorem pred_succ : forall n, Z.pred (Z.succ n) == n.
Theorem succ_pred : forall n, Z.succ (Z.pred n) == n.
Theorem one_succ : 1 == Z.succ 0.
Theorem two_succ : 2 == Z.succ 1.
Theorem opp_0 : - 0 == 0.
Theorem opp_succ : forall n, - (Z.succ n) == Z.pred (- n).
Theorem add_0_l : forall n, 0 + n == n.
Theorem add_succ_l : forall n m, (Z.succ n) + m == Z.succ (n + m).
Theorem sub_0_r : forall n, n - 0 == n.
Theorem sub_succ_r : forall n m, n - (Z.succ m) == Z.pred (n - m).
Theorem mul_0_l : forall n, 0 * n == 0.
Theorem mul_succ_l : forall n m, (Z.succ n) * m == n * m + m.
(** Order *)
Lemma lt_eq_cases : forall n m, n<=m <-> n<m \/ n==m.
Theorem lt_irrefl : forall n, ~ (n < n).
Theorem lt_succ_r : forall n m, n < (Z.succ m) <-> n <= m.
Theorem min_l : forall n m, n <= m -> Z.min n m == n.
Theorem min_r : forall n m, m <= n -> Z.min n m == m.
Theorem max_l : forall n m, m <= n -> Z.max n m == n.
Theorem max_r : forall n m, n <= m -> Z.max n m == m.
Theorem lt_nge : forall n m, n < m <-> ~(m<=n).
#[global]
Instance lt_wd : Proper (Z.eq ==> Z.eq ==> iff) Z.lt.