(* OZ *)
rewrite (mult_OZ (oppZ x)); rewrite (mult_OZ x); reflexivity.
(* pos n *)
intros; elim (multZ_commutativity (pos n) (oppZ x)).
elim (multZ_commutativity (pos n) x); elim n.
(* pos O *)
reflexivity.
(* pos (S y0) *)
intros y0 H; do 2 rewrite (tech_mult_posZ y0).
rewrite H; symmetry  in |- *.
exact
(opp_add Z IdZ addZ OZ oppZ Z_group addZ_commutativity
(multZ (pos y0) x) x I I).
(* neg n *)
intros; elim (multZ_commutativity (neg n) (oppZ x)).
elim (multZ_commutativity (neg n) x); elim n.
(* neg O *)
reflexivity.
(* neg (S y0) *)
intros y0 H; do 2 rewrite (tech_mult_negZ y0).
rewrite H; symmetry  in |- *.
exact
(opp_add Z IdZ addZ OZ oppZ Z_group addZ_commutativity
(multZ (neg y0) x) (oppZ x) I I).
Qed.

(* Specifications: *)
(********************)
Lemma tech_multZ_negO : forall x : Z, multZ (neg 0) x = oppZ x.
Proof multZ_eq4.
(***********************)
Lemma tech_mult_pos_posZ :
forall n m : nat, multZ (pos n) (pos m) = pos (n * m + (n + m)).