<> <> DIRECTORY Rope USING [ROPE], IO, AlgebraClasses, RatIntervals, Polynomials; AlgebraicNumbers: CEDAR DEFINITIONS = BEGIN OPEN AC: AlgebraClasses, RI: RatIntervals, POL: Polynomials; <> AlgebraicNumber: TYPE = REF AlgebraicNumberRec; AlgebraicNumberRec: TYPE = RECORD [ minPolyRing: AC.Structure, -- a ring of univariate polynomials over any groundField. minimalPolynomial: POL.Polynomial, -- a monic elt of minPolyRing irreducible over groundField. real: BOOL _ FALSE, -- true iff groundField real isolatingInterval: RI.RatInterval _ NIL -- isolating interval for the unique root of minimalPolynomial which is this real algebraic number. ]; <> MakeAlgebraicNumber: PROC [minPolyRing: AC.Structure, minimalPolynomial: POL.Polynomial, real: BOOL _ FALSE, isolatingInterval: RI.RatInterval _ NIL] RETURNS [AlgebraicNumber]; <> <> ReadAlgebraicNumber: PROC [in: IO.STREAM, minPolyRing: AC.Structure, real: BOOL _ FALSE] RETURNS [out: AlgebraicNumber]; AlgebraicNumberFromRope: PROC [in: Rope.ROPE, minPolyRing: AC.Structure, real: BOOL _ FALSE] RETURNS [out: AlgebraicNumber]; AlgebraicNumberToRope: PROC [in: AlgebraicNumber] RETURNS [out: Rope.ROPE]; WriteAlgebraicNumber: PROC [in: AlgebraicNumber, out: IO.STREAM]; END.