(**********************************************************************)
 
Inductive congruent : nat -> nat -> Prop :=
    congruentDef :
      forall a b u v : nat, a + u * n = b + v * n -> congruent a b.(**********************************************************************)
 
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).
Lemma cong_mult : forall a b c d : nat, congruent a b -> congruent c d -> congruent (a * c) (b * d).
Lemma cong_pow : forall a b c : nat, congruent a b -> congruent (power a c) (power b c).
Theorem congruent' : forall a b : nat, b <= a -> congruent a b -> exists k : nat, a = k * n + b.
Lemma cong1_le : forall x : nat, 1 < n -> congruent x 1 -> 1 <= x.
Lemma divides_cong : forall x : nat, divides n x -> congruent 0 x.
Theorem cong_divides : forall a b : nat, b <= a -> congruent a b -> divides n (a - b).