<> <> DIRECTORY Rope USING [ROPE], Basics, IO USING [STREAM], AlgebraClasses, Polynomials, AlgebraicNumbers; ExtensionFields: CEDAR DEFINITIONS ~ BEGIN OPEN AC: AlgebraClasses, POL: Polynomials, AN: AlgebraicNumbers; <> ExtensionFieldElement: TYPE = POL.Polynomial; <> <> generalExtensionFieldClass: AC.StructureClass; realExtensionFieldClass: AC.StructureClass; <> ExtensionFieldData: TYPE = REF ExtensionFieldDataRec; ExtensionFieldDataRec: TYPE = RECORD [ groundField: AC.Structure, primitiveElement: AN.AlgebraicNumber ]; <> <> MakeExtensionField: PROC [primitiveElement: AN.AlgebraicNumber] RETURNS [extensionField: AC.Structure]; <> <> IsGeneralExtensionField: PROC [structure: AC.Structure] RETURNS [BOOL]; <<>> IsRealField: PROC [structure: AC.Structure] RETURNS [BOOL]; <> <<>> IsRealExtensionField: PROC [structure: AC.Structure] RETURNS [BOOL]; <> ReadExtensionFieldElement: PROC [in: IO.STREAM, extensionField: AC.Structure, reduced: BOOL _ FALSE] RETURNS [out: ExtensionFieldElement]; <> ExtensionFieldElementFromRope: PROC [in: Rope.ROPE, extensionField: AC.Structure, reduced: BOOL _ FALSE] RETURNS [out: ExtensionFieldElement]; <<>> ToRope: AC.ToRopeOp; Write: AC.WriteOp; <> Add: AC.BinaryOp; Negate: AC.UnaryOp; Subtract: AC.BinaryOp; Multiply: AC.BinaryOp; Invert: AC.UnaryOp; Divide: AC.BinaryOp; ScalarMultiply: AC.BinaryOp; <> Sign: AC.EqualityOp; Abs: AC.UnaryOp; Compare: AC.BinaryCompareOp; <> Equal: AC.EqualityOp; END.