Definition ZdividesP : forall n m : Z, {Zdivides n m} + {~ Zdivides n m}.

(* Specifications: *)
Theorem Zquotient1 : forall m : Z, Zquotient m 1 = m.
Theorem Zdivides1 : forall m : Z, Zdivides m 1.
Theorem Zabs_eq_case : forall z1 z2 : Z, Zabs z1 = Zabs z2 -> z1 = z2 \/ z1 = (- z2)%Z.
Theorem Zabs_tri : forall z1 z2 : Z, (Zabs (z1 + z2) <= Zabs z1 + Zabs z2)%Z.
Theorem ZquotientUnique : forall m n q r : Z, n <> 0%Z -> m = (q * n + r)%Z -> (Zabs (q * n) <= Zabs m)%Z -> (Zabs r < Zabs n)%Z -> q = Zquotient m n.
Theorem ZquotientZopp : forall m n : Z, Zquotient (- m) n = (- Zquotient m n)%Z.
Theorem ZquotientMonotone : forall n m q : Z, (Zabs n <= Zabs m)%Z -> (Zabs (Zquotient n q) <= Zabs (Zquotient m q))%Z.
Theorem NotDividesDigit : forall r v : Z, (1 < r)%Z -> v <> 0%Z -> ~ Zdivides v (Zpower_nat r (digit r v)).
Theorem ZDividesLe : forall n m : Z, n <> 0%Z -> Zdivides n m -> (Zabs m <= Zabs n)%Z.
Theorem Zquotient_mult_comp : forall m n p : Z, p <> 0%Z -> Zquotient (m * p) (n * p) = Zquotient m n.
Theorem ZDivides_add : forall n m p : Z, Zdivides n p -> Zdivides m p -> Zdivides (n + m) p.
Theorem NDivides_minus : forall n m p : Z, Zdivides n p -> Zdivides m p -> Zdivides (n - m) p.
Theorem ZDivides_mult : forall n m p q : Z, Zdivides n p -> Zdivides m q -> Zdivides (n * m) (p * q).
Theorem ZdividesTrans : forall n m p : Z, Zdivides n m -> Zdivides m p -> Zdivides n p.
Theorem ZdividesLessPow : forall (n : Z) (m p : nat), m <= p -> Zdivides (Zpower_nat n p) (Zpower_nat n m).