simple induction n2.
intros; elim (addZ_commutativity (neg 0) (pos n1)).
rewrite addZ_eq4.
elim minus_n_Sm; trivial with arith.
elim minus_n_O.
apply tech_pred_posZ; trivial with arith.
intros; elim (addZ_commutativity (neg (S n)) (pos n1)).
rewrite tech_add_neg_predZ.
elim (addZ_commutativity (pos n1) (neg n)).
rewrite H; auto with arith.
elim (minus_n_Sm n1 (S n) H0).
apply tech_pred_posZ.
apply lt_minus2; trivial with arith.
Qed.
Definition associative (U : Set) (op : U -> U -> U) :=
forall x y z : U, op x (op y z) = op (op x y) z.

(* Specifications: *)
Theorem addZ_associativity : associative Z addZ.
unfold associative in |- *; intros; elim x.