left; apply dividesDef with (q := 0); auto.
intros n; right; red in |- *; intros H'; inversion_clear H'.
rewrite (mult_comm q 0) in H; discriminate.
intros n; left; apply dividesDef with (q := 0); auto.
intros x' y'; case (divides_dec' (S x') (S y')); auto.
intros H'; left; apply div_divides; auto.
intros H'; right; red in |- *; intros H'0; case H'; auto.
inversion H'0.
exists q; auto.
apply is_div_def; auto with arith.
rewrite H; auto with arith.
Qed.

(* Specifications: *)
Lemma all_divides_O : forall n : nat, divides n 0.
Lemma SO_divides_all : forall n : nat, divides 1 n.
Lemma divides_plus1 :
forall a b c : nat, divides a b -> divides a c -> divides a (b + c).
Lemma divides_plus2 :
forall a b c : nat, divides a b -> divides a (b + c) -> divides a c.
Theorem divides_le : forall a b : nat, b <> 0 -> divides a b -> a <= b.
intros a b; case b.