Built with Alectryon, running Coq+SerAPI v8.10.0+0.7.0. Coq sources are in this panel; goals and messages will appear in the other. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus.
(************************************************************************)
(*         *   The Coq Proof Assistant / The Coq Development Team       *)
(*  v      *   INRIA, CNRS and contributors - Copyright 1999-2018       *)
(* <O___,, *       (see CREDITS file for the list of authors)           *)
(*   \VV/  **************************************************************)
(*    //   *    This file is distributed under the terms of the         *)
(*         *     GNU Lesser General Public License Version 2.1          *)
(*         *     (see LICENSE file for the text of the license)         *)
(************************************************************************)
(*                      Evgeny Makarov, INRIA, 2007                     *)
(************************************************************************)

Require Export NAdd.

Module NOrderProp (Import N : NAxiomsMiniSig').
Include NAddProp N.

(* Theorems that are true for natural numbers but not for integers *)


well_founded lt

well_founded lt

well_founded (fun n m : t => 0 <= n < m)

relation_equivalence lt (fun n m : t => 0 <= n < m)

relation_equivalence lt (fun n m : t => 0 <= n < m)
x, y:t

x < y -> 0 <= x < y
x, y:t
0 <= x < y -> x < y
x, y:t

0 <= x < y -> x < y
now intros [_ H]. Defined. (* "le_0_l : forall n : N, 0 <= n" was proved in NBase.v *)

forall n : t, ~ n < 0

forall n : t, ~ n < 0
n:t

0 <= n
apply le_0_l. Qed.

forall n : t, ~ S n <= 0

forall n : t, ~ S n <= 0
intros n H; apply le_succ_l in H; false_hyp H nlt_0_r. Qed.

forall n : t, n <= 0 <-> n == 0

forall n : t, n <= 0 <-> n == 0
n:t
H:n <= 0

n == 0
n:t
H:n == 0
n <= 0
n:t
H:n == 0

n <= 0
now apply eq_le_incl. Qed.

forall n : t, 0 < S n

forall n : t, 0 < S n
induct n; [apply lt_succ_diag_r | intros n H; now apply lt_lt_succ_r]. Qed.

forall n : t, n ~= 0 <-> 0 < n

forall n : t, n ~= 0 <-> 0 < n

0 ~= 0 <-> 0 < 0

forall n : t, S n ~= 0 <-> 0 < S n

forall n : t, S n ~= 0 <-> 0 < S n
intro n; split; intro H; [apply lt_0_succ | apply neq_succ_0]. Qed.

forall n : t, n == 0 \/ 0 < n

forall n : t, n == 0 \/ 0 < n

0 == 0 \/ 0 < 0

forall n : t, S n == 0 \/ 0 < S n

forall n : t, S n == 0 \/ 0 < S n
intro; right; apply lt_0_succ. Qed.

forall n : t, n == 0 \/ n == 1 \/ 1 < n

forall n : t, n == 0 \/ n == 1 \/ 1 < n

forall n : t, n == 0 \/ n == S 0 \/ S 0 < n

0 == 0 \/ 0 == S 0 \/ S 0 < 0

forall n : t, n == 0 \/ n == S 0 \/ S 0 < n -> S n == 0 \/ S n == S 0 \/ S 0 < S n

forall n : t, n == 0 \/ n == S 0 \/ S 0 < n -> S n == 0 \/ S n == S 0 \/ S 0 < S n

0 == 0 \/ 0 == S 0 \/ S 0 < 0 -> S 0 == 0 \/ S 0 == S 0 \/ S 0 < S 0

forall n : t, S n == 0 \/ S n == S 0 \/ S 0 < S n -> S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)

forall n : t, S n == 0 \/ S n == S 0 \/ S 0 < S n -> S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
IH:S n == 0 \/ S n == S 0 \/ S 0 < S n

S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S n == 0

S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S n == S 0
S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S 0 < S n
S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S n == S 0

S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S 0 < S n
S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S n == S 0

S 0 < S (S n)
n:t
H:S 0 < S n
S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S n == S 0

S 0 < S (S 0)
n:t
H:S 0 < S n
S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S 0 < S n

S (S n) == 0 \/ S (S n) == S 0 \/ S 0 < S (S n)
n:t
H:S 0 < S n

S 0 < S (S n)
now apply lt_lt_succ_r. Qed.

forall n : t, n < 1 <-> n == 0

forall n : t, n < 1 <-> n == 0

forall n : t, n < S 0 <-> n == 0

0 < S 0 <-> 0 == 0

forall n : t, S n < S 0 <-> S n == 0

forall n : t, S n < S 0 <-> S n == 0
n:t

S n < S 0 <-> S n == 0
n:t

n < 0 <-> S n == 0
split; intro H; [false_hyp H nlt_0_r | false_hyp H neq_succ_0]. Qed.

forall n : t, n <= 1 <-> n == 0 \/ n == 1

forall n : t, n <= 1 <-> n == 0 \/ n == 1

forall n : t, n <= S 0 <-> n == 0 \/ n == S 0

0 <= S 0 <-> 0 == 0 \/ 0 == S 0

forall n : t, S n <= S 0 <-> S n == 0 \/ S n == S 0

forall n : t, S n <= S 0 <-> S n == 0 \/ S n == S 0
n:t

S n <= S 0 <-> S n == 0 \/ S n == S 0
n:t

n == 0 <-> S n == 0 \/ n == 0
split; [intro; now right | intros [H | H]; [false_hyp H neq_succ_0 | assumption]]. Qed.

forall n m : t, n < m -> 0 < m

forall n m : t, n < m -> 0 < m
m:t

0 < m -> 0 < m
m:t
forall n : t, (n < m -> 0 < m) -> S n < m -> 0 < m
m:t

forall n : t, (n < m -> 0 < m) -> S n < m -> 0 < m
m, n:t
IH:n < m -> 0 < m
H:S n < m

0 < m
apply IH; now apply lt_succ_l. Qed.

forall n m p : t, n < m -> m < p -> 1 < p

forall n m p : t, n < m -> m < p -> 1 < p
n, m, p:t
H:n < m
H0:m < p

1 < p
n, m, p:t
H:n < m
H0:m < p

0 < m
n, m, p:t
H:n < m
H0:m < p

0 <= n
now apply le_0_l. Qed.
Elimination principlies for < and <= for relations
Section RelElim.

Variable R : relation N.t.
Hypothesis R_wd : Proper (N.eq==>N.eq==>iff) R.

R:relation t
R_wd:Proper (eq ==> eq ==> iff) R

(forall m : t, R 0 m) -> (forall n m : t, n <= m -> R n m -> R (S n) (S m)) -> forall n m : t, n <= m -> R n m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R

(forall m : t, R 0 m) -> (forall n m : t, n <= m -> R n m -> R (S n) (S m)) -> forall n m : t, n <= m -> R n m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 m
Step:forall n m : t, n <= m -> R n m -> R (S n) (S m)

forall m : t, 0 <= m -> R 0 m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 m
Step:forall n m : t, n <= m -> R n m -> R (S n) (S m)
forall n : t, (forall m : t, n <= m -> R n m) -> forall m : t, S n <= m -> R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 m
Step:forall n m : t, n <= m -> R n m -> R (S n) (S m)

forall n : t, (forall m : t, n <= m -> R n m) -> forall m : t, S n <= m -> R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m

R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m

Proper (eq ==> iff) (fun m0 : t => R (S n) m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m
R (S n) (S n)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m
forall m0 : t, S n <= m0 -> R (S n) m0 -> R (S n) (S m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m

R (S n) (S n)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m
forall m0 : t, S n <= m0 -> R (S n) m0 -> R (S n) (S m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m

forall m0 : t, S n <= m0 -> R (S n) m0 -> R (S n) (S m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m
k:t
H1:S n <= k
H2:R (S n) k

R (S n) (S k)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m
k:t
H1:n < k
H2:R (S n) k

R (S n) (S k)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 m0
Step:forall n0 m0 : t, n0 <= m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n <= m0 -> R n m0
m:t
H:S n <= m
k:t
H1:n <= k
H2:R (S n) k

R (S n) (S k)
auto. Qed.
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R

(forall m : t, R 0 (S m)) -> (forall n m : t, n < m -> R n m -> R (S n) (S m)) -> forall n m : t, n < m -> R n m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R

(forall m : t, R 0 (S m)) -> (forall n m : t, n < m -> R n m -> R (S n) (S m)) -> forall n m : t, n < m -> R n m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 (S m)
Step:forall n m : t, n < m -> R n m -> R (S n) (S m)

forall m : t, 0 < m -> R 0 m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 (S m)
Step:forall n m : t, n < m -> R n m -> R (S n) (S m)
forall n : t, (forall m : t, n < m -> R n m) -> forall m : t, S n < m -> R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n m0 : t, n < m0 -> R n m0 -> R (S n) (S m0)
m:t
H:0 < m

R 0 m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 (S m)
Step:forall n m : t, n < m -> R n m -> R (S n) (S m)
forall n : t, (forall m : t, n < m -> R n m) -> forall m : t, S n < m -> R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n m0 : t, n < m0 -> R n m0 -> R (S n) (S m0)
m, m':t
H:m == S m'

R 0 m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 (S m)
Step:forall n m : t, n < m -> R n m -> R (S n) (S m)
forall n : t, (forall m : t, n < m -> R n m) -> forall m : t, S n < m -> R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m : t, R 0 (S m)
Step:forall n m : t, n < m -> R n m -> R (S n) (S m)

forall n : t, (forall m : t, n < m -> R n m) -> forall m : t, S n < m -> R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m

R (S n) m
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m

Proper (eq ==> iff) (fun m0 : t => R (S n) m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m
R (S n) (S (S n))
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m
forall m0 : t, S n < m0 -> R (S n) m0 -> R (S n) (S m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m

R (S n) (S (S n))
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m
forall m0 : t, S n < m0 -> R (S n) m0 -> R (S n) (S m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m

forall m0 : t, S n < m0 -> R (S n) m0 -> R (S n) (S m0)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m
k:t
H1:S n < k
H2:R (S n) k

R (S n) (S k)
R:relation t
R_wd:Proper (eq ==> eq ==> iff) R
Base:forall m0 : t, R 0 (S m0)
Step:forall n0 m0 : t, n0 < m0 -> R n0 m0 -> R (S n0) (S m0)
n:t
IH:forall m0 : t, n < m0 -> R n m0
m:t
H:S n < m
k:t
H1:n < k
H2:R (S n) k

R (S n) (S k)
auto. Qed. End RelElim.
Predecessor and order

forall n : t, 0 < n -> S (P n) == n

forall n : t, 0 < n -> S (P n) == n
n:t
H:0 < 0
H1:n == 0

False
false_hyp H lt_irrefl. Qed.

forall n : t, P n <= n

forall n : t, P n <= n

P 0 <= 0

forall n : t, P (S n) <= S n

forall n : t, P (S n) <= S n
intros; rewrite pred_succ; apply le_succ_diag_r. Qed.

forall n : t, n ~= 0 -> P n < n

forall n : t, n ~= 0 -> P n < n

0 ~= 0 -> P 0 < 0

forall n : t, S n ~= 0 -> P (S n) < S n

forall n : t, S n ~= 0 -> P (S n) < S n
intros; rewrite pred_succ; apply lt_succ_diag_r. Qed.

forall n m : t, n <= m -> P n <= m

forall n m : t, n <= m -> P n <= m
n, m:t
H:n <= m

P n <= n
n, m:t
H:n <= m
n <= m
n, m:t
H:n <= m

n <= m
assumption. Qed.

forall n m : t, n < m -> P n < m

forall n m : t, n < m -> P n < m
n, m:t
H:n < m

P n <= n
n, m:t
H:n < m
n < m
n, m:t
H:n < m

n < m
assumption. Qed.

forall n m : t, n < m -> n <= P m
(* Converse is false for n == m == 0 *)

forall n m : t, n < m -> n <= P m
n:t

n < 0 -> n <= P 0
n:t
forall n0 : t, n < S n0 -> n <= P (S n0)
n:t

forall n0 : t, n < S n0 -> n <= P (S n0)
n, m:t
IH:n < S m

n <= P (S m)
rewrite pred_succ; now apply lt_succ_r. Qed.

forall n m : t, P n < m -> n <= m
(* Converse is false for n == m == 0 *)

forall n m : t, P n < m -> n <= m
m:t

P 0 < m -> 0 <= m
m:t
forall n : t, P (S n) < m -> S n <= m
m:t

forall n : t, P (S n) < m -> S n <= m
m, n:t
IH:P (S n) < m

S n <= m
m, n:t
IH:n < m

S n <= m
now apply le_succ_l. Qed.

forall n m : t, n < P m -> n < m

forall n m : t, n < P m -> n < m
intros n m H; apply lt_le_trans with (P m); [assumption | apply le_pred_l]. Qed.

forall n m : t, n <= P m -> n <= m

forall n m : t, n <= P m -> n <= m
intros n m H; apply le_trans with (P m); [assumption | apply le_pred_l]. Qed.

forall n m : t, n <= m -> P n <= P m
(* Converse is false for n == 1, m == 0 *)

forall n m : t, n <= m -> P n <= P m
n, m:t
H:n <= m

Proper (eq ==> eq ==> iff) (fun n0 m0 : t => P n0 <= P m0)
n, m:t
H:n <= m
forall m0 : t, P 0 <= P m0
n, m:t
H:n <= m
forall n0 m0 : t, n0 <= m0 -> P n0 <= P m0 -> P (S n0) <= P (S m0)
n, m:t
H:n <= m

forall m0 : t, P 0 <= P m0
n, m:t
H:n <= m
forall n0 m0 : t, n0 <= m0 -> P n0 <= P m0 -> P (S n0) <= P (S m0)
n, m:t
H:n <= m

forall n0 m0 : t, n0 <= m0 -> P n0 <= P m0 -> P (S n0) <= P (S m0)
intros p q H1 _; now do 2 rewrite pred_succ. Qed.

forall n m : t, n ~= 0 -> n < m <-> P n < P m

forall n m : t, n ~= 0 -> n < m <-> P n < P m
n, m:t
H1:n ~= 0
H2:n < m

P n < P m
n, m:t
H1:n ~= 0
H2:P n < P m
n < m
n, m:t
H1:n ~= 0
H2:n < m

m ~= 0
n, m:t
H1:n ~= 0
H2:n < m
H:m ~= 0
P n < P m
n, m:t
H1:n ~= 0
H2:P n < P m
n < m
n, m:t
H1:n ~= 0
H2:n < m

0 < m
n, m:t
H1:n ~= 0
H2:n < m
H:m ~= 0
P n < P m
n, m:t
H1:n ~= 0
H2:P n < P m
n < m
n, m:t
H1:n ~= 0
H2:n < m
H:m ~= 0

P n < P m
n, m:t
H1:n ~= 0
H2:P n < P m
n < m
n, m:t
H1:n ~= 0
H2:P n < P m

n < m
n, m:t
H1:n ~= 0
H2:P n < P m

m ~= 0
n, m:t
H1:n ~= 0
H2:P n < P m
H:m ~= 0
n < m
n, m:t
H1:n ~= 0
H2:P n < P m

0 < m
n, m:t
H1:n ~= 0
H2:P n < P m
H:m ~= 0
n < m
n, m:t
H1:n ~= 0
H2:P n < P m

P n < m
n, m:t
H1:n ~= 0
H2:P n < P m
H:m ~= 0
n < m
n, m:t
H1:n ~= 0
H2:P n < P m

P n < P m
n, m:t
H1:n ~= 0
H2:P n < P m
P m <= m
n, m:t
H1:n ~= 0
H2:P n < P m
H:m ~= 0
n < m
n, m:t
H1:n ~= 0
H2:P n < P m

P m <= m
n, m:t
H1:n ~= 0
H2:P n < P m
H:m ~= 0
n < m
n, m:t
H1:n ~= 0
H2:P n < P m
H:m ~= 0

n < m
n, m:t
H1:n ~= 0
H2:S (P n) < S (P m)
H:m ~= 0

n < m
now do 2 rewrite succ_pred in H2. Qed.

forall n m : t, S n < m <-> n < P m

forall n m : t, S n < m <-> n < P m
n, m:t

S n < m <-> n < P m
n, m:t

P (S n) < P m <-> n < P m
now rewrite pred_succ. Qed.

forall n m : t, S n <= m -> n <= P m
(* Converse is false for n == m == 0 *)

forall n m : t, S n <= m -> n <= P m
n, m:t
H:S n <= m

n <= P m
n, m:t
H:S n <= m

n < m
now apply le_succ_l. Qed.

forall n m : t, P n < m -> n < S m
(* Converse is false for n == m == 0 *)

forall n m : t, P n < m -> n < S m
n, m:t
H:P n < m

n < S m
n, m:t
H:P n < m

n <= m
now apply lt_pred_le. Qed.

forall n m : t, P n <= m <-> n <= S m

forall n m : t, P n <= m <-> n <= S m
m:t

P 0 <= m <-> 0 <= S m
m:t
forall n : t, P (S n) <= m <-> S n <= S m
m:t

0 <= m <-> 0 <= S m
m:t
forall n : t, P (S n) <= m <-> S n <= S m
m:t

forall n : t, P (S n) <= m <-> S n <= S m
m, n:t

P (S n) <= m <-> S n <= S m
m, n:t

n <= m <-> S n <= S m
apply succ_le_mono. Qed. End NOrderProp.