<> <> <> DIRECTORY Rope USING [ROPE], Basics, IO USING [STREAM], AlgebraClasses, Points, Variables, DistribPolys, MathExpr; Polynomials: CEDAR DEFINITIONS ~ BEGIN OPEN AC: AlgebraClasses, VARS: Variables, DP: DistribPolys; <> Polynomial: TYPE = AC.Object; PolynomialData: TYPE = LIST OF Term; <> Term: TYPE = REF TermRec; TermRec: TYPE = RECORD [ exponent: CARDINAL, coefficient: AC.Object ]; PolynomialSeq: TYPE = REF PolynomialSeqRec; PolynomialSeqRec: TYPE = RECORD [SEQUENCE lengthPlus1:[1..4096] OF Polynomial]; <> polynomialsOverCommutativeOrderedRingClass: AC.StructureClass; polynomialsOverCommutativeUnOrderedRingClass: AC.StructureClass; polynomialsOverNonCommutativeOrderedRingClass: AC.StructureClass; polynomialsOverNonCommutativeUnOrderedRingClass: AC.StructureClass; polynomialsOverCommutativeOrderedFieldClass: AC.StructureClass; polynomialsOverCommutativeUnOrderedFieldClass: AC.StructureClass; polynomialsOverNonCommutativeOrderedFieldClass: AC.StructureClass; polynomialsOverNonCommutativeUnOrderedFieldClass: AC.StructureClass; <> PolynomialRingData: TYPE = REF PolynomialRingDataRec; PolynomialRingDataRec: TYPE = RECORD [ coeffRing: AC.Structure, variable: VARS.VariableSeq, -- a single variable baseCoeffRing: AC.Structure, -- this and next field used by distributed poly IO allVariables: VARS.VariableSeq -- cumulative variables over baseCoeffRing ]; <> PolynomialOps: TYPE = REF PolynomialOpsRec; -- prop key is $PolynomialRing. Skew, i.e. noncommutative, fields ok PolynomialOpsRec: TYPE = RECORD [ monomial: AC.BinaryImbedOp, differentiate: AC.UnaryOp, leadingCoefficient: AC.UnaryOp, degree: AC.ElementRankOp, mainVarEval: AC.BinaryOp, allVarEval: AC.BinaryOp, subst: AC.BinaryOp, sylvesterMatrix: AC.BinaryOp, resultant: AC.BinaryOp ]; <> MakePolynomialStructure: PROC [coeffRing: AC.Structure, V: VARS.VariableSeq] RETURNS [polynomialRing: AC.Structure]; <> <> <> IsPolynomialRing: PROC [ring: AC.Structure] RETURNS [BOOL]; <<>> Monomial: PROC [polynomialRing: AC.Structure] RETURNS [AC.BinaryImbedOp]; <> <<>> Differentiate: PROC [polynomialRing: AC.Structure] RETURNS [AC.UnaryOp]; <> <<>> LeadingCoefficient: PROC [polynomialRing: AC.Structure] RETURNS [AC.UnaryOp]; <> <<>> Degree: PROC [polynomialRing: AC.Structure] RETURNS [AC.ElementRankOp]; MainVarEval: PROC [polynomialRing: AC.Structure] RETURNS [AC.BinaryOp]; AllVarEval: PROC [polynomialRing: AC.Structure] RETURNS [AC.BinaryOp]; Subst: PROC [polynomialRing: AC.Structure] RETURNS [AC.BinaryOp]; SylvesterMatrix: PROC [polynomialRing: AC.Structure] RETURNS [AC.BinaryOp]; Resultant: PROC [polynomialRing: AC.Structure] RETURNS [AC.BinaryOp]; <> Monom: AC.BinaryImbedOp; <> <> Read: AC.ReadOp; FromRope: AC.FromRopeOp; <<>> ToRope: AC.ToRopeOp; Write: AC.WriteOp; MakePolyExpr: AC.ToExprOp; PolyToRope: PROC [in: Polynomial, termRope: Rope.ROPE _ NIL] RETURNS [out: Rope.ROPE]; <> WritePoly: PROC [in: Polynomial, out: IO.STREAM, termRope: Rope.ROPE _ NIL]; <> <<>> ReadPolySeq: PROC [in: IO.STREAM, polynomialRing: AC.Structure] RETURNS [seq: PolynomialSeq]; PolySeqFromRope: PROC [in: Rope.ROPE, polynomialRing: AC.Structure] RETURNS [out: PolynomialSeq]; PolySeqToRope: PROC [in: PolynomialSeq] RETURNS [out: Rope.ROPE]; WritePolySeq: PROC [in: PolynomialSeq, out: IO.STREAM]; PolyFromDPoly: PROC [in: DP.DPolynomial, polynomialRing: AC.Structure] RETURNS [out: Polynomial]; DPolyFromPoly: PROC [in: Polynomial] RETURNS [out: DP.DPolynomial]; <> Add: AC.BinaryOp; Negate: AC.UnaryOp; Subtract: AC.BinaryOp; Multiply: AC.BinaryOp; Remainder: AC.BinaryOp; Diff: AC.UnaryOp; MainVarEv: AC.BinaryOp; <> AllVarEv: AC.BinaryOp; <> Sub: AC.BinaryOp; <> DegreeDelta: PROC [terms: LIST OF Term] RETURNS [CARDINAL]; <> SylvMatrix: AC.BinaryOp; <> Res: AC.BinaryOp; <> SignVars: PROC [in: Polynomial] RETURNS [CARDINAL]; <> Reverse: PROC [in: Polynomial] RETURNS [out: Polynomial]; <> <<>> <> <<>> <> <<>> <> <<>> <> <> <<>> <> <> <<>> <> <<>> <> <> <<>> <> ZeroPoly: PROC [in: Polynomial] RETURNS [BOOL]; Equal: AC.EqualityOp; Sign: AC.CompareToZeroOp; <> Abs: AC.UnaryOp; Compare: AC.BinaryCompareOp; <> LeadingCoeff: AC.UnaryOp; <> <<>> Deg: AC.ElementRankOp; <> Reductum: AC.UnaryOp; <> END.