generic
type number is private;
zero,one : number; -- neutral element for + and * are zero and one
with function Create ( n : natural ) return number; -- n is number
with function Equal ( a,b : number ) return boolean; -- a = b
with procedure Copy ( a : in number; b : in out number ); -- b := a
with function "+" ( a,b : number ) return number; -- return a+b;
with function "+" ( a : number ) return number; -- return +a;
with function "-" ( a,b : number ) return number; -- return a-b;
with function "-" ( a : number ) return number; -- return -a;
with function "*" ( a,b : number ) return number; -- return a*b;
with procedure Add ( a : in out number; b : in number ); -- a := a+b;
with procedure Sub ( a : in out number; b : in number ); -- a := a-b;
with procedure Min ( a : in out number ); -- a := -a;
with procedure Mul ( a : in out number; b : in number ); -- a := a*b;
with procedure Clear ( a : in out number ); -- deallocation
package Abstract_Ring is end;
-- DESCRIPTION :
-- Abstract specification of any ring of numbers that has the standard
-- natural numbers as subring.