Notation " x %% y " := (modGI x y) : GI_scope.

(* Specifications: *)
Lemma modGI0 x : x %% 0 = x.
Lemma modGI1 x : x %% 1 = 0.
Lemma ltn_modGIN0 x y : y != 0 -> ('N (x %% y)%GI < 'N y)%N.
Lemma divGIKl (x y : GI) : x != 0 -> (y * x %/ x) = y.
Lemma divGIKr (x y : GI) : x != 0 -> (x * y %/ x) = y.
Lemma modGIKr (x y : GI) : (x * y %% x) = 0.
Lemma dvd0GI x : (0 %| x) = (x == 0).
Lemma dvdGI_mull z x y : (x %| y) -> (x %| z * y).
Lemma divGIK (x y : GI) : x %| y -> (y %/ x)%GI * x = y.
Lemma dvdGI_add x y z:  (x %| y) -> (x %| z) -> (x %| y + z).
Lemma dvdGI_nat_dvdz_Re n x :
n%:R %| x -> (n %| `|floorC ('Re (algGI x))|)%N.
Lemma dvdGI_nat_dvdz_Im n x :
n%:R %| x -> (n %| `|floorC ('Im (algGI x))|)%N.
Lemma conjGI_dvd x y : x %| y -> (conjGI x) %| (conjGI y).
Fact iGI_proof : 'i \is a gaussInteger.