(** Divisibility *)

Inductive divide (a b : Z) : Prop :=
    divide_intro : forall q : Z, b = (q * a)%Z -> divide a b.(** Divisibility *)

Inductive divide (a b : Z) : Prop :=
    divide_intro : forall q : Z, b = (q * a)%Z -> divide a b.Notation "( x | y )" := (divide x y) (at level 0) : Z_scope.

(* Specifications: *)
Lemma divide_refl : forall a : Z, (a | a).
Lemma one_divide : forall a : Z, (1 | a).
Lemma divide_0 : forall a : Z, (a | 0).
Lemma divide_mult_left : forall a b c : Z, (a | b) -> (c * a | c * b).
Lemma divide_mult_right : forall a b c : Z, (a | b) -> (a * c | b * c).
Lemma divide_plus : forall a b c : Z, (a | b) -> (a | c) -> (a | b + c).
Lemma divide_opp : forall a b : Z, (a | b) -> (a | - b).
Lemma divide_opp_rev : forall a b : Z, (a | - b) -> (a | b).
Lemma divide_opp_left : forall a b : Z, (a | b) -> (- a | b).
Lemma divide_opp_left_rev : forall a b : Z, (- a | b) -> (a | b).
Lemma divide_minus : forall a b c : Z, (a | b) -> (a | c) -> (a | b - c).
Lemma divide_left : forall a b c : Z, (a | b) -> (a | b * c).
Lemma divide_right : forall a b c : Z, (a | c) -> (a | b * c).
Lemma divide_a_ab : forall a b : Z, (a | a * b).
Lemma divide_a_ba : forall a b : Z, (a | b * a).
Lemma z_case_0_1 : forall x : Z, x <= -2 \/ x = -1 \/ x = 0 \/ x = 1 \/ x >= 2.
Lemma z_case_0 : forall x : Z, x <= -1 \/ x = 0 \/ x >= 1.
Lemma divide_1 : forall x : Z, (x | 1) -> x = 1 \/ x = -1.
Lemma divide_antisym : forall a b : Z, (a | b) -> (b | a) -> a = b \/ a = - b.
Lemma Zabs_ind : forall (P : Z -> Prop) (x : Z), (x >= 0 -> P x) -> (x <= 0 -> P (- x)) -> P (Zabs x).
Lemma divide_bounds : forall a b : Z, (a | b) -> b <> 0 -> Zabs a <= Zabs b.