generic
with function "<" ( a,b : number ) return boolean;
with function ">" ( a,b : number ) return boolean;
with function "/" ( a,b : number ) return number;
with function Rmd ( a,b : number ) return number; -- a mod b
with procedure Rmd ( a : in out number; b : in number ); -- a := a mod b
with procedure Div ( a : in out number; b : in number ); -- a := a/b
with procedure Div ( a,b : in number; -- a = b*q+r
q : out number; r : out number ); -- q := a/b
with procedure Div ( a : in out number; b : in number; -- a := a/b
r : out number ); -- r := a mod b
package Abstract_Ring.Domain is end;
-- DESCRIPTION :
-- An Euclidean domain is a ring where for any pair (a,b), b /= 0,
-- there exists a quotient q and a remainder r, such that a = b*q + r.
-- Note that here we only have the remainder and division operations.
-- Any package that makes usage of the full euclidean domain must as
-- well have the ring, instantiated with the same number type.