intros p w n; elim n; simpl in |- *; auto.
intros H' H'0; inversion_clear H'0.
generalize H' H; case q; case p; simpl in |- *; intros; try discriminate.
absurd (prime 0); auto.
generalize H0; case n0; simpl in |- *; auto.
intros n2 H'1; absurd (1 = S (S (n2 + n1 * S (S n2)))); auto.
intros n0 H' H'0 H'1.
case (divides_dec p (power w n0)); intros H; auto.
apply L_Euclides1 with (a := power w n0); auto.
rewrite mult_comm; auto.
Qed.
Section CD.
Variable n : nat.
(**********************************************************************)
Inductive congruent : nat -> nat -> Prop :=
congruentDef :
forall a b u v : nat, a + u * n = b + v * n -> congruent a b.

(* Specifications: *)
Lemma cong_ref : forall a : nat, congruent a a.
Lemma cong_sym : forall a b : nat, congruent a b -> congruent b a.
Lemma cong_trans :
forall a b c : nat, congruent a b -> congruent b c -> congruent a c.
Lemma cong_mult_O : forall a b : nat, congruent a 0 -> congruent (a * b) 0.
Lemma cong_plus :
forall a b c d : nat,
congruent a b -> congruent c d -> congruent (a + c) (b + d).
Lemma cong_add :
forall a b c : nat, congruent a b -> congruent (a + c) (b + c).
Lemma cong_times :
forall a b c : nat, congruent a b -> congruent (a * c) (b * c).