Definition eqmod (x y: Z) : Prop := exists k, x = k * modul + y.

(* Specifications: *)
Lemma eqmod_refl: forall x, eqmod x x.
Lemma eqmod_refl2: forall x y, x = y -> eqmod x y.
Lemma eqmod_sym: forall x y, eqmod x y -> eqmod y x.
Lemma eqmod_trans: forall x y z, eqmod x y -> eqmod y z -> eqmod x z.
Lemma eqmod_small_eq: forall x y, eqmod x y -> 0 <= x < modul -> 0 <= y < modul -> x = y.
Lemma eqmod_mod_eq: forall x y, eqmod x y -> x mod modul = y mod modul.
Lemma eqmod_mod: forall x, eqmod x (x mod modul).
Lemma eqmod_add: forall a b c d, eqmod a b -> eqmod c d -> eqmod (a + c) (b + d).
Lemma eqmod_neg: forall x y, eqmod x y -> eqmod (-x) (-y).
Lemma eqmod_sub: forall a b c d, eqmod a b -> eqmod c d -> eqmod (a - c) (b - d).
Lemma eqmod_mult: forall a b c d, eqmod a c -> eqmod b d -> eqmod (a * b) (c * d).
Lemma eqmod_divides: forall n m x y, eqmod n x y -> Z.divide m n -> eqmod m x y.
Lemma eqmod_refl: forall x, eqmod x x.
Lemma eqmod_refl2: forall x y, x = y -> eqmod x y.
Lemma eqmod_sym: forall x y, eqmod x y -> eqmod y x.
Lemma eqmod_trans: forall x y z, eqmod x y -> eqmod y z -> eqmod x z.
Lemma eqmod_small_eq: forall x y, eqmod x y -> 0 <= x < modul -> 0 <= y < modul -> x = y.
Lemma eqmod_mod_eq: forall x y, eqmod x y -> x mod modul = y mod modul.
Lemma eqmod_mod: forall x, eqmod x (x mod modul).
Lemma eqmod_add: forall a b c d, eqmod a b -> eqmod c d -> eqmod (a + c) (b + d).
Lemma eqmod_neg: forall x y, eqmod x y -> eqmod (-x) (-y).
Lemma eqmod_sub: forall a b c d, eqmod a b -> eqmod c d -> eqmod (a - c) (b - d).
Lemma eqmod_mult: forall a b c d, eqmod a c -> eqmod b d -> eqmod (a * b) (c * d).
Lemma eqmod_divides: forall n m x y, eqmod n x y -> Z.divide m n -> eqmod m x y.