X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground%2Farith%2Fnat_le.ma;h=5f2ea334fa90b1490002674d934231feb5242851;hb=21de0d35017656c5a55528390b54b0b2ae395b44;hp=82d285e8ec7bf2bdd310ef18f718ca01192a9781;hpb=df7a2aa19e98dc28e7f22129275a175cead49e2d;p=helm.git diff --git a/matita/matita/contribs/lambdadelta/ground/arith/nat_le.ma b/matita/matita/contribs/lambdadelta/ground/arith/nat_le.ma index 82d285e8e..5f2ea334f 100644 --- a/matita/matita/contribs/lambdadelta/ground/arith/nat_le.ma +++ b/matita/matita/contribs/lambdadelta/ground/arith/nat_le.ma @@ -15,7 +15,7 @@ include "ground/insert_eq/insert_eq_0.ma". include "ground/arith/nat_succ.ma". -(* NON-NEGATIVE INTEGERS ****************************************************) +(* ORDER FOR NON-NEGATIVE INTEGERS ******************************************) (*** le *) (*** le_ind *) @@ -36,7 +36,7 @@ lemma nle_succ_dx_refl (m): m ≤ ↑m. (*** le_O_n *) lemma nle_zero_sx (m): 𝟎 ≤ m. -#m @(nat_ind … m) -m /2 width=1 by nle_succ_dx/ +#m @(nat_ind_succ … m) -m /2 width=1 by nle_succ_dx/ qed. (*** le_S_S *) @@ -45,10 +45,12 @@ lemma nle_succ_bi (m) (n): m ≤ n → ↑m ≤ ↑n. qed. (*** le_or_ge *) -lemma nle_ge_e (m) (n): ∨∨ m ≤ n | n ≤ m. -#m @(nat_ind … m) -m [ /2 width=1 by or_introl/ ] -#m #IH #n @(nat_ind … n) -n [ /2 width=1 by or_intror/ ] -#n #_ elim (IH n) -IH /3 width=2 by nle_succ_bi, or_introl, or_intror/ +lemma nle_ge_dis (m) (n): ∨∨ m ≤ n | n ≤ m. +#m #n @(nat_ind_succ_2 … m n) -m -n +[ /2 width=1 by or_introl/ +| /2 width=1 by or_intror/ +| #m #n * /3 width=2 by nle_succ_bi, or_introl, or_intror/ +] qed-. (* Basic inversions *********************************************************) @@ -75,15 +77,18 @@ lemma nle_inv_zero_dx (m): m ≤ 𝟎 → 𝟎 = m. ] qed-. +(* Advanced inversions ******************************************************) + +lemma nle_inv_succ_zero (m): ↑m ≤ 𝟎 → ⊥. +/3 width=2 by nle_inv_zero_dx, eq_inv_nzero_succ/ qed-. + lemma nle_inv_succ_sn_refl (m): ↑m ≤ m → ⊥. -#m @(nat_ind … m) -m [| #m #IH ] #H +#m @(nat_ind_succ … m) -m [| #m #IH ] #H [ /3 width=2 by nle_inv_zero_dx, eq_inv_nzero_succ/ | /3 width=1 by nle_inv_succ_bi/ ] qed-. -(* Order properties *********************************************************) - (*** le_to_le_to_eq *) theorem nle_antisym (m) (n): m ≤ n → n ≤ m → m = n. #m #n #H elim H -n // @@ -93,16 +98,29 @@ lapply (IH H) -IH -H #H destruct elim (nle_inv_succ_sn_refl … Hn) qed-. +(* Advanced eliminations ****************************************************) + +(*** le_elim *) +lemma nle_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 … m n) -m -n // +[ #m #H elim (nle_inv_succ_zero … H) +| /4 width=1 by nle_inv_succ_bi/ +] +qed-. + +(* Advanced constructions ***************************************************) + (*** transitive_le *) theorem nle_trans: Transitive … nle. #m #n #H elim H -n /3 width=1 by nle_inv_succ_sn/ qed-. -(* Advanced constructions ***************************************************) - (*** decidable_le *) lemma nle_dec (m) (n): Decidable … (m ≤ n). -#m #n elim (nle_ge_e m n) [ /2 width=1 by or_introl/ ] +#m #n elim (nle_ge_dis m n) [ /2 width=1 by or_introl/ ] #Hnm elim (eq_nat_dec m n) [ #H destruct /2 width=1 by nle_refl, or_introl/ ] /4 width=1 by nle_antisym, or_intror/ qed-.