(* *)
(**************************************************************************)
-set "baseuri" "cic:/matita/Z/times".
-
include "nat/lt_arith.ma".
include "Z/plus.ma".
simplify.reflexivity.
qed.
+definition Zone \def pos O.
+
theorem Ztimes_neg_Zopp: \forall n:nat.\forall x:Z.
neg n * x = - (pos n * x).
intros.elim x.
simplify.reflexivity.
simplify.reflexivity.
qed.
+
theorem symmetric_Ztimes : symmetric Z Ztimes.
change with (\forall x,y:Z. x*y = y*x).
intros.elim x.rewrite > Ztimes_z_OZ.reflexivity.
variant sym_Ztimes : \forall x,y:Z. x*y = y*x
\def symmetric_Ztimes.
+theorem Ztimes_Zone_l: \forall z:Z. Ztimes Zone z = z.
+intro.unfold Zone.simplify.
+elim z;simplify
+ [reflexivity
+ |rewrite < plus_n_O.reflexivity
+ |rewrite < plus_n_O.reflexivity
+ ]
+qed.
+
+theorem Ztimes_Zone_r: \forall z:Z. Ztimes z Zone = z.
+intro.
+rewrite < sym_Ztimes.
+apply Ztimes_Zone_l.
+qed.
+
theorem associative_Ztimes: associative Z Ztimes.
-change with (\forall x,y,z:Z. (x*y)*z = x*(y*z)).
+unfold associative.
intros.elim x.
simplify.reflexivity.
elim y.
variant distr_Ztimes_Zplus: \forall x,y,z.
x * (y + z) = x*y + x*z \def
distributive_Ztimes_Zplus.
+
+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.