split.
(* P (neg n) *)
elim (lt_succ n p H1); intros. elim (H0 n a); intros; trivial with arith.
rewrite b. apply (H (neg (S p))).
simple destruct m. intros; apply (Zrec1 P H).
unfold lt_absZ in |- *; unfold absZ in |- *; unfold ltZ in |- *;
unfold leZ in |- *; intros.
elim (H0 n0); auto with arith.
unfold lt_absZ in |- *; unfold absZ in |- *; unfold ltZ in |- *;
unfold leZ in |- *; intros.
elim (H0 n0); auto with arith.
(* P (pos n) *)
elim (lt_succ n p H1); intros. elim (H0 n); intros; trivial with arith.
rewrite b. apply (H (pos (S p))).
simple destruct m. intros; apply (Zrec1 P H).
unfold lt_absZ in |- *; unfold absZ in |- *; unfold ltZ in |- *;
unfold leZ in |- *; intros.
elim (H0 n0); auto with arith.
unfold lt_absZ in |- *; unfold absZ in |- *; unfold ltZ in |- *;
unfold leZ in |- *; intros.
elim (H0 n0); auto with arith.
Qed.

(* Specifications: *)
(*************)
Theorem Zrec4 :
forall P : Z -> Set,
(forall n : Z, (forall m : Z, lt_absZ m n -> P m) -> P n) ->
forall p : nat, and_recZ p P.