intros n; elim n; clear n; auto.
intros p q H'; elim H'; auto with zarith.
intros H'0; elim H'0.
intros n H' p q H'0; elim H'0; auto with zarith.
intros H'1; rewrite inj_S; rewrite <- Zplus_succ_comm; auto.
Qed.
(* Return the list of of relative numbres from p to p+q if p=<q, otherwise the empty list *)
Definition mZlist (p q : Z) : list Z :=
match (q - p)%Z with
| Z0 => p :: nil
| Zpos d => mZlist_aux p (nat_of_P d)
| Zneg _ => nil (A:=Z)
end.

Theorem mZlist_correct :
forall p q r : Z, (p <= r)%Z -> (r <= q)%Z -> In r (mZlist p q).