X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;ds=sidebyside;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2Fng_assembly%2Fcommon%2Fnat_lemmas.ma;h=64eeb50f122f07b427be0003725cd2c1b136a6a9;hb=e607b42a9a469b02ef377210dc34ada14cc603c1;hp=bbce188e521db6730749d2fb03bdeda18cb94175;hpb=29cfb9e2961e62c836cb50217905c0594a074e81;p=helm.git diff --git a/helm/software/matita/contribs/ng_assembly/common/nat_lemmas.ma b/helm/software/matita/contribs/ng_assembly/common/nat_lemmas.ma index bbce188e5..64eeb50f1 100644 --- a/helm/software/matita/contribs/ng_assembly/common/nat_lemmas.ma +++ b/helm/software/matita/contribs/ng_assembly/common/nat_lemmas.ma @@ -51,26 +51,6 @@ nlemma nat_destruct_S_0 : ∀n:nat.S n = O → False. napply I. nqed. -nlemma symmetric_eqnat : symmetricT nat bool eq_nat. - nnormalize; - #n1; - nelim n1; - ##[ ##1: #n2; - nelim n2; - nnormalize; - ##[ ##1: napply refl_eq - ##| ##2: #n3; #H; napply refl_eq - ##] - ##| ##2: #n2; #H; #n3; - nnormalize; - ncases n3; - nnormalize; - ##[ ##1: napply refl_eq - ##| ##2: #n4; napply (H n4) - ##] - ##] -nqed. - nlemma eq_to_eqnat : ∀n1,n2:nat.n1 = n2 → eq_nat n1 n2 = true. #n1; nelim n1; @@ -90,6 +70,14 @@ nlemma eq_to_eqnat : ∀n1,n2:nat.n1 = n2 → eq_nat n1 n2 = true. ##] nqed. +nlemma neqnat_to_neq : ∀n1,n2:nat.(eq_nat n1 n2 = false → n1 ≠ n2). + #n1; #n2; #H; + napply (not_to_not (n1 = n2) (eq_nat n1 n2 = true) …); + ##[ ##1: napply (eq_to_eqnat n1 n2) + ##| ##2: napply (eqfalse_to_neqtrue … H) + ##] +nqed. + nlemma eqnat_to_eq : ∀n1,n2:nat.(eq_nat n1 n2 = true → n1 = n2). #n1; nelim n1; @@ -110,53 +98,28 @@ nlemma eqnat_to_eq : ∀n1,n2:nat.(eq_nat n1 n2 = true → n1 = n2). ##] nqed. -nlemma decidable_nat : ∀x,y:nat.decidable (x = y). - #x; nelim x; nnormalize; - ##[ ##1: #y; ncases y; - ##[ ##1: napply (or2_intro1 (O = O) (O ≠ O) (refl_eq …)) - ##| ##2: #n2; napply (or2_intro2 (O = (S n2)) (O ≠ (S n2)) ?); - nnormalize; #H; napply (nat_destruct_0_S n2 H) - ##] - ##| ##2: #n1; #H; #y; ncases y; - ##[ ##1: napply (or2_intro2 ((S n1) = O) ((S n1) ≠ O) ?); - nnormalize; #H1; napply (nat_destruct_S_0 n1 H1) - ##| ##2: #n2; napply (or2_elim (n1 = n2) (n1 ≠ n2) ? (H n2) …); - ##[ ##1: #H1; napply (or2_intro1 (? = ?) (? ≠ ?) …); - nrewrite > H1; napply refl_eq - ##| ##2: #H1; napply (or2_intro2 (? = ?) (? ≠ ?) …); - nnormalize; #H2; napply (H1 (nat_destruct_S_S … H2)) - ##] - ##] - ##] +nlemma neq_to_neqnat : ∀n1,n2:nat.n1 ≠ n2 → eq_nat n1 n2 = false. + #n1; #n2; #H; + napply (neqtrue_to_eqfalse (eq_nat n1 n2)); + napply (not_to_not (eq_nat n1 n2 = true) (n1 = n2) ? H); + napply (eqnat_to_eq n1 n2). nqed. -nlemma neq_to_neqnat : ∀n1,n2:nat.n1 ≠ n2 → eq_nat n1 n2 = false. - #n1; nelim n1; - ##[ ##1: #n2; ncases n2; - ##[ ##1: nnormalize; #H; nelim (H (refl_eq …)) - ##| ##2: #nn2; #H; nnormalize; napply refl_eq - ##] - ##| ##2: #nn1; #H; #n2; ncases n2; - ##[ ##1: #H1; nnormalize; napply refl_eq - ##| ##2: #nn2; nnormalize; #H1; - napply (H nn2 ?); nnormalize; #H2; - nrewrite > H2 in H1:(%); #H1; - napply (H1 (refl_eq …)) - ##] +nlemma decidable_nat : ∀x,y:nat.decidable (x = y). + #x; #y; nnormalize; + napply (or2_elim (eq_nat x y = true) (eq_nat x y = false) ? (decidable_bexpr ?)); + ##[ ##1: #H; napply (or2_intro1 (x = y) (x ≠ y) (eqnat_to_eq … H)) + ##| ##2: #H; napply (or2_intro2 (x = y) (x ≠ y) (neqnat_to_neq … H)) ##] nqed. -nlemma neqnat_to_neq : ∀n1,n2:nat.(eq_nat n1 n2 = false → n1 ≠ n2). - #n1; nelim n1; - ##[ ##1: #n2; ncases n2; - ##[ ##1: nnormalize; #H; napply (bool_destruct … H) - ##| ##2: #nn2; nnormalize; #H; #H1; nelim (nat_destruct_0_S … H1) - ##] - ##| ##2: #nn1; #H; #n2; ncases n2; - ##[ ##1: nnormalize; #H1; #H2; nelim (nat_destruct_S_0 … H2) - ##| ##2: #nn2; nnormalize; #H1; #H2; napply (H nn2 H1 ?); - napply (nat_destruct_S_S … H2) - ##] +nlemma symmetric_eqnat : symmetricT nat bool eq_nat. + #n1; #n2; + napply (or2_elim (n1 = n2) (n1 ≠ n2) ? (decidable_nat n1 n2)); + ##[ ##1: #H; nrewrite > H; napply refl_eq + ##| ##2: #H; nrewrite > (neq_to_neqnat n1 n2 H); + napply (symmetric_eq ? (eq_nat n2 n1) false); + napply (neq_to_neqnat n2 n1 (symmetric_neq ? n1 n2 H)) ##] nqed.