X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fcontribs%2Fng_assembly%2Ffreescale%2Fnat_lemmas.ma;h=c8fb12723ea7ffc5a09f03b657405c74ce473ee8;hb=f538a0b46ba4164a21a76e47a6ed3b3e9deb5041;hp=9e6b6e8a5da8a436cb16a239d3184e6d51651cf6;hpb=64bdbee95e40a5be3bb6c5c2866869103730a4d0;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 9e6b6e8a5..c8fb12723 100644 --- a/helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma +++ b/helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma @@ -13,15 +13,11 @@ (**************************************************************************) (* ********************************************************************** *) -(* Progetto FreeScale *) +(* Progetto FreeScale *) (* *) -(* Sviluppato da: *) -(* Cosimo Oliboni, oliboni@cs.unibo.it *) +(* Sviluppato da: Cosimo Oliboni, oliboni@cs.unibo.it *) +(* Cosimo Oliboni, oliboni@cs.unibo.it *) (* *) -(* Questo materiale fa parte della tesi: *) -(* "Formalizzazione Interattiva dei Microcontroller a 8bit FreeScale" *) -(* *) -(* data ultima modifica 15/11/2007 *) (* ********************************************************************** *) include "freescale/bool_lemmas.ma". @@ -31,12 +27,12 @@ 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; nnormalize; - napply (refl_eq ??). + napply refl_eq. nqed. nlemma nat_destruct_0_S : ∀n:nat.O = S n → False. @@ -62,14 +58,14 @@ nlemma symmetric_eqnat : symmetricT nat bool eq_nat. ##[ ##1: #n2; nelim n2; nnormalize; - ##[ ##1: napply (refl_eq ??) - ##| ##2: #n3; #H; napply (refl_eq ??) + ##[ ##1: napply refl_eq + ##| ##2: #n3; #H; napply refl_eq ##] ##| ##2: #n2; #H; #n3; nnormalize; ncases n3; nnormalize; - ##[ ##1: napply (refl_eq ??) + ##[ ##1: napply refl_eq ##| ##2: #n4; napply (H n4) ##] ##] @@ -81,7 +77,7 @@ nlemma eq_to_eqnat : ∀n1,n2:nat.n1 = n2 → eq_nat n1 n2 = true. ##[ ##1: #n2; nelim n2; nnormalize; - ##[ ##1: #H; napply (refl_eq ??) + ##[ ##1: #H; napply refl_eq ##| ##2: #n3; #H; #H1; nelim (nat_destruct_0_S ? H1) ##] ##| ##2: #n2; #H; #n3; #H1; @@ -89,7 +85,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. @@ -100,16 +96,66 @@ nlemma eqnat_to_eq : ∀n1,n2:nat.(eq_nat n1 n2 = true → n1 = n2). ##[ ##1: #n2; nelim n2; nnormalize; - ##[ ##1: #H; napply (refl_eq ??) - ##| ##2: #n3; #H; #H1; napply (bool_destruct ?? (O = S n3) H1) + ##[ ##1: #H; napply refl_eq + ##| ##2: #n3; #H; #H1; napply (bool_destruct … (O = S n3) H1) ##] ##| ##2: #n2; #H; #n3; #H1; ncases n3 in H1:(%) ⊢ %; nnormalize; - ##[ ##1: #H1; napply (bool_destruct ?? (S n2 = O) H1) + ##[ ##1: #H1; napply (bool_destruct … (S n2 = O) H1) ##| ##2: #n4; #H1; nrewrite > (H n4 H1); - napply (refl_eq ??) + 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.