Instance eqm_setoid : Equivalence eqm.Instance Zplus_eqm : Proper (eqm ==> eqm ==> eqm) Z.add.Instance Zminus_eqm : Proper (eqm ==> eqm ==> eqm) Z.sub.Instance Zmult_eqm : Proper (eqm ==> eqm ==> eqm) Z.mul.Instance Zopp_eqm : Proper (eqm ==> eqm) Z.opp.

(* Specifications: *)
Lemma Zmod_eqm : forall a, (a mod N) == a.
Lemma Zdiv_Zdiv : forall a b c, 0<=b -> 0<=c -> (a/b)/c = a/(b*c).
Lemma Zmod_div : forall a b, a mod b / b = 0.
Theorem Zdiv_mult_le: forall a b c, 0<=a -> 0<=b -> 0<=c -> c*(a/b) <= (c*a)/b.
Lemma Zmod_divides : forall a b, b<>0 -> (a mod b = 0 <-> exists c, a = b*c).
Lemma Zdiv2_div : forall a, Z.div2 a = a/2.
Lemma Zmod_odd : forall a, a mod 2 = if Z.odd a then 1 else 0.
Lemma Zmod_even : forall a, a mod 2 = if Z.even a then 0 else 1.
Lemma Zodd_mod : forall a, Z.odd a = Zeq_bool (a mod 2) 1.
Lemma Zeven_mod : forall a, Z.even a = Zeq_bool (a mod 2) 0.
Lemma Z_mod_same : forall a, a > 0 -> a mod a = 0.
Lemma Z_div_same : forall a, a > 0 -> a/a = 1.
Lemma Z_div_plus : forall a b c:Z, c > 0 -> (a + b * c) / c = a / c + b.
Lemma Z_div_mult : forall a b:Z, b > 0 -> (a*b)/b = a.
Lemma Z_mod_plus : forall a b c:Z, c > 0 -> (a + b * c) mod c = a mod c.
Lemma Z_div_exact_1 : forall a b:Z, b > 0 -> a = b*(a/b) -> a mod b = 0.
Lemma Z_div_exact_2 : forall a b:Z, b > 0 -> a mod b = 0 -> a = b*(a/b).
Lemma Z_mod_zero_opp : forall a b:Z, b > 0 -> a mod b = 0 -> (-a) mod b = 0.