<> <> DIRECTORY Rope USING [ROPE], IO, AlgebraClasses, RatIntervals, Polynomials; AlgebraicNumbers: CEDAR DEFINITIONS = BEGIN OPEN AC: AlgebraClasses, RI: RatIntervals, POL: Polynomials; <> AlgebraicNumber: TYPE = AC.Object; AlgebraicNumberData: TYPE = REF AlgebraicNumberDataRec; AlgebraicNumberDataRec: TYPE = RECORD [ minimalPolynomial: POL.Polynomial, -- a monic elt of minPolyRing irreducible over groundField, where minPolyRing is a ring of univariate polynomials over any groundField. isolatingInterval: RI.RatInterval _ NIL -- NonNIL iff groundField real; isolating interval for the unique root of minimalPolynomial which is this real algebraic number. ]; <> AlgebraicNumbersClass: AC.StructureClass; RealAlgebraicNumbersClass: AC.StructureClass; <> FieldOfAlgebraicNumbersData: TYPE = REF FieldOfAlgebraicNumbersDataRec; FieldOfAlgebraicNumbersDataRec: TYPE = RECORD [ groundField: AC.Structure, minPolyRing: AC.Structure, real: BOOL ]; <> FieldOfAlgebraicNumbersOps: TYPE = REF FieldOfAlgebraicNumbersOpsRec; -- prop key is $FieldOfAlgebraicNumbers. FieldOfAlgebraicNumbersOpsRec: TYPE = RECORD [ makeAlgebraicNumber: AC.BinaryImbedOp ]; <> MakeFieldOfAlgebraicNumbers: PROC [minPolyRing: AC.Structure, real: BOOL] RETURNS [fieldOfAlgebraicNumbers: AC.Structure]; <> IsFieldOfAlgebraicNumbers: PROC [structure: AC.Structure] RETURNS [BOOL]; MakeAlgebraicNumber: PROC [structure: AC.Structure] RETURNS [AC.BinaryImbedOp]; <> MakeAlgebraicNum: AC.BinaryImbedOp; <> <> Read: AC.ReadOp; FromRope: AC.FromRopeOp; ToRope: AC.ToRopeOp; Write: AC.WriteOp; END.