(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(*Recursive Definition addZ : Z -> Z -> Z := OZ   y => y | (pos O)   y => (succZ y) | (pos (S n1))   y => (succZ (addZ (pos n1) y)) | (neg O)   y => (predZ y) | (neg (S n1))   y => (predZ (addZ (neg n1) y)). *)
Fixpoint add1 (x2 : Z) (n : nat) {struct n} : Z :=
match n with
| O => succZ x2
| S n0 => succZ (add1 x2 n0)
end
with add2 (x2 : Z) (n : nat) {struct n} : Z :=
match n with
| O => predZ x2
| S n0 => predZ (add2 x2 n0)
end.
Definition addZ (x1 x2 : Z) : Z :=
match x1 with
| OZ => x2
| pos n => add1 x2 n
| neg n => add2 x2 n
end.

Lemma addZ_eq1 : forall y : Z, addZ OZ y = y.