(** * 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).