simple destruct x.
(* OZ *)
intros; elim H; intros; elim H0; intros; elim H1.
left; reflexivity.
(* pos n *)
simple induction n.
(* pos O *)
intros; left; reflexivity.
(* pos (S y) *)
intros y H H0; elim H0; intros; elim H1; intros.
absurd (multZ (pos (S y)) x0 = IZ). elim x0.
rewrite (mult_OZ (pos (S y))). discriminate.
intros; rewrite (tech_mult_pos_posZ (S y) n0).
elim (plus_comm (S y + n0) (S y * n0)).
elim (plus_assoc (S y) n0 (S y * n0)); simpl in |- *.
apply (tech_pos_not_posZ (S (y + (n0 + (n0 + y * n0)))) 0).
discriminate.
intros; rewrite (tech_mult_pos_negZ (S y) n0).
elim (plus_comm (S y + n0) (S y * n0)).
elim (plus_assoc (S y) n0 (S y * n0)); simpl in |- *; discriminate.
exact H2.
(* neg n *)
simple induction n.
(* neg O *)
right; reflexivity.
(* neg (S y) *)
intros y H H0; elim H0; intros; elim H1; intros.
absurd (multZ (neg (S y)) x0 = IZ). elim x0.
rewrite (mult_OZ (neg (S y))). discriminate.
intros; rewrite (tech_mult_neg_posZ (S y) n0).
elim (plus_comm (S y + n0) (S y * n0)).
elim (plus_assoc (S y) n0 (S y * n0)); simpl in |- *; discriminate.
intros; rewrite (tech_mult_neg_negZ (S y) n0).
elim (plus_comm (S y + n0) (S y * n0)).
elim (plus_assoc (S y) n0 (S y * n0)); simpl in |- *.
apply (tech_pos_not_posZ (S (y + (n0 + (n0 + y * n0)))) 0).
discriminate.
exact H2.
Qed.

(************)
Lemma sgn_abs : forall x : Z, multZ x (sgnZ x) = absZ x.
simple destruct x.