X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fmatita%2Fcontribs%2Flambdadelta%2Fground%2Farith%2Fnat_le.ma;h=c2d89a6f76f5e273b2bc1eba015daaa2b12df051;hb=ca318d6d92098c3a65c9f0841174ca110c82e064;hp=ae98e3a5e52a1bba77325c67983178e5cbd83185;hpb=68e028d053806177e218ee1a5f8778d3011bef83;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 ae98e3a5e..c2d89a6f7 100644 --- a/matita/matita/contribs/lambdadelta/ground/arith/nat_le.ma +++ b/matita/matita/contribs/lambdadelta/ground/arith/nat_le.ma @@ -12,7 +12,7 @@ (* *) (**************************************************************************) -include "ground/insert_eq/insert_eq_0.ma". +include "ground/generated/insert_eq_1.ma". include "ground/arith/nat_succ.ma". (* ORDER FOR NON-NEGATIVE INTEGERS ******************************************) @@ -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,44 +45,50 @@ lemma nle_succ_bi (m) (n): m ≤ n → ↑m ≤ ↑n. qed. (*** le_or_ge *) -lemma nle_ge_dis (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 nat_split_le_ge (m) (n): ∨∨ m ≤ n | n ≤ m. +#m #n @(nat_ind_2_succ … 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 *********************************************************) +(* Basic destructions *******************************************************) -lemma nle_inv_succ_sn (m) (n): ↑m ≤ n → m ≤ n. +lemma nle_des_succ_sn (m) (n): ↑m ≤ n → m ≤ n. #m #n #H elim H -n /2 width=1 by nle_succ_dx/ qed-. +(* Basic inversions *********************************************************) + (*** le_S_S_to_le *) lemma nle_inv_succ_bi (m) (n): ↑m ≤ ↑n → m ≤ n. -#m #n @(insert_eq_0 … (↑n)) -#y * -y -[ #H <(eq_inv_nsucc_bi … H) -m // -| #y #Hy #H >(eq_inv_nsucc_bi … H) -n /2 width=1 by nle_inv_succ_sn/ +#m #n @(insert_eq_1 … (↑n)) +#x * -x +[ #H >(eq_inv_nsucc_bi … H) -n // +| #o #Ho #H >(eq_inv_nsucc_bi … H) -n + /2 width=1 by nle_des_succ_sn/ ] qed-. (*** le_n_O_to_eq *) lemma nle_inv_zero_dx (m): m ≤ 𝟎 → 𝟎 = m. -#m @(insert_eq_0 … (𝟎)) +#m @(insert_eq_1 … (𝟎)) #y * -y [ #H destruct // -| #y #_ #H elim (eq_inv_nzero_succ … H) +| #y #_ #H elim (eq_inv_zero_nsucc … H) ] qed-. (* Advanced inversions ******************************************************) +(*** le_plus_xSy_O_false *) lemma nle_inv_succ_zero (m): ↑m ≤ 𝟎 → ⊥. -/3 width=2 by nle_inv_zero_dx, eq_inv_nzero_succ/ qed-. +/3 width=2 by nle_inv_zero_dx, eq_inv_zero_nsucc/ qed-. lemma nle_inv_succ_sn_refl (m): ↑m ≤ m → ⊥. -#m @(nat_ind … m) -m [| #m #IH ] #H -[ /3 width=2 by nle_inv_zero_dx, eq_inv_nzero_succ/ +#m @(nat_ind_succ … m) -m [| #m #IH ] #H +[ /3 width=2 by nle_inv_zero_dx, eq_inv_zero_nsucc/ | /3 width=1 by nle_inv_succ_bi/ ] qed-. @@ -91,18 +97,19 @@ qed-. theorem nle_antisym (m) (n): m ≤ n → n ≤ m → m = n. #m #n #H elim H -n // #n #_ #IH #Hn -lapply (nle_inv_succ_sn … Hn) #H +lapply (nle_des_succ_sn … Hn) #H 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_2 … m n) -m -n // +#Q #IH1 #IH2 #m #n @(nat_ind_2_succ … m n) -m -n // [ #m #H elim (nle_inv_succ_zero … H) | /4 width=1 by nle_inv_succ_bi/ ] @@ -112,12 +119,12 @@ qed-. (*** transitive_le *) theorem nle_trans: Transitive … nle. -#m #n #H elim H -n /3 width=1 by nle_inv_succ_sn/ +#m #n #H elim H -n /3 width=1 by nle_des_succ_sn/ qed-. -(*** decidable_le *) +(*** decidable_le le_dec *) lemma nle_dec (m) (n): Decidable … (m ≤ n). -#m #n elim (nle_ge_dis m n) [ /2 width=1 by or_introl/ ] +#m #n elim (nat_split_le_ge 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-.