]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/library/Z/plus.ma
better notation for oalgebra
[helm.git] / helm / software / matita / library / Z / plus.ma
index 2b439b92e273c83d0e9175bd402d32d0fb363b64..242be1b536a4cb036663be64e3168c94547f6eb7 100644 (file)
@@ -12,8 +12,6 @@
 (*                                                                        *)
 (**************************************************************************)
 
-set "baseuri" "cic:/matita/Z/plus".
-
 include "Z/z.ma".
 include "nat/minus.ma".
 
@@ -40,9 +38,18 @@ definition Zplus :Z \to Z \to Z \def
                 | GT \Rightarrow (neg (pred (m-n)))]     
          | (neg n) \Rightarrow (neg (pred ((S m)+(S n))))] ].
 
-(*CSC: the URI must disappear: there is a bug now *)
-interpretation "integer plus" 'plus x y = (cic:/matita/Z/plus/Zplus.con x y).
-         
+interpretation "integer plus" 'plus x y = (Zplus x y).
+
+theorem eq_plus_Zplus: \forall n,m:nat. Z_of_nat (n+m) =
+Z_of_nat n + Z_of_nat m.
+intro.cases n;intro
+  [reflexivity
+  |cases m
+    [simplify.rewrite < plus_n_O.reflexivity
+    |simplify.reflexivity.
+    ]]
+qed.
+
 theorem Zplus_z_OZ:  \forall z:Z. z+OZ = z.
 intro.elim z.
 simplify.reflexivity.
@@ -258,8 +265,11 @@ definition Zopp : Z \to Z \def
 | (pos n) \Rightarrow (neg n)
 | (neg n) \Rightarrow (pos n) ].
 
-(*CSC: the URI must disappear: there is a bug now *)
-interpretation "integer unary minus" 'uminus x = (cic:/matita/Z/plus/Zopp.con x).
+interpretation "integer unary minus" 'uminus x = (Zopp x).
+
+theorem eq_OZ_Zopp_OZ : OZ = (- OZ).
+reflexivity.
+qed.
 
 theorem Zopp_Zplus: \forall x,y:Z. -(x+y) = -x + -y.
 intros.
@@ -299,7 +309,26 @@ rewrite > nat_compare_n_n.
 simplify.apply refl_eq.
 qed.
 
+theorem injective_Zplus_l: \forall x:Z.injective Z Z (\lambda y.y+x).
+intro.simplify.intros (z y).
+rewrite < Zplus_z_OZ.
+rewrite < (Zplus_z_OZ y).
+rewrite < (Zplus_Zopp x).
+rewrite < assoc_Zplus.
+rewrite < assoc_Zplus.
+apply eq_f2
+  [assumption|reflexivity]
+qed.
+
+theorem injective_Zplus_r: \forall x:Z.injective Z Z (\lambda y.x+y).
+intro.simplify.intros (z y).
+apply (injective_Zplus_l x).
+rewrite < sym_Zplus.
+rewrite > H.
+apply sym_Zplus.
+qed.
+
 (* minus *)
 definition Zminus : Z \to Z \to Z \def \lambda x,y:Z. x + (-y).
 
-interpretation "integer minus" 'minus x y = (cic:/matita/Z/plus/Zminus.con x y).
+interpretation "integer minus" 'minus x y = (Zminus x y).