(** * Division on Z. *)
Definition ZDivides (x y : Z) : Prop := exists q : Z, y = (x * q)%Z.

(* Specifications: *)
Lemma zdivdiv :
forall a b : Z, ZDivides a b -> Divides (Zabs_nat a) (Zabs_nat b).
Lemma divzdiv :
forall a b : Z, Divides (Zabs_nat a) (Zabs_nat b) -> ZDivides a b.
Lemma zdivdec : forall x d : Z, ZDivides d x \/ ~ ZDivides d x.
Lemma zdiv_plus_r :
forall a b d : Z, ZDivides d a -> ZDivides d (a + b) -> ZDivides d b.
Lemma zdiv_plus_compat :
forall a b c : Z, ZDivides a b -> ZDivides a c -> ZDivides a (b + c).
Lemma zdiv_mult_compat_l :
forall a b c : Z, ZDivides a b -> ZDivides a (b * c).
Theorem zdiv_rem :
forall d n : Z,
(d > 0)%Z ->
exists q : Z, (exists r : Z, (0 <= r < d)%Z /\ n = (q * d + r)%Z).