(** The same results as before, stated separately in terms of Z.div and Z.modulo *)

(* Specifications: *)
Lemma Z_mod_remainder a b : b<>0 -> Remainder (a mod b) b.
Lemma Z_mod_lt a b : b > 0 -> 0 <= a mod b < b.
Proof (fun Hb => Z.mod_pos_bound a b (Z.gt_lt _ _ Hb)).
Lemma Z_mod_neg a b : b < 0 -> b < a mod b <= 0.
Proof (Z.mod_neg_bound a b).
Lemma Z_div_mod_eq_full a b : a = b*(a/b) + (a mod b).
Lemma Zmod_eq_full a b : b<>0 -> a mod b = a - (a/b)*b.
Arguments Zdiv_eucl_exist : default implicits.