(** b | a if there is q such that a = b * q*)
Definition divides (a b:nat) := exists q:nat,a = (b*q).

(* Specifications: *)
Lemma one_min_div : forall (n:nat),(divides n 1).
Lemma zero_max_div : forall (n:nat),(divides O n).
Lemma divides_refl : forall (a:nat),(divides a a).
Lemma divides_trans : forall (a b c:nat),(divides a b)->(divides b c)->(divides a c).
Lemma divides_antisym : forall (a b:nat),(divides a b)->(divides b a)->a=b.
Lemma non_div_1 : forall (a:nat),(a<>1)->~(divides 1 a).
Lemma divides_plus : forall (d a b:nat),(divides a d)->(divides b d)->(divides (plus a b) d).
Lemma divides_mult : forall (d a b:nat),(divides a d)->(divides (a*b) d).
Lemma divides_minus : forall (d a b:nat),(divides a d)->(divides b d)->(divides (b-a) d).
Lemma quo_dec : forall (a b:nat),(divides a b)->{q:nat | a=b*q}.