X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground%2Farith%2Fnat_lt.ma;h=48bdf9194a7ee59a16c59b25a4b197724dd5da95;hb=21de0d35017656c5a55528390b54b0b2ae395b44;hp=1df0f857d54d9edc95a70ec09e9cee1e2ddd5298;hpb=74c6905907b0bca229366d52450e2a6982b5b8be;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/ground/arith/nat_lt.ma b/matita/matita/contribs/lambdadelta/ground/arith/nat_lt.ma index 1df0f857d..48bdf9194 100644 --- a/matita/matita/contribs/lambdadelta/ground/arith/nat_lt.ma +++ b/matita/matita/contribs/lambdadelta/ground/arith/nat_lt.ma @@ -14,7 +14,7 @@ include "ground/arith/nat_le.ma". -(* NON-NEGATIVE INTEGERS ****************************************************) +(* STRICT ORDER FOR NON-NEGATIVE INTEGERS ***********************************) (*** lt *) definition nlt: relation2 nat nat ≝ @@ -36,26 +36,29 @@ lemma nlt_refl_succ (n): n < ↑n. lemma nlt_zero_succ (m): 𝟎 < ↑m. /2 width=1 by nle_succ_bi/ qed. +lemma nlt_succ_bi (m) (n): m < n → ↑m < ↑n. +/2 width=1 by nle_succ_bi/ qed. + (*** le_to_or_lt_eq *) -lemma nle_lt_eq_e (m) (n): m ≤ n → ∨∨ m < n | m = n. +lemma nle_lt_eq_dis (m) (n): m ≤ n → ∨∨ m < n | m = n. #m #n * -n /3 width=1 by nle_succ_bi, or_introl/ qed-. (*** eq_or_gt *) -lemma eq_gt_e (n): ∨∨ 𝟎 = n | 𝟎 < n. -#n elim (nle_lt_eq_e (𝟎) n ?) +lemma eq_gt_dis (n): ∨∨ 𝟎 = n | 𝟎 < n. +#n elim (nle_lt_eq_dis (𝟎) n ?) /2 width=1 by or_introl, or_intror/ qed-. (*** lt_or_ge *) -lemma nlt_ge_e (m) (n): ∨∨ m < n | n ≤ m. -#m #n elim (nle_ge_e m n) /2 width=1 by or_intror/ -#H elim (nle_lt_eq_e … H) -H /2 width=1 by nle_refl, or_introl, or_intror/ +lemma nlt_ge_dis (m) (n): ∨∨ m < n | n ≤ m. +#m #n elim (nle_ge_dis m n) /2 width=1 by or_intror/ +#H elim (nle_lt_eq_dis … H) -H /2 width=1 by nle_refl, or_introl, or_intror/ qed-. (*** not_le_to_lt *) lemma le_false_nlt (m) (n): (n ≤ m → ⊥) → m < n. -#m #n elim (nlt_ge_e m n) [ // ] +#m #n elim (nlt_ge_dis m n) [ // ] #H #Hn elim Hn -Hn // qed. @@ -63,11 +66,15 @@ qed. lemma nlt_le_trans (o) (m) (n): m < o → o ≤ n → m < n. /2 width=3 by nle_trans/ qed-. +(*** le_to_lt_to_lt *) lemma le_nlt_trans (o) (m) (n): m ≤ o → o < n → m < n. /3 width=3 by nle_succ_bi, nle_trans/ qed-. (* Basic inversions *********************************************************) +lemma nlt_inv_succ_bi (m) (n): ↑m < ↑n → m < n. +/2 width=1 by nle_inv_succ_bi/ qed-. + (*** lt_to_not_le *) lemma nlt_ge_false (m) (n): m < n → n ≤ m → ⊥. /3 width=4 by nle_inv_succ_sn_refl, nlt_le_trans/ qed-. @@ -99,7 +106,7 @@ theorem nlt_trans: Transitive … nlt. lemma nat_ind_lt_le (Q:predicate …): (∀n. (∀m. m < n → Q m) → Q n) → ∀n,m. m ≤ n → Q m. -#Q #H1 #n @(nat_ind … n) -n +#Q #H1 #n @(nat_ind_succ … n) -n [ #m #H <(nle_inv_zero_dx … H) -m @H1 -H1 #o #H elim (nlt_inv_zero_dx … H) | /5 width=3 by nlt_le_trans, nle_inv_succ_bi/ @@ -110,3 +117,15 @@ qed-. lemma nat_ind_lt (Q:predicate …): (∀n. (∀m. m < n → Q m) → Q n) → ∀n. Q n. /4 width=2 by nat_ind_lt_le/ qed-. + +(*** lt_elim *) +lemma nlt_ind_alt (Q: relation2 nat nat): + (∀n. Q (𝟎) (↑n)) → + (∀m,n. m < n → Q m n → Q (↑m) (↑n)) → + ∀m,n. m < n → Q m n. +#Q #IH1 #IH2 #m #n @(nat_ind_succ_2 … n m) -m -n // +[ #m #H + elim (nlt_inv_zero_dx … H) +| /4 width=1 by nlt_inv_succ_bi/ +] +qed-.