]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/contribs/ng_assembly/freescale/nat_lemmas.ma
1) \ldots here and there
[helm.git] / helm / software / matita / contribs / ng_assembly / freescale / nat_lemmas.ma
index 9e6b6e8a5da8a436cb16a239d3184e6d51651cf6..c8fb12723ea7ffc5a09f03b657405c74ce473ee8 100644 (file)
 (**************************************************************************)
 
 (* ********************************************************************** *)
-(*                           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.