End RelElim.
(** Predecessor and order *)

(* Specifications: *)
Theorem succ_pred_pos : forall n, 0 < n -> S (P n) == n.
Theorem le_pred_l : forall n, P n <= n.
Theorem lt_pred_l : forall n, n ~= 0 -> P n < n.
Theorem le_le_pred : forall n m, n <= m -> P n <= m.
Theorem lt_lt_pred : forall n m, n < m -> P n < m.
Theorem lt_le_pred : forall n m, n < m -> n <= P m.
(* Converse is false for n == m == 0 *)
Theorem lt_pred_le : forall n m, P n < m -> n <= m.
(* Converse is false for n == m == 0 *)
Theorem lt_pred_lt : forall n m, n < P m -> n < m.
Theorem le_pred_le : forall n m, n <= P m -> n <= m.
Theorem pred_le_mono : forall n m, n <= m -> P n <= P m.
(* Converse is false for n == 1, m == 0 *)
Theorem pred_lt_mono : forall n m, n ~= 0 -> (n < m <-> P n < P m).
Theorem lt_succ_lt_pred : forall n m, S n < m <-> n < P m.
Theorem le_succ_le_pred : forall n m, S n <= m -> n <= P m.
(* Converse is false for n == m == 0 *)
Theorem lt_pred_lt_succ : forall n m, P n < m -> n < S m.
(* Converse is false for n == m == 0 *)
Theorem le_pred_le_succ : forall n m, P n <= m <-> n <= S m.
Lemma measure_induction : forall (X : Type) (f : X -> t) (A : X -> Type),
(forall x, (forall y, f y < f x -> A y) -> A x) ->
forall x, A x.