X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2Fng_assembly%2Ffreescale%2Fnat_lemmas.ma;h=72ceb6188e680d5c8f701a19432128645340bdd9;hb=b714e87e96f14f332a5157567a4c62a4b28fa8eb;hp=fde0972e4c9b1f3d9f32eb840ec32628681932f7;hpb=55274856efac172aba293d4216fdc659d07a89d7;p=helm.git diff --git a/helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma b/helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma index fde0972e4..72ceb6188 100644 --- a/helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma +++ b/helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma @@ -31,7 +31,7 @@ include "freescale/nat.ma". (* NATURALI *) (* ******** *) -nlemma nat_destruct : ∀n1,n2:nat.S n1 = S n2 → n1 = n2. +nlemma nat_destruct_S_S : ∀n1,n2:nat.S n1 = S n2 → n1 = n2. #n1; #n2; #H; nchange with (match S n2 with [ O ⇒ False | S a ⇒ n1 = a ]); nrewrite < H; @@ -55,7 +55,7 @@ nlemma nat_destruct_S_0 : ∀n:nat.S n = O → False. napply I. nqed. -nlemma bsymmetric_eqnat : boolSymmetric nat eq_nat. +nlemma symmetric_eqnat : symmetricT nat bool eq_nat. nnormalize; #n1; nelim n1; @@ -73,7 +73,7 @@ nlemma bsymmetric_eqnat : boolSymmetric nat eq_nat. ##| ##2: #n4; napply (H n4) ##] ##] -nqed. +nqed. nlemma eq_to_eqnat : ∀n1,n2:nat.n1 = n2 → eq_nat n1 n2 = true. #n1; @@ -89,7 +89,7 @@ nlemma eq_to_eqnat : ∀n1,n2:nat.n1 = n2 → eq_nat n1 n2 = true. nnormalize; ##[ ##1: #H1; nelim (nat_destruct_S_0 ? H1) ##| ##2: #n4; #H1; - napply (H n4 (nat_destruct ?? H1)) + napply (H n4 (nat_destruct_S_S ?? H1)) ##] ##] nqed. @@ -101,15 +101,65 @@ nlemma eqnat_to_eq : ∀n1,n2:nat.(eq_nat n1 n2 = true → n1 = n2). nelim n2; nnormalize; ##[ ##1: #H; napply (refl_eq ??) - ##| ##2: #n3; #H; #H1; nelim (bool_destruct_false_true H1) + ##| ##2: #n3; #H; #H1; napply (bool_destruct ?? (O = S n3) H1) ##] ##| ##2: #n2; #H; #n3; #H1; ncases n3 in H1:(%) ⊢ %; nnormalize; - ##[ ##1: #H1; nelim (bool_destruct_false_true H1) + ##[ ##1: #H1; napply (bool_destruct ?? (S n2 = O) H1) ##| ##2: #n4; #H1; nrewrite > (H n4 H1); napply (refl_eq ??) ##] ##] nqed. + +nlemma Sn_p_n_to_S_npn : ∀n1,n2.(S n1) + n2 = S (n1 + n2). + #n1; + nelim n1; + ##[ ##1: nnormalize; #n2; napply (refl_eq ??) + ##| ##2: #n; #H; #n2; nrewrite > (H n2); + ncases n in H:(%) ⊢ %; + ##[ ##1: nnormalize; #H; napply (refl_eq ??) + ##| ##2: #n3; nnormalize; #H; napply (refl_eq ??) + ##] + ##] +nqed. + +nlemma n_p_Sn_to_S_npn : ∀n1,n2.n1 + (S n2) = S (n1 + n2). + #n1; + nelim n1; + ##[ ##1: nnormalize; #n2; napply (refl_eq ??) + ##| ##2: #n; #H; #n2; + nrewrite > (Sn_p_n_to_S_npn n (S n2)); + nrewrite > (H n2); + napply (refl_eq ??) + ##] +nqed. + +nlemma Opn_to_n : ∀n.O + n = n. + #n; nnormalize; napply (refl_eq ??). +nqed. + +nlemma npO_to_n : ∀n.n + O = n. + #n; + nelim n; + ##[ ##1: nnormalize; napply (refl_eq ??) + ##| ##2: #n1; #H; + nrewrite > (Sn_p_n_to_S_npn n1 O); + nrewrite > H; + napply (refl_eq ??) + ##] +nqed. + +nlemma symmetric_plusnat : symmetricT nat nat plus. + #n1; + nelim n1; + ##[ ##1: #n2; nrewrite > (npO_to_n n2); nnormalize; napply (refl_eq ??) + ##| ##2: #n2; #H; #n3; + nrewrite > (Sn_p_n_to_S_npn n2 n3); + nrewrite > (n_p_Sn_to_S_npn n3 n2); + nrewrite > (H n3); + napply (refl_eq ??) + ##] +nqed.