<> <> 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]; <<>> ExtensionFieldElementToRope: PROC [in: ExtensionFieldElement] RETURNS [out: Rope.ROPE]; WriteExtensionFieldElement: PROC [in: ExtensionFieldElement, out: IO.STREAM]; <> Add: PROC [in1, in2: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; Negate: PROC [in: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; Subtract: PROC [in1, in2: ExtensionFieldElement] RETURNS [ExtensionFieldElement]; Multiply: PROC [in1, in2: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; <> Invert: PROC [in: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; Divide: PROC [in1, in2: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; ScalarMultiply: PROC [scalar: AC.Object, in: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; <> Sign: PROC [in: ExtensionFieldElement] RETURNS [Basics.Comparison]; Abs: PROC [in: ExtensionFieldElement] RETURNS [out: ExtensionFieldElement]; Compare: PROC [in1, in2: ExtensionFieldElement] RETURNS [Basics.Comparison]; <> Equal: PROC [in1, in2: ExtensionFieldElement] RETURNS [BOOL]; END.