match nat_compare m n with
[ LT \Rightarrow (neg (pred (n-m)))
| EQ \Rightarrow OZ
- | GT \Rightarrow (pos (pred (m-n)))]]
+ | GT \Rightarrow (pos (pred (m-n)))] ]
| (neg m) \Rightarrow
match y with
[ OZ \Rightarrow x
[ LT \Rightarrow (pos (pred (n-m)))
| EQ \Rightarrow OZ
| GT \Rightarrow (neg (pred (m-n)))]
- | (neg n) \Rightarrow (neg (pred ((S m)+(S 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).
rewrite < plus_n_Sm. rewrite < plus_n_Sm.rewrite < sym_plus.reflexivity.
simplify.
rewrite > nat_compare_n_m_m_n.
-simplify.elim nat_compare ? ?.simplify.reflexivity.
+simplify.elim nat_compare.simplify.reflexivity.
simplify. reflexivity.
simplify. reflexivity.
elim y.simplify.reflexivity.
simplify.rewrite > nat_compare_n_m_m_n.
-simplify.elim nat_compare ? ?.simplify.reflexivity.
+simplify.elim nat_compare.simplify.reflexivity.
simplify. reflexivity.
simplify. reflexivity.
simplify.rewrite < plus_n_Sm. rewrite < plus_n_Sm.rewrite < sym_plus.reflexivity.
apply Zplus_pos_pos.
apply Zplus_pos_neg.
elim y.
- rewrite < sym_Zplus.rewrite < sym_Zplus (Zpred OZ).
+ rewrite < sym_Zplus.rewrite < (sym_Zplus (Zpred OZ)).
rewrite < Zpred_Zplus_neg_O.rewrite > Zpred_Zsucc.simplify.reflexivity.
apply Zplus_neg_pos.
rewrite < Zplus_neg_neg.reflexivity.
theorem Zplus_Zsucc_pos_neg:
\forall n,m. (Zsucc (pos n))+(neg m) = (Zsucc ((pos n)+(neg m))).
intros.
-apply nat_elim2
-(\lambda n,m. (Zsucc (pos n))+(neg m) = (Zsucc ((pos n)+(neg m)))).intro.
+apply (nat_elim2
+(\lambda n,m. (Zsucc (pos n))+(neg m) = (Zsucc ((pos n)+(neg m))))).intro.
intros.elim n1.
simplify. reflexivity.
elim n2.simplify. reflexivity.
qed.
theorem Zplus_Zsucc_neg_neg :
-\forall n,m. (Zsucc (neg n))+(neg m) = Zsucc ((neg n)+(neg m)).
+\forall n,m. Zsucc (neg n) + neg m = Zsucc (neg n + neg m).
intros.
-apply nat_elim2
-(\lambda n,m. ((Zsucc (neg n))+(neg m)) = Zsucc ((neg n)+(neg m))).intro.
+apply (nat_elim2
+(\lambda n,m. Zsucc (neg n) + neg m = Zsucc (neg n + neg m))).intro.
intros.elim n1.
simplify. reflexivity.
elim n2.simplify. reflexivity.
theorem Zplus_Zsucc_neg_pos:
\forall n,m. Zsucc (neg n)+(pos m) = Zsucc ((neg n)+(pos m)).
intros.
-apply nat_elim2
-(\lambda n,m. (Zsucc (neg n))+(pos m) = Zsucc ((neg n)+(pos m))).
+apply (nat_elim2
+(\lambda n,m. Zsucc (neg n) + (pos m) = Zsucc (neg n + pos m))).
intros.elim n1.
simplify. reflexivity.
elim n2.simplify. reflexivity.
simplify.reflexivity.
rewrite < Zsucc_Zplus_pos_O.reflexivity.
elim y.
- rewrite < sym_Zplus OZ.reflexivity.
+ rewrite < (sym_Zplus OZ).reflexivity.
apply Zplus_Zsucc_pos_pos.
apply Zplus_Zsucc_pos_neg.
elim y.
- rewrite < sym_Zplus.rewrite < sym_Zplus OZ.simplify.reflexivity.
+ rewrite < sym_Zplus.rewrite < (sym_Zplus OZ).simplify.reflexivity.
apply Zplus_Zsucc_neg_pos.
apply Zplus_Zsucc_neg_neg.
qed.
theorem Zplus_Zpred: \forall x,y:Z. (Zpred x)+y = Zpred (x+y).
intros.
-cut Zpred (x+y) = Zpred ((Zsucc (Zpred x))+y).
+cut (Zpred (x+y) = Zpred ((Zsucc (Zpred x))+y)).
rewrite > Hcut.
rewrite > Zplus_Zsucc.
rewrite > Zpred_Zsucc.
theorem associative_Zplus: associative Z Zplus.
-change with \forall x,y,z:Z. (x + y) + z = x + (y + z).
+change with (\forall x,y,z:Z. (x + y) + z = x + (y + z)).
(* simplify. *)
intros.elim x.
simplify.reflexivity.
elim n.
rewrite < Zsucc_Zplus_pos_O.rewrite < Zsucc_Zplus_pos_O.
rewrite > Zplus_Zsucc.reflexivity.
- rewrite > Zplus_Zsucc (pos n1).rewrite > Zplus_Zsucc (pos n1).
- rewrite > Zplus_Zsucc ((pos n1)+y).apply eq_f.assumption.
+ rewrite > (Zplus_Zsucc (pos n1)).rewrite > (Zplus_Zsucc (pos n1)).
+ rewrite > (Zplus_Zsucc ((pos n1)+y)).apply eq_f.assumption.
elim n.
rewrite < (Zpred_Zplus_neg_O (y+z)).rewrite < (Zpred_Zplus_neg_O y).
rewrite < Zplus_Zpred.reflexivity.
- rewrite > Zplus_Zpred (neg n1).rewrite > Zplus_Zpred (neg n1).
- rewrite > Zplus_Zpred ((neg n1)+y).apply eq_f.assumption.
+ rewrite > (Zplus_Zpred (neg n1)).rewrite > (Zplus_Zpred (neg n1)).
+ rewrite > (Zplus_Zpred ((neg n1)+y)).apply eq_f.assumption.
qed.
variant assoc_Zplus : \forall x,y,z:Z. (x+y)+z = x+(y+z)