diff --git a/books/bookvol10.2.pamphlet b/books/bookvol10.2.pamphlet index 5685fd5..8b0afca 100644 --- a/books/bookvol10.2.pamphlet +++ b/books/bookvol10.2.pamphlet @@ -513,7 +513,7 @@ is true if $1 * x = x$ for all x. \item {\bf \cross{ATTREG}{rightUnitary}} is true if $x * 1 = x$ for all x. \item {\bf \cross{ATTREG}{noZeroDivisors}} -is true if $x * y ~= 0$ implies both x and y are non-zero. +is true if $x * y \ne 0$ implies both x and y are non-zero. \item {\bf \cross{ATTREG}{canonicalUnitNormal}} is true if we can choose a canonical representative for each class of associate elements, that is {\tt associates?(a,b)} returns true @@ -1038,6 +1038,7 @@ digraph pic { {\bf See:}\\ \pageto{EltableAggregate}{ELTAGG} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{Category}{CATEGORY} {\bf Exports:}\\ @@ -1083,6 +1084,16 @@ Eltable(S:SetCategory, Index:Type): Category == with [color=lightblue,href="bookvol10.2.pdf#nameddest=ELTAB"]; "Eltable(a:SetCategory,b:Type)" -> "Category" +"Eltable(a:UnivariatePolynomialCategory(a:Ring),b:UnivariatePolynomialCategory(a:Ring))" + [color=seagreen,href="bookvol10.2.pdf#nameddest=ELTAB"]; +"Eltable(a:UnivariatePolynomialCategory(a:Ring),b:UnivariatePolynomialCategory(a:Ring))" -> + "Eltable(a:SetCategory,b:Type)" + +"Eltable(a:Ring,b:Ring)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=ELTAB"]; +"Eltable(a:Ring,b:Ring)" -> + "Eltable(a:SetCategory,b:Type)" + @ <>= digraph pic { @@ -1090,10 +1101,17 @@ digraph pic { bgcolor="#FFFF66"; node [shape=box, color=white, style=filled]; -"Eltable(a:SetCategory,b:Type)" [color=lightblue]; -"Eltable(a:SetCategory,b:Type)" -> "Category" +"UnivariatePolynomialCategory(a:Ring)" [color=lightblue]; +"UnivariatePolynomialCategory(a:Ring)" -> "POLYCAT..." +"UnivariatePolynomialCategory(a:Ring)" -> "ELTAB..." +"UnivariatePolynomialCategory(a:Ring)" -> "DIFRING..." +"UnivariatePolynomialCategory(a:Ring)" -> "DIFEXT..." + +"POLYCAT..." [color=lightblue]; +"ELTAB..." [color=lightblue]; +"DIFRING..." [color=lightblue]; +"DIFEXT..." [color=lightblue]; -"Category" [color=lightblue]; } @ @@ -1797,6 +1815,11 @@ digraph pic { \pagehead{Type}{TYPE} \pagepic{ps/v102type.ps}{TYPE}{1.00} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf See:}\\ \pageto{Aggregate}{AGG} \pageto{FullyPatternMatchable}{FPATMAB} @@ -1843,6 +1866,11 @@ digraph pic { \pageto{HomogeneousAggregate}{HOAGG} \pagefrom{Type}{TYPE} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Exports:}\\ \begin{tabular}{llllll} \cross{AGG}{empty?} & @@ -2293,6 +2321,11 @@ digraph pic { {\bf See:}\\ \pagefrom{Type}{TYPE} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Exports:}\\ \begin{tabular}{lllll} \cross{FPATMAB}{coerce} & @@ -3437,6 +3470,11 @@ digraph pic { \pagefrom{Evalable}{EVALAB} \pagefrom{SetCategory}{SETCAT} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Exports:}\\ \begin{tabular}{lllll} \cross{HOAGG}{any?} & @@ -4349,6 +4387,7 @@ digraph pic { {\bf See:}\\ \pageto{FiniteFieldCategory}{FFIELDC} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{SetCategory}{SETCAT} {\bf Exports:}\\ @@ -4633,6 +4672,7 @@ digraph pic { is true if its values have immediate components that are updateable (mutable). Note: the properties of any component domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} \end{itemize} These are directly exported but not implemented: @@ -4803,6 +4843,11 @@ digraph pic { \cross{CLAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{CLAGG}{finiteAggregate}} @@ -5213,6 +5258,11 @@ digraph pic { \cross{IXAGG}{?=?} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{IXAGG}{finiteAggregate}} @@ -5928,6 +5978,11 @@ digraph pic { \cross{RCAGG}{?=?} &&&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{RCAGG}{shallowlyMutable}} @@ -6161,6 +6216,7 @@ is true if it is an aggregate with a finite number of elements. is true if its values have immediate components that are updateable (mutable). Note: the properties of any component domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} \end{itemize} {\bf Attributes Used:} @@ -6693,6 +6749,11 @@ digraph pic { \cross{BRAGG}{?.value} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{BRAGG}{finiteAggregate}} @@ -7095,6 +7156,15 @@ digraph pic { \cross{DIOPS}{?\~{}=?} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{DIOPS}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{DIOPS}{finiteAggregate}} @@ -7329,6 +7399,11 @@ digraph pic { \cross{DLAGG}{?.value} && \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{DLAGG}{shallowlyMutable}} @@ -7730,6 +7805,11 @@ digraph pic { \cross{LNAGG}{?.?} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{LNAGG}{finiteAggregate}} @@ -8286,6 +8366,10 @@ digraph pic { \begin{itemize} \item {\bf \cross{PRQAGG}{finiteAggregate}} is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{PROAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. \end{itemize} These are directly exported but not implemented: @@ -8459,6 +8543,10 @@ digraph pic { \begin{itemize} \item {\bf \cross{QUAGG}{finiteAggregate}} is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{QUAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. \end{itemize} These are implemented by this category: @@ -8650,6 +8738,7 @@ digraph pic { \item {\bf \cross{SETAGG}{partiallyOrderedSet}} is true if a set with $<$ which is transitive, but not($a < b$ or $a = b$) does not necessarily imply $b S @@ -10188,6 +10306,7 @@ digraph pic { is true if its values have immediate components that are updateable (mutable). Note: the properties of any component domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} \end{itemize} These are directly exported but not implemented: @@ -10490,6 +10609,7 @@ digraph pic { \begin{itemize} \item {\bf \cross{FLAGG}{finiteAggregate}} is true if it is an aggregate with a finite number of elements. +\item {\bf nil} \end{itemize} {\bf Attributes Used:} @@ -10805,6 +10925,15 @@ digraph pic { \cross{MDAGG}{?\~{}=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{MDAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} insert! : (S,%,NonNegativeInteger) -> % @@ -11151,6 +11280,11 @@ digraph pic { \cross{STAGG}{?\~{}=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{STAGG}{shallowlyMutable}} @@ -11675,10 +11809,13 @@ digraph pic { {\bf Attributes Exported:} \begin{itemize} +\item {\bf \cross{A1AGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. \item {\bf \cross{A1AGG}{shallowlyMutable}} is true if its values have immediate components that are updateable (mutable). Note: the properties of any component domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} \end{itemize} These are implemented by this category: @@ -12158,8 +12295,16 @@ digraph pic { {\bf Attributes Exported:} \begin{itemize} +\item {\bf \cross{FSAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. \item {\bf \cross{FSAGG}{finiteAggregate}} is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{FSAGG}{partiallyOrderedSet}} +is true if a set with $<$ which is transitive, but +not($a < b$ or $a = b$) does not necessarily imply $b Boolean),%) -> Boolean if $ has finiteAggregate @@ -13977,6 +14150,17 @@ digraph pic { \cross{SRAGG}{?$>=$?} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{SRAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf \cross{SRAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} leftTrim : (%,Character) -> % @@ -14358,6 +14542,15 @@ digraph pic { \cross{TBAGG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{TBAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf nil} +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{TBAGG}{finiteAggregate}} @@ -14849,6 +15042,17 @@ digraph pic { \cross{ALAGG}{?.?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{ALAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf \cross{ALAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf nil} +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} assoc : (Key,%) -> Union(Record(key: Key,entry: Entry),"failed") @@ -15458,6 +15662,17 @@ digraph pic { \cross{BTAGG}{?\~{}=?} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{BTAGG}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf \cross{BTAGG}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf nil} +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} ?and? : (%,%) -> % @@ -16196,6 +16411,20 @@ digraph pic { \cross{OMSAGG}{?\~{}?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{OMSAGG}{partiallyOrderedSet}} +is true if a set with $<$ which is transitive, but +not($a < b$ or $a = b$) does not necessarily imply $b S @@ -16648,6 +16877,16 @@ digraph pic { \cross{STRICAT}{?\~{}=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{STRICAT}{shallowlyMutable}} +is true if its values have immediate components that are +updateable (mutable). Note: the properties of any component +domain are irrevelant to the shallowlyMutable proper. +\item {\bf \cross{STRICAT}{finiteAggregate}} +is true if it is an aggregate with a finite number of elements. +\item {\bf nil} +\end{itemize} These are directly exported but not implemented: \begin{verbatim} @@ -16936,6 +17175,24 @@ digraph pic { \cross{AMR}{?/?} && \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item if \$ has CommutativeRing then commutative("*") where +{\bf \cross{AMR}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item if \$ has IntegralDomain then noZeroDivisors where +{\bf \cross{AMR}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{AMR}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{AMR}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{AMR}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} These are directly exported but not implemented: \begin{verbatim} @@ -17194,6 +17451,14 @@ digraph pic { \cross{CHARNZ}{?=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{CHARNZ}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} charthRoot : % -> Union(%,"failed") @@ -17332,6 +17597,14 @@ digraph pic { \cross{CHARZ}{?=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{CHARZ}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These exports come from \refto{Ring}(): \begin{verbatim} 1 : () -> % @@ -17439,6 +17712,7 @@ digraph pic { \pageto{IntegralDomain}{INTDOM} \pageto{MonogenicAlgebra}{MONOGEN} \pageto{PolynomialCategory}{POLYCAT} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{BiModule}{BMODULE} \pagefrom{Ring}{RING} @@ -17470,6 +17744,14 @@ digraph pic { \item {\bf \cross{COMRING}{commutative("*")}} is true if it has an operation $"*": (D,D) -> D$ which is commutative. +\item {\bf \cross{COMRING}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{COMRING}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{COMRING}{rightUnitary}} +is true if $x * 1 = x$ for all x. \end{itemize} These exports come from \refto{Ring}(): @@ -17597,6 +17879,7 @@ digraph pic { {\bf See:}\\ \pageto{FiniteFieldCategory}{FFIELDC} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{Ring}{RING} {\bf Exports:}\\ @@ -17624,6 +17907,14 @@ digraph pic { \cross{DIFRING}{?=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{DIFRING}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} differentiate : % -> % @@ -17638,8 +17929,8 @@ These are implemented by this category: These exports come from \refto{Ring}(): \begin{verbatim} - 1 : () -> % 0 : () -> % + 1 : () -> % characteristic : () -> NonNegativeInteger coerce : Integer -> % coerce : % -> OutputForm @@ -17796,7 +18087,15 @@ digraph pic { {\bf Attributes Exported:} \begin{itemize} \item {\bf \cross{ENTIRER}{noZeroDivisors}} -is true if $x * y ~= 0$ implies both x and y are non-zero. +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{ENTIRER}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{ENTIRER}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{ENTIRER}{rightUnitary}} +is true if $x * 1 = x$ for all x. \end{itemize} These exports come from \refto{Ring}(): @@ -17950,6 +18249,13 @@ digraph pic { \cross{LINEXP}{?\~{}=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{LINEXP}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} reducedSystem : (Matrix %,Vector %) -> @@ -18114,6 +18420,14 @@ digraph pic { \cross{ORDRING}{?$>=$?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{ORDRING}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are implemented by this category: \begin{verbatim} abs : % -> % @@ -18304,6 +18618,14 @@ digraph pic { \cross{PDRING}{?=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{PDRING}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} differentiate : (%,S) -> % @@ -18484,6 +18806,7 @@ digraph pic { \pagepic{ps/v102differentialextension.ps}{DIFEXT}{0.65} {\bf See:}\\ +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{PartialDifferentialRing}{PDRING} \pagefrom{Ring}{RING} @@ -18512,6 +18835,14 @@ digraph pic { \cross{DIFEXT}{?\^{}?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{DIFEXT}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} differentiate : (%,(R -> R)) -> % @@ -18744,6 +19075,25 @@ digraph pic { \cross{FAMR}{?/?} && \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item if \$ has CommutativeRing then commutative("*") where +{\bf \cross{FAMR}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item if \$ has IntegralDomain then noZeroDivisors where +{\bf \cross{FAMR}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{FAMR}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FAMR}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FAMR}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} @@ -19073,6 +19423,14 @@ digraph pic { \cross{FLINEXP}{?\~{}=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{FLINEXP}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\end{itemize} + These are implemented by this category: \begin{verbatim} reducedSystem : Matrix % -> @@ -19236,6 +19594,14 @@ digraph pic { \cross{MODULE}{?=?} && \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{MODULE}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{MODULE}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are implemented by this category: \begin{verbatim} ?*? : (%,R) -> % @@ -19371,6 +19737,18 @@ digraph pic { \cross{ALGEBRA}{?\^{}?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{ALGEBRA}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{ALGEBRA}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{ALGEBRA}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are implemented by this category: \begin{verbatim} coerce : R -> % @@ -19553,6 +19931,14 @@ digraph pic { \cross{NAALG}{?=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{NAALG}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{NAALG}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are implemented by this category: \begin{verbatim} plenaryPower : (%,PositiveInteger) -> % @@ -19710,6 +20096,14 @@ digraph pic { \cross{VSPACE}{?=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{VSPACE}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{VSPACE}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} dimension : () -> CardinalNumber @@ -19849,6 +20243,21 @@ digraph pic { \cross{DIVRING}{?=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{DIVRING}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{DIVRING}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{DIVRING}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{DIVRING}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\item {\bf nil} +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} inv : % -> % @@ -20077,12 +20486,18 @@ digraph pic { {\bf Attributes Exported:} \begin{itemize} -\item if R has IntegralDomain then {\bf \cross{ATTREG}{unitsKnown}} +\item if R has IntegralDomain then unitsKnown where +{\bf \cross{FINAALG}{unitsKnown}} is true if a monoid (a multiplicative semigroup with a 1) has unitsKnown means that the operation {\tt recip} can only return ``failed'' if its argument is not a unit. +\item {\bf \cross{FINAALG}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FINAALG}{rightUnitary}} +is true if $x * 1 = x$ for all x. \end{itemize} + These are directly exported but not implemented: \begin{verbatim} conditionsForIdempotents : Vector % -> List Polynomial R @@ -20897,6 +21312,7 @@ digraph pic { {\bf See:}\\ \pageto{GcdDomain}{GCDDOM} \pageto{OrderedIntegralDomain}{OINTDOM} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{Algebra}{ALGEBRA} \pagefrom{CommutativeRing}{COMRING} \pagefrom{EntireRing}{ENTIRER} @@ -20929,6 +21345,23 @@ digraph pic { \cross{INTDOM}{?=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{INTDOM}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{INTDOM}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{INTDOM}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{INTDOM}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{INTDOM}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + {\bf Attributes Used:} \begin{itemize} \item {\bf \cross{INTDOM}{canonicalUnitNormal}} @@ -21182,6 +21615,19 @@ digraph pic { \cross{FRNAALG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item if \$ has IntegralDomain then unitsKnown where +{\bf \cross{FRNAALG}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FRNAALG}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FRNAALG}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} apply : (Matrix R,%) -> % @@ -21689,6 +22135,7 @@ digraph pic { \pageto{PolynomialCategory}{POLYCAT} \pageto{PrincipalIdealDomain}{PID} \pageto{UniqueFactorizationDomain}{UFD} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{IntegralDomain}{INTDOM} {\bf Exports:}\\ @@ -21722,6 +22169,23 @@ digraph pic { \cross{GCDDOM}{?\~{}=?} &&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{GCDDOM}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{GCDDOM}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{GCDDOM}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{GCDDOM}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{GCDDOM}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} gcd : (%,%) -> % @@ -21934,6 +22398,23 @@ digraph pic { \cross{OINTDOM}{?\~{}=?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{OINTDOM}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{OINTDOM}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{OINTDOM}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{OINTDOM}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{OINTDOM}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These exports come from \refto{IntegralDomain}(): \begin{verbatim} 0 : () -> % @@ -22105,6 +22586,23 @@ digraph pic { \cross{PID}{?\^{}?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{PID}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{PID}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{PID}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{PID}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{PID}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} expressIdealMember : (List %,%) -> Union(List %,"failed") @@ -22281,6 +22779,23 @@ digraph pic { \cross{UFD}{?\^{}?} & \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{UFD}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{UFD}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{UFD}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{UFD}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{UFD}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} factor : % -> Factored % @@ -22474,6 +22989,23 @@ digraph pic { \cross{EUCDOM}{?\^{}?} &&&& \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{EUCDOM}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{EUCDOM}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{EUCDOM}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{EUCDOM}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{EUCDOM}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} divide : (%,%) -> Record(quotient: %,remainder: %) @@ -22742,6 +23274,7 @@ digraph pic { {\bf See:}\\ \pageto{PolynomialCategory}{POLYCAT} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{UniqueFactorizationDomain}{UFD} {\bf Exports:}\\ @@ -22785,6 +23318,23 @@ digraph pic { \cross{PFECAT}{?\~{}=?} && \end{tabular} +{\bf Attributes exported:} +\begin{itemize} +\item {\bf \cross{PFECAT}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{PFECAT}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{PFECAT}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{PFECAT}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{PFECAT}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} conditionP : Matrix % -> Union(Vector %,"failed") @@ -22999,6 +23549,7 @@ digraph pic { \pageto{ExtensionField}{XF} \pageto{FieldOfPrimeCharacteristic}{FPC} \pageto{FiniteRankAlgebra}{FINRALG} +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{DivisionRing}{DIVRING} \pagefrom{EuclideanDomain}{EUCDOM} \pagefrom{UniqueFactorizationDomain}{UFD} @@ -23058,6 +23609,19 @@ if and only if {\tt unitCanonical(a) = unitCanonical(b)}. \item {\bf \cross{FIELD}{canonicalsClosed}} is true if\\ {\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{FIELD}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{FIELD}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{FIELD}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FIELD}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FIELD}{rightUnitary}} +is true if $x * 1 = x$ for all x. \end{itemize} These are implemented by this category: @@ -23227,6 +23791,7 @@ digraph pic { \pagepic{ps/v102polynomialcategory.ps}{POLYCAT}{1.00} {\bf See:}\\ +\pageto{UnivariatePolynomialCategory}{UPOLYC} \pagefrom{CommutativeRing}{COMRING} \pagefrom{ConvertibleTo}{KONVERT} \pagefrom{Evalable}{EVALAB} @@ -23327,13 +23892,28 @@ digraph pic { \cross{POLYCAT}{?$>=$?} & \end{tabular} -{\bf Attributes exported:} +{\bf Attributes Exported:} \begin{itemize} -\item if R has canonicalUnitNormal then canonicalUnitNormal where +\item \item if R has canonicalUnitNormal then canonicalUnitNormal where {\bf \cross{POLYCAT}{canonicalUnitNormal}} is true if we can choose a canonical representative for each class of associate elements, that is {\tt associates?(a,b)} returns true if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item if \$ has IntegralDomain then noZeroDivisors where +{\bf \cross{POLYCAT}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item if \$ has CommutativeRing then commutative("*") where +{\bf \cross{POLYCAT}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{POLYCAT}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{POLYCAT}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{POLYCAT}{rightUnitary}} +is true if $x * 1 = x$ for all x. \end{itemize} These are directly exported but not implemented: @@ -24112,6 +24692,10 @@ PolynomialCategory(R:Ring, E:OrderedAbelianMonoidSup, VarSet:OrderedSet): "PolynomialCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet)" -> "CommutativeRing()" +"PolynomialCategory(a:Ring,b:NonNegativeInteger,c:SingletonAsOrderedSet)" + [color=seagreen,href="bookvol10.2.pdf#nameddest=POLYCAT"]; +"PolynomialCategory(a:Ring,b:NonNegativeInteger,c:SingletonAsOrderedSet)" + -> "PolynomialCategory(a:Ring,b:OrderedAbelianMonoidSup,c:OrderedSet)" @ <>= digraph pic { @@ -24222,6 +24806,30 @@ digraph pic { \cross{FPC}{?\~{}=?} &&&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FPC}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{FPC}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{FPC}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{FPC}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{FPC}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FPC}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FPC}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} order : % -> OnePointCompletion PositiveInteger @@ -24426,6 +25034,18 @@ digraph pic { \cross{FINRALG}{?\~{}=?} \\ \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FINRALG}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FINRALG}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FINRALG}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} characteristicPolynomial : % -> UP @@ -24634,6 +25254,35 @@ digraph pic { \pagepic{ps/v102monogenicalgebra.ps}{MONOGEN}{0.70} {\bf See:}\\ + +{\bf Attributes Exported:} +\begin{itemize} +\item if \$ has Field then canonicalUnitNormal where +{\bf \cross{MONOGEN}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item if \$ has Field then canonicalClosed where +{\bf \cross{MONOGEN}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item if \$ has Field then noZeroDivisors where +{\bf \cross{MONOGEN}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{MONOGEN}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{MONOGEN}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{MONOGEN}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{MONOGEN}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + + \pageto{FunctionFieldCategory}{FFCAT} \pagefrom{CommutativeRing}{COMRING} \pagefrom{ConvertibleTo}{KONVERT} @@ -24774,6 +25423,991 @@ digraph pic { } @ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\pagehead{UnivariatePolynomialCategory}{UPOLYC} +\pagepic{ps/v102univariatepolynomialcategory.ps}{UPOLYC}{0.35} + +{\bf See:}\\ +\pagefrom{Algebra}{ALGEBRA} +\pagefrom{CommutativeRing}{COMRING} +\pagefrom{DifferentialExtension}{DIFEXT} +\pagefrom{DifferentialRing}{DIFRING} +\pagefrom{Eltable}{ELTAB} +\pagefrom{Field}{FIELD} +\pagefrom{GcdDomain}{GCDDOM} +\pagefrom{IntegralDomain}{INTDOM} +\pagefrom{PolynomialCategory}{POLYCAT} +\pagefrom{PolynomialFactorizationExplicit}{PFECAT} +\pagefrom{StepThrough}{STEP} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{UPOLYC}{0} & +\cross{UPOLYC}{1} & +\cross{UPOLYC}{associates?} \\ +\cross{UPOLYC}{binomThmExpt} & +\cross{UPOLYC}{characteristic} & +\cross{UPOLYC}{charthRoot} \\ +\cross{UPOLYC}{coefficient} & +\cross{UPOLYC}{coefficients} & +\cross{UPOLYC}{coerce} \\ +\cross{UPOLYC}{composite} & +\cross{UPOLYC}{conditionP} & +\cross{UPOLYC}{content} \\ +\cross{UPOLYC}{convert} & +\cross{UPOLYC}{D} & +\cross{UPOLYC}{degree} \\ +\cross{UPOLYC}{differentiate} & +\cross{UPOLYC}{discriminant} & +\cross{UPOLYC}{divide} \\ +\cross{UPOLYC}{divideExponents} & +\cross{UPOLYC}{elt} & +\cross{UPOLYC}{euclideanSize} \\ +\cross{UPOLYC}{eval} & +\cross{UPOLYC}{expressIdealMember} & +\cross{UPOLYC}{exquo} \\ +\cross{UPOLYC}{extendedEuclidean} & +\cross{UPOLYC}{factor} & +\cross{UPOLYC}{factorPolynomial} \\ +\cross{UPOLYC}{factorSquareFreePolynomial} & +\cross{UPOLYC}{gcd} & +\cross{UPOLYC}{gcdPolynomial} \\ +\cross{UPOLYC}{ground} & +\cross{UPOLYC}{ground?} & +\cross{UPOLYC}{hash} \\ +\cross{UPOLYC}{init} & +\cross{UPOLYC}{integrate} & +\cross{UPOLYC}{isExpt} \\ +\cross{UPOLYC}{isPlus} & +\cross{UPOLYC}{isTimes} & +\cross{UPOLYC}{karatsubaDivide} \\ +\cross{UPOLYC}{latex} & +\cross{UPOLYC}{lcm} & +\cross{UPOLYC}{leadingCoefficient} \\ +\cross{UPOLYC}{leadingMonomial} & +\cross{UPOLYC}{mainVariable} & +\cross{UPOLYC}{makeSUP} \\ +\cross{UPOLYC}{map} & +\cross{UPOLYC}{mapExponents} & +\cross{UPOLYC}{max} \\ +\cross{UPOLYC}{min} & +\cross{UPOLYC}{minimumDegree} & +\cross{UPOLYC}{monicDivide} \\ +\cross{UPOLYC}{monomial} & +\cross{UPOLYC}{monomial?} & +\cross{UPOLYC}{monomials} \\ +\cross{UPOLYC}{multiEuclidean} & +\cross{UPOLYC}{multiplyExponents} & +\cross{UPOLYC}{multivariate} \\ +\cross{UPOLYC}{nextItem} & +\cross{UPOLYC}{numberOfMonomials} & +\cross{UPOLYC}{one?} \\ +\cross{UPOLYC}{order} & +\cross{UPOLYC}{patternMatch} & +\cross{UPOLYC}{pomopo!} \\ +\cross{UPOLYC}{prime?} & +\cross{UPOLYC}{primitiveMonomials} & +\cross{UPOLYC}{primitivePart} \\ +\cross{UPOLYC}{principalIdeal} & +\cross{UPOLYC}{pseudoDivide} & +\cross{UPOLYC}{pseudoQuotient} \\ +\cross{UPOLYC}{pseudoRemainder} & +\cross{UPOLYC}{recip} & +\cross{UPOLYC}{reducedSystem} \\ +\cross{UPOLYC}{reductum} & +\cross{UPOLYC}{resultant} & +\cross{UPOLYC}{retract} \\ +\cross{UPOLYC}{retractIfCan} & +\cross{UPOLYC}{sample} & +\cross{UPOLYC}{separate} \\ +\cross{UPOLYC}{shiftLeft} & +\cross{UPOLYC}{shiftRight} & +\cross{UPOLYC}{sizeLess?} \\ +\cross{UPOLYC}{solveLinearPolynomialEquation} & +\cross{UPOLYC}{squareFree} & +\cross{UPOLYC}{squareFreePart} \\ +\cross{UPOLYC}{squareFreePolynomial} & +\cross{UPOLYC}{subResultantGcd} & +\cross{UPOLYC}{subtractIfCan} \\ +\cross{UPOLYC}{totalDegree} & +\cross{UPOLYC}{totalDegree} & +\cross{UPOLYC}{unit?} \\ +\cross{UPOLYC}{unitCanonical} & +\cross{UPOLYC}{unitNormal} & +\cross{UPOLYC}{univariate} \\ +\cross{UPOLYC}{unmakeSUP} & +\cross{UPOLYC}{variables} & +\cross{UPOLYC}{vectorise} \\ +\cross{UPOLYC}{zero?} & +\cross{UPOLYC}{?*?} & +\cross{UPOLYC}{?**?} \\ +\cross{UPOLYC}{?+?} & +\cross{UPOLYC}{?-?} & +\cross{UPOLYC}{-?} \\ +\cross{UPOLYC}{?=?} & +\cross{UPOLYC}{?\^{}?} & +\cross{UPOLYC}{?.?} \\ +\cross{UPOLYC}{?\~{}=?} & +\cross{UPOLYC}{?/?} & +\cross{UPOLYC}{?$<$?} \\ +\cross{UPOLYC}{?$<=$?} & +\cross{UPOLYC}{?$>$?} & +\cross{UPOLYC}{?$>=$?} \\ +\cross{UPOLYC}{?quo?} & +\cross{UPOLYC}{?rem?} & +\end{tabular} + +{\bf Attributes exported:} +\begin{itemize} +\item if \$ has CommutativeRing then commutative("*") where +{\bf \cross{UPOLYC}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item if \$ has IntegralDomain then noZeroDivisors where +{\bf \cross{UPOLYC}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item if R has Field then additiveValuation where +{\bf \cross{UPOLYC}{additiveValuation}} implies\\ +{\tt euclideanSize(a*b)=euclideanSize(a)+euclideanSize(b)}. +\item if \$ has canonicalUnitNormal then canonicalUnitNormal where +{\bf \cross{UPOLYC}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{UPOLYC}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{UPOLYC}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{UPOLYC}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + +These are directly exported but not implemented: +\begin{verbatim} + discriminant : % -> R if R has COMRING + divideExponents : (%,NonNegativeInteger) -> Union(%,"failed") + monicDivide : (%,%) -> Record(quotient: %,remainder: %) + multiplyExponents : (%,NonNegativeInteger) -> % + pseudoRemainder : (%,%) -> % + resultant : (%,%) -> R if R has COMRING + subResultantGcd : (%,%) -> % if R has INTDOM +\end{verbatim} + +These are implemented by this category: +\begin{verbatim} + 0 : () -> % + 1 : () -> % + associates? : (%,%) -> Boolean if R has INTDOM + binomThmExpt : (%,%,NonNegativeInteger) -> % + if R has COMRING + characteristic : () -> NonNegativeInteger + coefficient : (%,NonNegativeInteger) -> R + coefficients : % -> List R + coerce : R -> % + coerce : Fraction Integer -> % + if R has RETRACT FRAC INT + or R has ALGEBRA FRAC INT + coerce : % -> % if R has INTDOM + content : % -> R if R has GCDDOM + coerce : Integer -> % + coerce : % -> OutputForm + coerce : SingletonAsOrderedSet -> % + composite : (Fraction %,%) -> Union(Fraction %,"failed") + if R has INTDOM + composite : (%,%) -> Union(%,"failed") + if R has INTDOM + content : (%,SingletonAsOrderedSet) -> % + if R has GCDDOM + D : (%,List SingletonAsOrderedSet) -> % + D : (%,SingletonAsOrderedSet) -> % + D : (%,List SingletonAsOrderedSet,List NonNegativeInteger) -> % + D : (%,SingletonAsOrderedSet,NonNegativeInteger) -> % + degree : % -> NonNegativeInteger + degree : + (%,List SingletonAsOrderedSet) -> List NonNegativeInteger + differentiate : + (%,List SingletonAsOrderedSet,List NonNegativeInteger) -> % + differentiate : + (%,SingletonAsOrderedSet,NonNegativeInteger) -> % + differentiate : (%,List SingletonAsOrderedSet) -> % + differentiate : (%,(R -> R),%) -> % + differentiate : (%,(R -> R)) -> % + differentiate : % -> % + differentiate : (%,SingletonAsOrderedSet) -> % + divide : (%,%) -> Record(quotient: %,remainder: %) + if R has FIELD + elt : (Fraction %,Fraction %) -> Fraction % + if R has INTDOM + elt : (Fraction %,R) -> R if R has FIELD + euclideanSize : % -> NonNegativeInteger + if R has FIELD + eval : (%,List SingletonAsOrderedSet,List %) -> % + eval : (%,SingletonAsOrderedSet,%) -> % + eval : (%,List SingletonAsOrderedSet,List R) -> % + eval : (%,SingletonAsOrderedSet,R) -> % + eval : (%,List Equation %) -> % + eval : (%,List %,List %) -> % + eval : (%,%,%) -> % + eval : (%,Equation %) -> % + exquo : (%,R) -> Union(%,"failed") + if R has INTDOM + exquo : (%,%) -> Union(%,"failed") + if R has INTDOM + factor : % -> Factored % if R has PFECAT + factorPolynomial : + SparseUnivariatePolynomial % -> + Factored SparseUnivariatePolynomial % + if R has PFECAT + factorSquareFreePolynomial : + SparseUnivariatePolynomial % -> + Factored SparseUnivariatePolynomial % + if R has PFECAT + gcd : (%,%) -> % if R has GCDDOM + gcd : List % -> % if R has GCDDOM + gcdPolynomial : + (SparseUnivariatePolynomial %, + SparseUnivariatePolynomial %) -> + SparseUnivariatePolynomial % + if R has GCDDOM + ground : % -> R + ground? : % -> Boolean + hash : % -> SingleInteger + init : () -> % if R has STEP + integrate : % -> % if R has ALGEBRA FRAC INT + karatsubaDivide : + (%,NonNegativeInteger) -> Record(quotient: %,remainder: %) + latex : % -> String + lcm : (%,%) -> % if R has GCDDOM + lcm : List % -> % if R has GCDDOM + leadingCoefficient : % -> R + leadingMonomial : % -> % + mainVariable : % -> Union(SingletonAsOrderedSet,"failed") + makeSUP : % -> SparseUnivariatePolynomial R + map : ((R -> R),%) -> % + mapExponents : + ((NonNegativeInteger -> NonNegativeInteger),%) -> % + max : (%,%) -> % if R has ORDSET + min : (%,%) -> % if R has ORDSET + minimumDegree : + (%,SingletonAsOrderedSet) -> NonNegativeInteger + minimumDegree : + (%,List SingletonAsOrderedSet) -> List NonNegativeInteger + monomial : (R,NonNegativeInteger) -> % + monomial : (%,SingletonAsOrderedSet,NonNegativeInteger) -> % + monomial? : % -> Boolean + nextItem : % -> Union(%,"failed") if R has STEP + numberOfMonomials : % -> NonNegativeInteger + one? : % -> Boolean + order : (%,%) -> NonNegativeInteger + if R has INTDOM + pomopo! : (%,R,NonNegativeInteger,%) -> % + prime? : % -> Boolean if R has PFECAT + pseudoDivide : + (%,%) -> Record(coef: R,quotient: %,remainder: %) + if R has INTDOM + pseudoQuotient : (%,%) -> % if R has INTDOM + recip : % -> Union(%,"failed") + reducedSystem : (Matrix %,Vector %) -> + Record(mat: Matrix Integer,vec: Vector Integer) + if R has LINEXP INT + reducedSystem : Matrix % -> Matrix Integer + if R has LINEXP INT + reductum : % -> % + retract : % -> R + retract : % -> Integer if R has RETRACT INT + retract : % -> Fraction Integer + if R has RETRACT FRAC INT + retractIfCan : % -> Union(Integer,"failed") + if R has RETRACT INT + retractIfCan : % -> Union(Fraction Integer,"failed") + if R has RETRACT FRAC INT + retractIfCan : % -> Union(R,"failed") + sample : () -> % + separate : (%,%) -> Record(primePart: %,commonPart: %) + if R has GCDDOM + shiftLeft : (%,NonNegativeInteger) -> % + shiftRight : (%,NonNegativeInteger) -> % + solveLinearPolynomialEquation : + (List SparseUnivariatePolynomial %, + SparseUnivariatePolynomial %) -> + Union(List SparseUnivariatePolynomial %,"failed") + if R has PFECAT + squareFree : % -> Factored % if R has GCDDOM + squareFreePart : % -> % if R has GCDDOM + squareFreePolynomial : + SparseUnivariatePolynomial % -> + Factored SparseUnivariatePolynomial % + if R has PFECAT + subtractIfCan : (%,%) -> Union(%,"failed") + totalDegree : + (%,List SingletonAsOrderedSet) -> NonNegativeInteger + unit? : % -> Boolean if R has INTDOM + unitCanonical : % -> % if R has INTDOM + unitNormal : % -> Record(unit: %,canonical: %,associate: %) + if R has INTDOM + unmakeSUP : SparseUnivariatePolynomial R -> % + variables : % -> List SingletonAsOrderedSet + vectorise : (%,NonNegativeInteger) -> Vector R + zero? : % -> Boolean + ?<=? : (%,%) -> Boolean if R has ORDSET + ?>? : (%,%) -> Boolean if R has ORDSET + ?>=? : (%,%) -> Boolean if R has ORDSET + ?+? : (%,%) -> % + ?=? : (%,%) -> Boolean + ?~=? : (%,%) -> Boolean + ?*? : (%,R) -> % + ?*? : (R,%) -> % + ?*? : (Fraction Integer,%) -> % + if R has ALGEBRA FRAC INT + ?*? : (%,Fraction Integer) -> % + if R has ALGEBRA FRAC INT + ?*? : (%,%) -> % + ?*? : (Integer,%) -> % + ?*? : (PositiveInteger,%) -> % + ?*? : (NonNegativeInteger,%) -> % + ?/? : (%,R) -> % if R has FIELD + ?-? : (%,%) -> % + -? : % -> % + ?^? : (%,PositiveInteger) -> % + ?^? : (%,NonNegativeInteger) -> % + ?**? : (%,PositiveInteger) -> % + ?**? : (%,NonNegativeInteger) -> % + ?.? : (%,Fraction %) -> Fraction % + if R has INTDOM +\end{verbatim} + +These exports come from \refto{PolynomialCategory}(R,N,S)\\ +where R:Ring, N:NonNegativeInteger, S:SingletonAsOrderedSet: +\begin{verbatim} + charthRoot : % -> Union(%,"failed") + if + and(has($,CharacteristicNonZero), + has(R,PolynomialFactorizationExplicit)) + or R has CHARNZ + coefficient : + (%,SingletonAsOrderedSet,NonNegativeInteger) -> % + coefficient : + (%,List SingletonAsOrderedSet,List NonNegativeInteger) -> % + conditionP : Matrix % -> Union(Vector %,"failed") + if and(has($,CharacteristicNonZero), + has(R,PolynomialFactorizationExplicit)) + convert : % -> Pattern Integer + if SingletonAsOrderedSet has KONVERT PATTERN INT + and R has KONVERT PATTERN INT + convert : % -> Pattern Float + if SingletonAsOrderedSet has KONVERT PATTERN FLOAT + and R has KONVERT PATTERN FLOAT + convert : % -> InputForm + if SingletonAsOrderedSet has KONVERT INFORM + and R has KONVERT INFORM + degree : (%,SingletonAsOrderedSet) -> NonNegativeInteger + discriminant : (%,SingletonAsOrderedSet) -> % + if R has COMRING + isExpt : % -> + Union( + Record(var: SingletonAsOrderedSet,exponent: NonNegativeInteger), + "failed") + isPlus : % -> Union(List %,"failed") + isTimes : % -> Union(List %,"failed") + minimumDegree : % -> NonNegativeInteger + monicDivide : + (%,%,SingletonAsOrderedSet) -> Record(quotient: %,remainder: %) + monomial : + (%,List SingletonAsOrderedSet,List NonNegativeInteger) -> % + monomials : % -> List % + multivariate : + (SparseUnivariatePolynomial %,SingletonAsOrderedSet) -> % + multivariate : + (SparseUnivariatePolynomial R,SingletonAsOrderedSet) -> % + patternMatch : + (%,Pattern Integer,PatternMatchResult(Integer,%)) -> + PatternMatchResult(Integer,%) + if SingletonAsOrderedSet has PATMAB INT + and R has PATMAB INT + patternMatch : + (%,Pattern Float,PatternMatchResult(Float,%)) -> + PatternMatchResult(Float,%) + if SingletonAsOrderedSet has PATMAB FLOAT + and R has PATMAB FLOAT + primitiveMonomials : % -> List % + primitivePart : (%,SingletonAsOrderedSet) -> % + if R has GCDDOM + primitivePart : % -> % if R has GCDDOM + reducedSystem : Matrix % -> Matrix R + reducedSystem : (Matrix %,Vector %) -> + Record(mat: Matrix R,vec: Vector R) + resultant : (%,%,SingletonAsOrderedSet) -> % + if R has COMRING + retract : % -> SingletonAsOrderedSet + retractIfCan : % -> Union(SingletonAsOrderedSet,"failed") + totalDegree : % -> NonNegativeInteger + univariate : % -> SparseUnivariatePolynomial R + univariate : + (%,SingletonAsOrderedSet) -> SparseUnivariatePolynomial % + ? Boolean if R has ORDSET +\end{verbatim} + +These exports come from \refto{Eltable}(R:Ring,R:Ring): +\begin{verbatim} + ?.? : (%,R) -> R +\end{verbatim} + +These exports come from \refto{Eltable}(R:UPOLYC,R:UPOLYC): +\begin{verbatim} + ?.? : (%,%) -> % +\end{verbatim} + +These exports come from \refto{DifferentialRing}(): +\begin{verbatim} + D : % -> % + D : (%,NonNegativeInteger) -> % + differentiate : (%,NonNegativeInteger) -> % +\end{verbatim} + +These exports come from \refto{DifferentialExtension}(R:Ring): +\begin{verbatim} + D : (%,(R -> R)) -> % + D : (%,(R -> R),NonNegativeInteger) -> % + D : (%,Symbol) -> % if R has PDRING SYMBOL + D : (%,List Symbol) -> % if R has PDRING SYMBOL + D : (%,Symbol,NonNegativeInteger) -> % + if R has PDRING SYMBOL + D : (%,List Symbol,List NonNegativeInteger) -> % + if R has PDRING SYMBOL + differentiate : (%,(R -> R),NonNegativeInteger) -> % + differentiate : (%,Symbol) -> % + if R has PDRING SYMBOL + differentiate : (%,List Symbol) -> % + if R has PDRING SYMBOL + differentiate : (%,Symbol,NonNegativeInteger) -> % + if R has PDRING SYMBOL + differentiate : (%,List Symbol,List NonNegativeInteger) -> % + if R has PDRING SYMBOL +\end{verbatim} + +These exports come from \refto{StepThrough}() +\begin{verbatim} +\end{verbatim} + +These exports come from \refto{CommutativeRing}() +\begin{verbatim} +\end{verbatim} + +These exports come from \refto{IntegralDomain}() +\begin{verbatim} +\end{verbatim} + +These exports come from \refto{GcdDomain}() +\begin{verbatim} +\end{verbatim} + +These exports come from \refto{Field}() +\begin{verbatim} + expressIdealMember : (List %,%) -> Union(List %,"failed") + if R has FIELD + extendedEuclidean : (%,%) -> + Record(coef1: %,coef2: %,generator: %) + if R has FIELD + extendedEuclidean : + (%,%,%) -> Union(Record(coef1: %,coef2: %),"failed") + if R has FIELD + multiEuclidean : (List %,%) -> Union(List %,"failed") + if R has FIELD + principalIdeal : List % -> Record(coef: List %,generator: %) + if R has FIELD + sizeLess? : (%,%) -> Boolean if R has FIELD + ?quo? : (%,%) -> % if R has FIELD + ?rem? : (%,%) -> % if R has FIELD +\end{verbatim} + +These exports come from \refto{Algebra}(Fraction(Integer)) +\begin{verbatim} +\end{verbatim} + +These exports come from \refto{PolynomialFactorizationExplicit}() +\begin{verbatim} +\end{verbatim} + +<>= +)abbrev category UPOLYC UnivariatePolynomialCategory +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: Ring, monomial, coefficient, reductum, differentiate, +++ elt, map, resultant, discriminant +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ The category of univariate polynomials over a ring R. +++ No particular model is assumed - implementations can be either +++ sparse or dense. + +UnivariatePolynomialCategory(R:Ring): Category == + Join(PolynomialCategory(R, NonNegativeInteger, SingletonAsOrderedSet), + Eltable(R, R), Eltable(%, %), DifferentialRing, + DifferentialExtension R) with + vectorise : (%,NonNegativeInteger) -> Vector R + ++ vectorise(p, n) returns \spad{[a0,...,a(n-1)]} where + ++ \spad{p = a0 + a1*x + ... + a(n-1)*x**(n-1)} + higher order terms. + ++ The degree of polynomial p can be different from \spad{n-1}. + makeSUP: % -> SparseUnivariatePolynomial R + ++ makeSUP(p) converts the polynomial p to be of type + ++ SparseUnivariatePolynomial over the same coefficients. + unmakeSUP: SparseUnivariatePolynomial R -> % + ++ unmakeSUP(sup) converts sup of type + ++ \spadtype{SparseUnivariatePolynomial(R)} + ++ to be a member of the given type. + ++ Note: converse of makeSUP. + multiplyExponents: (%,NonNegativeInteger) -> % + ++ multiplyExponents(p,n) returns a new polynomial resulting from + ++ multiplying all exponents of the polynomial p by the non negative + ++ integer n. + divideExponents: (%,NonNegativeInteger) -> Union(%,"failed") + ++ divideExponents(p,n) returns a new polynomial resulting from + ++ dividing all exponents of the polynomial p by the non negative + ++ integer n, or "failed" if some exponent is not exactly divisible + ++ by n. + monicDivide: (%,%) -> Record(quotient:%,remainder:%) + ++ monicDivide(p,q) divide the polynomial p by the monic polynomial q, + ++ returning the pair \spad{[quotient, remainder]}. + ++ Error: if q isn't monic. +-- These three are for Karatsuba + karatsubaDivide: (%,NonNegativeInteger) -> Record(quotient:%,remainder:%) + ++ \spad{karatsubaDivide(p,n)} returns the same as + ++ \spad{monicDivide(p,monomial(1,n))} + shiftRight: (%,NonNegativeInteger) -> % + ++ \spad{shiftRight(p,n)} returns + ++ \spad{monicDivide(p,monomial(1,n)).quotient} + shiftLeft: (%,NonNegativeInteger) -> % + ++ \spad{shiftLeft(p,n)} returns \spad{p * monomial(1,n)} + pseudoRemainder: (%,%) -> % + ++ pseudoRemainder(p,q) = r, for polynomials p and q, returns the + ++ remainder when + ++ \spad{p' := p*lc(q)**(deg p - deg q + 1)} + ++ is pseudo right-divided by q, i.e. \spad{p' = s q + r}. + differentiate: (%, R -> R, %) -> % + ++ differentiate(p, d, x') extends the R-derivation d to an + ++ extension D in \spad{R[x]} where Dx is given by x', and + ++ returns \spad{Dp}. + if R has StepThrough then StepThrough + if R has CommutativeRing then + discriminant: % -> R + ++ discriminant(p) returns the discriminant of the polynomial p. + resultant: (%,%) -> R + ++ resultant(p,q) returns the resultant of the polynomials p and q. + if R has IntegralDomain then + Eltable(Fraction %, Fraction %) + elt : (Fraction %, Fraction %) -> Fraction % + ++ elt(a,b) evaluates the fraction of univariate polynomials + ++ \spad{a} with the distinguished variable replaced by b. + order: (%, %) -> NonNegativeInteger + ++ order(p, q) returns the largest n such that \spad{q**n} + ++ divides polynomial p + ++ i.e. the order of \spad{p(x)} at \spad{q(x)=0}. + subResultantGcd: (%,%) -> % + ++ subResultantGcd(p,q) computes the gcd of the polynomials p + ++ and q using the SubResultant GCD algorithm. + composite: (%, %) -> Union(%, "failed") + ++ composite(p, q) returns h if \spad{p = h(q)}, and "failed" + ++ no such h exists. + composite: (Fraction %, %) -> Union(Fraction %, "failed") + ++ composite(f, q) returns h if f = h(q), and "failed" is + ++ no such h exists. + pseudoQuotient: (%,%) -> % + ++ pseudoQuotient(p,q) returns r, the quotient when + ++ \spad{p' := p*lc(q)**(deg p - deg q + 1)} + ++ is pseudo right-divided by q, i.e. \spad{p' = s q + r}. + pseudoDivide: (%, %) -> Record(coef:R, quotient: %, remainder:%) + ++ pseudoDivide(p,q) returns \spad{[c, q, r]}, when + ++ \spad{p' := p*lc(q)**(deg p - deg q + 1) = c * p} + ++ is pseudo right-divided by q, i.e. \spad{p' = s q + r}. + if R has GcdDomain then + separate: (%, %) -> Record(primePart:%, commonPart: %) + ++ separate(p, q) returns \spad{[a, b]} such that polynomial + ++ \spad{p = a b} and \spad{a} is relatively prime to q. + if R has Field then + EuclideanDomain + additiveValuation + ++ euclideanSize(a*b) = euclideanSize(a) + euclideanSize(b) + elt : (Fraction %, R) -> R + ++ elt(a,r) evaluates the fraction of univariate polynomials + ++ \spad{a} with the distinguished variable replaced by the + ++ constant r. + if R has Algebra Fraction Integer then + integrate: % -> % + ++ integrate(p) integrates the univariate polynomial p with respect + ++ to its distinguished variable. + add + pp,qq: SparseUnivariatePolynomial % + + variables(p) == + zero? p or zero?(degree p) => [] + [create()] + + degree(p:%,v:SingletonAsOrderedSet) == degree p + + totalDegree(p:%,lv:List SingletonAsOrderedSet) == + empty? lv => 0 + totalDegree p + + degree(p:%,lv:List SingletonAsOrderedSet) == + empty? lv => [] + [degree p] + + eval(p:%,lv: List SingletonAsOrderedSet,lq: List %):% == + empty? lv => p + not empty? rest lv => _ + error "can only eval a univariate polynomial once" + eval(p,first lv,first lq)$% + + eval(p:%,v:SingletonAsOrderedSet,q:%):% == p(q) + + eval(p:%,lv: List SingletonAsOrderedSet,lr: List R):% == + empty? lv => p + not empty? rest lv => _ + error "can only eval a univariate polynomial once" + eval(p,first lv,first lr)$% + + eval(p:%,v:SingletonAsOrderedSet,r:R):% == p(r)::% + + eval(p:%,le:List Equation %):% == + empty? le => p + not empty? rest le => _ + error "can only eval a univariate polynomial once" + mainVariable(lhs first le) case "failed" => p + p(rhs first le) + + mainVariable(p:%) == + zero? degree p => "failed" + create()$SingletonAsOrderedSet + + minimumDegree(p:%,v:SingletonAsOrderedSet) == minimumDegree p + + minimumDegree(p:%,lv:List SingletonAsOrderedSet) == + empty? lv => [] + [minimumDegree p] + + monomial(p:%,v:SingletonAsOrderedSet,n:NonNegativeInteger) == + mapExponents(#1+n,p) + + coerce(v:SingletonAsOrderedSet):% == monomial(1,1) + + makeSUP p == + zero? p => 0 + monomial(leadingCoefficient p,degree p) + makeSUP reductum p + + unmakeSUP sp == + zero? sp => 0 + monomial(leadingCoefficient sp,degree sp) + unmakeSUP reductum sp + + karatsubaDivide(p:%,n:NonNegativeInteger) == monicDivide(p,monomial(1,n)) + + shiftRight(p:%,n:NonNegativeInteger) == + monicDivide(p,monomial(1,n)).quotient + + shiftLeft(p:%,n:NonNegativeInteger) == p * monomial(1,n) + + if R has PolynomialFactorizationExplicit then + PFBRU ==> PolynomialFactorizationByRecursionUnivariate(R,%) + pp,qq:SparseUnivariatePolynomial % + lpp:List SparseUnivariatePolynomial % + SupR ==> SparseUnivariatePolynomial R + sp:SupR + + solveLinearPolynomialEquation(lpp,pp) == + solveLinearPolynomialEquationByRecursion(lpp,pp)$PFBRU + + factorPolynomial(pp) == + factorByRecursion(pp)$PFBRU + + factorSquareFreePolynomial(pp) == + factorSquareFreeByRecursion(pp)$PFBRU + + import FactoredFunctions2(SupR,S) + + factor p == + zero? degree p => + ansR:=factor leadingCoefficient p + makeFR(unit(ansR)::%, + [[w.flg,w.fctr::%,w.xpnt] for w in factorList ansR]) + map(unmakeSUP,factorPolynomial(makeSUP p)$R) + + vectorise(p, n) == + m := minIndex(v := new(n, 0)$Vector(R)) + for i in minIndex v .. maxIndex v repeat + qsetelt_!(v, i, coefficient(p, (i - m)::NonNegativeInteger)) + v + + retract(p:%):R == + zero? p => 0 + zero? degree p => leadingCoefficient p + error "Polynomial is not of degree 0" + + retractIfCan(p:%):Union(R, "failed") == + zero? p => 0 + zero? degree p => leadingCoefficient p + "failed" + + if R has StepThrough then + init() == init()$R::% + + nextItemInner: % -> Union(%,"failed") + + nextItemInner(n) == + zero? n => nextItem(0$R)::R::% -- assumed not to fail + zero? degree n => + nn:=nextItem leadingCoefficient n + nn case "failed" => "failed" + nn::R::% + n1:=reductum n + n2:=nextItemInner n1 -- try stepping the reductum + n2 case % => monomial(leadingCoefficient n,degree n) + n2 + 1+degree n1 < degree n => -- there was a hole between lt n and n1 + monomial(leadingCoefficient n,degree n)+ + monomial(nextItem(init()$R)::R,1+degree n1) + n3:=nextItem leadingCoefficient n + n3 case "failed" => "failed" + monomial(n3,degree n) + + nextItem(n) == + n1:=nextItemInner n + n1 case "failed" => monomial(nextItem(init()$R)::R,1+degree(n)) + n1 + + if R has GcdDomain then + + content(p:%,v:SingletonAsOrderedSet) == content(p)::% + + primeFactor: (%, %) -> % + + primeFactor(p, q) == + (p1 := (p exquo gcd(p, q))::%) = p => p + primeFactor(p1, q) + + separate(p, q) == + a := primeFactor(p, q) + [a, (p exquo a)::%] + + if R has CommutativeRing then + differentiate(x:%, deriv:R -> R, x':%) == + d:% := 0 + while (dg := degree x) > 0 repeat + lc := leadingCoefficient x + d := d + x' * monomial(dg * lc, (dg - 1)::NonNegativeInteger) + + monomial(deriv lc, dg) + x := reductum x + d + deriv(leadingCoefficient x)::% + else + ncdiff: (NonNegativeInteger, %) -> % + -- computes d(x**n) given dx = x', non-commutative case + ncdiff(n, x') == + zero? n => 0 + zero?(n1 := (n - 1)::NonNegativeInteger) => x' + x' * monomial(1, n1) + monomial(1, 1) * ncdiff(n1, x') + + differentiate(x:%, deriv:R -> R, x':%) == + d:% := 0 + while (dg := degree x) > 0 repeat + lc := leadingCoefficient x + d := d + monomial(deriv lc, dg) + lc * ncdiff(dg, x') + x := reductum x + d + deriv(leadingCoefficient x)::% + + differentiate(x:%, deriv:R -> R) == differentiate(x, deriv, 1$%)$% + + differentiate(x:%) == + d:% := 0 + while (dg := degree x) > 0 repeat + d:=d+monomial(dg*leadingCoefficient x,(dg-1)::NonNegativeInteger) + x := reductum x + d + + differentiate(x:%,v:SingletonAsOrderedSet) == differentiate x + + if R has IntegralDomain then + + elt(g:Fraction %, f:Fraction %) == ((numer g) f) / ((denom g) f) + + pseudoQuotient(p, q) == + (n := degree(p)::Integer - degree q + 1) < 1 => 0 + ((leadingCoefficient(q)**(n::NonNegativeInteger) * p + - pseudoRemainder(p, q)) exquo q)::% + + pseudoDivide(p, q) == + (n := degree(p)::Integer - degree q + 1) < 1 => [1, 0, p] + prem := pseudoRemainder(p, q) + lc := leadingCoefficient(q)**(n::NonNegativeInteger) + [lc,((lc*p - prem) exquo q)::%, prem] + + composite(f:Fraction %, q:%) == + (n := composite(numer f, q)) case "failed" => "failed" + (d := composite(denom f, q)) case "failed" => "failed" + n::% / d::% + + composite(p:%, q:%) == + ground? p => p + cqr := pseudoDivide(p, q) + ground?(cqr.remainder) and + ((v := cqr.remainder exquo cqr.coef) case %) and + ((u := composite(cqr.quotient, q)) case %) and + ((w := (u::%) exquo cqr.coef) case %) => + v::% + monomial(1, 1) * w::% + "failed" + + elt(p:%, f:Fraction %) == + zero? p => 0 + ans:Fraction(%) := (leadingCoefficient p)::%::Fraction(%) + n := degree p + while not zero?(p:=reductum p) repeat + ans := ans * f ** (n - (n := degree p))::NonNegativeInteger + + (leadingCoefficient p)::%::Fraction(%) + zero? n => ans + ans * f ** n + + order(p, q) == + zero? p => error "order: arguments must be nonzero" + degree(q) < 1 => error "order: place must be non-trivial" + ans:NonNegativeInteger := 0 + repeat + (u := p exquo q) case "failed" => return ans + p := u::% + ans := ans + 1 + + if R has GcdDomain then + squareFree(p:%) == + squareFree(p)$UnivariatePolynomialSquareFree(R, %) + + squareFreePart(p:%) == + squareFreePart(p)$UnivariatePolynomialSquareFree(R, %) + + if R has PolynomialFactorizationExplicit then + + gcdPolynomial(pp,qq) == + zero? pp => unitCanonical qq -- subResultantGcd can't handle 0 + zero? qq => unitCanonical pp + unitCanonical(gcd(content (pp),content(qq))* + primitivePart + subResultantGcd(primitivePart pp,primitivePart qq)) + + squareFreePolynomial pp == + squareFree(pp)$UnivariatePolynomialSquareFree(%, + SparseUnivariatePolynomial %) + + if R has Field then + elt(f:Fraction %, r:R) == ((numer f) r) / ((denom f) r) + + euclideanSize x == + zero? x => + error "euclideanSize called on 0 in Univariate Polynomial" + degree x + + divide(x,y) == + zero? y => error "division by 0 in Univariate Polynomials" + quot:=0 + lc := inv leadingCoefficient y + while not zero?(x) and (degree x >= degree y) repeat + f:=lc*leadingCoefficient x + n:=(degree x - degree y)::NonNegativeInteger + quot:=quot+monomial(f,n) + x:=x-monomial(f,n)*y + [quot,x] + + if R has Algebra Fraction Integer then + + integrate p == + ans:% := 0 + while p ^= 0 repeat + l := leadingCoefficient p + d := 1 + degree p + ans := ans + inv(d::Fraction(Integer)) * monomial(l, d) + p := reductum p + ans + +@ +<>= +"UPOLYC" + [color=lightblue,href="bookvol10.2.pdf#nameddest=UPOLYC"]; +"UPOLYC" -> "POLYCAT" +"UPOLYC" -> "ELTAB" +"UPOLYC" -> "DIFRING" +"UPOLYC" -> "DIFEXT" +"UPOLYC" -> "STEP" +"UPOLYC" -> "COMRING" +"UPOLYC" -> "INTDOM" +"UPOLYC" -> "GCDDOM" +"UPOLYC" -> "FIELD" +"UPOLYC" -> "ALGEBRA" +"UPOLYC" -> "PFECAT" + +@ +<>= +"UnivariatePolynomialCategory(a:Ring)" + [color=lightblue,href="bookvol10.2.pdf#nameddest=UPOLYC"]; +"UnivariatePolynomialCategory(a:Ring)" -> + "PolynomialCategory(a:Ring,b:NonNegativeInteger,c:SingletonAsOrderedSet)" +"UnivariatePolynomialCategory(a:Ring)" -> + "Eltable(a:Ring,b:Ring)" +"UnivariatePolynomialCategory(a:Ring)" -> + "Eltable(a:UnivariatePolynomialCategory(a:Ring),b:UnivariatePolynomialCategory(a:Ring))" +"UnivariatePolynomialCategory(a:Ring)" -> + "DifferentialRing()" +"UnivariatePolynomialCategory(a:Ring)" -> + "DifferentialExtension(a:Ring)" +"UnivariatePolynomialCategory(a:Ring)" -> + "StepThrough()" +"UnivariatePolynomialCategory(a:Ring)" -> + "CommutativeRing()" +"UnivariatePolynomialCategory(a:Ring)" -> + "IntegralDomain()" +"UnivariatePolynomialCategory(a:Ring)" -> + "GcdDomain()" +"UnivariatePolynomialCategory(a:Ring)" -> + "Field()" +"UnivariatePolynomialCategory(a:Ring)" -> + "Algebra(Fraction(Integer))" +"UnivariatePolynomialCategory(a:Ring)" -> + "PolynomialFactorizationExplicit()" + +@ +<>= +digraph pic { + fontsize=10; + bgcolor="#FFFF66"; + node [shape=box, color=white, style=filled]; + +"UnivariatePolynomialCategory(a:Ring)" [color=lightblue]; +"UnivariatePolynomialCategory(a:Ring)" -> "POLYCAT..." +"UnivariatePolynomialCategory(a:Ring)" -> "ELTAB..." +"UnivariatePolynomialCategory(a:Ring)" -> "DIFRING..." +"UnivariatePolynomialCategory(a:Ring)" -> "DIFEXT..." +"UnivariatePolynomialCategory(a:Ring)" -> "STEP..." +"UnivariatePolynomialCategory(a:Ring)" -> "COMRING..." +"UnivariatePolynomialCategory(a:Ring)" -> "INTDOM..." +"UnivariatePolynomialCategory(a:Ring)" -> "GCDDOM..." +"UnivariatePolynomialCategory(a:Ring)" -> "FIELD..." +"UnivariatePolynomialCategory(a:Ring)" -> "ALGEBRA..." +"UnivariatePolynomialCategory(a:Ring)" -> "PFECAT..." + +"POLYCAT..." [color=lightblue]; +"ELTAB..." [color=lightblue]; +"DIFRING..." [color=lightblue]; +"DIFEXT..." [color=lightblue]; +"STEP..." [color=lightblue]; +"COMRING..." [color=lightblue]; +"INTDOM..." [color=lightblue]; +"GCDDOM..." [color=lightblue]; +"FIELD..." [color=lightblue]; +"ALGEBRA..." [color=lightblue]; +"PFECAT..." [color=lightblue]; + +} + +@ \chapter{Category Layer 18} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pagehead{ExtensionField}{XF} @@ -24845,6 +26479,30 @@ digraph pic { \cross{XF}{?\~{}=?}\\ \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{XF}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{XF}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{XF}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{XF}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{XF}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{XF}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{XF}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} inGroundField? : % -> Boolean @@ -25151,6 +26809,30 @@ digraph pic { \cross{FFIELDC}{?\~{}=?} &&&& \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FFIELDC}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{FFIELDC}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{FFIELDC}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{FFIELDC}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{FFIELDC}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FFIELDC}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FFIELDC}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} factorsOfCyclicGroupSize : () -> @@ -25676,6 +27358,32 @@ digraph pic { \cross{FFCAT}{?rem?} & \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item if \$ has Fraction(UPOLYC(UFD)) and Field then noZeroDivisors where +{\bf \cross{FFCAT}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item if \$ has Fraction(UPOLYC(UFD)) and Field then canonicalUnitNormal + where {\bf \cross{FFCAT}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item if \$ has Fraction(UPOLYC(UFD)) and Field then canonicalsClosed where +{\bf \cross{FFCAT}{canonicalsClosed}} is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{FFCAT}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{FFCAT}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FFCAT}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FFCAT}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + TPDHERE: \begin{verbatim} 0 : () -> % @@ -26559,6 +28267,18 @@ digraph pic { \cross{FRAMALG}{?\~{}=?} & \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FRAMALG}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FRAMALG}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FRAMALG}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} basis : () -> Vector % @@ -26867,6 +28587,30 @@ digraph pic { \cross{FAXF}{?\~{}=?} & \end{tabular} +{\bf Attributes Exported:} +\begin{itemize} +\item {\bf \cross{FAXF}{canonicalUnitNormal}} +is true if we can choose a canonical representative for each class +of associate elements, that is {\tt associates?(a,b)} returns true +if and only if {\tt unitCanonical(a) = unitCanonical(b)}. +\item {\bf \cross{FAXF}{canonicalsClosed}} +is true if\\ +{\tt unitCanonical(a)*unitCanonical(b) = unitCanonical(a*b)}. +\item {\bf \cross{FAXF}{noZeroDivisors}} +is true if $x * y \ne 0$ implies both x and y are non-zero. +\item {\bf \cross{FAXF}{commutative("*")}} +is true if it has an operation $"*": (D,D) -> D$ +which is commutative. +\item {\bf \cross{FAXF}{unitsKnown}} +is true if a monoid (a multiplicative semigroup with a 1) has +unitsKnown means that the operation {\tt recip} can only return +``failed'' if its argument is not a unit. +\item {\bf \cross{FAXF}{leftUnitary}} +is true if $1 * x = x$ for all x. +\item {\bf \cross{FAXF}{rightUnitary}} +is true if $x * 1 = x$ for all x. +\end{itemize} + These are directly exported but not implemented: \begin{verbatim} basis : () -> Vector % @@ -34840,6 +36584,1540 @@ Note that this code is not included in the generated catdef.spad file. (QUOTE |lookupComplete|))) @ +\section{UPOLYC.lsp BOOTSTRAP} +{\bf UPOLYC} depends on itself. We need to break this cycle to build +the algebra. So we keep a cached copy of the translated {\bf UPOLYC} +category which we can write into the {\bf MID} directory. We compile +the lisp code and copy the {\bf UPOLYC.o} file to the {\bf OUT} directory. +This is eventually forcibly replaced by a recompiled version. + +Note that this code is not included in the generated catdef.spad file. + +<>= + +(|/VERSIONCHECK| 2) + +(SETQ |UnivariatePolynomialCategory;CAT| (QUOTE NIL)) + +(SETQ |UnivariatePolynomialCategory;AL| (QUOTE NIL)) + +(DEFUN |UnivariatePolynomialCategory| (#1=#:G103214) + (LET (#2=#:G103215) + (COND + ((SETQ #2# (|assoc| (|devaluate| #1#) |UnivariatePolynomialCategory;AL|)) + (CDR #2#)) + (T + (SETQ |UnivariatePolynomialCategory;AL| + (|cons5| + (CONS + (|devaluate| #1#) + (SETQ #2# (|UnivariatePolynomialCategory;| #1#))) + |UnivariatePolynomialCategory;AL|)) + #2#)))) + +(DEFUN |UnivariatePolynomialCategory;| (|t#1|) + (PROG (#1=#:G103213) + (RETURN + (PROG1 + (LETT #1# + (|sublisV| + (PAIR (QUOTE (|t#1|)) (LIST (|devaluate| |t#1|))) + (|sublisV| + (PAIR + (QUOTE (#2=#:G103211 #3=#:G103212)) + (LIST + (QUOTE (|NonNegativeInteger|)) + (QUOTE (|SingletonAsOrderedSet|)))) + (COND + (|UnivariatePolynomialCategory;CAT|) + ((QUOTE T) + (LETT |UnivariatePolynomialCategory;CAT| + (|Join| + (|PolynomialCategory| + (QUOTE |t#1|) (QUOTE #2#) (QUOTE #3#)) + (|Eltable| (QUOTE |t#1|) (QUOTE |t#1|)) + (|Eltable| (QUOTE |$|) (QUOTE |$|)) + (|DifferentialRing|) + (|DifferentialExtension| (QUOTE |t#1|)) + (|mkCategory| + (QUOTE |domain|) + (QUOTE ( + ((|vectorise| + ((|Vector| |t#1|) |$| (|NonNegativeInteger|))) T) + ((|makeSUP| + ((|SparseUnivariatePolynomial| |t#1|) |$|)) T) + ((|unmakeSUP| + (|$| (|SparseUnivariatePolynomial| |t#1|))) T) + ((|multiplyExponents| + (|$| |$| (|NonNegativeInteger|))) T) + ((|divideExponents| + ((|Union| |$| "failed") + |$| + (|NonNegativeInteger|))) T) + ((|monicDivide| + ((|Record| + (|:| |quotient| |$|) + (|:| |remainder| |$|)) + |$| + |$|)) T) + ((|karatsubaDivide| + ((|Record| + (|:| |quotient| |$|) + (|:| |remainder| |$|)) + |$| + (|NonNegativeInteger|))) T) + ((|shiftRight| (|$| |$| (|NonNegativeInteger|))) T) + ((|shiftLeft| (|$| |$| (|NonNegativeInteger|))) T) + ((|pseudoRemainder| (|$| |$| |$|)) T) + ((|differentiate| + (|$| |$| (|Mapping| |t#1| |t#1|) |$|)) T) + ((|discriminant| (|t#1| |$|)) + (|has| |t#1| (|CommutativeRing|))) + ((|resultant| (|t#1| |$| |$|)) + (|has| |t#1| (|CommutativeRing|))) + ((|elt| + ((|Fraction| |$|) + (|Fraction| |$|) + (|Fraction| |$|))) + (|has| |t#1| (|IntegralDomain|))) + ((|order| ((|NonNegativeInteger|) |$| |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|subResultantGcd| (|$| |$| |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|composite| ((|Union| |$| "failed") |$| |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|composite| + ((|Union| (|Fraction| |$|) "failed") + (|Fraction| |$|) + |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|pseudoQuotient| (|$| |$| |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|pseudoDivide| + ((|Record| + (|:| |coef| |t#1|) + (|:| |quotient| |$|) + (|:| |remainder| |$|)) + |$| + |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|separate| + ((|Record| + (|:| |primePart| |$|) + (|:| |commonPart| |$|)) + |$| + |$|)) + (|has| |t#1| (|GcdDomain|))) + ((|elt| (|t#1| (|Fraction| |$|) |t#1|)) + (|has| |t#1| (|Field|))) + ((|integrate| (|$| |$|)) + (|has| |t#1| + (|Algebra| (|Fraction| (|Integer|))))))) + (QUOTE ( + ((|StepThrough|) (|has| |t#1| (|StepThrough|))) + ((|Eltable| + (|Fraction| |$|) + (|Fraction| |$|)) + (|has| |t#1| (|IntegralDomain|))) + ((|EuclideanDomain|) (|has| |t#1| (|Field|))) + (|additiveValuation| (|has| |t#1| (|Field|))))) + (QUOTE ( + (|Fraction| |$|) + (|NonNegativeInteger|) + (|SparseUnivariatePolynomial| |t#1|) + (|Vector| |t#1|))) + NIL)) + . #4=(|UnivariatePolynomialCategory|)))))) + . #4#) + (SETELT #1# 0 + (LIST + (QUOTE |UnivariatePolynomialCategory|) + (|devaluate| |t#1|))))))) + +@ +\section{UPOLYC-.lsp BOOTSTRAP} +{\bf UPOLYC-} depends on {\bf UPOLYC}. We need to break this cycle to build +the algebra. So we keep a cached copy of the translated {\bf UPOLYC-} +category which we can write into the {\bf MID} directory. We compile +the lisp code and copy the {\bf UPOLYC-.o} file to the {\bf OUT} directory. +This is eventually forcibly replaced by a recompiled version. + +Note that this code is not included in the generated catdef.spad file. + +<>= + +(|/VERSIONCHECK| 2) + +(DEFUN |UPOLYC-;variables;SL;1| (|p| |$|) + (COND + ((OR + (SPADCALL |p| (QREFELT |$| 9)) + (ZEROP (SPADCALL |p| (QREFELT |$| 11)))) + NIL) + ((QUOTE T) (LIST (SPADCALL (QREFELT |$| 13)))))) + +(DEFUN |UPOLYC-;degree;SSaosNni;2| (|p| |v| |$|) + (SPADCALL |p| (QREFELT |$| 11))) + +(DEFUN |UPOLYC-;totalDegree;SLNni;3| (|p| |lv| |$|) + (COND ((NULL |lv|) 0) ((QUOTE T) (SPADCALL |p| (QREFELT |$| 17))))) + +(DEFUN |UPOLYC-;degree;SLL;4| (|p| |lv| |$|) + (COND ((NULL |lv|) NIL) ((QUOTE T) (LIST (SPADCALL |p| (QREFELT |$| 11)))))) + +(DEFUN |UPOLYC-;eval;SLLS;5| (|p| |lv| |lq| |$|) + (COND + ((NULL |lv|) |p|) + ((NULL (NULL (CDR |lv|))) + (|error| "can only eval a univariate polynomial once")) + ((QUOTE T) + (SPADCALL |p| (|SPADfirst| |lv|) (|SPADfirst| |lq|) (QREFELT |$| 21))))) + +(DEFUN |UPOLYC-;eval;SSaos2S;6| (|p| |v| |q| |$|) + (SPADCALL |p| |q| (QREFELT |$| 24))) + +(DEFUN |UPOLYC-;eval;SLLS;7| (|p| |lv| |lr| |$|) + (COND + ((NULL |lv|) |p|) + ((NULL (NULL (CDR |lv|))) + (|error| "can only eval a univariate polynomial once")) + ((QUOTE T) + (SPADCALL |p| (|SPADfirst| |lv|) (|SPADfirst| |lr|) (QREFELT |$| 26))))) + +(DEFUN |UPOLYC-;eval;SSaosRS;8| (|p| |v| |r| |$|) + (SPADCALL (SPADCALL |p| |r| (QREFELT |$| 29)) (QREFELT |$| 30))) + +(DEFUN |UPOLYC-;eval;SLS;9| (|p| |le| |$|) + (COND + ((NULL |le|) |p|) + ((NULL (NULL (CDR |le|))) + (|error| "can only eval a univariate polynomial once")) + ((QUOTE T) + (COND + ((QEQCAR + (SPADCALL + (SPADCALL (|SPADfirst| |le|) (QREFELT |$| 33)) + (QREFELT |$| 35)) + 1) + |p|) + ((QUOTE T) + (SPADCALL |p| + (SPADCALL (|SPADfirst| |le|) (QREFELT |$| 36)) + (QREFELT |$| 24))))))) + +(DEFUN |UPOLYC-;mainVariable;SU;10| (|p| |$|) + (COND + ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) (CONS 1 "failed")) + ((QUOTE T) (CONS 0 (SPADCALL (QREFELT |$| 13)))))) + +(DEFUN |UPOLYC-;minimumDegree;SSaosNni;11| (|p| |v| |$|) + (SPADCALL |p| (QREFELT |$| 40))) + +(DEFUN |UPOLYC-;minimumDegree;SLL;12| (|p| |lv| |$|) + (COND ((NULL |lv|) NIL) ((QUOTE T) (LIST (SPADCALL |p| (QREFELT |$| 40)))))) + +(DEFUN |UPOLYC-;monomial;SSaosNniS;13| (|p| |v| |n| |$|) + (SPADCALL + (CONS (FUNCTION |UPOLYC-;monomial;SSaosNniS;13!0|) (VECTOR |$| |n|)) + |p| + (QREFELT |$| 45))) + +(DEFUN |UPOLYC-;monomial;SSaosNniS;13!0| (|#1| |$$|) + (SPADCALL |#1| (QREFELT |$$| 1) (QREFELT (QREFELT |$$| 0) 43))) + +(DEFUN |UPOLYC-;coerce;SaosS;14| (|v| |$|) + (SPADCALL (|spadConstant| |$| 48) 1 (QREFELT |$| 49))) + +(DEFUN |UPOLYC-;makeSUP;SSup;15| (|p| |$|) + (COND + ((SPADCALL |p| (QREFELT |$| 9)) (|spadConstant| |$| 52)) + ((QUOTE T) + (SPADCALL + (SPADCALL + (SPADCALL |p| (QREFELT |$| 53)) + (SPADCALL |p| (QREFELT |$| 11)) + (QREFELT |$| 54)) + (SPADCALL + (SPADCALL |p| (QREFELT |$| 55)) + (QREFELT |$| 56)) + (QREFELT |$| 57))))) + +(DEFUN |UPOLYC-;unmakeSUP;SupS;16| (|sp| |$|) + (COND + ((SPADCALL |sp| (QREFELT |$| 59)) (|spadConstant| |$| 60)) + ((QUOTE T) + (SPADCALL + (SPADCALL + (SPADCALL |sp| (QREFELT |$| 61)) + (SPADCALL |sp| (QREFELT |$| 62)) + (QREFELT |$| 49)) + (SPADCALL (SPADCALL |sp| (QREFELT |$| 63)) (QREFELT |$| 64)) + (QREFELT |$| 65))))) + +(DEFUN |UPOLYC-;karatsubaDivide;SNniR;17| (|p| |n| |$|) + (SPADCALL |p| + (SPADCALL (|spadConstant| |$| 48) |n| (QREFELT |$| 49)) + (QREFELT |$| 68))) + +(DEFUN |UPOLYC-;shiftRight;SNniS;18| (|p| |n| |$|) + (QCAR + (SPADCALL |p| + (SPADCALL (|spadConstant| |$| 48) |n| (QREFELT |$| 49)) + (QREFELT |$| 68)))) + +(DEFUN |UPOLYC-;shiftLeft;SNniS;19| (|p| |n| |$|) + (SPADCALL |p| + (SPADCALL (|spadConstant| |$| 48) |n| (QREFELT |$| 49)) (QREFELT |$| 71))) + +(DEFUN |UPOLYC-;solveLinearPolynomialEquation;LSupU;20| (|lpp| |pp| |$|) + (SPADCALL |lpp| |pp| (QREFELT |$| 77))) + +(DEFUN |UPOLYC-;factorPolynomial;SupF;21| (|pp| |$|) + (SPADCALL |pp| (QREFELT |$| 83))) + +(DEFUN |UPOLYC-;factorSquareFreePolynomial;SupF;22| (|pp| |$|) + (SPADCALL |pp| (QREFELT |$| 86))) + +(DEFUN |UPOLYC-;factor;SF;23| (|p| |$|) + (PROG (|ansR| #1=#:G103310 |w| #2=#:G103311) + (RETURN + (SEQ + (COND + ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) + (SEQ + (LETT |ansR| + (SPADCALL + (SPADCALL |p| (QREFELT |$| 53)) + (QREFELT |$| 89)) + |UPOLYC-;factor;SF;23|) + (EXIT + (SPADCALL + (SPADCALL + (SPADCALL |ansR| (QREFELT |$| 91)) + (QREFELT |$| 30)) + (PROGN + (LETT #1# NIL |UPOLYC-;factor;SF;23|) + (SEQ + (LETT |w| NIL |UPOLYC-;factor;SF;23|) + (LETT #2# + (SPADCALL |ansR| (QREFELT |$| 95)) + |UPOLYC-;factor;SF;23|) + G190 + (COND + ((OR + (ATOM #2#) + (PROGN + (LETT |w| (CAR #2#) |UPOLYC-;factor;SF;23|) + NIL)) + (GO G191))) + (SEQ + (EXIT + (LETT #1# + (CONS + (VECTOR + (QVELT |w| 0) + (SPADCALL (QVELT |w| 1) (QREFELT |$| 30)) + (QVELT |w| 2)) + #1#) + |UPOLYC-;factor;SF;23|))) + (LETT #2# (CDR #2#) |UPOLYC-;factor;SF;23|) + (GO G190) + G191 + (EXIT (NREVERSE0 #1#)))) + (QREFELT |$| 99))))) + ((QUOTE T) + (SPADCALL + (ELT |$| 64) + (SPADCALL (SPADCALL |p| (QREFELT |$| 56)) (QREFELT |$| 100)) + (QREFELT |$| 104)))))))) + +(DEFUN |UPOLYC-;vectorise;SNniV;24| (|p| |n| |$|) + (PROG (|v| |m| |i| #1=#:G103316 #2=#:G103312) + (RETURN + (SEQ + (LETT |m| + (SPADCALL + (LETT |v| + (SPADCALL |n| (|spadConstant| |$| 106) (QREFELT |$| 108)) + |UPOLYC-;vectorise;SNniV;24|) + (QREFELT |$| 110)) + |UPOLYC-;vectorise;SNniV;24|) + (SEQ + (LETT |i| + (SPADCALL |v| (QREFELT |$| 110)) + |UPOLYC-;vectorise;SNniV;24|) + (LETT #1# (QVSIZE |v|) |UPOLYC-;vectorise;SNniV;24|) + G190 + (COND ((|>| |i| #1#) (GO G191))) + (SEQ + (EXIT + (SPADCALL |v| |i| + (SPADCALL |p| + (PROG1 + (LETT #2# (|-| |i| |m|) |UPOLYC-;vectorise;SNniV;24|) + (|check-subtype| + (|>=| #2# 0) + (QUOTE (|NonNegativeInteger|)) + #2#)) + (QREFELT |$| 111)) + (QREFELT |$| 112)))) + (LETT |i| (|+| |i| 1) |UPOLYC-;vectorise;SNniV;24|) + (GO G190) + G191 + (EXIT NIL)) + (EXIT |v|))))) + +(DEFUN |UPOLYC-;retract;SR;25| (|p| |$|) + (COND + ((SPADCALL |p| (QREFELT |$| 9)) (|spadConstant| |$| 106)) + ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) (SPADCALL |p| (QREFELT |$| 53))) + ((QUOTE T) (|error| "Polynomial is not of degree 0")))) + +(DEFUN |UPOLYC-;retractIfCan;SU;26| (|p| |$|) + (COND + ((SPADCALL |p| (QREFELT |$| 9)) (CONS 0 (|spadConstant| |$| 106))) + ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) + (CONS 0 (SPADCALL |p| (QREFELT |$| 53)))) + ((QUOTE T) (CONS 1 "failed")))) + +(DEFUN |UPOLYC-;init;S;27| (|$|) + (SPADCALL (|spadConstant| |$| 117) (QREFELT |$| 30))) + +(DEFUN |UPOLYC-;nextItemInner| (|n| |$|) + (PROG (|nn| |n1| |n2| #1=#:G103337 |n3|) + (RETURN + (SEQ + (COND + ((SPADCALL |n| (QREFELT |$| 9)) + (CONS + 0 + (SPADCALL + (PROG2 + (LETT #1# + (SPADCALL (|spadConstant| |$| 106) (QREFELT |$| 120)) + |UPOLYC-;nextItemInner|) + (QCDR #1#) + (|check-union| (QEQCAR #1# 0) (QREFELT |$| 7) #1#)) + (QREFELT |$| 30)))) + ((ZEROP (SPADCALL |n| (QREFELT |$| 11))) + (SEQ + (LETT |nn| + (SPADCALL (SPADCALL |n| (QREFELT |$| 53)) (QREFELT |$| 120)) + |UPOLYC-;nextItemInner|) + (EXIT + (COND + ((QEQCAR |nn| 1) (CONS 1 "failed")) + ((QUOTE T) + (CONS 0 (SPADCALL (QCDR |nn|) (QREFELT |$| 30)))))))) + ((QUOTE T) + (SEQ + (LETT |n1| + (SPADCALL |n| (QREFELT |$| 55)) + |UPOLYC-;nextItemInner|) + (LETT |n2| + (|UPOLYC-;nextItemInner| |n1| |$|) + |UPOLYC-;nextItemInner|) + (EXIT + (COND + ((QEQCAR |n2| 0) + (CONS + 0 + (SPADCALL + (SPADCALL + (SPADCALL |n| (QREFELT |$| 53)) + (SPADCALL |n| (QREFELT |$| 11)) + (QREFELT |$| 49)) + (QCDR |n2|) + (QREFELT |$| 65)))) + ((|<| + (|+| 1 (SPADCALL |n1| (QREFELT |$| 11))) + (SPADCALL |n| (QREFELT |$| 11))) + (CONS + 0 + (SPADCALL + (SPADCALL + (SPADCALL |n| (QREFELT |$| 53)) + (SPADCALL |n| (QREFELT |$| 11)) + (QREFELT |$| 49)) + (SPADCALL + (PROG2 + (LETT #1# + (SPADCALL + (|spadConstant| |$| 117) + (QREFELT |$| 120)) + |UPOLYC-;nextItemInner|) + (QCDR #1#) + (|check-union| (QEQCAR #1# 0) (QREFELT |$| 7) #1#)) + (|+| 1 (SPADCALL |n1| (QREFELT |$| 11))) + (QREFELT |$| 49)) + (QREFELT |$| 65)))) + ((QUOTE T) + (SEQ + (LETT |n3| + (SPADCALL + (SPADCALL |n| (QREFELT |$| 53)) + (QREFELT |$| 120)) + |UPOLYC-;nextItemInner|) + (EXIT + (COND + ((QEQCAR |n3| 1) (CONS 1 "failed")) + ((QUOTE T) + (CONS + 0 + (SPADCALL + (QCDR |n3|) + (SPADCALL |n| (QREFELT |$| 11)) + (QREFELT |$| 49))))))))))))))))) + +(DEFUN |UPOLYC-;nextItem;SU;29| (|n| |$|) + (PROG (|n1| #1=#:G103350) + (RETURN + (SEQ + (LETT |n1| (|UPOLYC-;nextItemInner| |n| |$|) |UPOLYC-;nextItem;SU;29|) + (EXIT + (COND + ((QEQCAR |n1| 1) + (CONS + 0 + (SPADCALL + (PROG2 + (LETT #1# + (SPADCALL (|spadConstant| |$| 117) (QREFELT |$| 120)) + |UPOLYC-;nextItem;SU;29|) + (QCDR #1#) + (|check-union| (QEQCAR #1# 0) (QREFELT |$| 7) #1#)) + (|+| 1 (SPADCALL |n| (QREFELT |$| 11))) + (QREFELT |$| 49)))) + ((QUOTE T) |n1|))))))) + +(DEFUN |UPOLYC-;content;SSaosS;30| (|p| |v| |$|) + (SPADCALL (SPADCALL |p| (QREFELT |$| 123)) (QREFELT |$| 30))) + +(DEFUN |UPOLYC-;primeFactor| (|p| |q| |$|) + (PROG (#1=#:G103356 |p1|) + (RETURN + (SEQ + (LETT |p1| + (PROG2 + (LETT #1# + (SPADCALL |p| + (SPADCALL |p| |q| (QREFELT |$| 125)) + (QREFELT |$| 126)) + |UPOLYC-;primeFactor|) + (QCDR #1#) + (|check-union| (QEQCAR #1# 0) (QREFELT |$| 6) #1#)) + |UPOLYC-;primeFactor|) + (EXIT + (COND + ((SPADCALL |p1| |p| (QREFELT |$| 127)) |p|) + ((QUOTE T) (|UPOLYC-;primeFactor| |p1| |q| |$|)))))))) + +(DEFUN |UPOLYC-;separate;2SR;32| (|p| |q| |$|) + (PROG (|a| #1=#:G103362) + (RETURN + (SEQ + (LETT |a| + (|UPOLYC-;primeFactor| |p| |q| |$|) + |UPOLYC-;separate;2SR;32|) + (EXIT + (CONS + |a| + (PROG2 + (LETT #1# + (SPADCALL |p| |a| (QREFELT |$| 126)) + |UPOLYC-;separate;2SR;32|) + (QCDR #1#) + (|check-union| (QEQCAR #1# 0) (QREFELT |$| 6) #1#)))))))) + +(DEFUN |UPOLYC-;differentiate;SM2S;33| (|x| |deriv| |x'| |$|) + (PROG (|dg| |lc| #1=#:G103367 |d|) + (RETURN + (SEQ + (LETT |d| (|spadConstant| |$| 60) |UPOLYC-;differentiate;SM2S;33|) + (SEQ G190 + (COND + ((NULL + (|<| 0 + (LETT |dg| + (SPADCALL |x| (QREFELT |$| 11)) + |UPOLYC-;differentiate;SM2S;33|))) + (GO G191))) + (SEQ + (LETT |lc| + (SPADCALL |x| (QREFELT |$| 53)) + |UPOLYC-;differentiate;SM2S;33|) + (LETT |d| + (SPADCALL + (SPADCALL |d| + (SPADCALL |x'| + (SPADCALL + (SPADCALL |dg| |lc| (QREFELT |$| 131)) + (PROG1 + (LETT #1# (|-| |dg| 1) |UPOLYC-;differentiate;SM2S;33|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) + #1#)) + (QREFELT |$| 49)) + (QREFELT |$| 71)) + (QREFELT |$| 65)) + (SPADCALL + (SPADCALL |lc| |deriv|) + |dg| + (QREFELT |$| 49)) + (QREFELT |$| 65)) + |UPOLYC-;differentiate;SM2S;33|) + (EXIT + (LETT |x| + (SPADCALL |x| (QREFELT |$| 55)) + |UPOLYC-;differentiate;SM2S;33|))) + NIL + (GO G190) + G191 + (EXIT NIL)) + (EXIT + (SPADCALL |d| + (SPADCALL + (SPADCALL + (SPADCALL |x| (QREFELT |$| 53)) + |deriv|) + (QREFELT |$| 30)) + (QREFELT |$| 65))))))) + +(DEFUN |UPOLYC-;ncdiff| (|n| |x'| |$|) + (PROG (#1=#:G103385 |n1|) + (RETURN + (COND + ((ZEROP |n|) (|spadConstant| |$| 60)) + ((ZEROP + (LETT |n1| + (PROG1 + (LETT #1# (|-| |n| 1) |UPOLYC-;ncdiff|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) + #1#)) + |UPOLYC-;ncdiff|)) + |x'|) + ((QUOTE T) + (SPADCALL + (SPADCALL |x'| + (SPADCALL (|spadConstant| |$| 48) |n1| (QREFELT |$| 49)) + (QREFELT |$| 71)) + (SPADCALL + (SPADCALL (|spadConstant| |$| 48) 1 (QREFELT |$| 49)) + (|UPOLYC-;ncdiff| |n1| |x'| |$|) + (QREFELT |$| 71)) + (QREFELT |$| 65))))))) + +(DEFUN |UPOLYC-;differentiate;SM2S;35| (|x| |deriv| |x'| |$|) + (PROG (|dg| |lc| |d|) + (RETURN + (SEQ + (LETT |d| (|spadConstant| |$| 60) |UPOLYC-;differentiate;SM2S;35|) + (SEQ G190 + (COND + ((NULL + (|<| 0 + (LETT |dg| + (SPADCALL |x| (QREFELT |$| 11)) + |UPOLYC-;differentiate;SM2S;35|))) + (GO G191))) + (SEQ + (LETT |lc| + (SPADCALL |x| (QREFELT |$| 53)) + |UPOLYC-;differentiate;SM2S;35|) + (LETT |d| + (SPADCALL + (SPADCALL |d| + (SPADCALL + (SPADCALL |lc| |deriv|) + |dg| + (QREFELT |$| 49)) + (QREFELT |$| 65)) + (SPADCALL |lc| + (|UPOLYC-;ncdiff| |dg| |x'| |$|) + (QREFELT |$| 134)) + (QREFELT |$| 65)) + |UPOLYC-;differentiate;SM2S;35|) + (EXIT + (LETT |x| + (SPADCALL |x| (QREFELT |$| 55)) + |UPOLYC-;differentiate;SM2S;35|))) + NIL + (GO G190) + G191 + (EXIT NIL)) + (EXIT + (SPADCALL |d| + (SPADCALL + (SPADCALL (SPADCALL |x| (QREFELT |$| 53)) |deriv|) + (QREFELT |$| 30)) + (QREFELT |$| 65))))))) + +(DEFUN |UPOLYC-;differentiate;SMS;36| (|x| |deriv| |$|) + (SPADCALL |x| |deriv| (|spadConstant| |$| 47) (QREFELT |$| 135))) + +(DEFUN |UPOLYC-;differentiate;2S;37| (|x| |$|) + (PROG (|dg| #1=#:G103394 |d|) + (RETURN + (SEQ + (LETT |d| (|spadConstant| |$| 60) |UPOLYC-;differentiate;2S;37|) + (SEQ G190 + (COND + ((NULL + (|<| 0 + (LETT |dg| + (SPADCALL |x| (QREFELT |$| 11)) + |UPOLYC-;differentiate;2S;37|))) + (GO G191))) + (SEQ + (LETT |d| + (SPADCALL |d| + (SPADCALL + (SPADCALL |dg| + (SPADCALL |x| (QREFELT |$| 53)) (QREFELT |$| 131)) + (PROG1 + (LETT #1# (|-| |dg| 1) |UPOLYC-;differentiate;2S;37|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) + #1#)) + (QREFELT |$| 49)) + (QREFELT |$| 65)) + |UPOLYC-;differentiate;2S;37|) + (EXIT + (LETT |x| + (SPADCALL |x| (QREFELT |$| 55)) + |UPOLYC-;differentiate;2S;37|))) + NIL + (GO G190) + G191 + (EXIT NIL)) + (EXIT |d|))))) + +(DEFUN |UPOLYC-;differentiate;SSaosS;38| (|x| |v| |$|) + (SPADCALL |x| (QREFELT |$| 138))) + +(DEFUN |UPOLYC-;elt;3F;39| (|g| |f| |$|) + (SPADCALL + (SPADCALL + (SPADCALL |g| (QREFELT |$| 141)) + |f| + (QREFELT |$| 143)) + (SPADCALL (SPADCALL |g| (QREFELT |$| 144)) |f| (QREFELT |$| 143)) + (QREFELT |$| 145))) + +(DEFUN |UPOLYC-;pseudoQuotient;3S;40| (|p| |q| |$|) + (PROG (|n| #1=#:G103440 #2=#:G103442) + (RETURN + (SEQ + (LETT |n| + (|+| + (|-| + (SPADCALL |p| (QREFELT |$| 11)) + (SPADCALL |q| (QREFELT |$| 11))) 1) + |UPOLYC-;pseudoQuotient;3S;40|) + (EXIT + (COND + ((|<| |n| 1) (|spadConstant| |$| 60)) + ((QUOTE T) + (PROG2 + (LETT #2# + (SPADCALL + (SPADCALL + (SPADCALL + (SPADCALL + (SPADCALL |q| (QREFELT |$| 53)) + (PROG1 + (LETT #1# |n| |UPOLYC-;pseudoQuotient;3S;40|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) + #1#)) + (QREFELT |$| 147)) + |p| + (QREFELT |$| 134)) + (SPADCALL |p| |q| (QREFELT |$| 148)) + (QREFELT |$| 149)) + |q| + (QREFELT |$| 126)) + |UPOLYC-;pseudoQuotient;3S;40|) + (QCDR #2#) + (|check-union| (QEQCAR #2# 0) (QREFELT |$| 6) #2#))))))))) + +(DEFUN |UPOLYC-;pseudoDivide;2SR;41| (|p| |q| |$|) + (PROG (|n| |prem| #1=#:G103448 |lc| #2=#:G103450) + (RETURN + (SEQ + (LETT |n| + (|+| + (|-| + (SPADCALL |p| (QREFELT |$| 11)) + (SPADCALL |q| (QREFELT |$| 11))) 1) + |UPOLYC-;pseudoDivide;2SR;41|) + (EXIT + (COND + ((|<| |n| 1) + (VECTOR (|spadConstant| |$| 48) (|spadConstant| |$| 60) |p|)) + ((QUOTE T) + (SEQ + (LETT |prem| + (SPADCALL |p| |q| (QREFELT |$| 148)) + |UPOLYC-;pseudoDivide;2SR;41|) + (LETT |lc| + (SPADCALL + (SPADCALL |q| (QREFELT |$| 53)) + (PROG1 + (LETT #1# |n| |UPOLYC-;pseudoDivide;2SR;41|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) #1#)) + (QREFELT |$| 147)) + |UPOLYC-;pseudoDivide;2SR;41|) + (EXIT + (VECTOR |lc| + (PROG2 + (LETT #2# + (SPADCALL + (SPADCALL + (SPADCALL |lc| |p| (QREFELT |$| 134)) + |prem| + (QREFELT |$| 149)) + |q| + (QREFELT |$| 126)) + |UPOLYC-;pseudoDivide;2SR;41|) + (QCDR #2#) + (|check-union| (QEQCAR #2# 0) (QREFELT |$| 6) #2#)) + |prem|)))))))))) + +(DEFUN |UPOLYC-;composite;FSU;42| (|f| |q| |$|) + (PROG (|n| |d|) + (RETURN + (SEQ + (LETT |n| + (SPADCALL (SPADCALL |f| (QREFELT |$| 141)) |q| (QREFELT |$| 153)) + |UPOLYC-;composite;FSU;42|) + (EXIT + (COND + ((QEQCAR |n| 1) (CONS 1 "failed")) + ((QUOTE T) + (SEQ + (LETT |d| + (SPADCALL + (SPADCALL |f| (QREFELT |$| 144)) |q| (QREFELT |$| 153)) + |UPOLYC-;composite;FSU;42|) + (EXIT + (COND + ((QEQCAR |d| 1) (CONS 1 "failed")) + ((QUOTE T) + (CONS + 0 + (SPADCALL + (QCDR |n|) + (QCDR |d|) + (QREFELT |$| 154)))))))))))))) + +(DEFUN |UPOLYC-;composite;2SU;43| (|p| |q| |$|) + (PROG (|cqr| |v| |u| |w| #1=#:G103476) + (RETURN + (SEQ + (COND + ((SPADCALL |p| (QREFELT |$| 157)) (CONS 0 |p|)) + ((QUOTE T) + (SEQ + (EXIT + (SEQ + (LETT |cqr| + (SPADCALL |p| |q| (QREFELT |$| 158)) + |UPOLYC-;composite;2SU;43|) + (COND + ((SPADCALL (QVELT |cqr| 2) (QREFELT |$| 157)) + (SEQ + (LETT |v| + (SPADCALL + (QVELT |cqr| 2) + (QVELT |cqr| 0) + (QREFELT |$| 159)) + |UPOLYC-;composite;2SU;43|) + (EXIT + (COND + ((QEQCAR |v| 0) + (SEQ + (LETT |u| + (SPADCALL + (QVELT |cqr| 1) + |q| + (QREFELT |$| 153)) + |UPOLYC-;composite;2SU;43|) + (EXIT + (COND + ((QEQCAR |u| 0) + (SEQ + (LETT |w| + (SPADCALL + (QCDR |u|) + (QVELT |cqr| 0) + (QREFELT |$| 159)) + |UPOLYC-;composite;2SU;43|) + (EXIT + (COND + ((QEQCAR |w| 0) + (PROGN + (LETT #1# + (CONS + 0 + (SPADCALL + (QCDR |v|) + (SPADCALL + (SPADCALL + (|spadConstant| |$| 48) + 1 + (QREFELT |$| 49)) + (QCDR |w|) + (QREFELT |$| 71)) + (QREFELT |$| 65))) + |UPOLYC-;composite;2SU;43|) + (GO #1#)))))))))))))))) + (EXIT (CONS 1 "failed")))) + #1# + (EXIT #1#)))))))) + +(DEFUN |UPOLYC-;elt;S2F;44| (|p| |f| |$|) + (PROG (|n| #1=#:G103483 |ans|) + (RETURN + (SEQ + (COND + ((SPADCALL |p| (QREFELT |$| 9)) (|spadConstant| |$| 161)) + ((QUOTE T) + (SEQ + (LETT |ans| + (SPADCALL + (SPADCALL (SPADCALL |p| (QREFELT |$| 53)) (QREFELT |$| 30)) + (QREFELT |$| 162)) + |UPOLYC-;elt;S2F;44|) + (LETT |n| (SPADCALL |p| (QREFELT |$| 11)) |UPOLYC-;elt;S2F;44|) + (SEQ G190 + (COND + ((NULL + (COND + ((SPADCALL + (LETT |p| + (SPADCALL |p| (QREFELT |$| 55)) + |UPOLYC-;elt;S2F;44|) + (QREFELT |$| 9)) + (QUOTE NIL)) + ((QUOTE T) (QUOTE T)))) + (GO G191))) + (SEQ + (EXIT + (LETT |ans| + (SPADCALL + (SPADCALL |ans| + (SPADCALL |f| + (PROG1 + (LETT #1# + (|-| |n| + (LETT |n| + (SPADCALL |p| (QREFELT |$| 11)) + |UPOLYC-;elt;S2F;44|)) + |UPOLYC-;elt;S2F;44|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) + #1#)) + (QREFELT |$| 163)) + (QREFELT |$| 164)) + (SPADCALL + (SPADCALL + (SPADCALL |p| (QREFELT |$| 53)) + (QREFELT |$| 30)) + (QREFELT |$| 162)) + (QREFELT |$| 165)) + |UPOLYC-;elt;S2F;44|))) + NIL + (GO G190) + G191 + (EXIT NIL)) + (EXIT + (COND + ((ZEROP |n|) |ans|) + ((QUOTE T) + (SPADCALL |ans| + (SPADCALL |f| |n| (QREFELT |$| 166)) + (QREFELT |$| 164)))))))))))) + +(DEFUN |UPOLYC-;order;2SNni;45| (|p| |q| |$|) + (PROG (|u| #1=#:G103497 |ans|) + (RETURN + (SEQ + (EXIT + (COND + ((SPADCALL |p| (QREFELT |$| 9)) + (|error| "order: arguments must be nonzero")) + ((|<| (SPADCALL |q| (QREFELT |$| 11)) 1) + (|error| "order: place must be non-trivial")) + ((QUOTE T) + (SEQ + (LETT |ans| 0 |UPOLYC-;order;2SNni;45|) + (EXIT + (SEQ G190 + NIL + (SEQ + (LETT |u| + (SPADCALL |p| |q| (QREFELT |$| 126)) + |UPOLYC-;order;2SNni;45|) + (EXIT + (COND + ((QEQCAR |u| 1) + (PROGN + (LETT #1# |ans| |UPOLYC-;order;2SNni;45|) + (GO #1#))) + ((QUOTE T) + (SEQ + (LETT |p| (QCDR |u|) |UPOLYC-;order;2SNni;45|) + (EXIT + (LETT + |ans| + (|+| |ans| 1) + |UPOLYC-;order;2SNni;45|))))))) + NIL + (GO G190) + G191 + (EXIT NIL))))))) + #1# + (EXIT #1#))))) + +(DEFUN |UPOLYC-;squareFree;SF;46| (|p| |$|) + (SPADCALL |p| (QREFELT |$| 170))) + +(DEFUN |UPOLYC-;squareFreePart;2S;47| (|p| |$|) + (SPADCALL |p| (QREFELT |$| 172))) + +(DEFUN |UPOLYC-;gcdPolynomial;3Sup;48| (|pp| |qq| |$|) + (COND + ((SPADCALL |pp| (QREFELT |$| 174)) (SPADCALL |qq| (QREFELT |$| 175))) + ((SPADCALL |qq| (QREFELT |$| 174)) (SPADCALL |pp| (QREFELT |$| 175))) + ((QUOTE T) + (SPADCALL + (SPADCALL + (SPADCALL + (SPADCALL |pp| (QREFELT |$| 176)) + (SPADCALL |qq| (QREFELT |$| 176)) (QREFELT |$| 125)) + (SPADCALL + (SPADCALL + (SPADCALL |pp| (QREFELT |$| 177)) + (SPADCALL |qq| (QREFELT |$| 177)) (QREFELT |$| 178)) + (QREFELT |$| 177)) + (QREFELT |$| 179)) + (QREFELT |$| 175))))) + +(DEFUN |UPOLYC-;squareFreePolynomial;SupF;49| (|pp| |$|) + (SPADCALL |pp| (QREFELT |$| 182))) + +(DEFUN |UPOLYC-;elt;F2R;50| (|f| |r| |$|) + (SPADCALL + (SPADCALL + (SPADCALL |f| (QREFELT |$| 141)) + |r| + (QREFELT |$| 29)) + (SPADCALL (SPADCALL |f| (QREFELT |$| 144)) |r| (QREFELT |$| 29)) + (QREFELT |$| 184))) + +(DEFUN |UPOLYC-;euclideanSize;SNni;51| (|x| |$|) + (COND + ((SPADCALL |x| (QREFELT |$| 9)) + (|error| "euclideanSize called on 0 in Univariate Polynomial")) + ((QUOTE T) (SPADCALL |x| (QREFELT |$| 11))))) + +(DEFUN |UPOLYC-;divide;2SR;52| (|x| |y| |$|) + (PROG (|lc| |f| #1=#:G103510 |n| |quot|) + (RETURN + (SEQ + (COND + ((SPADCALL |y| (QREFELT |$| 9)) + (|error| "division by 0 in Univariate Polynomials")) + ((QUOTE T) + (SEQ + (LETT |quot| (|spadConstant| |$| 60) |UPOLYC-;divide;2SR;52|) + (LETT |lc| + (SPADCALL (SPADCALL |y| (QREFELT |$| 53)) (QREFELT |$| 187)) + |UPOLYC-;divide;2SR;52|) + (SEQ G190 + (COND + ((NULL + (COND + ((OR + (SPADCALL |x| (QREFELT |$| 9)) + (|<| + (SPADCALL |x| (QREFELT |$| 11)) + (SPADCALL |y| (QREFELT |$| 11)))) + (QUOTE NIL)) ((QUOTE T) (QUOTE T)))) + (GO G191))) + (SEQ + (LETT |f| + (SPADCALL |lc| + (SPADCALL |x| (QREFELT |$| 53)) + (QREFELT |$| 188)) + |UPOLYC-;divide;2SR;52|) + (LETT |n| + (PROG1 + (LETT #1# + (|-| + (SPADCALL |x| (QREFELT |$| 11)) + (SPADCALL |y| (QREFELT |$| 11))) + |UPOLYC-;divide;2SR;52|) + (|check-subtype| + (|>=| #1# 0) + (QUOTE (|NonNegativeInteger|)) + #1#)) + |UPOLYC-;divide;2SR;52|) + (LETT |quot| + (SPADCALL |quot| + (SPADCALL |f| |n| (QREFELT |$| 49)) + (QREFELT |$| 65)) + |UPOLYC-;divide;2SR;52|) + (EXIT + (LETT |x| + (SPADCALL |x| + (SPADCALL + (SPADCALL |f| |n| (QREFELT |$| 49)) + |y| + (QREFELT |$| 71)) + (QREFELT |$| 149)) + |UPOLYC-;divide;2SR;52|))) + NIL + (GO G190) + G191 + (EXIT NIL)) + (EXIT (CONS |quot| |x|))))))))) + +(DEFUN |UPOLYC-;integrate;2S;53| (|p| |$|) + (PROG (|l| |d| |ans|) + (RETURN + (SEQ + (LETT |ans| (|spadConstant| |$| 60) |UPOLYC-;integrate;2S;53|) + (SEQ G190 + (COND + ((NULL + (COND + ((SPADCALL |p| (|spadConstant| |$| 60) (QREFELT |$| 127)) + (QUOTE NIL)) + ((QUOTE T) (QUOTE T)))) (GO G191))) + (SEQ + (LETT |l| + (SPADCALL |p| (QREFELT |$| 53)) + |UPOLYC-;integrate;2S;53|) + (LETT |d| + (|+| 1 (SPADCALL |p| (QREFELT |$| 11))) + |UPOLYC-;integrate;2S;53|) + (LETT |ans| + (SPADCALL |ans| + (SPADCALL + (SPADCALL (SPADCALL |d| (QREFELT |$| 191)) (QREFELT |$| 192)) + (SPADCALL |l| |d| (QREFELT |$| 49)) (QREFELT |$| 193)) + (QREFELT |$| 65)) + |UPOLYC-;integrate;2S;53|) + (EXIT + (LETT |p| + (SPADCALL |p| (QREFELT |$| 55)) + |UPOLYC-;integrate;2S;53|))) + NIL + (GO G190) + G191 + (EXIT NIL)) + (EXIT |ans|))))) + +(DEFUN |UnivariatePolynomialCategory&| (|#1| |#2|) + (PROG (|DV$1| |DV$2| |dv$| |$| |pv$|) + (RETURN + (PROGN + (LETT |DV$1| (|devaluate| |#1|) . #1=(|UnivariatePolynomialCategory&|)) + (LETT |DV$2| (|devaluate| |#2|) . #1#) + (LETT |dv$| + (LIST (QUOTE |UnivariatePolynomialCategory&|) |DV$1| |DV$2|) . #1#) + (LETT |$| (GETREFV 201) . #1#) + (QSETREFV |$| 0 |dv$|) + (QSETREFV |$| 3 + (LETT |pv$| + (|buildPredVector| 0 0 + (LIST + (|HasCategory| |#2| + (QUOTE (|Algebra| (|Fraction| (|Integer|))))) + (|HasCategory| |#2| (QUOTE (|Field|))) + (|HasCategory| |#2| (QUOTE (|GcdDomain|))) + (|HasCategory| |#2| (QUOTE (|IntegralDomain|))) + (|HasCategory| |#2| (QUOTE (|CommutativeRing|))) + (|HasCategory| |#2| (QUOTE (|StepThrough|))))) . #1#)) + (|stuffDomainSlots| |$|) + (QSETREFV |$| 6 |#1|) + (QSETREFV |$| 7 |#2|) + (COND + ((|HasCategory| |#2| (QUOTE (|PolynomialFactorizationExplicit|))) + (PROGN + (QSETREFV |$| 81 + (CONS + (|dispatchFunction| + |UPOLYC-;solveLinearPolynomialEquation;LSupU;20|) + |$|)) + (QSETREFV |$| 85 + (CONS + (|dispatchFunction| |UPOLYC-;factorPolynomial;SupF;21|) + |$|)) + (QSETREFV |$| 87 + (CONS + (|dispatchFunction| + |UPOLYC-;factorSquareFreePolynomial;SupF;22|) + |$|)) + (QSETREFV |$| 105 + (CONS (|dispatchFunction| |UPOLYC-;factor;SF;23|) |$|))))) + (COND + ((|testBitVector| |pv$| 6) + (PROGN + (QSETREFV |$| 118 + (CONS (|dispatchFunction| |UPOLYC-;init;S;27|) |$|)) + NIL + (QSETREFV |$| 122 + (CONS (|dispatchFunction| |UPOLYC-;nextItem;SU;29|) |$|))))) + (COND + ((|testBitVector| |pv$| 3) + (PROGN + (QSETREFV |$| 124 + (CONS (|dispatchFunction| |UPOLYC-;content;SSaosS;30|) |$|)) + NIL + (QSETREFV |$| 129 + (CONS (|dispatchFunction| |UPOLYC-;separate;2SR;32|) |$|))))) + (COND + ((|testBitVector| |pv$| 5) + (QSETREFV |$| 133 + (CONS + (|dispatchFunction| |UPOLYC-;differentiate;SM2S;33|) + |$|))) + ((QUOTE T) + (PROGN + (QSETREFV |$| 133 + (CONS + (|dispatchFunction| |UPOLYC-;differentiate;SM2S;35|) + |$|))))) + (COND + ((|testBitVector| |pv$| 4) + (PROGN + (QSETREFV |$| 146 + (CONS (|dispatchFunction| |UPOLYC-;elt;3F;39|) |$|)) + (QSETREFV |$| 150 + (CONS (|dispatchFunction| |UPOLYC-;pseudoQuotient;3S;40|) |$|)) + (QSETREFV |$| 152 + (CONS (|dispatchFunction| |UPOLYC-;pseudoDivide;2SR;41|) |$|)) + (QSETREFV |$| 156 + (CONS (|dispatchFunction| |UPOLYC-;composite;FSU;42|) |$|)) + (QSETREFV |$| 160 + (CONS (|dispatchFunction| |UPOLYC-;composite;2SU;43|) |$|)) + (QSETREFV |$| 167 + (CONS (|dispatchFunction| |UPOLYC-;elt;S2F;44|) |$|)) + (QSETREFV |$| 168 + (CONS (|dispatchFunction| |UPOLYC-;order;2SNni;45|) |$|))))) + (COND + ((|testBitVector| |pv$| 3) + (PROGN + (QSETREFV |$| 171 + (CONS (|dispatchFunction| |UPOLYC-;squareFree;SF;46|) |$|)) + (QSETREFV |$| 173 + (CONS + (|dispatchFunction| |UPOLYC-;squareFreePart;2S;47|) + |$|))))) + (COND + ((|HasCategory| |#2| (QUOTE (|PolynomialFactorizationExplicit|))) + (PROGN + (QSETREFV |$| 180 + (CONS + (|dispatchFunction| |UPOLYC-;gcdPolynomial;3Sup;48|) + |$|)) + (QSETREFV |$| 183 + (CONS + (|dispatchFunction| |UPOLYC-;squareFreePolynomial;SupF;49|) + |$|))))) + (COND + ((|testBitVector| |pv$| 2) + (PROGN + (QSETREFV |$| 185 + (CONS (|dispatchFunction| |UPOLYC-;elt;F2R;50|) |$|)) + (QSETREFV |$| 186 + (CONS + (|dispatchFunction| |UPOLYC-;euclideanSize;SNni;51|) + |$|)) + (QSETREFV |$| 189 + (CONS (|dispatchFunction| |UPOLYC-;divide;2SR;52|) |$|))))) + (COND + ((|testBitVector| |pv$| 1) + (QSETREFV |$| 194 + (CONS + (|dispatchFunction| |UPOLYC-;integrate;2S;53|) + |$|)))) |$|)))) + +(MAKEPROP + (QUOTE |UnivariatePolynomialCategory&|) + (QUOTE |infovec|) + (LIST + (QUOTE + #(NIL NIL NIL NIL NIL NIL + (|local| |#1|) + (|local| |#2|) + (|Boolean|) + (0 . |zero?|) + (|NonNegativeInteger|) + (5 . |degree|) + (|SingletonAsOrderedSet|) + (10 . |create|) + (|List| 12) + |UPOLYC-;variables;SL;1| + |UPOLYC-;degree;SSaosNni;2| + (14 . |totalDegree|) + |UPOLYC-;totalDegree;SLNni;3| + (|List| 10) + |UPOLYC-;degree;SLL;4| + (19 . |eval|) + (|List| |$|) + |UPOLYC-;eval;SLLS;5| + (26 . |elt|) + |UPOLYC-;eval;SSaos2S;6| + (32 . |eval|) + (|List| 7) + |UPOLYC-;eval;SLLS;7| + (39 . |elt|) + (45 . |coerce|) + |UPOLYC-;eval;SSaosRS;8| + (|Equation| 6) + (50 . |lhs|) + (|Union| 12 (QUOTE "failed")) + (55 . |mainVariable|) + (60 . |rhs|) + (|List| 197) + |UPOLYC-;eval;SLS;9| + |UPOLYC-;mainVariable;SU;10| + (65 . |minimumDegree|) + |UPOLYC-;minimumDegree;SSaosNni;11| + |UPOLYC-;minimumDegree;SLL;12| + (70 . |+|) + (|Mapping| 10 10) + (76 . |mapExponents|) + |UPOLYC-;monomial;SSaosNniS;13| + (82 . |One|) + (86 . |One|) + (90 . |monomial|) + |UPOLYC-;coerce;SaosS;14| + (|SparseUnivariatePolynomial| 7) + (96 . |Zero|) + (100 . |leadingCoefficient|) + (105 . |monomial|) + (111 . |reductum|) + (116 . |makeSUP|) + (121 . |+|) + |UPOLYC-;makeSUP;SSup;15| + (127 . |zero?|) + (132 . |Zero|) + (136 . |leadingCoefficient|) + (141 . |degree|) + (146 . |reductum|) + (151 . |unmakeSUP|) + (156 . |+|) + |UPOLYC-;unmakeSUP;SupS;16| + (|Record| (|:| |quotient| |$|) (|:| |remainder| |$|)) + (162 . |monicDivide|) + |UPOLYC-;karatsubaDivide;SNniR;17| + |UPOLYC-;shiftRight;SNniS;18| + (168 . |*|) + |UPOLYC-;shiftLeft;SNniS;19| + (|Union| 74 (QUOTE "failed")) + (|List| 75) + (|SparseUnivariatePolynomial| 6) + (|PolynomialFactorizationByRecursionUnivariate| 7 6) + (174 . |solveLinearPolynomialEquationByRecursion|) + (|Union| 79 (QUOTE "failed")) + (|List| 80) + (|SparseUnivariatePolynomial| |$|) + (180 . |solveLinearPolynomialEquation|) + (|Factored| 75) + (186 . |factorByRecursion|) + (|Factored| 80) + (191 . |factorPolynomial|) + (196 . |factorSquareFreeByRecursion|) + (201 . |factorSquareFreePolynomial|) + (|Factored| |$|) + (206 . |factor|) + (|Factored| 7) + (211 . |unit|) + (|Union| (QUOTE "nil") (QUOTE "sqfr") (QUOTE "irred") (QUOTE "prime")) + (|Record| (|:| |flg| 92) (|:| |fctr| 7) (|:| |xpnt| 109)) + (|List| 93) + (216 . |factorList|) + (|Record| (|:| |flg| 92) (|:| |fctr| 6) (|:| |xpnt| 109)) + (|List| 96) + (|Factored| 6) + (221 . |makeFR|) + (227 . |factorPolynomial|) + (|Mapping| 6 51) + (|Factored| 51) + (|FactoredFunctions2| 51 6) + (232 . |map|) + (238 . |factor|) + (243 . |Zero|) + (|Vector| 7) + (247 . |new|) + (|Integer|) + (253 . |minIndex|) + (258 . |coefficient|) + (264 . |qsetelt!|) + |UPOLYC-;vectorise;SNniV;24| + |UPOLYC-;retract;SR;25| + (|Union| 7 (QUOTE "failed")) + |UPOLYC-;retractIfCan;SU;26| + (271 . |init|) + (275 . |init|) + (|Union| |$| (QUOTE "failed")) + (279 . |nextItem|) + (284 . |One|) + (288 . |nextItem|) + (293 . |content|) + (298 . |content|) + (304 . |gcd|) + (310 . |exquo|) + (316 . |=|) + (|Record| (|:| |primePart| |$|) (|:| |commonPart| |$|)) + (322 . |separate|) + (328 . |Zero|) + (332 . |*|) + (|Mapping| 7 7) + (338 . |differentiate|) + (345 . |*|) + (351 . |differentiate|) + |UPOLYC-;differentiate;SMS;36| + |UPOLYC-;differentiate;2S;37| + (358 . |differentiate|) + |UPOLYC-;differentiate;SSaosS;38| + (|Fraction| 6) + (363 . |numer|) + (|Fraction| |$|) + (368 . |elt|) + (374 . |denom|) + (379 . |/|) + (385 . |elt|) + (391 . |**|) + (397 . |pseudoRemainder|) + (403 . |-|) + (409 . |pseudoQuotient|) + (|Record| (|:| |coef| 7) (|:| |quotient| |$|) (|:| |remainder| |$|)) + (415 . |pseudoDivide|) + (421 . |composite|) + (427 . |/|) + (|Union| 142 (QUOTE "failed")) + (433 . |composite|) + (439 . |ground?|) + (444 . |pseudoDivide|) + (450 . |exquo|) + (456 . |composite|) + (462 . |Zero|) + (466 . |coerce|) + (471 . |**|) + (477 . |*|) + (483 . |+|) + (489 . |**|) + (495 . |elt|) + (501 . |order|) + (|UnivariatePolynomialSquareFree| 7 6) + (507 . |squareFree|) + (512 . |squareFree|) + (517 . |squareFreePart|) + (522 . |squareFreePart|) + (527 . |zero?|) + (532 . |unitCanonical|) + (537 . |content|) + (542 . |primitivePart|) + (547 . |subResultantGcd|) + (553 . |*|) + (559 . |gcdPolynomial|) + (|UnivariatePolynomialSquareFree| 6 75) + (565 . |squareFree|) + (570 . |squareFreePolynomial|) + (575 . |/|) + (581 . |elt|) + (587 . |euclideanSize|) + (592 . |inv|) + (597 . |*|) + (603 . |divide|) + (|Fraction| 109) + (609 . |coerce|) + (614 . |inv|) + (619 . |*|) + (625 . |integrate|) + (|Symbol|) + (|List| 195) + (|Equation| |$|) + (|Union| 109 (QUOTE "failed")) + (|Union| 190 (QUOTE "failed")) + (|OutputForm|))) + (QUOTE + #(|vectorise| 630 |variables| 636 |unmakeSUP| 641 |totalDegree| 646 + |squareFreePolynomial| 652 |squareFreePart| 657 |squareFree| 662 + |solveLinearPolynomialEquation| 667 |shiftRight| 673 |shiftLeft| 679 + |separate| 685 |retractIfCan| 691 |retract| 696 |pseudoQuotient| 701 + |pseudoDivide| 707 |order| 713 |nextItem| 719 |monomial| 724 + |minimumDegree| 731 |makeSUP| 743 |mainVariable| 748 + |karatsubaDivide| 753 |integrate| 759 |init| 764 |gcdPolynomial| 768 + |factorSquareFreePolynomial| 774 |factorPolynomial| 779 |factor| 784 + |eval| 789 |euclideanSize| 823 |elt| 828 |divide| 846 + |differentiate| 852 |degree| 876 |content| 888 |composite| 894 + |coerce| 906)) + (QUOTE NIL) + (CONS + (|makeByteWordVec2| 1 (QUOTE NIL)) + (CONS + (QUOTE #()) + (CONS + (QUOTE #()) + (|makeByteWordVec2| 194 + (QUOTE + (1 6 8 0 9 1 6 10 0 11 0 12 0 13 1 6 10 0 17 3 6 0 0 12 0 21 2 + 6 0 0 0 24 3 6 0 0 12 7 26 2 6 7 0 7 29 1 6 0 7 30 1 32 6 0 33 + 1 6 34 0 35 1 32 6 0 36 1 6 10 0 40 2 10 0 0 0 43 2 6 0 44 0 + 45 0 6 0 47 0 7 0 48 2 6 0 7 10 49 0 51 0 52 1 6 7 0 53 2 51 + 0 7 10 54 1 6 0 0 55 1 6 51 0 56 2 51 0 0 0 57 1 51 8 0 59 0 + 6 0 60 1 51 7 0 61 1 51 10 0 62 1 51 0 0 63 1 6 0 51 64 2 6 0 + 0 0 65 2 6 67 0 0 68 2 6 0 0 0 71 2 76 73 74 75 77 2 0 78 79 + 80 81 1 76 82 75 83 1 0 84 80 85 1 76 82 75 86 1 0 84 80 87 1 + 7 88 0 89 1 90 7 0 91 1 90 94 0 95 2 98 0 6 97 99 1 7 84 80 + 100 2 103 98 101 102 104 1 0 88 0 105 0 7 0 106 2 107 0 10 7 + 108 1 107 109 0 110 2 6 7 0 10 111 3 107 7 0 109 7 112 0 7 0 + 117 0 0 0 118 1 7 119 0 120 0 75 0 121 1 0 119 0 122 1 6 7 0 + 123 2 0 0 0 12 124 2 6 0 0 0 125 2 6 119 0 0 126 2 6 8 0 0 127 + 2 0 128 0 0 129 0 75 0 130 2 7 0 10 0 131 3 0 0 0 132 0 133 2 + 6 0 7 0 134 3 6 0 0 132 0 135 1 6 0 0 138 1 140 6 0 141 2 6 + 142 0 142 143 1 140 6 0 144 2 140 0 0 0 145 2 0 142 142 142 + 146 2 7 0 0 10 147 2 6 0 0 0 148 2 6 0 0 0 149 2 0 0 0 0 150 + 2 0 151 0 0 152 2 6 119 0 0 153 2 140 0 6 6 154 2 0 155 142 0 + 156 1 6 8 0 157 2 6 151 0 0 158 2 6 119 0 7 159 2 0 119 0 0 + 160 0 140 0 161 1 140 0 6 162 2 140 0 0 109 163 2 140 0 0 0 + 164 2 140 0 0 0 165 2 140 0 0 10 166 2 0 142 0 142 167 2 0 10 + 0 0 168 1 169 98 6 170 1 0 88 0 171 1 169 6 6 172 1 0 0 0 173 + 1 75 8 0 174 1 75 0 0 175 1 75 6 0 176 1 75 0 0 177 2 75 0 0 + 0 178 2 75 0 6 0 179 2 0 80 80 80 180 1 181 82 75 182 1 0 84 + 80 183 2 7 0 0 0 184 2 0 7 142 7 185 1 0 10 0 186 1 7 0 0 187 + 2 7 0 0 0 188 2 0 67 0 0 189 1 190 0 109 191 1 190 0 0 192 2 + 6 0 190 0 193 1 0 0 0 194 2 0 107 0 10 113 1 0 14 0 15 1 0 0 + 51 66 2 0 10 0 14 18 1 0 84 80 183 1 0 0 0 173 1 0 88 0 171 2 + 0 78 79 80 81 2 0 0 0 10 70 2 0 0 0 10 72 2 0 128 0 0 129 1 0 + 115 0 116 1 0 7 0 114 2 0 0 0 0 150 2 0 151 0 0 152 2 0 10 0 + 0 168 1 0 119 0 122 3 0 0 0 12 10 46 2 0 19 0 14 42 2 0 10 0 + 12 41 1 0 51 0 58 1 0 34 0 39 2 0 67 0 10 69 1 0 0 0 194 0 0 + 0 118 2 0 80 80 80 180 1 0 84 80 87 1 0 84 80 85 1 0 88 0 105 + 3 0 0 0 12 0 25 3 0 0 0 14 22 23 3 0 0 0 14 27 28 3 0 0 0 12 + 7 31 2 0 0 0 37 38 1 0 10 0 186 2 0 142 0 142 167 2 0 7 142 7 + 185 2 0 142 142 142 146 2 0 67 0 0 189 3 0 0 0 132 0 133 2 0 + 0 0 132 136 1 0 0 0 137 2 0 0 0 12 139 2 0 10 0 12 16 2 0 19 + 0 14 20 2 0 0 0 12 124 2 0 119 0 0 160 2 0 155 142 0 156 1 0 + 0 12 50)))))) + (QUOTE |lookupComplete|))) + +@ \section{URAGG.lsp BOOTSTRAP} {\bf URAGG} depends on a chain of files. We need to break this cycle to build the algebra. So we keep a cached copy of the translated {\bf URAGG} @@ -35736,6 +39014,7 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> <> <> <> @@ -35867,6 +39146,7 @@ digraph dotabb { <> <> <> +<> <> <> <> @@ -36001,6 +39281,7 @@ digraph dotfull { <> <> <> +<> <> <> <> diff --git a/books/ps/v102univariatepolynomialcategory.ps b/books/ps/v102univariatepolynomialcategory.ps new file mode 100644 index 0000000..d30dc33 --- /dev/null +++ b/books/ps/v102univariatepolynomialcategory.ps @@ -0,0 +1,749 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 1104 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 1104 152 +%%PageOrientation: Portrait +gsave +36 36 1068 116 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +1066 114 lineto +1066 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 114 lineto +1066 114 lineto +1066 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% UnivariatePolynomialCategory(a:Ring) +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 631 108 moveto +393 108 lineto +393 72 lineto +631 72 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 631 108 moveto +393 108 lineto +393 72 lineto +631 72 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +401 85 moveto +(UnivariatePolynomialCategory\(a:Ring\)) +[9.6 6.96 3.84 6.72 6.24 5.04 3.84 6.24 3.84 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84 9.36 6.24 3.84 6.24 6.96 6.96 5.04 6.96 4.56 6.24 3.84 9.36 3.84 6.96 6.96 4.56] +xshow +end grestore +end grestore +% POLYCAT... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 88 36 moveto +0 36 lineto +0 0 lineto +88 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 88 36 moveto +0 36 lineto +0 0 lineto +88 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(POLYCAT...) +[7.68 10.08 7.2 9.12 9.12 9.36 7.44 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->POLYCAT... +newpath 393 81 moveto +312 73 203 60 98 36 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 98 33 moveto +88 34 lineto +97 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 98 33 moveto +88 34 lineto +97 39 lineto +closepath +stroke +end grestore +% ELTAB... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 176 36 moveto +106 36 lineto +106 0 lineto +176 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 176 36 moveto +106 36 lineto +106 0 lineto +176 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +113 13 moveto +(ELTAB...) +[8.64 7.68 7.92 10.08 9.36 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->ELTAB... +newpath 393 77 moveto +333 68 260 56 186 36 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 187 33 moveto +176 33 lineto +185 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 187 33 moveto +176 33 lineto +185 39 lineto +closepath +stroke +end grestore +% DIFRING... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 278 36 moveto +194 36 lineto +194 0 lineto +278 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 278 36 moveto +194 36 lineto +194 0 lineto +278 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +201 13 moveto +(DIFRING...) +[10.08 4.56 7.68 9.36 4.56 9.84 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->DIFRING... +newpath 428 72 moveto +388 63 339 51 288 36 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 289 33 moveto +278 33 lineto +287 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 289 33 moveto +278 33 lineto +287 39 lineto +closepath +stroke +end grestore +% DIFEXT... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 372 36 moveto +296 36 lineto +296 0 lineto +372 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 372 36 moveto +296 36 lineto +296 0 lineto +372 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +303 13 moveto +(DIFEXT...) +[10.08 4.56 7.68 8.64 10.08 7.44 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->DIFEXT... +newpath 467 72 moveto +441 61 408 48 382 38 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 383 34 moveto +372 34 lineto +380 41 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 383 34 moveto +372 34 lineto +380 41 lineto +closepath +stroke +end grestore +% STEP... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 448 36 moveto +390 36 lineto +390 0 lineto +448 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 448 36 moveto +390 36 lineto +390 0 lineto +448 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +398 13 moveto +(STEP...) +[7.44 8.64 8.64 6.24 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->STEP... +newpath 489 72 moveto +478 63 463 52 450 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 452 39 moveto +442 36 lineto +448 45 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 452 39 moveto +442 36 lineto +448 45 lineto +closepath +stroke +end grestore +% COMRING... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 558 36 moveto +466 36 lineto +466 0 lineto +558 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 558 36 moveto +466 36 lineto +466 0 lineto +558 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +473 13 moveto +(COMRING...) +[9.12 10.08 12.48 9.36 4.56 9.84 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->COMRING... +newpath 512 72 moveto +512 64 512 55 512 46 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 516 46 moveto +512 36 lineto +509 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 516 46 moveto +512 36 lineto +509 46 lineto +closepath +stroke +end grestore +% INTDOM... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 660 36 moveto +576 36 lineto +576 0 lineto +660 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 660 36 moveto +576 36 lineto +576 0 lineto +660 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +584 13 moveto +(INTDOM...) +[4.56 10.08 8.64 10.08 10.08 12.48 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->INTDOM... +newpath 539 72 moveto +552 63 569 52 583 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 586 44 moveto +592 36 lineto +582 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 586 44 moveto +592 36 lineto +582 39 lineto +closepath +stroke +end grestore +% GCDDOM... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 768 36 moveto +678 36 lineto +678 0 lineto +768 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 768 36 moveto +678 36 lineto +678 0 lineto +768 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +686 13 moveto +(GCDDOM...) +[10.08 9.36 10.08 10.08 10.08 12.48 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->GCDDOM... +newpath 565 72 moveto +597 61 637 48 668 37 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 669 40 moveto +678 34 lineto +667 34 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 669 40 moveto +678 34 lineto +667 34 lineto +closepath +stroke +end grestore +% FIELD... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 852 36 moveto +786 36 lineto +786 0 lineto +852 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 852 36 moveto +786 36 lineto +786 0 lineto +852 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +793 13 moveto +(FIELD...) +[7.68 4.56 8.64 8.64 10.08 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->FIELD... +newpath 624 72 moveto +669 64 722 52 776 36 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 777 39 moveto +786 33 lineto +775 33 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 777 39 moveto +786 33 lineto +775 33 lineto +closepath +stroke +end grestore +% ALGEBRA... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 964 36 moveto +870 36 lineto +870 0 lineto +964 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 964 36 moveto +870 36 lineto +870 0 lineto +964 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +878 13 moveto +(ALGEBRA...) +[10.08 8.64 10.08 8.64 9.36 9.36 9.84 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->ALGEBRA... +newpath 631 76 moveto +696 67 778 55 860 35 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 861 38 moveto +870 33 lineto +860 32 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 861 38 moveto +870 33 lineto +860 32 lineto +closepath +stroke +end grestore +% PFECAT... +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 1060 36 moveto +982 36 lineto +982 0 lineto +1060 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 1060 36 moveto +982 36 lineto +982 0 lineto +1060 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +990 13 moveto +(PFECAT...) +[7.68 7.68 8.64 9.12 9.36 7.44 3.6 3.6 3.6] +xshow +end grestore +end grestore +% UnivariatePolynomialCategory(a:Ring)->PFECAT... +newpath 631 84 moveto +723 77 852 64 972 35 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 973 38 moveto +982 33 lineto +972 32 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 973 38 moveto +982 33 lineto +972 32 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/changelog b/changelog index 7e6fde6..deeb50b 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,9 @@ +20081003 tpd books/bookvol10.2 add UPOLYC, update attributes +20081003 tpd books/ps/v102univariatepolynomialcategory.ps added +20081003 tpd src/algebra/polycat.spad move UPOLYC +20081003 tpd books/bookvol10.2 add category POLYCAT +20081003 tpd books/ps/v102polynomialcategory.ps added +20081003 tpd books/ps/v102fullypatternmatchable.ps fixup 20081002 tpd books/bookvol10.2 add categories 20081002 tpd books/ps/v102finiteabelianmonoidring.ps added 20081002 tpd src/algebra/polycat.spad move FAMR into bookvol10.2 diff --git a/src/algebra/polycat.spad.pamphlet b/src/algebra/polycat.spad.pamphlet index 7645806..39b0d38 100644 --- a/src/algebra/polycat.spad.pamphlet +++ b/src/algebra/polycat.spad.pamphlet @@ -9,2088 +9,6 @@ \eject \tableofcontents \eject -\section{category POLYCAT PolynomialCategory} -<>= -)abbrev category POLYCAT PolynomialCategory -++ Author: -++ Date Created: -++ Date Last Updated: -++ Basic Functions: Ring, monomial, coefficient, differentiate, eval -++ Related Constructors: Polynomial, DistributedMultivariatePolynomial -++ Also See: UnivariatePolynomialCategory -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ The category for general multi-variate polynomials over a ring -++ R, in variables from VarSet, with exponents from the -++ \spadtype{OrderedAbelianMonoidSup}. - -PolynomialCategory(R:Ring, E:OrderedAbelianMonoidSup, VarSet:OrderedSet): - Category == - Join(PartialDifferentialRing VarSet, FiniteAbelianMonoidRing(R, E), - Evalable %, InnerEvalable(VarSet, R), - InnerEvalable(VarSet, %), RetractableTo VarSet, - FullyLinearlyExplicitRingOver R) with - -- operations - degree : (%,VarSet) -> NonNegativeInteger - ++ degree(p,v) gives the degree of polynomial p with respect to the variable v. - degree : (%,List(VarSet)) -> List(NonNegativeInteger) - ++ degree(p,lv) gives the list of degrees of polynomial p - ++ with respect to each of the variables in the list lv. - coefficient: (%,VarSet,NonNegativeInteger) -> % - ++ coefficient(p,v,n) views the polynomial p as a univariate - ++ polynomial in v and returns the coefficient of the \spad{v**n} term. - coefficient: (%,List VarSet,List NonNegativeInteger) -> % - ++ coefficient(p, lv, ln) views the polynomial p as a polynomial - ++ in the variables of lv and returns the coefficient of the term - ++ \spad{lv**ln}, i.e. \spad{prod(lv_i ** ln_i)}. - monomials: % -> List % - ++ monomials(p) returns the list of non-zero monomials of polynomial p, i.e. - ++ \spad{monomials(sum(a_(i) X^(i))) = [a_(1) X^(1),...,a_(n) X^(n)]}. - univariate : (%,VarSet) -> SparseUnivariatePolynomial(%) - ++ univariate(p,v) converts the multivariate polynomial p - ++ into a univariate polynomial in v, whose coefficients are still - ++ multivariate polynomials (in all the other variables). - univariate : % -> SparseUnivariatePolynomial(R) - ++ univariate(p) converts the multivariate polynomial p, - ++ which should actually involve only one variable, - ++ into a univariate polynomial - ++ in that variable, whose coefficients are in the ground ring. - ++ Error: if polynomial is genuinely multivariate - mainVariable : % -> Union(VarSet,"failed") - ++ mainVariable(p) returns the biggest variable which actually - ++ occurs in the polynomial p, or "failed" if no variables are - ++ present. - ++ fails precisely if polynomial satisfies ground? - minimumDegree : (%,VarSet) -> NonNegativeInteger - ++ minimumDegree(p,v) gives the minimum degree of polynomial p - ++ with respect to v, i.e. viewed a univariate polynomial in v - minimumDegree : (%,List(VarSet)) -> List(NonNegativeInteger) - ++ minimumDegree(p, lv) gives the list of minimum degrees of the - ++ polynomial p with respect to each of the variables in the list lv - monicDivide : (%,%,VarSet) -> Record(quotient:%,remainder:%) - ++ monicDivide(a,b,v) divides the polynomial a by the polynomial b, - ++ with each viewed as a univariate polynomial in v returning - ++ both the quotient and remainder. - ++ Error: if b is not monic with respect to v. - monomial : (%,VarSet,NonNegativeInteger) -> % - ++ monomial(a,x,n) creates the monomial \spad{a*x**n} where \spad{a} is - ++ a polynomial, x is a variable and n is a nonnegative integer. - monomial : (%,List VarSet,List NonNegativeInteger) -> % - ++ monomial(a,[v1..vn],[e1..en]) returns \spad{a*prod(vi**ei)}. - multivariate : (SparseUnivariatePolynomial(R),VarSet) -> % - ++ multivariate(sup,v) converts an anonymous univariable - ++ polynomial sup to a polynomial in the variable v. - multivariate : (SparseUnivariatePolynomial(%),VarSet) -> % - ++ multivariate(sup,v) converts an anonymous univariable - ++ polynomial sup to a polynomial in the variable v. - isPlus: % -> Union(List %, "failed") - ++ isPlus(p) returns \spad{[m1,...,mn]} if polynomial \spad{p = m1 + ... + mn} and - ++ \spad{n >= 2} and each mi is a nonzero monomial. - isTimes: % -> Union(List %, "failed") - ++ isTimes(p) returns \spad{[a1,...,an]} if polynomial \spad{p = a1 ... an} - ++ and \spad{n >= 2}, and, for each i, ai is either a nontrivial constant in R or else of the - ++ form \spad{x**e}, where \spad{e > 0} is an integer and x in a member of VarSet. - isExpt: % -> Union(Record(var:VarSet, exponent:NonNegativeInteger),_ - "failed") - ++ isExpt(p) returns \spad{[x, n]} if polynomial p has the form \spad{x**n} and \spad{n > 0}. - totalDegree : % -> NonNegativeInteger - ++ totalDegree(p) returns the largest sum over all monomials - ++ of all exponents of a monomial. - totalDegree : (%,List VarSet) -> NonNegativeInteger - ++ totalDegree(p, lv) returns the maximum sum (over all monomials of polynomial p) - ++ of the variables in the list lv. - variables : % -> List(VarSet) - ++ variables(p) returns the list of those variables actually - ++ appearing in the polynomial p. - primitiveMonomials: % -> List % - ++ primitiveMonomials(p) gives the list of monomials of the - ++ polynomial p with their coefficients removed. - ++ Note: \spad{primitiveMonomials(sum(a_(i) X^(i))) = [X^(1),...,X^(n)]}. - if R has OrderedSet then OrderedSet - -- OrderedRing view removed to allow EXPR to define abs - --if R has OrderedRing then OrderedRing - if (R has ConvertibleTo InputForm) and - (VarSet has ConvertibleTo InputForm) then - ConvertibleTo InputForm - if (R has ConvertibleTo Pattern Integer) and - (VarSet has ConvertibleTo Pattern Integer) then - ConvertibleTo Pattern Integer - if (R has ConvertibleTo Pattern Float) and - (VarSet has ConvertibleTo Pattern Float) then - ConvertibleTo Pattern Float - if (R has PatternMatchable Integer) and - (VarSet has PatternMatchable Integer) then - PatternMatchable Integer - if (R has PatternMatchable Float) and - (VarSet has PatternMatchable Float) then - PatternMatchable Float - if R has CommutativeRing then - resultant : (%,%,VarSet) -> % - ++ resultant(p,q,v) returns the resultant of the polynomials - ++ p and q with respect to the variable v. - discriminant : (%,VarSet) -> % - ++ discriminant(p,v) returns the disriminant of the polynomial p - ++ with respect to the variable v. - if R has GcdDomain then - GcdDomain - content: (%,VarSet) -> % - ++ content(p,v) is the gcd of the coefficients of the polynomial p - ++ when p is viewed as a univariate polynomial with respect to the - ++ variable v. - ++ Thus, for polynomial 7*x**2*y + 14*x*y**2, the gcd of the - ++ coefficients with respect to x is 7*y. - primitivePart: % -> % - ++ primitivePart(p) returns the unitCanonical associate of the - ++ polynomial p with its content divided out. - primitivePart: (%,VarSet) -> % - ++ primitivePart(p,v) returns the unitCanonical associate of the - ++ polynomial p with its content with respect to the variable v - ++ divided out. - squareFree: % -> Factored % - ++ squareFree(p) returns the square free factorization of the - ++ polynomial p. - squareFreePart: % -> % - ++ squareFreePart(p) returns product of all the irreducible factors - ++ of polynomial p each taken with multiplicity one. - - -- assertions - if R has canonicalUnitNormal then canonicalUnitNormal - ++ we can choose a unique representative for each - ++ associate class. - ++ This normalization is chosen to be normalization of - ++ leading coefficient (by default). - if R has PolynomialFactorizationExplicit then - PolynomialFactorizationExplicit - add - p:% - v:VarSet - ln:List NonNegativeInteger - lv:List VarSet - n:NonNegativeInteger - pp,qq:SparseUnivariatePolynomial % - eval(p:%, l:List Equation %) == - empty? l => p - for e in l repeat - retractIfCan(lhs e)@Union(VarSet,"failed") case "failed" => - error "cannot find a variable to evaluate" - lvar:=[retract(lhs e)@VarSet for e in l] - eval(p, lvar,[rhs e for e in l]$List(%)) - monomials p == --- zero? p => empty() --- concat(leadingMonomial p, monomials reductum p) --- replaced by sequential version for efficiency, by WMSIT, 7/30/90 - ml:= empty$List(%) - while p ^= 0 repeat - ml:=concat(leadingMonomial p, ml) - p:= reductum p - reverse ml - isPlus p == - empty? rest(l := monomials p) => "failed" - l - isTimes p == - empty?(lv := variables p) or not monomial? p => "failed" - l := [monomial(1, v, degree(p, v)) for v in lv] --- one?(r := leadingCoefficient p) => - ((r := leadingCoefficient p) = 1) => - empty? rest lv => "failed" - l - concat(r::%, l) - isExpt p == - (u := mainVariable p) case "failed" => "failed" - p = monomial(1, u::VarSet, d := degree(p, u::VarSet)) => - [u::VarSet, d] - "failed" - coefficient(p,v,n) == coefficient(univariate(p,v),n) - coefficient(p,lv,ln) == - empty? lv => - empty? ln => p - error "mismatched lists in coefficient" - empty? ln => error "mismatched lists in coefficient" - coefficient(coefficient(univariate(p,first lv),first ln), - rest lv,rest ln) - monomial(p,lv,ln) == - empty? lv => - empty? ln => p - error "mismatched lists in monomial" - empty? ln => error "mismatched lists in monomial" - monomial(monomial(p,first lv, first ln),rest lv, rest ln) - retract(p:%):VarSet == - q := mainVariable(p)::VarSet - q::% = p => q - error "Polynomial is not a single variable" - retractIfCan(p:%):Union(VarSet, "failed") == - ((q := mainVariable p) case VarSet) and (q::VarSet::% = p) => q - "failed" - mkPrim(p:%):% == monomial(1,degree p) - primitiveMonomials p == [mkPrim q for q in monomials p] - totalDegree p == - ground? p => 0 - u := univariate(p, mainVariable(p)::VarSet) - d: NonNegativeInteger := 0 - while u ^= 0 repeat - d := max(d, degree u + totalDegree leadingCoefficient u) - u := reductum u - d - totalDegree(p,lv) == - ground? p => 0 - u := univariate(p, v:=(mainVariable(p)::VarSet)) - d: NonNegativeInteger := 0 - w: NonNegativeInteger := 0 - if member?(v, lv) then w:=1 - while u ^= 0 repeat - d := max(d, w*(degree u) + totalDegree(leadingCoefficient u,lv)) - u := reductum u - d - - if R has CommutativeRing then - resultant(p1,p2,mvar) == - resultant(univariate(p1,mvar),univariate(p2,mvar)) - discriminant(p,var) == - discriminant(univariate(p,var)) - - if R has IntegralDomain then - allMonoms(l:List %):List(%) == - removeDuplicates_! concat [primitiveMonomials p for p in l] - P2R(p:%, b:List E, n:NonNegativeInteger):Vector(R) == - w := new(n, 0)$Vector(R) - for i in minIndex w .. maxIndex w for bj in b repeat - qsetelt_!(w, i, coefficient(p, bj)) - w - eq2R(l:List %, b:List E):Matrix(R) == - matrix [[coefficient(p, bj) for p in l] for bj in b] - reducedSystem(m:Matrix %):Matrix(R) == - l := listOfLists m - b := removeDuplicates_! - concat [allMonoms r for r in l]$List(List(%)) - d := [degree bj for bj in b] - mm := eq2R(first l, d) - l := rest l - while not empty? l repeat - mm := vertConcat(mm, eq2R(first l, d)) - l := rest l - mm - reducedSystem(m:Matrix %, v:Vector %): - Record(mat:Matrix R, vec:Vector R) == - l := listOfLists m - r := entries v - b : List % := removeDuplicates_! concat(allMonoms r, - concat [allMonoms s for s in l]$List(List(%))) - d := [degree bj for bj in b] - n := #d - mm := eq2R(first l, d) - w := P2R(first r, d, n) - l := rest l - r := rest r - while not empty? l repeat - mm := vertConcat(mm, eq2R(first l, d)) - w := concat(w, P2R(first r, d, n)) - l := rest l - r := rest r - [mm, w] - - if R has PolynomialFactorizationExplicit then - -- we might be in trouble if its actually only - -- a univariate polynomial category - have to remember to - -- over-ride these in UnivariatePolynomialCategory - PFBR ==>PolynomialFactorizationByRecursion(R,E,VarSet,%) - gcdPolynomial(pp,qq) == - gcdPolynomial(pp,qq)$GeneralPolynomialGcdPackage(E,VarSet,R,%) - solveLinearPolynomialEquation(lpp,pp) == - solveLinearPolynomialEquationByRecursion(lpp,pp)$PFBR - factorPolynomial(pp) == - factorByRecursion(pp)$PFBR - factorSquareFreePolynomial(pp) == - factorSquareFreeByRecursion(pp)$PFBR - factor p == - v:Union(VarSet,"failed"):=mainVariable p - v case "failed" => - ansR:=factor leadingCoefficient p - makeFR(unit(ansR)::%, - [[w.flg,w.fctr::%,w.xpnt] for w in factorList ansR]) - up:SparseUnivariatePolynomial %:=univariate(p,v) - ansSUP:=factorByRecursion(up)$PFBR - makeFR(multivariate(unit(ansSUP),v), - [[ww.flg,multivariate(ww.fctr,v),ww.xpnt] - for ww in factorList ansSUP]) - if R has CharacteristicNonZero then - mat: Matrix % - conditionP mat == - ll:=listOfLists transpose mat -- hence each list corresponds to a - -- column, i.e. to one variable - llR:List List R := [ empty() for z in first ll] - monslist:List List % := empty() - ch:=characteristic()$% - for l in ll repeat - mons:= "setUnion"/[primitiveMonomials u for u in l] - redmons:List % :=[] - for m in mons repeat - vars:=variables m - degs:=degree(m,vars) - deg1:List NonNegativeInteger - deg1:=[ ((nd:=d:Integer exquo ch:Integer) - case "failed" => return "failed" ; - nd::Integer::NonNegativeInteger) - for d in degs ] - redmons:=[monomial(1,vars,deg1),:redmons] - llR:=[[ground coefficient(u,vars,degs),:v] for u in l for v in llR] - monslist:=[redmons,:monslist] - ans:=conditionP transpose matrix llR - ans case "failed" => "failed" - i:NonNegativeInteger:=0 - [ +/[m*(ans.(i:=i+1))::% for m in mons ] - for mons in monslist] - - if R has CharacteristicNonZero then - charthRootlv: (%,List VarSet,NonNegativeInteger) -> Union(%,"failed") - charthRoot p == - vars:= variables p - empty? vars => - ans := charthRoot ground p - ans case "failed" => "failed" - ans::R::% - ch:=characteristic()$% - charthRootlv(p,vars,ch) - charthRootlv(p,vars,ch) == - empty? vars => - ans := charthRoot ground p - ans case "failed" => "failed" - ans::R::% - v:=first vars - vars:=rest vars - d:=degree(p,v) - ans:% := 0 - while (d>0) repeat - (dd:=(d::Integer exquo ch::Integer)) case "failed" => - return "failed" - cp:=coefficient(p,v,d) - p:=p-monomial(cp,v,d) - ansx:=charthRootlv(cp,vars,ch) - ansx case "failed" => return "failed" - d:=degree(p,v) - ans:=ans+monomial(ansx,v,dd::Integer::NonNegativeInteger) - ansx:=charthRootlv(p,vars,ch) - ansx case "failed" => return "failed" - return ans+ansx - - monicDivide(p1,p2,mvar) == - result:=monicDivide(univariate(p1,mvar),univariate(p2,mvar)) - [multivariate(result.quotient,mvar), - multivariate(result.remainder,mvar)] - - - if R has GcdDomain then - if R has EuclideanDomain and R has CharacteristicZero then - squareFree p == squareFree(p)$MultivariateSquareFree(E,VarSet,R,%) - else - squareFree p == squareFree(p)$PolynomialSquareFree(VarSet,E,R,%) - squareFreePart p == - unit(s := squareFree p) * */[f.factor for f in factors s] - content(p,v) == content univariate(p,v) - primitivePart p == - zero? p => p - unitNormal((p exquo content p) ::%).canonical - primitivePart(p,v) == - zero? p => p - unitNormal((p exquo content(p,v)) ::%).canonical - if R has OrderedSet then - p:% < q:% == - (dp:= degree p) < (dq := degree q) => (leadingCoefficient q) > 0 - dq < dp => (leadingCoefficient p) < 0 - leadingCoefficient(p - q) < 0 - if (R has PatternMatchable Integer) and - (VarSet has PatternMatchable Integer) then - patternMatch(p:%, pat:Pattern Integer, - l:PatternMatchResult(Integer, %)) == - patternMatch(p, pat, - l)$PatternMatchPolynomialCategory(Integer,E,VarSet,R,%) - if (R has PatternMatchable Float) and - (VarSet has PatternMatchable Float) then - patternMatch(p:%, pat:Pattern Float, - l:PatternMatchResult(Float, %)) == - patternMatch(p, pat, - l)$PatternMatchPolynomialCategory(Float,E,VarSet,R,%) - - if (R has ConvertibleTo Pattern Integer) and - (VarSet has ConvertibleTo Pattern Integer) then - convert(x:%):Pattern(Integer) == - map(convert, convert, - x)$PolynomialCategoryLifting(E,VarSet,R,%,Pattern Integer) - if (R has ConvertibleTo Pattern Float) and - (VarSet has ConvertibleTo Pattern Float) then - convert(x:%):Pattern(Float) == - map(convert, convert, - x)$PolynomialCategoryLifting(E, VarSet, R, %, Pattern Float) - if (R has ConvertibleTo InputForm) and - (VarSet has ConvertibleTo InputForm) then - convert(p:%):InputForm == - map(convert, convert, - p)$PolynomialCategoryLifting(E,VarSet,R,%,InputForm) - -@ -\section{POLYCAT.lsp BOOTSTRAP} -{\bf POLYCAT} depends on itself. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf POLYCAT} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf POLYCAT.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. - -Note that this code is not included in the generated catdef.spad file. - -<>= - -(/VERSIONCHECK 2) - -(SETQ |PolynomialCategory;CAT| (QUOTE NIL)) - -(SETQ |PolynomialCategory;AL| (QUOTE NIL)) - -(DEFUN |PolynomialCategory| (&REST #0=#:G1430 &AUX #1=#:G1428) - (DSETQ #1# #0#) - (LET (#2=#:G1429) - (COND - ((SETQ #2# (|assoc| (|devaluateList| #1#) |PolynomialCategory;AL|)) - (CDR #2#)) - (T - (SETQ |PolynomialCategory;AL| - (|cons5| - (CONS (|devaluateList| #1#) - (SETQ #2# (APPLY (FUNCTION |PolynomialCategory;|) #1#))) - |PolynomialCategory;AL|)) - #2#)))) - -(DEFUN |PolynomialCategory;| (|t#1| |t#2| |t#3|) - (PROG (#0=#:G1427) - (RETURN - (PROG1 - (LETT #0# - (|sublisV| - (PAIR (QUOTE (|t#1| |t#2| |t#3|)) (LIST (|devaluate| |t#1|) (|devaluate| |t#2|) (|devaluate| |t#3|))) - (COND - (|PolynomialCategory;CAT|) - ((QUOTE T) - (LETT |PolynomialCategory;CAT| - (|Join| - (|PartialDifferentialRing| (QUOTE |t#3|)) - (|FiniteAbelianMonoidRing| (QUOTE |t#1|) (QUOTE |t#2|)) - (|Evalable| (QUOTE $)) - (|InnerEvalable| (QUOTE |t#3|) (QUOTE |t#1|)) - (|InnerEvalable| (QUOTE |t#3|) (QUOTE $)) - (|RetractableTo| (QUOTE |t#3|)) - (|FullyLinearlyExplicitRingOver| (QUOTE |t#1|)) - (|mkCategory| (QUOTE |domain|) - (QUOTE - (((|degree| ((|NonNegativeInteger|) $ |t#3|)) T) - ((|degree| ((|List| (|NonNegativeInteger|)) $ (|List| |t#3|))) T) - ((|coefficient| ($ $ |t#3| (|NonNegativeInteger|))) T) - ((|coefficient| ($ $ (|List| |t#3|) - (|List| (|NonNegativeInteger|)))) T) - ((|monomials| ((|List| $) $)) T) - ((|univariate| ((|SparseUnivariatePolynomial| $) $ |t#3|)) T) - ((|univariate| ((|SparseUnivariatePolynomial| |t#1|) $)) T) - ((|mainVariable| ((|Union| |t#3| "failed") $)) T) - ((|minimumDegree| ((|NonNegativeInteger|) $ |t#3|)) T) - ((|minimumDegree| ((|List| (|NonNegativeInteger|)) $ - (|List| |t#3|))) T) - ((|monicDivide| - ((|Record| (|:| |quotient| $) (|:| |remainder| $)) $ $ |t#3|)) - T) - ((|monomial| ($ $ |t#3| (|NonNegativeInteger|))) T) - ((|monomial| ($ $ (|List| |t#3|) (|List| (|NonNegativeInteger|)))) - T) - ((|multivariate| ($ (|SparseUnivariatePolynomial| |t#1|) |t#3|)) - T) - ((|multivariate| ($ (|SparseUnivariatePolynomial| $) |t#3|)) T) - ((|isPlus| ((|Union| (|List| $) "failed") $)) T) - ((|isTimes| ((|Union| (|List| $) "failed") $)) T) - ((|isExpt| - ((|Union| - (|Record| (|:| |var| |t#3|) - (|:| |exponent| (|NonNegativeInteger|))) - "failed") $)) - T) - ((|totalDegree| ((|NonNegativeInteger|) $)) T) - ((|totalDegree| ((|NonNegativeInteger|) $ (|List| |t#3|))) T) - ((|variables| ((|List| |t#3|) $)) T) - ((|primitiveMonomials| ((|List| $) $)) T) - ((|resultant| ($ $ $ |t#3|)) (|has| |t#1| (|CommutativeRing|))) - ((|discriminant| ($ $ |t#3|)) (|has| |t#1| (|CommutativeRing|))) - ((|content| ($ $ |t#3|)) (|has| |t#1| (|GcdDomain|))) - ((|primitivePart| ($ $)) (|has| |t#1| (|GcdDomain|))) - ((|primitivePart| ($ $ |t#3|)) (|has| |t#1| (|GcdDomain|))) - ((|squareFree| ((|Factored| $) $)) (|has| |t#1| (|GcdDomain|))) - ((|squareFreePart| ($ $)) (|has| |t#1| (|GcdDomain|))))) - (QUOTE - (((|OrderedSet|) (|has| |t#1| (|OrderedSet|))) - ((|ConvertibleTo| (|InputForm|)) - (AND (|has| |t#3| (|ConvertibleTo| (|InputForm|))) - (|has| |t#1| (|ConvertibleTo| (|InputForm|))))) - ((|ConvertibleTo| (|Pattern| (|Integer|))) - (AND (|has| |t#3| (|ConvertibleTo| (|Pattern| (|Integer|)))) - (|has| |t#1| (|ConvertibleTo| (|Pattern| (|Integer|)))))) - ((|ConvertibleTo| (|Pattern| (|Float|))) - (AND (|has| |t#3| (|ConvertibleTo| (|Pattern| (|Float|)))) - (|has| |t#1| (|ConvertibleTo| (|Pattern| (|Float|)))))) - ((|PatternMatchable| (|Integer|)) - (AND - (|has| |t#3| (|PatternMatchable| (|Integer|))) - (|has| |t#1| (|PatternMatchable| (|Integer|))))) - ((|PatternMatchable| (|Float|)) - (AND - (|has| |t#3| (|PatternMatchable| (|Float|))) - (|has| |t#1| (|PatternMatchable| (|Float|))))) - ((|GcdDomain|) (|has| |t#1| (|GcdDomain|))) - (|canonicalUnitNormal| - (|has| |t#1| (ATTRIBUTE |canonicalUnitNormal|))) - ((|PolynomialFactorizationExplicit|) - (|has| |t#1| (|PolynomialFactorizationExplicit|))))) - (QUOTE - ((|Factored| $) - (|List| $) - (|List| |t#3|) - (|NonNegativeInteger|) - (|SparseUnivariatePolynomial| $) - (|SparseUnivariatePolynomial| |t#1|) - (|List| (|NonNegativeInteger|)))) - NIL)) - . #1=(|PolynomialCategory|))))) - . #1#) - (SETELT #0# 0 - (LIST (QUOTE |PolynomialCategory|) - (|devaluate| |t#1|) (|devaluate| |t#2|) (|devaluate| |t#3|))))))) - -@ -\section{POLYCAT-.lsp BOOTSTRAP} -{\bf POLYCAT-} depends on {\bf POLYCAT}. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf POLYCAT-} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf POLYCAT-.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. - -Note that this code is not included in the generated catdef.spad file. - -<>= - -(|/VERSIONCHECK| 2) - - -(/VERSIONCHECK 2) - -(DEFUN |POLYCAT-;eval;SLS;1| (|p| |l| $) - (PROG (#0=#:G1444 #1=#:G1438 #2=#:G1445 #3=#:G1446 |lvar| #4=#:G1447 - |e| #5=#:G1448) - (RETURN - (SEQ - (COND - ((NULL |l|) |p|) - ((QUOTE T) - (SEQ - (SEQ - (EXIT - (SEQ - (LETT |e| NIL |POLYCAT-;eval;SLS;1|) - (LETT #0# |l| |POLYCAT-;eval;SLS;1|) - G190 - (COND - ((OR (ATOM #0#) - (PROGN (LETT |e| (CAR #0#) |POLYCAT-;eval;SLS;1|) NIL)) - (GO G191))) - (SEQ - (EXIT - (COND - ((QEQCAR - (SPADCALL (SPADCALL |e| (QREFELT $ 11)) (QREFELT $ 13)) 1) - (PROGN - (LETT #1# - (|error| "cannot find a variable to evaluate") - |POLYCAT-;eval;SLS;1|) - (GO #1#)))))) - (LETT #0# (CDR #0#) |POLYCAT-;eval;SLS;1|) - (GO G190) - G191 - (EXIT NIL))) - #1# (EXIT #1#)) - (LETT |lvar| - (PROGN - (LETT #2# NIL |POLYCAT-;eval;SLS;1|) - (SEQ - (LETT |e| NIL |POLYCAT-;eval;SLS;1|) - (LETT #3# |l| |POLYCAT-;eval;SLS;1|) - G190 - (COND - ((OR (ATOM #3#) - (PROGN (LETT |e| (CAR #3#) |POLYCAT-;eval;SLS;1|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #2# - (CONS (SPADCALL (SPADCALL |e| (QREFELT $ 11)) (QREFELT $ 14)) - #2#) - |POLYCAT-;eval;SLS;1|))) - (LETT #3# (CDR #3#) |POLYCAT-;eval;SLS;1|) - (GO G190) - G191 - (EXIT (NREVERSE0 #2#)))) - |POLYCAT-;eval;SLS;1|) - (EXIT - (SPADCALL |p| |lvar| - (PROGN - (LETT #4# NIL |POLYCAT-;eval;SLS;1|) - (SEQ - (LETT |e| NIL |POLYCAT-;eval;SLS;1|) - (LETT #5# |l| |POLYCAT-;eval;SLS;1|) - G190 - (COND - ((OR (ATOM #5#) - (PROGN (LETT |e| (CAR #5#) |POLYCAT-;eval;SLS;1|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #4# (CONS (SPADCALL |e| (QREFELT $ 15)) #4#) - |POLYCAT-;eval;SLS;1|))) - (LETT #5# (CDR #5#) |POLYCAT-;eval;SLS;1|) - (GO G190) - G191 - (EXIT (NREVERSE0 #4#)))) - (QREFELT $ 18)))))))))) - -(DEFUN |POLYCAT-;monomials;SL;2| (|p| $) - (PROG (|ml|) - (RETURN - (SEQ - (LETT |ml| NIL |POLYCAT-;monomials;SL;2|) - (SEQ G190 - (COND - ((NULL - (COND - ((SPADCALL |p| (|spadConstant| $ 21) (QREFELT $ 24)) (QUOTE NIL)) - ((QUOTE T) (QUOTE T)))) - (GO G191))) - (SEQ - (LETT |ml| - (CONS (SPADCALL |p| (QREFELT $ 25)) |ml|) - |POLYCAT-;monomials;SL;2|) - (EXIT - (LETT |p| (SPADCALL |p| (QREFELT $ 26)) |POLYCAT-;monomials;SL;2|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT (REVERSE |ml|)))))) - -(DEFUN |POLYCAT-;isPlus;SU;3| (|p| $) - (PROG (|l|) - (RETURN - (COND - ((NULL - (CDR (LETT |l| (SPADCALL |p| (QREFELT $ 28)) |POLYCAT-;isPlus;SU;3|))) - (CONS 1 "failed")) - ((QUOTE T) (CONS 0 |l|)))))) - -(DEFUN |POLYCAT-;isTimes;SU;4| (|p| $) - (PROG (|lv| #0=#:G1470 |v| #1=#:G1471 |l| |r|) - (RETURN - (SEQ - (COND - ((OR (NULL - (LETT |lv| (SPADCALL |p| (QREFELT $ 31)) |POLYCAT-;isTimes;SU;4|)) - (NULL (SPADCALL |p| (QREFELT $ 32)))) - (CONS 1 "failed")) - ((QUOTE T) - (SEQ - (LETT |l| - (PROGN - (LETT #0# NIL |POLYCAT-;isTimes;SU;4|) - (SEQ - (LETT |v| NIL |POLYCAT-;isTimes;SU;4|) - (LETT #1# |lv| |POLYCAT-;isTimes;SU;4|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN (LETT |v| (CAR #1#) |POLYCAT-;isTimes;SU;4|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #0# - (CONS - (SPADCALL (|spadConstant| $ 33) |v| - (SPADCALL |p| |v| (QREFELT $ 36)) (QREFELT $ 37)) - #0#) - |POLYCAT-;isTimes;SU;4|))) - (LETT #1# (CDR #1#) |POLYCAT-;isTimes;SU;4|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - |POLYCAT-;isTimes;SU;4|) - (LETT |r| (SPADCALL |p| (QREFELT $ 38)) |POLYCAT-;isTimes;SU;4|) - (EXIT - (COND - ((SPADCALL |r| (|spadConstant| $ 34) (QREFELT $ 39)) - (COND - ((NULL (CDR |lv|)) (CONS 1 "failed")) - ((QUOTE T) (CONS 0 |l|)))) - ((QUOTE T) - (CONS 0 (CONS (SPADCALL |r| (QREFELT $ 40)) |l|)))))))))))) - -(DEFUN |POLYCAT-;isExpt;SU;5| (|p| $) - (PROG (|u| |d|) - (RETURN - (SEQ - (LETT |u| (SPADCALL |p| (QREFELT $ 42)) |POLYCAT-;isExpt;SU;5|) - (EXIT - (COND - ((OR (QEQCAR |u| 1) - (NULL - (SPADCALL |p| - (SPADCALL (|spadConstant| $ 33) - (QCDR |u|) - (LETT |d| (SPADCALL |p| (QCDR |u|) (QREFELT $ 36)) - |POLYCAT-;isExpt;SU;5|) - (QREFELT $ 37)) - (QREFELT $ 24)))) - (CONS 1 "failed")) - ((QUOTE T) (CONS 0 (CONS (QCDR |u|) |d|))))))))) - -(DEFUN |POLYCAT-;coefficient;SVarSetNniS;6| (|p| |v| |n| $) - (SPADCALL (SPADCALL |p| |v| (QREFELT $ 47)) |n| (QREFELT $ 49))) - -(DEFUN |POLYCAT-;coefficient;SLLS;7| (|p| |lv| |ln| $) - (COND - ((NULL |lv|) - (COND - ((NULL |ln|) |p|) - ((QUOTE T) (|error| "mismatched lists in coefficient")))) - ((NULL |ln|) (|error| "mismatched lists in coefficient")) - ((QUOTE T) - (SPADCALL - (SPADCALL - (SPADCALL |p| (|SPADfirst| |lv|) (QREFELT $ 47)) - (|SPADfirst| |ln|) - (QREFELT $ 49)) - (CDR |lv|) - (CDR |ln|) - (QREFELT $ 52))))) - -(DEFUN |POLYCAT-;monomial;SLLS;8| (|p| |lv| |ln| $) - (COND - ((NULL |lv|) - (COND - ((NULL |ln|) |p|) - ((QUOTE T) (|error| "mismatched lists in monomial")))) - ((NULL |ln|) (|error| "mismatched lists in monomial")) - ((QUOTE T) - (SPADCALL - (SPADCALL |p| (|SPADfirst| |lv|) (|SPADfirst| |ln|) (QREFELT $ 37)) - (CDR |lv|) - (CDR |ln|) - (QREFELT $ 54))))) - -(DEFUN |POLYCAT-;retract;SVarSet;9| (|p| $) - (PROG (#0=#:G1496 |q|) - (RETURN - (SEQ - (LETT |q| - (PROG2 - (LETT #0# (SPADCALL |p| (QREFELT $ 42)) |POLYCAT-;retract;SVarSet;9|) - (QCDR #0#) - (|check-union| (QEQCAR #0# 0) (QREFELT $ 9) #0#)) - |POLYCAT-;retract;SVarSet;9|) - (EXIT - (COND - ((SPADCALL (SPADCALL |q| (QREFELT $ 56)) |p| (QREFELT $ 24)) |q|) - ((QUOTE T) (|error| "Polynomial is not a single variable")))))))) - -(DEFUN |POLYCAT-;retractIfCan;SU;10| (|p| $) - (PROG (|q| #0=#:G1504) - (RETURN - (SEQ - (EXIT - (SEQ - (SEQ - (LETT |q| (SPADCALL |p| (QREFELT $ 42)) |POLYCAT-;retractIfCan;SU;10|) - (EXIT - (COND - ((QEQCAR |q| 0) - (COND - ((SPADCALL (SPADCALL (QCDR |q|) (QREFELT $ 56)) |p| (QREFELT $ 24)) - (PROGN - (LETT #0# |q| |POLYCAT-;retractIfCan;SU;10|) - (GO #0#)))))))) - (EXIT (CONS 1 "failed")))) - #0# - (EXIT #0#))))) - -(DEFUN |POLYCAT-;mkPrim| (|p| $) - (SPADCALL - (|spadConstant| $ 34) - (SPADCALL |p| (QREFELT $ 59)) - (QREFELT $ 60))) - -(DEFUN |POLYCAT-;primitiveMonomials;SL;12| (|p| $) - (PROG (#0=#:G1509 |q| #1=#:G1510) - (RETURN - (SEQ - (PROGN - (LETT #0# NIL |POLYCAT-;primitiveMonomials;SL;12|) - (SEQ - (LETT |q| NIL |POLYCAT-;primitiveMonomials;SL;12|) - (LETT #1# (SPADCALL |p| (QREFELT $ 28)) |POLYCAT-;primitiveMonomials;SL;12|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN - (LETT |q| (CAR #1#) |POLYCAT-;primitiveMonomials;SL;12|) - NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #0# (CONS (|POLYCAT-;mkPrim| |q| $) #0#) - |POLYCAT-;primitiveMonomials;SL;12|))) - (LETT #1# (CDR #1#) |POLYCAT-;primitiveMonomials;SL;12|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))))))) - -(DEFUN |POLYCAT-;totalDegree;SNni;13| (|p| $) - (PROG (#0=#:G1512 |d| |u|) - (RETURN - (SEQ - (COND - ((SPADCALL |p| (QREFELT $ 62)) 0) - ((QUOTE T) - (SEQ - (LETT |u| - (SPADCALL |p| - (PROG2 - (LETT #0# - (SPADCALL |p| (QREFELT $ 42)) - |POLYCAT-;totalDegree;SNni;13|) - (QCDR #0#) - (|check-union| (QEQCAR #0# 0) (QREFELT $ 9) #0#)) - (QREFELT $ 47)) - |POLYCAT-;totalDegree;SNni;13|) - (LETT |d| 0 |POLYCAT-;totalDegree;SNni;13|) - (SEQ G190 - (COND - ((NULL - (COND - ((SPADCALL |u| (|spadConstant| $ 63) (QREFELT $ 64)) (QUOTE NIL)) - ((QUOTE T) (QUOTE T)))) (GO G191))) - (SEQ - (LETT |d| - (MAX |d| - (+ - (SPADCALL |u| (QREFELT $ 65)) - (SPADCALL (SPADCALL |u| (QREFELT $ 66)) (QREFELT $ 67)))) - |POLYCAT-;totalDegree;SNni;13|) - (EXIT - (LETT |u| - (SPADCALL |u| (QREFELT $ 68)) |POLYCAT-;totalDegree;SNni;13|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT |d|)))))))) - -(DEFUN |POLYCAT-;totalDegree;SLNni;14| (|p| |lv| $) - (PROG (#0=#:G1520 |v| |w| |d| |u|) - (RETURN - (SEQ - (COND - ((SPADCALL |p| (QREFELT $ 62)) 0) - ((QUOTE T) - (SEQ - (LETT |u| - (SPADCALL |p| - (LETT |v| - (PROG2 - (LETT #0# - (SPADCALL |p| (QREFELT $ 42)) - |POLYCAT-;totalDegree;SLNni;14|) - (QCDR #0#) - (|check-union| (QEQCAR #0# 0) (QREFELT $ 9) #0#)) - |POLYCAT-;totalDegree;SLNni;14|) - (QREFELT $ 47)) - |POLYCAT-;totalDegree;SLNni;14|) - (LETT |d| 0 |POLYCAT-;totalDegree;SLNni;14|) - (LETT |w| 0 |POLYCAT-;totalDegree;SLNni;14|) - (COND - ((SPADCALL |v| |lv| (QREFELT $ 70)) - (LETT |w| 1 |POLYCAT-;totalDegree;SLNni;14|))) - (SEQ G190 - (COND - ((NULL - (COND - ((SPADCALL |u| (|spadConstant| $ 63) (QREFELT $ 64)) (QUOTE NIL)) - ((QUOTE T) (QUOTE T)))) (GO G191))) - (SEQ - (LETT |d| - (MAX |d| - (+ - (* |w| (SPADCALL |u| (QREFELT $ 65))) - (SPADCALL (SPADCALL |u| (QREFELT $ 66)) |lv| (QREFELT $ 71)))) - |POLYCAT-;totalDegree;SLNni;14|) - (EXIT - (LETT |u| - (SPADCALL |u| (QREFELT $ 68)) - |POLYCAT-;totalDegree;SLNni;14|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT |d|)))))))) - -(DEFUN |POLYCAT-;resultant;2SVarSetS;15| (|p1| |p2| |mvar| $) - (SPADCALL - (SPADCALL |p1| |mvar| (QREFELT $ 47)) - (SPADCALL |p2| |mvar| (QREFELT $ 47)) - (QREFELT $ 73))) - -(DEFUN |POLYCAT-;discriminant;SVarSetS;16| (|p| |var| $) - (SPADCALL (SPADCALL |p| |var| (QREFELT $ 47)) (QREFELT $ 75))) - -(DEFUN |POLYCAT-;allMonoms| (|l| $) - (PROG (#0=#:G1532 |p| #1=#:G1533) - (RETURN - (SEQ - (SPADCALL - (SPADCALL - (PROGN - (LETT #0# NIL |POLYCAT-;allMonoms|) - (SEQ - (LETT |p| NIL |POLYCAT-;allMonoms|) - (LETT #1# |l| |POLYCAT-;allMonoms|) - G190 - (COND - ((OR (ATOM #1#) (PROGN (LETT |p| (CAR #1#) |POLYCAT-;allMonoms|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #0# - (CONS (SPADCALL |p| (QREFELT $ 77)) #0#) - |POLYCAT-;allMonoms|))) - (LETT #1# (CDR #1#) |POLYCAT-;allMonoms|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - (QREFELT $ 79)) - (QREFELT $ 80)))))) - -(DEFUN |POLYCAT-;P2R| (|p| |b| |n| $) - (PROG (|w| |bj| #0=#:G1538 |i| #1=#:G1537) - (RETURN - (SEQ - (LETT |w| - (SPADCALL |n| (|spadConstant| $ 22) (QREFELT $ 82)) - |POLYCAT-;P2R|) - (SEQ - (LETT |bj| NIL |POLYCAT-;P2R|) - (LETT #0# |b| |POLYCAT-;P2R|) - (LETT |i| (SPADCALL |w| (QREFELT $ 84)) |POLYCAT-;P2R|) - (LETT #1# (QVSIZE |w|) |POLYCAT-;P2R|) - G190 - (COND - ((OR (> |i| #1#) - (ATOM #0#) - (PROGN (LETT |bj| (CAR #0#) |POLYCAT-;P2R|) NIL)) - (GO G191))) - (SEQ - (EXIT - (SPADCALL |w| |i| (SPADCALL |p| |bj| (QREFELT $ 85)) (QREFELT $ 86)))) - (LETT |i| - (PROG1 (+ |i| 1) (LETT #0# (CDR #0#) |POLYCAT-;P2R|)) |POLYCAT-;P2R|) - (GO G190) - G191 - (EXIT NIL)) - (EXIT |w|))))) - -(DEFUN |POLYCAT-;eq2R| (|l| |b| $) - (PROG (#0=#:G1542 |bj| #1=#:G1543 #2=#:G1544 |p| #3=#:G1545) - (RETURN - (SEQ - (SPADCALL - (PROGN - (LETT #0# NIL |POLYCAT-;eq2R|) - (SEQ - (LETT |bj| NIL |POLYCAT-;eq2R|) - (LETT #1# |b| |POLYCAT-;eq2R|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN (LETT |bj| (CAR #1#) |POLYCAT-;eq2R|) NIL)) (GO G191))) - (SEQ - (EXIT - (LETT #0# - (CONS - (PROGN - (LETT #2# NIL |POLYCAT-;eq2R|) - (SEQ - (LETT |p| NIL |POLYCAT-;eq2R|) - (LETT #3# |l| |POLYCAT-;eq2R|) - G190 - (COND - ((OR (ATOM #3#) (PROGN (LETT |p| (CAR #3#) |POLYCAT-;eq2R|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #2# - (CONS (SPADCALL |p| |bj| (QREFELT $ 85)) #2#) - |POLYCAT-;eq2R|))) - (LETT #3# (CDR #3#) |POLYCAT-;eq2R|) - (GO G190) - G191 - (EXIT (NREVERSE0 #2#)))) - #0#) - |POLYCAT-;eq2R|))) - (LETT #1# (CDR #1#) |POLYCAT-;eq2R|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - (QREFELT $ 89)))))) - -(DEFUN |POLYCAT-;reducedSystem;MM;20| (|m| $) - (PROG (#0=#:G1555 |r| #1=#:G1556 |b| #2=#:G1557 |bj| #3=#:G1558 |d| |mm| |l|) - (RETURN - (SEQ - (LETT |l| (SPADCALL |m| (QREFELT $ 92)) |POLYCAT-;reducedSystem;MM;20|) - (LETT |b| - (SPADCALL - (SPADCALL - (PROGN - (LETT #0# NIL |POLYCAT-;reducedSystem;MM;20|) - (SEQ - (LETT |r| NIL |POLYCAT-;reducedSystem;MM;20|) - (LETT #1# |l| |POLYCAT-;reducedSystem;MM;20|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN (LETT |r| (CAR #1#) |POLYCAT-;reducedSystem;MM;20|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #0# - (CONS (|POLYCAT-;allMonoms| |r| $) #0#) - |POLYCAT-;reducedSystem;MM;20|))) - (LETT #1# (CDR #1#) |POLYCAT-;reducedSystem;MM;20|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - (QREFELT $ 79)) - (QREFELT $ 80)) - |POLYCAT-;reducedSystem;MM;20|) - (LETT |d| - (PROGN - (LETT #2# NIL |POLYCAT-;reducedSystem;MM;20|) - (SEQ - (LETT |bj| NIL |POLYCAT-;reducedSystem;MM;20|) - (LETT #3# |b| |POLYCAT-;reducedSystem;MM;20|) - G190 - (COND - ((OR (ATOM #3#) - (PROGN (LETT |bj| (CAR #3#) |POLYCAT-;reducedSystem;MM;20|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #2# - (CONS (SPADCALL |bj| (QREFELT $ 59)) #2#) - |POLYCAT-;reducedSystem;MM;20|))) - (LETT #3# (CDR #3#) |POLYCAT-;reducedSystem;MM;20|) - (GO G190) - G191 - (EXIT (NREVERSE0 #2#)))) - |POLYCAT-;reducedSystem;MM;20|) - (LETT |mm| - (|POLYCAT-;eq2R| (|SPADfirst| |l|) |d| $) |POLYCAT-;reducedSystem;MM;20|) - (LETT |l| (CDR |l|) |POLYCAT-;reducedSystem;MM;20|) - (SEQ G190 - (COND - ((NULL (COND ((NULL |l|) (QUOTE NIL)) ((QUOTE T) (QUOTE T)))) (GO G191))) - (SEQ - (LETT |mm| - (SPADCALL |mm| (|POLYCAT-;eq2R| (|SPADfirst| |l|) |d| $) (QREFELT $ 93)) - |POLYCAT-;reducedSystem;MM;20|) - (EXIT (LETT |l| (CDR |l|) |POLYCAT-;reducedSystem;MM;20|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT |mm|))))) - -(DEFUN |POLYCAT-;reducedSystem;MVR;21| (|m| |v| $) - (PROG (#0=#:G1570 |s| #1=#:G1571 |b| #2=#:G1572 |bj| #3=#:G1573 |d| |n| - |mm| |w| |l| |r|) - (RETURN - (SEQ - (LETT |l| (SPADCALL |m| (QREFELT $ 92)) |POLYCAT-;reducedSystem;MVR;21|) - (LETT |r| (SPADCALL |v| (QREFELT $ 97)) |POLYCAT-;reducedSystem;MVR;21|) - (LETT |b| - (SPADCALL - (SPADCALL - (|POLYCAT-;allMonoms| |r| $) - (SPADCALL - (PROGN - (LETT #0# NIL |POLYCAT-;reducedSystem;MVR;21|) - (SEQ - (LETT |s| NIL |POLYCAT-;reducedSystem;MVR;21|) - (LETT #1# |l| |POLYCAT-;reducedSystem;MVR;21|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN - (LETT |s| (CAR #1#) |POLYCAT-;reducedSystem;MVR;21|) - NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #0# - (CONS (|POLYCAT-;allMonoms| |s| $) #0#) - |POLYCAT-;reducedSystem;MVR;21|))) - (LETT #1# (CDR #1#) |POLYCAT-;reducedSystem;MVR;21|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - (QREFELT $ 79)) - (QREFELT $ 98)) - (QREFELT $ 80)) - |POLYCAT-;reducedSystem;MVR;21|) - (LETT |d| - (PROGN - (LETT #2# NIL |POLYCAT-;reducedSystem;MVR;21|) - (SEQ - (LETT |bj| NIL |POLYCAT-;reducedSystem;MVR;21|) - (LETT #3# |b| |POLYCAT-;reducedSystem;MVR;21|) - G190 - (COND - ((OR (ATOM #3#) - (PROGN (LETT |bj| (CAR #3#) |POLYCAT-;reducedSystem;MVR;21|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #2# - (CONS (SPADCALL |bj| (QREFELT $ 59)) #2#) - |POLYCAT-;reducedSystem;MVR;21|))) - (LETT #3# (CDR #3#) |POLYCAT-;reducedSystem;MVR;21|) - (GO G190) - G191 - (EXIT (NREVERSE0 #2#)))) - |POLYCAT-;reducedSystem;MVR;21|) - (LETT |n| (LENGTH |d|) |POLYCAT-;reducedSystem;MVR;21|) - (LETT |mm| - (|POLYCAT-;eq2R| (|SPADfirst| |l|) |d| $) - |POLYCAT-;reducedSystem;MVR;21|) - (LETT |w| - (|POLYCAT-;P2R| (|SPADfirst| |r|) |d| |n| $) - |POLYCAT-;reducedSystem;MVR;21|) - (LETT |l| (CDR |l|) |POLYCAT-;reducedSystem;MVR;21|) - (LETT |r| (CDR |r|) |POLYCAT-;reducedSystem;MVR;21|) - (SEQ G190 - (COND - ((NULL (COND ((NULL |l|) (QUOTE NIL)) ((QUOTE T) (QUOTE T)))) - (GO G191))) - (SEQ - (LETT |mm| - (SPADCALL |mm| (|POLYCAT-;eq2R| (|SPADfirst| |l|) |d| $) (QREFELT $ 93)) - |POLYCAT-;reducedSystem;MVR;21|) - (LETT |w| - (SPADCALL |w| - (|POLYCAT-;P2R| (|SPADfirst| |r|) |d| |n| $) - (QREFELT $ 99)) - |POLYCAT-;reducedSystem;MVR;21|) - (LETT |l| (CDR |l|) |POLYCAT-;reducedSystem;MVR;21|) - (EXIT (LETT |r| (CDR |r|) |POLYCAT-;reducedSystem;MVR;21|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT (CONS |mm| |w|)))))) - -(DEFUN |POLYCAT-;gcdPolynomial;3Sup;22| (|pp| |qq| $) - (SPADCALL |pp| |qq| (QREFELT $ 104))) - -(DEFUN |POLYCAT-;solveLinearPolynomialEquation;LSupU;23| (|lpp| |pp| $) - (SPADCALL |lpp| |pp| (QREFELT $ 109))) - -(DEFUN |POLYCAT-;factorPolynomial;SupF;24| (|pp| $) - (SPADCALL |pp| (QREFELT $ 114))) - -(DEFUN |POLYCAT-;factorSquareFreePolynomial;SupF;25| (|pp| $) - (SPADCALL |pp| (QREFELT $ 117))) - -(DEFUN |POLYCAT-;factor;SF;26| (|p| $) - (PROG (|v| |ansR| #0=#:G1615 |w| #1=#:G1616 |up| |ansSUP| #2=#:G1617 - |ww| #3=#:G1618) - (RETURN - (SEQ - (LETT |v| (SPADCALL |p| (QREFELT $ 42)) |POLYCAT-;factor;SF;26|) - (EXIT - (COND - ((QEQCAR |v| 1) - (SEQ - (LETT |ansR| - (SPADCALL (SPADCALL |p| (QREFELT $ 38)) (QREFELT $ 120)) - |POLYCAT-;factor;SF;26|) - (EXIT - (SPADCALL - (SPADCALL (SPADCALL |ansR| (QREFELT $ 122)) (QREFELT $ 40)) - (PROGN - (LETT #0# NIL |POLYCAT-;factor;SF;26|) - (SEQ - (LETT |w| NIL |POLYCAT-;factor;SF;26|) - (LETT #1# - (SPADCALL |ansR| (QREFELT $ 126)) - |POLYCAT-;factor;SF;26|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN (LETT |w| (CAR #1#) |POLYCAT-;factor;SF;26|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #0# - (CONS - (VECTOR (QVELT |w| 0) - (SPADCALL (QVELT |w| 1) (QREFELT $ 40)) (QVELT |w| 2)) - #0#) - |POLYCAT-;factor;SF;26|))) - (LETT #1# (CDR #1#) |POLYCAT-;factor;SF;26|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - (QREFELT $ 130))))) - ((QUOTE T) - (SEQ - (LETT |up| - (SPADCALL |p| (QCDR |v|) (QREFELT $ 47)) |POLYCAT-;factor;SF;26|) - (LETT |ansSUP| (SPADCALL |up| (QREFELT $ 114)) |POLYCAT-;factor;SF;26|) - (EXIT - (SPADCALL - (SPADCALL - (SPADCALL |ansSUP| (QREFELT $ 131)) (QCDR |v|) (QREFELT $ 132)) - (PROGN - (LETT #2# NIL |POLYCAT-;factor;SF;26|) - (SEQ - (LETT |ww| NIL |POLYCAT-;factor;SF;26|) - (LETT #3# - (SPADCALL |ansSUP| (QREFELT $ 135)) - |POLYCAT-;factor;SF;26|) - G190 - (COND - ((OR (ATOM #3#) - (PROGN (LETT |ww| (CAR #3#) |POLYCAT-;factor;SF;26|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #2# - (CONS - (VECTOR (QVELT |ww| 0) (SPADCALL (QVELT |ww| 1) (QCDR |v|) - (QREFELT $ 132)) (QVELT |ww| 2)) - #2#) - |POLYCAT-;factor;SF;26|))) - (LETT #3# (CDR #3#) |POLYCAT-;factor;SF;26|) - (GO G190) - G191 - (EXIT (NREVERSE0 #2#)))) - (QREFELT $ 130))))))))))) - -(DEFUN |POLYCAT-;conditionP;MU;27| (|mat| $) - (PROG (|ll| #0=#:G1653 |z| #1=#:G1654 |ch| |l| #2=#:G1655 #3=#:G1656 - #4=#:G1625 #5=#:G1623 #6=#:G1624 #7=#:G1657 |vars| |degs| - #8=#:G1658 |d| #9=#:G1659 |nd| #10=#:G1652 #11=#:G1632 |deg1| - |redmons| #12=#:G1660 |v| #13=#:G1662 |u| #14=#:G1661 |llR| - |monslist| |ans| #15=#:G1663 #16=#:G1664 |mons| #17=#:G1665 |m| - #18=#:G1666 |i| #19=#:G1648 #20=#:G1646 #21=#:G1647) - (RETURN - (SEQ - (EXIT - (SEQ - (LETT |ll| - (SPADCALL (SPADCALL |mat| (QREFELT $ 137)) (QREFELT $ 92)) - |POLYCAT-;conditionP;MU;27|) - (LETT |llR| - (PROGN - (LETT #0# NIL |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |z| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #1# (|SPADfirst| |ll|) |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #1#) - (PROGN (LETT |z| (CAR #1#) |POLYCAT-;conditionP;MU;27|) NIL)) - (GO G191))) - (SEQ (EXIT (LETT #0# (CONS NIL #0#) |POLYCAT-;conditionP;MU;27|))) - (LETT #1# (CDR #1#) |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT (NREVERSE0 #0#)))) - |POLYCAT-;conditionP;MU;27|) - (LETT |monslist| NIL |POLYCAT-;conditionP;MU;27|) - (LETT |ch| (SPADCALL (QREFELT $ 138)) |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |l| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #2# |ll| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #2#) - (PROGN (LETT |l| (CAR #2#) |POLYCAT-;conditionP;MU;27|) NIL)) - (GO G191))) - (SEQ - (LETT |mons| - (PROGN - (LETT #6# NIL |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |u| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #3# |l| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #3#) - (PROGN (LETT |u| (CAR #3#) |POLYCAT-;conditionP;MU;27|) NIL)) - (GO G191))) - (SEQ - (EXIT - (PROGN - (LETT #4# - (SPADCALL |u| (QREFELT $ 77)) - |POLYCAT-;conditionP;MU;27|) - (COND - (#6# - (LETT #5# - (SPADCALL #5# #4# (QREFELT $ 139)) - |POLYCAT-;conditionP;MU;27|)) - ((QUOTE T) - (PROGN - (LETT #5# #4# |POLYCAT-;conditionP;MU;27|) - (LETT #6# (QUOTE T) |POLYCAT-;conditionP;MU;27|))))))) - (LETT #3# (CDR #3#) |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT NIL)) - (COND (#6# #5#) ((QUOTE T) (|IdentityError| (QUOTE |setUnion|))))) - |POLYCAT-;conditionP;MU;27|) - (LETT |redmons| NIL |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |m| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #7# |mons| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #7#) - (PROGN (LETT |m| (CAR #7#) |POLYCAT-;conditionP;MU;27|) NIL)) - (GO G191))) - (SEQ - (LETT |vars| - (SPADCALL |m| (QREFELT $ 31)) - |POLYCAT-;conditionP;MU;27|) - (LETT |degs| - (SPADCALL |m| |vars| (QREFELT $ 140)) - |POLYCAT-;conditionP;MU;27|) - (LETT |deg1| - (PROGN - (LETT #8# NIL |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |d| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #9# |degs| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #9#) - (PROGN - (LETT |d| (CAR #9#) |POLYCAT-;conditionP;MU;27|) - NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #8# - (CONS - (SEQ - (LETT |nd| - (SPADCALL |d| |ch| (QREFELT $ 142)) - |POLYCAT-;conditionP;MU;27|) - (EXIT - (COND - ((QEQCAR |nd| 1) - (PROGN - (LETT #10# - (CONS 1 "failed") |POLYCAT-;conditionP;MU;27|) - (GO #10#))) - ((QUOTE T) - (PROG1 - (LETT #11# (QCDR |nd|) |POLYCAT-;conditionP;MU;27|) - (|check-subtype| - (>= #11# 0) (QUOTE (|NonNegativeInteger|)) #11#)))))) - #8#) - |POLYCAT-;conditionP;MU;27|))) - (LETT #9# (CDR #9#) |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT (NREVERSE0 #8#)))) - |POLYCAT-;conditionP;MU;27|) - (LETT |redmons| - (CONS - (SPADCALL (|spadConstant| $ 33) |vars| |deg1| (QREFELT $ 54)) - |redmons|) - |POLYCAT-;conditionP;MU;27|) - (EXIT - (LETT |llR| - (PROGN - (LETT #12# NIL |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |v| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #13# |llR| |POLYCAT-;conditionP;MU;27|) - (LETT |u| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #14# |l| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #14#) - (PROGN - (LETT |u| (CAR #14#) |POLYCAT-;conditionP;MU;27|) - NIL) - (ATOM #13#) - (PROGN (LETT |v| (CAR #13#) |POLYCAT-;conditionP;MU;27|) NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #12# - (CONS - (CONS - (SPADCALL - (SPADCALL |u| |vars| |degs| (QREFELT $ 52)) - (QREFELT $ 143)) - |v|) - #12#) - |POLYCAT-;conditionP;MU;27|))) - (LETT #14# - (PROG1 - (CDR #14#) - (LETT #13# (CDR #13#) |POLYCAT-;conditionP;MU;27|)) - |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT (NREVERSE0 #12#)))) - |POLYCAT-;conditionP;MU;27|))) - (LETT #7# (CDR #7#) |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT NIL)) - (EXIT - (LETT |monslist| - (CONS |redmons| |monslist|) - |POLYCAT-;conditionP;MU;27|))) - (LETT #2# (CDR #2#) |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT NIL)) - (LETT |ans| - (SPADCALL (SPADCALL (SPADCALL |llR| (QREFELT $ 89)) (QREFELT $ 144)) - (QREFELT $ 146)) - |POLYCAT-;conditionP;MU;27|) - (EXIT - (COND - ((QEQCAR |ans| 1) (CONS 1 "failed")) - ((QUOTE T) - (SEQ - (LETT |i| 0 |POLYCAT-;conditionP;MU;27|) - (EXIT - (CONS 0 - (PRIMVEC2ARR - (PROGN - (LETT #15# (GETREFV (SIZE |monslist|)) - |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT #16# 0 |POLYCAT-;conditionP;MU;27|) - (LETT |mons| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #17# |monslist| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #17#) - (PROGN - (LETT |mons| (CAR #17#) |POLYCAT-;conditionP;MU;27|) - NIL)) - (GO G191))) - (SEQ - (EXIT - (SETELT #15# #16# - (PROGN - (LETT #21# NIL |POLYCAT-;conditionP;MU;27|) - (SEQ - (LETT |m| NIL |POLYCAT-;conditionP;MU;27|) - (LETT #18# |mons| |POLYCAT-;conditionP;MU;27|) - G190 - (COND - ((OR (ATOM #18#) - (PROGN - (LETT |m| (CAR #18#) |POLYCAT-;conditionP;MU;27|) - NIL)) - (GO G191))) - (SEQ - (EXIT - (PROGN - (LETT #19# - (SPADCALL |m| - (SPADCALL - (SPADCALL - (QCDR |ans|) - (LETT |i| (+ |i| 1) |POLYCAT-;conditionP;MU;27|) - (QREFELT $ 147)) - (QREFELT $ 40)) - (QREFELT $ 148)) - |POLYCAT-;conditionP;MU;27|) - (COND - (#21# - (LETT #20# - (SPADCALL #20# #19# (QREFELT $ 149)) - |POLYCAT-;conditionP;MU;27|)) - ((QUOTE T) - (PROGN - (LETT #20# #19# |POLYCAT-;conditionP;MU;27|) - (LETT #21# - (QUOTE T) - |POLYCAT-;conditionP;MU;27|))))))) - (LETT #18# (CDR #18#) |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT NIL)) - (COND (#21# #20#) ((QUOTE T) (|spadConstant| $ 21))))))) - (LETT #17# - (PROG1 - (CDR #17#) - (LETT #16# (QSADD1 #16#) |POLYCAT-;conditionP;MU;27|)) - |POLYCAT-;conditionP;MU;27|) - (GO G190) - G191 - (EXIT NIL)) - #15#)))))))))) - #10# - (EXIT #10#))))) - -(DEFUN |POLYCAT-;charthRoot;SU;28| (|p| $) - (PROG (|vars| |ans| |ch|) - (RETURN - (SEQ - (LETT |vars| (SPADCALL |p| (QREFELT $ 31)) |POLYCAT-;charthRoot;SU;28|) - (EXIT - (COND - ((NULL |vars|) - (SEQ - (LETT |ans| - (SPADCALL (SPADCALL |p| (QREFELT $ 143)) (QREFELT $ 151)) - |POLYCAT-;charthRoot;SU;28|) - (EXIT - (COND - ((QEQCAR |ans| 1) (CONS 1 "failed")) - ((QUOTE T) (CONS 0 (SPADCALL (QCDR |ans|) (QREFELT $ 40)))))))) - ((QUOTE T) - (SEQ - (LETT |ch| (SPADCALL (QREFELT $ 138)) |POLYCAT-;charthRoot;SU;28|) - (EXIT (|POLYCAT-;charthRootlv| |p| |vars| |ch| $)))))))))) - -(DEFUN |POLYCAT-;charthRootlv| (|p| |vars| |ch| $) - (PROG (|v| |dd| |cp| |d| #0=#:G1687 |ans| |ansx| #1=#:G1694) - (RETURN - (SEQ - (EXIT - (COND - ((NULL |vars|) - (SEQ - (LETT |ans| - (SPADCALL (SPADCALL |p| (QREFELT $ 143)) (QREFELT $ 151)) - |POLYCAT-;charthRootlv|) - (EXIT - (COND - ((QEQCAR |ans| 1) (CONS 1 "failed")) - ((QUOTE T) (CONS 0 (SPADCALL (QCDR |ans|) (QREFELT $ 40)))))))) - ((QUOTE T) - (SEQ - (LETT |v| (|SPADfirst| |vars|) |POLYCAT-;charthRootlv|) - (LETT |vars| (CDR |vars|) |POLYCAT-;charthRootlv|) - (LETT |d| (SPADCALL |p| |v| (QREFELT $ 36)) |POLYCAT-;charthRootlv|) - (LETT |ans| (|spadConstant| $ 21) |POLYCAT-;charthRootlv|) - (SEQ G190 - (COND ((NULL (< 0 |d|)) (GO G191))) - (SEQ - (LETT |dd| - (SPADCALL |d| |ch| (QREFELT $ 142)) - |POLYCAT-;charthRootlv|) - (EXIT - (COND - ((QEQCAR |dd| 1) - (PROGN - (LETT #1# (CONS 1 "failed") |POLYCAT-;charthRootlv|) - (GO #1#))) - ((QUOTE T) - (SEQ - (LETT |cp| - (SPADCALL |p| |v| |d| (QREFELT $ 154)) - |POLYCAT-;charthRootlv|) - (LETT |p| - (SPADCALL |p| - (SPADCALL |cp| |v| |d| (QREFELT $ 37)) - (QREFELT $ 155)) - |POLYCAT-;charthRootlv|) - (LETT |ansx| - (|POLYCAT-;charthRootlv| |cp| |vars| |ch| $) - |POLYCAT-;charthRootlv|) - (EXIT - (COND - ((QEQCAR |ansx| 1) - (PROGN - (LETT #1# (CONS 1 "failed") |POLYCAT-;charthRootlv|) - (GO #1#))) - ((QUOTE T) - (SEQ - (LETT |d| - (SPADCALL |p| |v| (QREFELT $ 36)) - |POLYCAT-;charthRootlv|) - (EXIT - (LETT |ans| - (SPADCALL |ans| - (SPADCALL (QCDR |ansx|) |v| - (PROG1 - (LETT #0# (QCDR |dd|) |POLYCAT-;charthRootlv|) - (|check-subtype| (>= #0# 0) - (QUOTE (|NonNegativeInteger|)) #0#)) - (QREFELT $ 37)) - (QREFELT $ 149)) - |POLYCAT-;charthRootlv|))))))))))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (LETT |ansx| - (|POLYCAT-;charthRootlv| |p| |vars| |ch| $) - |POLYCAT-;charthRootlv|) - (EXIT - (COND - ((QEQCAR |ansx| 1) - (PROGN - (LETT #1# (CONS 1 "failed") |POLYCAT-;charthRootlv|) - (GO #1#))) - ((QUOTE T) - (PROGN - (LETT #1# - (CONS 0 (SPADCALL |ans| (QCDR |ansx|) (QREFELT $ 149))) - |POLYCAT-;charthRootlv|) - (GO #1#))))))))) - #1# - (EXIT #1#))))) - -(DEFUN |POLYCAT-;monicDivide;2SVarSetR;30| (|p1| |p2| |mvar| $) - (PROG (|result|) - (RETURN - (SEQ - (LETT |result| - (SPADCALL - (SPADCALL |p1| |mvar| (QREFELT $ 47)) - (SPADCALL |p2| |mvar| (QREFELT $ 47)) - (QREFELT $ 157)) - |POLYCAT-;monicDivide;2SVarSetR;30|) - (EXIT - (CONS - (SPADCALL (QCAR |result|) |mvar| (QREFELT $ 132)) - (SPADCALL (QCDR |result|) |mvar| (QREFELT $ 132)))))))) - -(DEFUN |POLYCAT-;squareFree;SF;31| (|p| $) - (SPADCALL |p| (QREFELT $ 160))) - -(DEFUN |POLYCAT-;squareFree;SF;32| (|p| $) - (SPADCALL |p| (QREFELT $ 163))) - -(DEFUN |POLYCAT-;squareFree;SF;33| (|p| $) - (SPADCALL |p| (QREFELT $ 163))) - -(DEFUN |POLYCAT-;squareFreePart;2S;34| (|p| $) - (PROG (|s| |f| #0=#:G1710 #1=#:G1708 #2=#:G1706 #3=#:G1707) - (RETURN - (SEQ - (SPADCALL - (SPADCALL - (LETT |s| (SPADCALL |p| (QREFELT $ 164)) |POLYCAT-;squareFreePart;2S;34|) - (QREFELT $ 165)) - (PROGN - (LETT #3# NIL |POLYCAT-;squareFreePart;2S;34|) - (SEQ - (LETT |f| NIL |POLYCAT-;squareFreePart;2S;34|) - (LETT #0# (SPADCALL |s| (QREFELT $ 168)) |POLYCAT-;squareFreePart;2S;34|) - G190 - (COND - ((OR (ATOM #0#) - (PROGN (LETT |f| (CAR #0#) |POLYCAT-;squareFreePart;2S;34|) NIL)) - (GO G191))) - (SEQ - (EXIT - (PROGN - (LETT #1# (QCAR |f|) |POLYCAT-;squareFreePart;2S;34|) - (COND - (#3# - (LETT #2# - (SPADCALL #2# #1# (QREFELT $ 148)) - |POLYCAT-;squareFreePart;2S;34|)) - ((QUOTE T) - (PROGN - (LETT #2# #1# |POLYCAT-;squareFreePart;2S;34|) - (LETT #3# (QUOTE T) |POLYCAT-;squareFreePart;2S;34|))))))) - (LETT #0# (CDR #0#) |POLYCAT-;squareFreePart;2S;34|) - (GO G190) - G191 - (EXIT NIL)) - (COND (#3# #2#) ((QUOTE T) (|spadConstant| $ 33)))) - (QREFELT $ 148)))))) - -(DEFUN |POLYCAT-;content;SVarSetS;35| (|p| |v| $) - (SPADCALL (SPADCALL |p| |v| (QREFELT $ 47)) (QREFELT $ 170))) - -(DEFUN |POLYCAT-;primitivePart;2S;36| (|p| $) - (PROG (#0=#:G1713) - (RETURN - (COND - ((SPADCALL |p| (QREFELT $ 172)) |p|) - ((QUOTE T) - (QVELT - (SPADCALL - (PROG2 - (LETT #0# - (SPADCALL |p| (SPADCALL |p| (QREFELT $ 173)) (QREFELT $ 174)) - |POLYCAT-;primitivePart;2S;36|) - (QCDR #0#) - (|check-union| (QEQCAR #0# 0) (QREFELT $ 6) #0#)) - (QREFELT $ 176)) - 1)))))) - -(DEFUN |POLYCAT-;primitivePart;SVarSetS;37| (|p| |v| $) - (PROG (#0=#:G1720) - (RETURN - (COND - ((SPADCALL |p| (QREFELT $ 172)) |p|) - ((QUOTE T) - (QVELT - (SPADCALL - (PROG2 - (LETT #0# - (SPADCALL |p| (SPADCALL |p| |v| (QREFELT $ 178)) (QREFELT $ 179)) - |POLYCAT-;primitivePart;SVarSetS;37|) - (QCDR #0#) - (|check-union| (QEQCAR #0# 0) (QREFELT $ 6) #0#)) - (QREFELT $ 176)) - 1)))))) - -(DEFUN |POLYCAT-;<;2SB;38| (|p| |q| $) - (PROG (|dp| |dq|) - (RETURN - (SEQ - (LETT |dp| (SPADCALL |p| (QREFELT $ 59)) |POLYCAT-;<;2SB;38|) - (LETT |dq| (SPADCALL |q| (QREFELT $ 59)) |POLYCAT-;<;2SB;38|) - (EXIT - (COND - ((SPADCALL |dp| |dq| (QREFELT $ 181)) - (SPADCALL - (|spadConstant| $ 22) - (SPADCALL |q| (QREFELT $ 38)) - (QREFELT $ 182))) - ((SPADCALL |dq| |dp| (QREFELT $ 181)) - (SPADCALL - (SPADCALL |p| (QREFELT $ 38)) - (|spadConstant| $ 22) - (QREFELT $ 182))) - ((QUOTE T) - (SPADCALL - (SPADCALL (SPADCALL |p| |q| (QREFELT $ 155)) (QREFELT $ 38)) - (|spadConstant| $ 22) - (QREFELT $ 182))))))))) - -(DEFUN |POLYCAT-;patternMatch;SP2Pmr;39| (|p| |pat| |l| $) - (SPADCALL |p| |pat| |l| (QREFELT $ 187))) - -(DEFUN |POLYCAT-;patternMatch;SP2Pmr;40| (|p| |pat| |l| $) - (SPADCALL |p| |pat| |l| (QREFELT $ 193))) - -(DEFUN |POLYCAT-;convert;SP;41| (|x| $) - (SPADCALL (ELT $ 196) (ELT $ 197) |x| (QREFELT $ 201))) - -(DEFUN |POLYCAT-;convert;SP;42| (|x| $) - (SPADCALL (ELT $ 203) (ELT $ 204) |x| (QREFELT $ 208))) - -(DEFUN |POLYCAT-;convert;SIf;43| (|p| $) - (SPADCALL (ELT $ 211) (ELT $ 212) |p| (QREFELT $ 216))) - -(DEFUN |PolynomialCategory&| (|#1| |#2| |#3| |#4|) - (PROG (DV$1 DV$2 DV$3 DV$4 |dv$| $ |pv$|) - (RETURN - (PROGN - (LETT DV$1 (|devaluate| |#1|) . #0=(|PolynomialCategory&|)) - (LETT DV$2 (|devaluate| |#2|) . #0#) - (LETT DV$3 (|devaluate| |#3|) . #0#) - (LETT DV$4 (|devaluate| |#4|) . #0#) - (LETT |dv$| (LIST (QUOTE |PolynomialCategory&|) DV$1 DV$2 DV$3 DV$4) . #0#) - (LETT $ (GETREFV 226) . #0#) - (QSETREFV $ 0 |dv$|) - (QSETREFV $ 3 - (LETT |pv$| - (|buildPredVector| 0 0 - (LIST - (|HasCategory| |#2| (QUOTE (|PolynomialFactorizationExplicit|))) - (|HasAttribute| |#2| (QUOTE |canonicalUnitNormal|)) - (|HasCategory| |#2| (QUOTE (|GcdDomain|))) - (|HasCategory| |#2| (QUOTE (|CommutativeRing|))) - (|HasCategory| |#4| (QUOTE (|PatternMatchable| (|Float|)))) - (|HasCategory| |#2| (QUOTE (|PatternMatchable| (|Float|)))) - (|HasCategory| |#4| (QUOTE (|PatternMatchable| (|Integer|)))) - (|HasCategory| |#2| (QUOTE (|PatternMatchable| (|Integer|)))) - (|HasCategory| |#4| (QUOTE (|ConvertibleTo| (|Pattern| (|Float|))))) - (|HasCategory| |#2| (QUOTE (|ConvertibleTo| (|Pattern| (|Float|))))) - (|HasCategory| |#4| (QUOTE (|ConvertibleTo| (|Pattern| (|Integer|))))) - (|HasCategory| |#2| (QUOTE (|ConvertibleTo| (|Pattern| (|Integer|))))) - (|HasCategory| |#4| (QUOTE (|ConvertibleTo| (|InputForm|)))) - (|HasCategory| |#2| (QUOTE (|ConvertibleTo| (|InputForm|)))) - (|HasCategory| |#2| (QUOTE (|OrderedSet|))))) - . #0#)) - (|stuffDomainSlots| $) - (QSETREFV $ 6 |#1|) - (QSETREFV $ 7 |#2|) - (QSETREFV $ 8 |#3|) - (QSETREFV $ 9 |#4|) - (COND - ((|testBitVector| |pv$| 4) - (PROGN - (QSETREFV $ 74 - (CONS (|dispatchFunction| |POLYCAT-;resultant;2SVarSetS;15|) $)) - (QSETREFV $ 76 - (CONS (|dispatchFunction| |POLYCAT-;discriminant;SVarSetS;16|) $))))) - (COND - ((|HasCategory| |#2| (QUOTE (|IntegralDomain|))) - (PROGN - (QSETREFV $ 95 - (CONS (|dispatchFunction| |POLYCAT-;reducedSystem;MM;20|) $)) - (QSETREFV $ 102 - (CONS (|dispatchFunction| |POLYCAT-;reducedSystem;MVR;21|) $))))) - (COND - ((|testBitVector| |pv$| 1) - (PROGN - (QSETREFV $ 105 - (CONS (|dispatchFunction| |POLYCAT-;gcdPolynomial;3Sup;22|) $)) - (QSETREFV $ 112 - (CONS - (|dispatchFunction| - |POLYCAT-;solveLinearPolynomialEquation;LSupU;23|) - $)) - (QSETREFV $ 116 - (CONS (|dispatchFunction| |POLYCAT-;factorPolynomial;SupF;24|) $)) - (QSETREFV $ 118 - (CONS - (|dispatchFunction| |POLYCAT-;factorSquareFreePolynomial;SupF;25|) - $)) - (QSETREFV $ 136 (CONS (|dispatchFunction| |POLYCAT-;factor;SF;26|) $)) - (COND - ((|HasCategory| |#2| (QUOTE (|CharacteristicNonZero|))) - (PROGN - (QSETREFV $ 150 - (CONS (|dispatchFunction| |POLYCAT-;conditionP;MU;27|) $)))))))) - (COND - ((|HasCategory| |#2| (QUOTE (|CharacteristicNonZero|))) - (PROGN - (QSETREFV $ 152 - (CONS (|dispatchFunction| |POLYCAT-;charthRoot;SU;28|) $))))) - (COND - ((|testBitVector| |pv$| 3) - (PROGN - (COND - ((|HasCategory| |#2| (QUOTE (|EuclideanDomain|))) - (COND - ((|HasCategory| |#2| (QUOTE (|CharacteristicZero|))) - (QSETREFV $ 161 - (CONS (|dispatchFunction| |POLYCAT-;squareFree;SF;31|) $))) - ((QUOTE T) - (QSETREFV $ 161 - (CONS (|dispatchFunction| |POLYCAT-;squareFree;SF;32|) $))))) - ((QUOTE T) - (QSETREFV $ 161 - (CONS (|dispatchFunction| |POLYCAT-;squareFree;SF;33|) $)))) - (QSETREFV $ 169 - (CONS (|dispatchFunction| |POLYCAT-;squareFreePart;2S;34|) $)) - (QSETREFV $ 171 - (CONS (|dispatchFunction| |POLYCAT-;content;SVarSetS;35|) $)) - (QSETREFV $ 177 - (CONS (|dispatchFunction| |POLYCAT-;primitivePart;2S;36|) $)) - (QSETREFV $ 180 - (CONS (|dispatchFunction| |POLYCAT-;primitivePart;SVarSetS;37|) $))))) - (COND - ((|testBitVector| |pv$| 15) - (PROGN - (QSETREFV $ 183 (CONS (|dispatchFunction| |POLYCAT-;<;2SB;38|) $)) - (COND - ((|testBitVector| |pv$| 8) - (COND - ((|testBitVector| |pv$| 7) - (QSETREFV $ 189 - (CONS - (|dispatchFunction| |POLYCAT-;patternMatch;SP2Pmr;39|) - $)))))) - (COND - ((|testBitVector| |pv$| 6) - (COND - ((|testBitVector| |pv$| 5) - (QSETREFV $ 195 - (CONS - (|dispatchFunction| |POLYCAT-;patternMatch;SP2Pmr;40|) - $))))))))) - (COND - ((|testBitVector| |pv$| 12) - (COND - ((|testBitVector| |pv$| 11) - (QSETREFV $ 202 - (CONS (|dispatchFunction| |POLYCAT-;convert;SP;41|) $)))))) - (COND - ((|testBitVector| |pv$| 10) - (COND - ((|testBitVector| |pv$| 9) - (QSETREFV $ 209 - (CONS (|dispatchFunction| |POLYCAT-;convert;SP;42|) $)))))) - (COND - ((|testBitVector| |pv$| 14) - (COND - ((|testBitVector| |pv$| 13) - (QSETREFV $ 217 - (CONS (|dispatchFunction| |POLYCAT-;convert;SIf;43|) $)))))) - $)))) - -(MAKEPROP - (QUOTE |PolynomialCategory&|) - (QUOTE |infovec|) - (LIST (QUOTE - #(NIL NIL NIL NIL NIL NIL (|local| |#1|) (|local| |#2|) (|local| |#3|) - (|local| |#4|) (|Equation| 6) (0 . |lhs|) (|Union| 9 (QUOTE "failed")) - (5 . |retractIfCan|) (10 . |retract|) (15 . |rhs|) (|List| 9) (|List| $) - (20 . |eval|) (|List| 221) |POLYCAT-;eval;SLS;1| (27 . |Zero|) - (31 . |Zero|) (|Boolean|) (35 . =) (41 . |leadingMonomial|) - (46 . |reductum|) |POLYCAT-;monomials;SL;2| (51 . |monomials|) - (|Union| 17 (QUOTE "failed")) |POLYCAT-;isPlus;SU;3| (56 . |variables|) - (61 . |monomial?|) (66 . |One|) (70 . |One|) (|NonNegativeInteger|) - (74 . |degree|) (80 . |monomial|) (87 . |leadingCoefficient|) (92 . =) - (98 . |coerce|) |POLYCAT-;isTimes;SU;4| (103 . |mainVariable|) - (|Record| (|:| |var| 9) (|:| |exponent| 35)) - (|Union| 43 (QUOTE "failed")) |POLYCAT-;isExpt;SU;5| - (|SparseUnivariatePolynomial| $) (108 . |univariate|) - (|SparseUnivariatePolynomial| 6) (114 . |coefficient|) - |POLYCAT-;coefficient;SVarSetNniS;6| (|List| 35) (120 . |coefficient|) - |POLYCAT-;coefficient;SLLS;7| (127 . |monomial|) - |POLYCAT-;monomial;SLLS;8| (134 . |coerce|) - |POLYCAT-;retract;SVarSet;9| |POLYCAT-;retractIfCan;SU;10| - (139 . |degree|) (144 . |monomial|) |POLYCAT-;primitiveMonomials;SL;12| - (150 . |ground?|) (155 . |Zero|) (159 . =) (165 . |degree|) - (170 . |leadingCoefficient|) (175 . |totalDegree|) (180 . |reductum|) - |POLYCAT-;totalDegree;SNni;13| (185 . |member?|) (191 . |totalDegree|) - |POLYCAT-;totalDegree;SLNni;14| (197 . |resultant|) (203 . |resultant|) - (210 . |discriminant|) (215 . |discriminant|) (221 . |primitiveMonomials|) - (|List| 6) (226 . |concat|) (231 . |removeDuplicates!|) (|Vector| 7) - (236 . |new|) (|Integer|) (242 . |minIndex|) (247 . |coefficient|) - (253 . |qsetelt!|) (|List| 220) (|Matrix| 7) (260 . |matrix|) - (|List| 78) (|Matrix| 6) (265 . |listOfLists|) (270 . |vertConcat|) - (|Matrix| $) (276 . |reducedSystem|) (|Vector| 6) (281 . |entries|) - (286 . |concat|) (292 . |concat|) - (|Record| (|:| |mat| 88) (|:| |vec| 81)) (|Vector| $) - (298 . |reducedSystem|) (|GeneralPolynomialGcdPackage| 8 9 7 6) - (304 . |gcdPolynomial|) (310 . |gcdPolynomial|) - (|Union| 107 (QUOTE "failed")) (|List| 48) - (|PolynomialFactorizationByRecursion| 7 8 9 6) - (316 . |solveLinearPolynomialEquationByRecursion|) - (|Union| 111 (QUOTE "failed")) (|List| 46) - (322 . |solveLinearPolynomialEquation|) (|Factored| 48) - (328 . |factorByRecursion|) (|Factored| 46) (333 . |factorPolynomial|) - (338 . |factorSquareFreeByRecursion|) - (343 . |factorSquareFreePolynomial|) (|Factored| $) (348 . |factor|) - (|Factored| 7) (353 . |unit|) - (|Union| (QUOTE "nil") (QUOTE "sqfr") (QUOTE "irred") (QUOTE "prime")) - (|Record| (|:| |flg| 123) (|:| |fctr| 7) (|:| |xpnt| 83)) - (|List| 124) (358 . |factorList|) - (|Record| (|:| |flg| 123) (|:| |fctr| 6) (|:| |xpnt| 83)) - (|List| 127) (|Factored| 6) (363 . |makeFR|) (369 . |unit|) - (374 . |multivariate|) - (|Record| (|:| |flg| 123) (|:| |fctr| 48) (|:| |xpnt| 83)) - (|List| 133) (380 . |factorList|) (385 . |factor|) (390 . |transpose|) - (395 . |characteristic|) (399 . |setUnion|) (405 . |degree|) - (|Union| $ (QUOTE "failed")) (411 . |exquo|) (417 . |ground|) - (422 . |transpose|) (|Union| 101 (QUOTE "failed")) (427 . |conditionP|) - (432 . |elt|) (438 . *) (444 . +) (450 . |conditionP|) - (455 . |charthRoot|) (460 . |charthRoot|) (465 . |Zero|) - (469 . |coefficient|) (476 . -) - (|Record| (|:| |quotient| $) (|:| |remainder| $)) - (482 . |monicDivide|) |POLYCAT-;monicDivide;2SVarSetR;30| - (|MultivariateSquareFree| 8 9 7 6) (488 . |squareFree|) - (493 . |squareFree|) (|PolynomialSquareFree| 9 8 7 6) - (498 . |squareFree|) (503 . |squareFree|) (508 . |unit|) - (|Record| (|:| |factor| 6) (|:| |exponent| 83)) (|List| 166) - (513 . |factors|) (518 . |squareFreePart|) (523 . |content|) - (528 . |content|) (534 . |zero?|) (539 . |content|) (544 . |exquo|) - (|Record| (|:| |unit| $) (|:| |canonical| $) (|:| |associate| $)) - (550 . |unitNormal|) (555 . |primitivePart|) (560 . |content|) - (566 . |exquo|) (572 . |primitivePart|) (578 . <) (584 . <) (590 . <) - (|PatternMatchResult| 83 6) (|Pattern| 83) - (|PatternMatchPolynomialCategory| 83 8 9 7 6) (596 . |patternMatch|) - (|PatternMatchResult| 83 $) (603 . |patternMatch|) - (|PatternMatchResult| (|Float|) 6) (|Pattern| (|Float|)) - (|PatternMatchPolynomialCategory| (|Float|) 8 9 7 6) - (610 . |patternMatch|) (|PatternMatchResult| (|Float|) $) - (617 . |patternMatch|) (624 . |convert|) (629 . |convert|) - (|Mapping| 185 9) (|Mapping| 185 7) - (|PolynomialCategoryLifting| 8 9 7 6 185) (634 . |map|) - (641 . |convert|) (646 . |convert|) (651 . |convert|) (|Mapping| 191 9) - (|Mapping| 191 7) (|PolynomialCategoryLifting| 8 9 7 6 191) - (656 . |map|) (663 . |convert|) (|InputForm|) (668 . |convert|) - (673 . |convert|) (|Mapping| 210 9) (|Mapping| 210 7) - (|PolynomialCategoryLifting| 8 9 7 6 210) (678 . |map|) - (685 . |convert|) (|Record| (|:| |mat| 219) (|:| |vec| (|Vector| 83))) - (|Matrix| 83) (|List| 7) (|Equation| $) (|Union| 83 (QUOTE "failed")) - (|Union| 224 (QUOTE "failed")) (|Fraction| 83) - (|Union| 7 (QUOTE "failed")))) - (QUOTE #(|totalDegree| 690 |squareFreePart| 701 |squareFree| 706 - |solveLinearPolynomialEquation| 711 |retractIfCan| 717 |retract| 722 - |resultant| 727 |reducedSystem| 734 |primitivePart| 745 - |primitiveMonomials| 756 |patternMatch| 761 |monomials| 775 - |monomial| 780 |monicDivide| 787 |isTimes| 794 |isPlus| 799 - |isExpt| 804 |gcdPolynomial| 809 |factorSquareFreePolynomial| 815 - |factorPolynomial| 820 |factor| 825 |eval| 830 |discriminant| 836 - |convert| 842 |content| 857 |conditionP| 863 |coefficient| 868 - |charthRoot| 882 < 887)) - (QUOTE NIL) - (CONS (|makeByteWordVec2| 1 (QUOTE NIL)) - (CONS (QUOTE #()) - (CONS (QUOTE #()) - (|makeByteWordVec2| 217 (QUOTE - (1 10 6 0 11 1 6 12 0 13 1 6 9 0 14 1 10 6 0 15 3 6 0 0 16 17 18 0 6 0 - 21 0 7 0 22 2 6 23 0 0 24 1 6 0 0 25 1 6 0 0 26 1 6 17 0 28 1 6 16 0 - 31 1 6 23 0 32 0 6 0 33 0 7 0 34 2 6 35 0 9 36 3 6 0 0 9 35 37 1 6 7 - 0 38 2 7 23 0 0 39 1 6 0 7 40 1 6 12 0 42 2 6 46 0 9 47 2 48 6 0 35 - 49 3 6 0 0 16 51 52 3 6 0 0 16 51 54 1 6 0 9 56 1 6 8 0 59 2 6 0 7 8 - 60 1 6 23 0 62 0 48 0 63 2 48 23 0 0 64 1 48 35 0 65 1 48 6 0 66 1 6 - 35 0 67 1 48 0 0 68 2 16 23 9 0 70 2 6 35 0 16 71 2 48 6 0 0 73 3 0 - 0 0 0 9 74 1 48 6 0 75 2 0 0 0 9 76 1 6 17 0 77 1 78 0 17 79 1 78 0 - 0 80 2 81 0 35 7 82 1 81 83 0 84 2 6 7 0 8 85 3 81 7 0 83 7 86 1 88 - 0 87 89 1 91 90 0 92 2 88 0 0 0 93 1 0 88 94 95 1 96 78 0 97 2 78 0 - 0 0 98 2 81 0 0 0 99 2 0 100 94 101 102 2 103 48 48 48 104 2 0 46 46 - 46 105 2 108 106 107 48 109 2 0 110 111 46 112 1 108 113 48 114 1 0 - 115 46 116 1 108 113 48 117 1 0 115 46 118 1 7 119 0 120 1 121 7 0 - 122 1 121 125 0 126 2 129 0 6 128 130 1 113 48 0 131 2 6 0 46 9 132 - 1 113 134 0 135 1 0 119 0 136 1 91 0 0 137 0 6 35 138 2 78 0 0 0 139 - 2 6 51 0 16 140 2 83 141 0 0 142 1 6 7 0 143 1 88 0 0 144 1 7 145 94 - 146 2 81 7 0 83 147 2 6 0 0 0 148 2 6 0 0 0 149 1 0 145 94 150 1 7 - 141 0 151 1 0 141 0 152 0 8 0 153 3 6 0 0 9 35 154 2 6 0 0 0 155 2 - 48 156 0 0 157 1 159 129 6 160 1 0 119 0 161 1 162 129 6 163 1 6 119 - 0 164 1 129 6 0 165 1 129 167 0 168 1 0 0 0 169 1 48 6 0 170 2 0 0 0 - 9 171 1 6 23 0 172 1 6 7 0 173 2 6 141 0 7 174 1 6 175 0 176 1 0 0 0 - 177 2 6 0 0 9 178 2 6 141 0 0 179 2 0 0 0 9 180 2 8 23 0 0 181 2 7 23 - 0 0 182 2 0 23 0 0 183 3 186 184 6 185 184 187 3 0 188 0 185 188 189 - 3 192 190 6 191 190 193 3 0 194 0 191 194 195 1 9 185 0 196 1 7 185 - 0 197 3 200 185 198 199 6 201 1 0 185 0 202 1 9 191 0 203 1 7 191 0 - 204 3 207 191 205 206 6 208 1 0 191 0 209 1 9 210 0 211 1 7 210 0 - 212 3 215 210 213 214 6 216 1 0 210 0 217 2 0 35 0 16 72 1 0 35 0 69 - 1 0 0 0 169 1 0 119 0 161 2 0 110 111 46 112 1 0 12 0 58 1 0 9 0 57 - 3 0 0 0 0 9 74 1 0 88 94 95 2 0 100 94 101 102 2 0 0 0 9 180 1 0 0 0 - 177 1 0 17 0 61 3 0 188 0 185 188 189 3 0 194 0 191 194 195 1 0 17 0 - 27 3 0 0 0 16 51 55 3 0 156 0 0 9 158 1 0 29 0 41 1 0 29 0 30 1 0 44 - 0 45 2 0 46 46 46 105 1 0 115 46 118 1 0 115 46 116 1 0 119 0 136 2 - 0 0 0 19 20 2 0 0 0 9 76 1 0 210 0 217 1 0 185 0 202 1 0 191 0 209 2 - 0 0 0 9 171 1 0 145 94 150 3 0 0 0 16 51 53 3 0 0 0 9 35 50 1 0 141 - 0 152 2 0 23 0 0 183)))))) - (QUOTE |lookupComplete|))) - -@ \section{package POLYLIFT PolynomialCategoryLifting} <>= "POLYLIFT" -> "PACKAGE" @@ -2144,1890 +62,6 @@ PolynomialCategoryLifting(E,Vars,R,P,S): Exports == Implementation where ans + map(fv, fc, leadingCoefficient up) @ -\section{category UPOLYC UnivariatePolynomialCategory} -<>= -)abbrev category UPOLYC UnivariatePolynomialCategory -++ Author: -++ Date Created: -++ Date Last Updated: -++ Basic Functions: Ring, monomial, coefficient, reductum, differentiate, -++ elt, map, resultant, discriminant -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ The category of univariate polynomials over a ring R. -++ No particular model is assumed - implementations can be either -++ sparse or dense. - -UnivariatePolynomialCategory(R:Ring): Category == - Join(PolynomialCategory(R, NonNegativeInteger, SingletonAsOrderedSet), - Eltable(R, R), Eltable(%, %), DifferentialRing, - DifferentialExtension R) with - vectorise : (%,NonNegativeInteger) -> Vector R - ++ vectorise(p, n) returns \spad{[a0,...,a(n-1)]} where - ++ \spad{p = a0 + a1*x + ... + a(n-1)*x**(n-1)} + higher order terms. - ++ The degree of polynomial p can be different from \spad{n-1}. - makeSUP: % -> SparseUnivariatePolynomial R - ++ makeSUP(p) converts the polynomial p to be of type - ++ SparseUnivariatePolynomial over the same coefficients. - unmakeSUP: SparseUnivariatePolynomial R -> % - ++ unmakeSUP(sup) converts sup of type \spadtype{SparseUnivariatePolynomial(R)} - ++ to be a member of the given type. - ++ Note: converse of makeSUP. - multiplyExponents: (%,NonNegativeInteger) -> % - ++ multiplyExponents(p,n) returns a new polynomial resulting from - ++ multiplying all exponents of the polynomial p by the non negative - ++ integer n. - divideExponents: (%,NonNegativeInteger) -> Union(%,"failed") - ++ divideExponents(p,n) returns a new polynomial resulting from - ++ dividing all exponents of the polynomial p by the non negative - ++ integer n, or "failed" if some exponent is not exactly divisible - ++ by n. - monicDivide: (%,%) -> Record(quotient:%,remainder:%) - ++ monicDivide(p,q) divide the polynomial p by the monic polynomial q, - ++ returning the pair \spad{[quotient, remainder]}. - ++ Error: if q isn't monic. --- These three are for Karatsuba - karatsubaDivide: (%,NonNegativeInteger) -> Record(quotient:%,remainder:%) - ++ \spad{karatsubaDivide(p,n)} returns the same as \spad{monicDivide(p,monomial(1,n))} - shiftRight: (%,NonNegativeInteger) -> % - ++ \spad{shiftRight(p,n)} returns \spad{monicDivide(p,monomial(1,n)).quotient} - shiftLeft: (%,NonNegativeInteger) -> % - ++ \spad{shiftLeft(p,n)} returns \spad{p * monomial(1,n)} - pseudoRemainder: (%,%) -> % - ++ pseudoRemainder(p,q) = r, for polynomials p and q, returns the remainder when - ++ \spad{p' := p*lc(q)**(deg p - deg q + 1)} - ++ is pseudo right-divided by q, i.e. \spad{p' = s q + r}. - differentiate: (%, R -> R, %) -> % - ++ differentiate(p, d, x') extends the R-derivation d to an - ++ extension D in \spad{R[x]} where Dx is given by x', and returns \spad{Dp}. - if R has StepThrough then StepThrough - if R has CommutativeRing then - discriminant: % -> R - ++ discriminant(p) returns the discriminant of the polynomial p. - resultant: (%,%) -> R - ++ resultant(p,q) returns the resultant of the polynomials p and q. - if R has IntegralDomain then - Eltable(Fraction %, Fraction %) - elt : (Fraction %, Fraction %) -> Fraction % - ++ elt(a,b) evaluates the fraction of univariate polynomials \spad{a} - ++ with the distinguished variable replaced by b. - order: (%, %) -> NonNegativeInteger - ++ order(p, q) returns the largest n such that \spad{q**n} divides polynomial p - ++ i.e. the order of \spad{p(x)} at \spad{q(x)=0}. - subResultantGcd: (%,%) -> % - ++ subResultantGcd(p,q) computes the gcd of the polynomials p and q - ++ using the SubResultant GCD algorithm. - composite: (%, %) -> Union(%, "failed") - ++ composite(p, q) returns h if \spad{p = h(q)}, and "failed" no such h exists. - composite: (Fraction %, %) -> Union(Fraction %, "failed") - ++ composite(f, q) returns h if f = h(q), and "failed" is no such h exists. - pseudoQuotient: (%,%) -> % - ++ pseudoQuotient(p,q) returns r, the quotient when - ++ \spad{p' := p*lc(q)**(deg p - deg q + 1)} - ++ is pseudo right-divided by q, i.e. \spad{p' = s q + r}. - pseudoDivide: (%, %) -> Record(coef:R, quotient: %, remainder:%) - ++ pseudoDivide(p,q) returns \spad{[c, q, r]}, when - ++ \spad{p' := p*lc(q)**(deg p - deg q + 1) = c * p} - ++ is pseudo right-divided by q, i.e. \spad{p' = s q + r}. - if R has GcdDomain then - separate: (%, %) -> Record(primePart:%, commonPart: %) - ++ separate(p, q) returns \spad{[a, b]} such that polynomial \spad{p = a b} and - ++ \spad{a} is relatively prime to q. - if R has Field then - EuclideanDomain - additiveValuation - ++ euclideanSize(a*b) = euclideanSize(a) + euclideanSize(b) - elt : (Fraction %, R) -> R - ++ elt(a,r) evaluates the fraction of univariate polynomials \spad{a} - ++ with the distinguished variable replaced by the constant r. - if R has Algebra Fraction Integer then - integrate: % -> % - ++ integrate(p) integrates the univariate polynomial p with respect - ++ to its distinguished variable. - add - pp,qq: SparseUnivariatePolynomial % - variables(p) == - zero? p or zero?(degree p) => [] - [create()] - degree(p:%,v:SingletonAsOrderedSet) == degree p - totalDegree(p:%,lv:List SingletonAsOrderedSet) == - empty? lv => 0 - totalDegree p - degree(p:%,lv:List SingletonAsOrderedSet) == - empty? lv => [] - [degree p] - eval(p:%,lv: List SingletonAsOrderedSet,lq: List %):% == - empty? lv => p - not empty? rest lv => error "can only eval a univariate polynomial once" - eval(p,first lv,first lq)$% - eval(p:%,v:SingletonAsOrderedSet,q:%):% == p(q) - eval(p:%,lv: List SingletonAsOrderedSet,lr: List R):% == - empty? lv => p - not empty? rest lv => error "can only eval a univariate polynomial once" - eval(p,first lv,first lr)$% - eval(p:%,v:SingletonAsOrderedSet,r:R):% == p(r)::% - eval(p:%,le:List Equation %):% == - empty? le => p - not empty? rest le => error "can only eval a univariate polynomial once" - mainVariable(lhs first le) case "failed" => p - p(rhs first le) - mainVariable(p:%) == - zero? degree p => "failed" - create()$SingletonAsOrderedSet - minimumDegree(p:%,v:SingletonAsOrderedSet) == minimumDegree p - minimumDegree(p:%,lv:List SingletonAsOrderedSet) == - empty? lv => [] - [minimumDegree p] - monomial(p:%,v:SingletonAsOrderedSet,n:NonNegativeInteger) == - mapExponents(#1+n,p) - coerce(v:SingletonAsOrderedSet):% == monomial(1,1) - makeSUP p == - zero? p => 0 - monomial(leadingCoefficient p,degree p) + makeSUP reductum p - unmakeSUP sp == - zero? sp => 0 - monomial(leadingCoefficient sp,degree sp) + unmakeSUP reductum sp - karatsubaDivide(p:%,n:NonNegativeInteger) == monicDivide(p,monomial(1,n)) - shiftRight(p:%,n:NonNegativeInteger) == monicDivide(p,monomial(1,n)).quotient - shiftLeft(p:%,n:NonNegativeInteger) == p * monomial(1,n) - if R has PolynomialFactorizationExplicit then - PFBRU ==>PolynomialFactorizationByRecursionUnivariate(R,%) - pp,qq:SparseUnivariatePolynomial % - lpp:List SparseUnivariatePolynomial % - SupR ==> SparseUnivariatePolynomial R - sp:SupR - - solveLinearPolynomialEquation(lpp,pp) == - solveLinearPolynomialEquationByRecursion(lpp,pp)$PFBRU - factorPolynomial(pp) == - factorByRecursion(pp)$PFBRU - factorSquareFreePolynomial(pp) == - factorSquareFreeByRecursion(pp)$PFBRU - import FactoredFunctions2(SupR,S) - factor p == - zero? degree p => - ansR:=factor leadingCoefficient p - makeFR(unit(ansR)::%, - [[w.flg,w.fctr::%,w.xpnt] for w in factorList ansR]) - map(unmakeSUP,factorPolynomial(makeSUP p)$R) - - vectorise(p, n) == - m := minIndex(v := new(n, 0)$Vector(R)) - for i in minIndex v .. maxIndex v repeat - qsetelt_!(v, i, coefficient(p, (i - m)::NonNegativeInteger)) - v - retract(p:%):R == - zero? p => 0 - zero? degree p => leadingCoefficient p - error "Polynomial is not of degree 0" - retractIfCan(p:%):Union(R, "failed") == - zero? p => 0 - zero? degree p => leadingCoefficient p - "failed" - - if R has StepThrough then - init() == init()$R::% - nextItemInner: % -> Union(%,"failed") - nextItemInner(n) == - zero? n => nextItem(0$R)::R::% -- assumed not to fail - zero? degree n => - nn:=nextItem leadingCoefficient n - nn case "failed" => "failed" - nn::R::% - n1:=reductum n - n2:=nextItemInner n1 -- try stepping the reductum - n2 case % => monomial(leadingCoefficient n,degree n) + n2 - 1+degree n1 < degree n => -- there was a hole between lt n and n1 - monomial(leadingCoefficient n,degree n)+ - monomial(nextItem(init()$R)::R,1+degree n1) - n3:=nextItem leadingCoefficient n - n3 case "failed" => "failed" - monomial(n3,degree n) - nextItem(n) == - n1:=nextItemInner n - n1 case "failed" => monomial(nextItem(init()$R)::R,1+degree(n)) - n1 - - if R has GcdDomain then - - content(p:%,v:SingletonAsOrderedSet) == content(p)::% - - primeFactor: (%, %) -> % - - primeFactor(p, q) == - (p1 := (p exquo gcd(p, q))::%) = p => p - primeFactor(p1, q) - - separate(p, q) == - a := primeFactor(p, q) - [a, (p exquo a)::%] - - if R has CommutativeRing then - differentiate(x:%, deriv:R -> R, x':%) == - d:% := 0 - while (dg := degree x) > 0 repeat - lc := leadingCoefficient x - d := d + x' * monomial(dg * lc, (dg - 1)::NonNegativeInteger) - + monomial(deriv lc, dg) - x := reductum x - d + deriv(leadingCoefficient x)::% - else - ncdiff: (NonNegativeInteger, %) -> % - -- computes d(x**n) given dx = x', non-commutative case - ncdiff(n, x') == - zero? n => 0 - zero?(n1 := (n - 1)::NonNegativeInteger) => x' - x' * monomial(1, n1) + monomial(1, 1) * ncdiff(n1, x') - - differentiate(x:%, deriv:R -> R, x':%) == - d:% := 0 - while (dg := degree x) > 0 repeat - lc := leadingCoefficient x - d := d + monomial(deriv lc, dg) + lc * ncdiff(dg, x') - x := reductum x - d + deriv(leadingCoefficient x)::% - differentiate(x:%, deriv:R -> R) == differentiate(x, deriv, 1$%)$% - differentiate(x:%) == - d:% := 0 - while (dg := degree x) > 0 repeat - d := d + monomial(dg * leadingCoefficient x, (dg - 1)::NonNegativeInteger) - x := reductum x - d - differentiate(x:%,v:SingletonAsOrderedSet) == differentiate x - if R has IntegralDomain then - elt(g:Fraction %, f:Fraction %) == ((numer g) f) / ((denom g) f) - - pseudoQuotient(p, q) == - (n := degree(p)::Integer - degree q + 1) < 1 => 0 - ((leadingCoefficient(q)**(n::NonNegativeInteger) * p - - pseudoRemainder(p, q)) exquo q)::% - - pseudoDivide(p, q) == - (n := degree(p)::Integer - degree q + 1) < 1 => [1, 0, p] - prem := pseudoRemainder(p, q) - lc := leadingCoefficient(q)**(n::NonNegativeInteger) - [lc,((lc*p - prem) exquo q)::%, prem] - - composite(f:Fraction %, q:%) == - (n := composite(numer f, q)) case "failed" => "failed" - (d := composite(denom f, q)) case "failed" => "failed" - n::% / d::% - - composite(p:%, q:%) == - ground? p => p - cqr := pseudoDivide(p, q) - ground?(cqr.remainder) and - ((v := cqr.remainder exquo cqr.coef) case %) and - ((u := composite(cqr.quotient, q)) case %) and - ((w := (u::%) exquo cqr.coef) case %) => - v::% + monomial(1, 1) * w::% - "failed" - - elt(p:%, f:Fraction %) == - zero? p => 0 - ans:Fraction(%) := (leadingCoefficient p)::%::Fraction(%) - n := degree p - while not zero?(p:=reductum p) repeat - ans := ans * f ** (n - (n := degree p))::NonNegativeInteger + - (leadingCoefficient p)::%::Fraction(%) - zero? n => ans - ans * f ** n - - order(p, q) == - zero? p => error "order: arguments must be nonzero" - degree(q) < 1 => error "order: place must be non-trivial" - ans:NonNegativeInteger := 0 - repeat - (u := p exquo q) case "failed" => return ans - p := u::% - ans := ans + 1 - - if R has GcdDomain then - squareFree(p:%) == - squareFree(p)$UnivariatePolynomialSquareFree(R, %) - - squareFreePart(p:%) == - squareFreePart(p)$UnivariatePolynomialSquareFree(R, %) - - if R has PolynomialFactorizationExplicit then - - gcdPolynomial(pp,qq) == - zero? pp => unitCanonical qq -- subResultantGcd can't handle 0 - zero? qq => unitCanonical pp - unitCanonical(gcd(content (pp),content(qq))* - primitivePart - subResultantGcd(primitivePart pp,primitivePart qq)) - - squareFreePolynomial pp == - squareFree(pp)$UnivariatePolynomialSquareFree(%, - SparseUnivariatePolynomial %) - - if R has Field then - elt(f:Fraction %, r:R) == ((numer f) r) / ((denom f) r) - - euclideanSize x == - zero? x => - error "euclideanSize called on 0 in Univariate Polynomial" - degree x - divide(x,y) == - zero? y => error "division by 0 in Univariate Polynomials" - quot:=0 - lc := inv leadingCoefficient y - while not zero?(x) and (degree x >= degree y) repeat - f:=lc*leadingCoefficient x - n:=(degree x - degree y)::NonNegativeInteger - quot:=quot+monomial(f,n) - x:=x-monomial(f,n)*y - [quot,x] - if R has Algebra Fraction Integer then - integrate p == - ans:% := 0 - while p ^= 0 repeat - l := leadingCoefficient p - d := 1 + degree p - ans := ans + inv(d::Fraction(Integer)) * monomial(l, d) - p := reductum p - ans - -@ -\section{UPOLYC.lsp BOOTSTRAP} -{\bf UPOLYC} depends on itself. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf UPOLYC} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf UPOLYC.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. - -Note that this code is not included in the generated catdef.spad file. - -<>= - -(|/VERSIONCHECK| 2) - -(SETQ |UnivariatePolynomialCategory;CAT| (QUOTE NIL)) - -(SETQ |UnivariatePolynomialCategory;AL| (QUOTE NIL)) - -(DEFUN |UnivariatePolynomialCategory| (#1=#:G103214) - (LET (#2=#:G103215) - (COND - ((SETQ #2# (|assoc| (|devaluate| #1#) |UnivariatePolynomialCategory;AL|)) - (CDR #2#)) - (T - (SETQ |UnivariatePolynomialCategory;AL| - (|cons5| - (CONS - (|devaluate| #1#) - (SETQ #2# (|UnivariatePolynomialCategory;| #1#))) - |UnivariatePolynomialCategory;AL|)) - #2#)))) - -(DEFUN |UnivariatePolynomialCategory;| (|t#1|) - (PROG (#1=#:G103213) - (RETURN - (PROG1 - (LETT #1# - (|sublisV| - (PAIR (QUOTE (|t#1|)) (LIST (|devaluate| |t#1|))) - (|sublisV| - (PAIR - (QUOTE (#2=#:G103211 #3=#:G103212)) - (LIST - (QUOTE (|NonNegativeInteger|)) - (QUOTE (|SingletonAsOrderedSet|)))) - (COND - (|UnivariatePolynomialCategory;CAT|) - ((QUOTE T) - (LETT |UnivariatePolynomialCategory;CAT| - (|Join| - (|PolynomialCategory| - (QUOTE |t#1|) (QUOTE #2#) (QUOTE #3#)) - (|Eltable| (QUOTE |t#1|) (QUOTE |t#1|)) - (|Eltable| (QUOTE |$|) (QUOTE |$|)) - (|DifferentialRing|) - (|DifferentialExtension| (QUOTE |t#1|)) - (|mkCategory| - (QUOTE |domain|) - (QUOTE ( - ((|vectorise| - ((|Vector| |t#1|) |$| (|NonNegativeInteger|))) T) - ((|makeSUP| - ((|SparseUnivariatePolynomial| |t#1|) |$|)) T) - ((|unmakeSUP| - (|$| (|SparseUnivariatePolynomial| |t#1|))) T) - ((|multiplyExponents| - (|$| |$| (|NonNegativeInteger|))) T) - ((|divideExponents| - ((|Union| |$| "failed") - |$| - (|NonNegativeInteger|))) T) - ((|monicDivide| - ((|Record| - (|:| |quotient| |$|) - (|:| |remainder| |$|)) - |$| - |$|)) T) - ((|karatsubaDivide| - ((|Record| - (|:| |quotient| |$|) - (|:| |remainder| |$|)) - |$| - (|NonNegativeInteger|))) T) - ((|shiftRight| (|$| |$| (|NonNegativeInteger|))) T) - ((|shiftLeft| (|$| |$| (|NonNegativeInteger|))) T) - ((|pseudoRemainder| (|$| |$| |$|)) T) - ((|differentiate| - (|$| |$| (|Mapping| |t#1| |t#1|) |$|)) T) - ((|discriminant| (|t#1| |$|)) - (|has| |t#1| (|CommutativeRing|))) - ((|resultant| (|t#1| |$| |$|)) - (|has| |t#1| (|CommutativeRing|))) - ((|elt| - ((|Fraction| |$|) - (|Fraction| |$|) - (|Fraction| |$|))) - (|has| |t#1| (|IntegralDomain|))) - ((|order| ((|NonNegativeInteger|) |$| |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|subResultantGcd| (|$| |$| |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|composite| ((|Union| |$| "failed") |$| |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|composite| - ((|Union| (|Fraction| |$|) "failed") - (|Fraction| |$|) - |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|pseudoQuotient| (|$| |$| |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|pseudoDivide| - ((|Record| - (|:| |coef| |t#1|) - (|:| |quotient| |$|) - (|:| |remainder| |$|)) - |$| - |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|separate| - ((|Record| - (|:| |primePart| |$|) - (|:| |commonPart| |$|)) - |$| - |$|)) - (|has| |t#1| (|GcdDomain|))) - ((|elt| (|t#1| (|Fraction| |$|) |t#1|)) - (|has| |t#1| (|Field|))) - ((|integrate| (|$| |$|)) - (|has| |t#1| - (|Algebra| (|Fraction| (|Integer|))))))) - (QUOTE ( - ((|StepThrough|) (|has| |t#1| (|StepThrough|))) - ((|Eltable| - (|Fraction| |$|) - (|Fraction| |$|)) - (|has| |t#1| (|IntegralDomain|))) - ((|EuclideanDomain|) (|has| |t#1| (|Field|))) - (|additiveValuation| (|has| |t#1| (|Field|))))) - (QUOTE ( - (|Fraction| |$|) - (|NonNegativeInteger|) - (|SparseUnivariatePolynomial| |t#1|) - (|Vector| |t#1|))) - NIL)) - . #4=(|UnivariatePolynomialCategory|)))))) - . #4#) - (SETELT #1# 0 - (LIST - (QUOTE |UnivariatePolynomialCategory|) - (|devaluate| |t#1|))))))) - -@ -\section{UPOLYC-.lsp BOOTSTRAP} -{\bf UPOLYC-} depends on {\bf UPOLYC}. We need to break this cycle to build -the algebra. So we keep a cached copy of the translated {\bf UPOLYC-} -category which we can write into the {\bf MID} directory. We compile -the lisp code and copy the {\bf UPOLYC-.o} file to the {\bf OUT} directory. -This is eventually forcibly replaced by a recompiled version. - -Note that this code is not included in the generated catdef.spad file. - -<>= - -(|/VERSIONCHECK| 2) - -(DEFUN |UPOLYC-;variables;SL;1| (|p| |$|) - (COND - ((OR - (SPADCALL |p| (QREFELT |$| 9)) - (ZEROP (SPADCALL |p| (QREFELT |$| 11)))) - NIL) - ((QUOTE T) (LIST (SPADCALL (QREFELT |$| 13)))))) - -(DEFUN |UPOLYC-;degree;SSaosNni;2| (|p| |v| |$|) - (SPADCALL |p| (QREFELT |$| 11))) - -(DEFUN |UPOLYC-;totalDegree;SLNni;3| (|p| |lv| |$|) - (COND ((NULL |lv|) 0) ((QUOTE T) (SPADCALL |p| (QREFELT |$| 17))))) - -(DEFUN |UPOLYC-;degree;SLL;4| (|p| |lv| |$|) - (COND ((NULL |lv|) NIL) ((QUOTE T) (LIST (SPADCALL |p| (QREFELT |$| 11)))))) - -(DEFUN |UPOLYC-;eval;SLLS;5| (|p| |lv| |lq| |$|) - (COND - ((NULL |lv|) |p|) - ((NULL (NULL (CDR |lv|))) - (|error| "can only eval a univariate polynomial once")) - ((QUOTE T) - (SPADCALL |p| (|SPADfirst| |lv|) (|SPADfirst| |lq|) (QREFELT |$| 21))))) - -(DEFUN |UPOLYC-;eval;SSaos2S;6| (|p| |v| |q| |$|) - (SPADCALL |p| |q| (QREFELT |$| 24))) - -(DEFUN |UPOLYC-;eval;SLLS;7| (|p| |lv| |lr| |$|) - (COND - ((NULL |lv|) |p|) - ((NULL (NULL (CDR |lv|))) - (|error| "can only eval a univariate polynomial once")) - ((QUOTE T) - (SPADCALL |p| (|SPADfirst| |lv|) (|SPADfirst| |lr|) (QREFELT |$| 26))))) - -(DEFUN |UPOLYC-;eval;SSaosRS;8| (|p| |v| |r| |$|) - (SPADCALL (SPADCALL |p| |r| (QREFELT |$| 29)) (QREFELT |$| 30))) - -(DEFUN |UPOLYC-;eval;SLS;9| (|p| |le| |$|) - (COND - ((NULL |le|) |p|) - ((NULL (NULL (CDR |le|))) - (|error| "can only eval a univariate polynomial once")) - ((QUOTE T) - (COND - ((QEQCAR - (SPADCALL - (SPADCALL (|SPADfirst| |le|) (QREFELT |$| 33)) - (QREFELT |$| 35)) - 1) - |p|) - ((QUOTE T) - (SPADCALL |p| - (SPADCALL (|SPADfirst| |le|) (QREFELT |$| 36)) - (QREFELT |$| 24))))))) - -(DEFUN |UPOLYC-;mainVariable;SU;10| (|p| |$|) - (COND - ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) (CONS 1 "failed")) - ((QUOTE T) (CONS 0 (SPADCALL (QREFELT |$| 13)))))) - -(DEFUN |UPOLYC-;minimumDegree;SSaosNni;11| (|p| |v| |$|) - (SPADCALL |p| (QREFELT |$| 40))) - -(DEFUN |UPOLYC-;minimumDegree;SLL;12| (|p| |lv| |$|) - (COND ((NULL |lv|) NIL) ((QUOTE T) (LIST (SPADCALL |p| (QREFELT |$| 40)))))) - -(DEFUN |UPOLYC-;monomial;SSaosNniS;13| (|p| |v| |n| |$|) - (SPADCALL - (CONS (FUNCTION |UPOLYC-;monomial;SSaosNniS;13!0|) (VECTOR |$| |n|)) - |p| - (QREFELT |$| 45))) - -(DEFUN |UPOLYC-;monomial;SSaosNniS;13!0| (|#1| |$$|) - (SPADCALL |#1| (QREFELT |$$| 1) (QREFELT (QREFELT |$$| 0) 43))) - -(DEFUN |UPOLYC-;coerce;SaosS;14| (|v| |$|) - (SPADCALL (|spadConstant| |$| 48) 1 (QREFELT |$| 49))) - -(DEFUN |UPOLYC-;makeSUP;SSup;15| (|p| |$|) - (COND - ((SPADCALL |p| (QREFELT |$| 9)) (|spadConstant| |$| 52)) - ((QUOTE T) - (SPADCALL - (SPADCALL - (SPADCALL |p| (QREFELT |$| 53)) - (SPADCALL |p| (QREFELT |$| 11)) - (QREFELT |$| 54)) - (SPADCALL - (SPADCALL |p| (QREFELT |$| 55)) - (QREFELT |$| 56)) - (QREFELT |$| 57))))) - -(DEFUN |UPOLYC-;unmakeSUP;SupS;16| (|sp| |$|) - (COND - ((SPADCALL |sp| (QREFELT |$| 59)) (|spadConstant| |$| 60)) - ((QUOTE T) - (SPADCALL - (SPADCALL - (SPADCALL |sp| (QREFELT |$| 61)) - (SPADCALL |sp| (QREFELT |$| 62)) - (QREFELT |$| 49)) - (SPADCALL (SPADCALL |sp| (QREFELT |$| 63)) (QREFELT |$| 64)) - (QREFELT |$| 65))))) - -(DEFUN |UPOLYC-;karatsubaDivide;SNniR;17| (|p| |n| |$|) - (SPADCALL |p| - (SPADCALL (|spadConstant| |$| 48) |n| (QREFELT |$| 49)) - (QREFELT |$| 68))) - -(DEFUN |UPOLYC-;shiftRight;SNniS;18| (|p| |n| |$|) - (QCAR - (SPADCALL |p| - (SPADCALL (|spadConstant| |$| 48) |n| (QREFELT |$| 49)) - (QREFELT |$| 68)))) - -(DEFUN |UPOLYC-;shiftLeft;SNniS;19| (|p| |n| |$|) - (SPADCALL |p| - (SPADCALL (|spadConstant| |$| 48) |n| (QREFELT |$| 49)) (QREFELT |$| 71))) - -(DEFUN |UPOLYC-;solveLinearPolynomialEquation;LSupU;20| (|lpp| |pp| |$|) - (SPADCALL |lpp| |pp| (QREFELT |$| 77))) - -(DEFUN |UPOLYC-;factorPolynomial;SupF;21| (|pp| |$|) - (SPADCALL |pp| (QREFELT |$| 83))) - -(DEFUN |UPOLYC-;factorSquareFreePolynomial;SupF;22| (|pp| |$|) - (SPADCALL |pp| (QREFELT |$| 86))) - -(DEFUN |UPOLYC-;factor;SF;23| (|p| |$|) - (PROG (|ansR| #1=#:G103310 |w| #2=#:G103311) - (RETURN - (SEQ - (COND - ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) - (SEQ - (LETT |ansR| - (SPADCALL - (SPADCALL |p| (QREFELT |$| 53)) - (QREFELT |$| 89)) - |UPOLYC-;factor;SF;23|) - (EXIT - (SPADCALL - (SPADCALL - (SPADCALL |ansR| (QREFELT |$| 91)) - (QREFELT |$| 30)) - (PROGN - (LETT #1# NIL |UPOLYC-;factor;SF;23|) - (SEQ - (LETT |w| NIL |UPOLYC-;factor;SF;23|) - (LETT #2# - (SPADCALL |ansR| (QREFELT |$| 95)) - |UPOLYC-;factor;SF;23|) - G190 - (COND - ((OR - (ATOM #2#) - (PROGN - (LETT |w| (CAR #2#) |UPOLYC-;factor;SF;23|) - NIL)) - (GO G191))) - (SEQ - (EXIT - (LETT #1# - (CONS - (VECTOR - (QVELT |w| 0) - (SPADCALL (QVELT |w| 1) (QREFELT |$| 30)) - (QVELT |w| 2)) - #1#) - |UPOLYC-;factor;SF;23|))) - (LETT #2# (CDR #2#) |UPOLYC-;factor;SF;23|) - (GO G190) - G191 - (EXIT (NREVERSE0 #1#)))) - (QREFELT |$| 99))))) - ((QUOTE T) - (SPADCALL - (ELT |$| 64) - (SPADCALL (SPADCALL |p| (QREFELT |$| 56)) (QREFELT |$| 100)) - (QREFELT |$| 104)))))))) - -(DEFUN |UPOLYC-;vectorise;SNniV;24| (|p| |n| |$|) - (PROG (|v| |m| |i| #1=#:G103316 #2=#:G103312) - (RETURN - (SEQ - (LETT |m| - (SPADCALL - (LETT |v| - (SPADCALL |n| (|spadConstant| |$| 106) (QREFELT |$| 108)) - |UPOLYC-;vectorise;SNniV;24|) - (QREFELT |$| 110)) - |UPOLYC-;vectorise;SNniV;24|) - (SEQ - (LETT |i| - (SPADCALL |v| (QREFELT |$| 110)) - |UPOLYC-;vectorise;SNniV;24|) - (LETT #1# (QVSIZE |v|) |UPOLYC-;vectorise;SNniV;24|) - G190 - (COND ((|>| |i| #1#) (GO G191))) - (SEQ - (EXIT - (SPADCALL |v| |i| - (SPADCALL |p| - (PROG1 - (LETT #2# (|-| |i| |m|) |UPOLYC-;vectorise;SNniV;24|) - (|check-subtype| - (|>=| #2# 0) - (QUOTE (|NonNegativeInteger|)) - #2#)) - (QREFELT |$| 111)) - (QREFELT |$| 112)))) - (LETT |i| (|+| |i| 1) |UPOLYC-;vectorise;SNniV;24|) - (GO G190) - G191 - (EXIT NIL)) - (EXIT |v|))))) - -(DEFUN |UPOLYC-;retract;SR;25| (|p| |$|) - (COND - ((SPADCALL |p| (QREFELT |$| 9)) (|spadConstant| |$| 106)) - ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) (SPADCALL |p| (QREFELT |$| 53))) - ((QUOTE T) (|error| "Polynomial is not of degree 0")))) - -(DEFUN |UPOLYC-;retractIfCan;SU;26| (|p| |$|) - (COND - ((SPADCALL |p| (QREFELT |$| 9)) (CONS 0 (|spadConstant| |$| 106))) - ((ZEROP (SPADCALL |p| (QREFELT |$| 11))) - (CONS 0 (SPADCALL |p| (QREFELT |$| 53)))) - ((QUOTE T) (CONS 1 "failed")))) - -(DEFUN |UPOLYC-;init;S;27| (|$|) - (SPADCALL (|spadConstant| |$| 117) (QREFELT |$| 30))) - -(DEFUN |UPOLYC-;nextItemInner| (|n| |$|) - (PROG (|nn| |n1| |n2| #1=#:G103337 |n3|) - (RETURN - (SEQ - (COND - ((SPADCALL |n| (QREFELT |$| 9)) - (CONS - 0 - (SPADCALL - (PROG2 - (LETT #1# - (SPADCALL (|spadConstant| |$| 106) (QREFELT |$| 120)) - |UPOLYC-;nextItemInner|) - (QCDR #1#) - (|check-union| (QEQCAR #1# 0) (QREFELT |$| 7) #1#)) - (QREFELT |$| 30)))) - ((ZEROP (SPADCALL |n| (QREFELT |$| 11))) - (SEQ - (LETT |nn| - (SPADCALL (SPADCALL |n| (QREFELT |$| 53)) (QREFELT |$| 120)) - |UPOLYC-;nextItemInner|) - (EXIT - (COND - ((QEQCAR |nn| 1) (CONS 1 "failed")) - ((QUOTE T) - (CONS 0 (SPADCALL (QCDR |nn|) (QREFELT |$| 30)))))))) - ((QUOTE T) - (SEQ - (LETT |n1| - (SPADCALL |n| (QREFELT |$| 55)) - |UPOLYC-;nextItemInner|) - (LETT |n2| - (|UPOLYC-;nextItemInner| |n1| |$|) - |UPOLYC-;nextItemInner|) - (EXIT - (COND - ((QEQCAR |n2| 0) - (CONS - 0 - (SPADCALL - (SPADCALL - (SPADCALL |n| (QREFELT |$| 53)) - (SPADCALL |n| (QREFELT |$| 11)) - (QREFELT |$| 49)) - (QCDR |n2|) - (QREFELT |$| 65)))) - ((|<| - (|+| 1 (SPADCALL |n1| (QREFELT |$| 11))) - (SPADCALL |n| (QREFELT |$| 11))) - (CONS - 0 - (SPADCALL - (SPADCALL - (SPADCALL |n| (QREFELT |$| 53)) - (SPADCALL |n| (QREFELT |$| 11)) - (QREFELT |$| 49)) - (SPADCALL - (PROG2 - (LETT #1# - (SPADCALL - (|spadConstant| |$| 117) - (QREFELT |$| 120)) - |UPOLYC-;nextItemInner|) - (QCDR #1#) - (|check-union| (QEQCAR #1# 0) (QREFELT |$| 7) #1#)) - (|+| 1 (SPADCALL |n1| (QREFELT |$| 11))) - (QREFELT |$| 49)) - (QREFELT |$| 65)))) - ((QUOTE T) - (SEQ - (LETT |n3| - (SPADCALL - (SPADCALL |n| (QREFELT |$| 53)) - (QREFELT |$| 120)) - |UPOLYC-;nextItemInner|) - (EXIT - (COND - ((QEQCAR |n3| 1) (CONS 1 "failed")) - ((QUOTE T) - (CONS - 0 - (SPADCALL - (QCDR |n3|) - (SPADCALL |n| (QREFELT |$| 11)) - (QREFELT |$| 49))))))))))))))))) - -(DEFUN |UPOLYC-;nextItem;SU;29| (|n| |$|) - (PROG (|n1| #1=#:G103350) - (RETURN - (SEQ - (LETT |n1| (|UPOLYC-;nextItemInner| |n| |$|) |UPOLYC-;nextItem;SU;29|) - (EXIT - (COND - ((QEQCAR |n1| 1) - (CONS - 0 - (SPADCALL - (PROG2 - (LETT #1# - (SPADCALL (|spadConstant| |$| 117) (QREFELT |$| 120)) - |UPOLYC-;nextItem;SU;29|) - (QCDR #1#) - (|check-union| (QEQCAR #1# 0) (QREFELT |$| 7) #1#)) - (|+| 1 (SPADCALL |n| (QREFELT |$| 11))) - (QREFELT |$| 49)))) - ((QUOTE T) |n1|))))))) - -(DEFUN |UPOLYC-;content;SSaosS;30| (|p| |v| |$|) - (SPADCALL (SPADCALL |p| (QREFELT |$| 123)) (QREFELT |$| 30))) - -(DEFUN |UPOLYC-;primeFactor| (|p| |q| |$|) - (PROG (#1=#:G103356 |p1|) - (RETURN - (SEQ - (LETT |p1| - (PROG2 - (LETT #1# - (SPADCALL |p| - (SPADCALL |p| |q| (QREFELT |$| 125)) - (QREFELT |$| 126)) - |UPOLYC-;primeFactor|) - (QCDR #1#) - (|check-union| (QEQCAR #1# 0) (QREFELT |$| 6) #1#)) - |UPOLYC-;primeFactor|) - (EXIT - (COND - ((SPADCALL |p1| |p| (QREFELT |$| 127)) |p|) - ((QUOTE T) (|UPOLYC-;primeFactor| |p1| |q| |$|)))))))) - -(DEFUN |UPOLYC-;separate;2SR;32| (|p| |q| |$|) - (PROG (|a| #1=#:G103362) - (RETURN - (SEQ - (LETT |a| - (|UPOLYC-;primeFactor| |p| |q| |$|) - |UPOLYC-;separate;2SR;32|) - (EXIT - (CONS - |a| - (PROG2 - (LETT #1# - (SPADCALL |p| |a| (QREFELT |$| 126)) - |UPOLYC-;separate;2SR;32|) - (QCDR #1#) - (|check-union| (QEQCAR #1# 0) (QREFELT |$| 6) #1#)))))))) - -(DEFUN |UPOLYC-;differentiate;SM2S;33| (|x| |deriv| |x'| |$|) - (PROG (|dg| |lc| #1=#:G103367 |d|) - (RETURN - (SEQ - (LETT |d| (|spadConstant| |$| 60) |UPOLYC-;differentiate;SM2S;33|) - (SEQ G190 - (COND - ((NULL - (|<| 0 - (LETT |dg| - (SPADCALL |x| (QREFELT |$| 11)) - |UPOLYC-;differentiate;SM2S;33|))) - (GO G191))) - (SEQ - (LETT |lc| - (SPADCALL |x| (QREFELT |$| 53)) - |UPOLYC-;differentiate;SM2S;33|) - (LETT |d| - (SPADCALL - (SPADCALL |d| - (SPADCALL |x'| - (SPADCALL - (SPADCALL |dg| |lc| (QREFELT |$| 131)) - (PROG1 - (LETT #1# (|-| |dg| 1) |UPOLYC-;differentiate;SM2S;33|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) - #1#)) - (QREFELT |$| 49)) - (QREFELT |$| 71)) - (QREFELT |$| 65)) - (SPADCALL - (SPADCALL |lc| |deriv|) - |dg| - (QREFELT |$| 49)) - (QREFELT |$| 65)) - |UPOLYC-;differentiate;SM2S;33|) - (EXIT - (LETT |x| - (SPADCALL |x| (QREFELT |$| 55)) - |UPOLYC-;differentiate;SM2S;33|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT - (SPADCALL |d| - (SPADCALL - (SPADCALL - (SPADCALL |x| (QREFELT |$| 53)) - |deriv|) - (QREFELT |$| 30)) - (QREFELT |$| 65))))))) - -(DEFUN |UPOLYC-;ncdiff| (|n| |x'| |$|) - (PROG (#1=#:G103385 |n1|) - (RETURN - (COND - ((ZEROP |n|) (|spadConstant| |$| 60)) - ((ZEROP - (LETT |n1| - (PROG1 - (LETT #1# (|-| |n| 1) |UPOLYC-;ncdiff|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) - #1#)) - |UPOLYC-;ncdiff|)) - |x'|) - ((QUOTE T) - (SPADCALL - (SPADCALL |x'| - (SPADCALL (|spadConstant| |$| 48) |n1| (QREFELT |$| 49)) - (QREFELT |$| 71)) - (SPADCALL - (SPADCALL (|spadConstant| |$| 48) 1 (QREFELT |$| 49)) - (|UPOLYC-;ncdiff| |n1| |x'| |$|) - (QREFELT |$| 71)) - (QREFELT |$| 65))))))) - -(DEFUN |UPOLYC-;differentiate;SM2S;35| (|x| |deriv| |x'| |$|) - (PROG (|dg| |lc| |d|) - (RETURN - (SEQ - (LETT |d| (|spadConstant| |$| 60) |UPOLYC-;differentiate;SM2S;35|) - (SEQ G190 - (COND - ((NULL - (|<| 0 - (LETT |dg| - (SPADCALL |x| (QREFELT |$| 11)) - |UPOLYC-;differentiate;SM2S;35|))) - (GO G191))) - (SEQ - (LETT |lc| - (SPADCALL |x| (QREFELT |$| 53)) - |UPOLYC-;differentiate;SM2S;35|) - (LETT |d| - (SPADCALL - (SPADCALL |d| - (SPADCALL - (SPADCALL |lc| |deriv|) - |dg| - (QREFELT |$| 49)) - (QREFELT |$| 65)) - (SPADCALL |lc| - (|UPOLYC-;ncdiff| |dg| |x'| |$|) - (QREFELT |$| 134)) - (QREFELT |$| 65)) - |UPOLYC-;differentiate;SM2S;35|) - (EXIT - (LETT |x| - (SPADCALL |x| (QREFELT |$| 55)) - |UPOLYC-;differentiate;SM2S;35|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT - (SPADCALL |d| - (SPADCALL - (SPADCALL (SPADCALL |x| (QREFELT |$| 53)) |deriv|) - (QREFELT |$| 30)) - (QREFELT |$| 65))))))) - -(DEFUN |UPOLYC-;differentiate;SMS;36| (|x| |deriv| |$|) - (SPADCALL |x| |deriv| (|spadConstant| |$| 47) (QREFELT |$| 135))) - -(DEFUN |UPOLYC-;differentiate;2S;37| (|x| |$|) - (PROG (|dg| #1=#:G103394 |d|) - (RETURN - (SEQ - (LETT |d| (|spadConstant| |$| 60) |UPOLYC-;differentiate;2S;37|) - (SEQ G190 - (COND - ((NULL - (|<| 0 - (LETT |dg| - (SPADCALL |x| (QREFELT |$| 11)) - |UPOLYC-;differentiate;2S;37|))) - (GO G191))) - (SEQ - (LETT |d| - (SPADCALL |d| - (SPADCALL - (SPADCALL |dg| - (SPADCALL |x| (QREFELT |$| 53)) (QREFELT |$| 131)) - (PROG1 - (LETT #1# (|-| |dg| 1) |UPOLYC-;differentiate;2S;37|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) - #1#)) - (QREFELT |$| 49)) - (QREFELT |$| 65)) - |UPOLYC-;differentiate;2S;37|) - (EXIT - (LETT |x| - (SPADCALL |x| (QREFELT |$| 55)) - |UPOLYC-;differentiate;2S;37|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT |d|))))) - -(DEFUN |UPOLYC-;differentiate;SSaosS;38| (|x| |v| |$|) - (SPADCALL |x| (QREFELT |$| 138))) - -(DEFUN |UPOLYC-;elt;3F;39| (|g| |f| |$|) - (SPADCALL - (SPADCALL - (SPADCALL |g| (QREFELT |$| 141)) - |f| - (QREFELT |$| 143)) - (SPADCALL (SPADCALL |g| (QREFELT |$| 144)) |f| (QREFELT |$| 143)) - (QREFELT |$| 145))) - -(DEFUN |UPOLYC-;pseudoQuotient;3S;40| (|p| |q| |$|) - (PROG (|n| #1=#:G103440 #2=#:G103442) - (RETURN - (SEQ - (LETT |n| - (|+| - (|-| - (SPADCALL |p| (QREFELT |$| 11)) - (SPADCALL |q| (QREFELT |$| 11))) 1) - |UPOLYC-;pseudoQuotient;3S;40|) - (EXIT - (COND - ((|<| |n| 1) (|spadConstant| |$| 60)) - ((QUOTE T) - (PROG2 - (LETT #2# - (SPADCALL - (SPADCALL - (SPADCALL - (SPADCALL - (SPADCALL |q| (QREFELT |$| 53)) - (PROG1 - (LETT #1# |n| |UPOLYC-;pseudoQuotient;3S;40|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) - #1#)) - (QREFELT |$| 147)) - |p| - (QREFELT |$| 134)) - (SPADCALL |p| |q| (QREFELT |$| 148)) - (QREFELT |$| 149)) - |q| - (QREFELT |$| 126)) - |UPOLYC-;pseudoQuotient;3S;40|) - (QCDR #2#) - (|check-union| (QEQCAR #2# 0) (QREFELT |$| 6) #2#))))))))) - -(DEFUN |UPOLYC-;pseudoDivide;2SR;41| (|p| |q| |$|) - (PROG (|n| |prem| #1=#:G103448 |lc| #2=#:G103450) - (RETURN - (SEQ - (LETT |n| - (|+| - (|-| - (SPADCALL |p| (QREFELT |$| 11)) - (SPADCALL |q| (QREFELT |$| 11))) 1) - |UPOLYC-;pseudoDivide;2SR;41|) - (EXIT - (COND - ((|<| |n| 1) - (VECTOR (|spadConstant| |$| 48) (|spadConstant| |$| 60) |p|)) - ((QUOTE T) - (SEQ - (LETT |prem| - (SPADCALL |p| |q| (QREFELT |$| 148)) - |UPOLYC-;pseudoDivide;2SR;41|) - (LETT |lc| - (SPADCALL - (SPADCALL |q| (QREFELT |$| 53)) - (PROG1 - (LETT #1# |n| |UPOLYC-;pseudoDivide;2SR;41|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) #1#)) - (QREFELT |$| 147)) - |UPOLYC-;pseudoDivide;2SR;41|) - (EXIT - (VECTOR |lc| - (PROG2 - (LETT #2# - (SPADCALL - (SPADCALL - (SPADCALL |lc| |p| (QREFELT |$| 134)) - |prem| - (QREFELT |$| 149)) - |q| - (QREFELT |$| 126)) - |UPOLYC-;pseudoDivide;2SR;41|) - (QCDR #2#) - (|check-union| (QEQCAR #2# 0) (QREFELT |$| 6) #2#)) - |prem|)))))))))) - -(DEFUN |UPOLYC-;composite;FSU;42| (|f| |q| |$|) - (PROG (|n| |d|) - (RETURN - (SEQ - (LETT |n| - (SPADCALL (SPADCALL |f| (QREFELT |$| 141)) |q| (QREFELT |$| 153)) - |UPOLYC-;composite;FSU;42|) - (EXIT - (COND - ((QEQCAR |n| 1) (CONS 1 "failed")) - ((QUOTE T) - (SEQ - (LETT |d| - (SPADCALL - (SPADCALL |f| (QREFELT |$| 144)) |q| (QREFELT |$| 153)) - |UPOLYC-;composite;FSU;42|) - (EXIT - (COND - ((QEQCAR |d| 1) (CONS 1 "failed")) - ((QUOTE T) - (CONS - 0 - (SPADCALL - (QCDR |n|) - (QCDR |d|) - (QREFELT |$| 154)))))))))))))) - -(DEFUN |UPOLYC-;composite;2SU;43| (|p| |q| |$|) - (PROG (|cqr| |v| |u| |w| #1=#:G103476) - (RETURN - (SEQ - (COND - ((SPADCALL |p| (QREFELT |$| 157)) (CONS 0 |p|)) - ((QUOTE T) - (SEQ - (EXIT - (SEQ - (LETT |cqr| - (SPADCALL |p| |q| (QREFELT |$| 158)) - |UPOLYC-;composite;2SU;43|) - (COND - ((SPADCALL (QVELT |cqr| 2) (QREFELT |$| 157)) - (SEQ - (LETT |v| - (SPADCALL - (QVELT |cqr| 2) - (QVELT |cqr| 0) - (QREFELT |$| 159)) - |UPOLYC-;composite;2SU;43|) - (EXIT - (COND - ((QEQCAR |v| 0) - (SEQ - (LETT |u| - (SPADCALL - (QVELT |cqr| 1) - |q| - (QREFELT |$| 153)) - |UPOLYC-;composite;2SU;43|) - (EXIT - (COND - ((QEQCAR |u| 0) - (SEQ - (LETT |w| - (SPADCALL - (QCDR |u|) - (QVELT |cqr| 0) - (QREFELT |$| 159)) - |UPOLYC-;composite;2SU;43|) - (EXIT - (COND - ((QEQCAR |w| 0) - (PROGN - (LETT #1# - (CONS - 0 - (SPADCALL - (QCDR |v|) - (SPADCALL - (SPADCALL - (|spadConstant| |$| 48) - 1 - (QREFELT |$| 49)) - (QCDR |w|) - (QREFELT |$| 71)) - (QREFELT |$| 65))) - |UPOLYC-;composite;2SU;43|) - (GO #1#)))))))))))))))) - (EXIT (CONS 1 "failed")))) - #1# - (EXIT #1#)))))))) - -(DEFUN |UPOLYC-;elt;S2F;44| (|p| |f| |$|) - (PROG (|n| #1=#:G103483 |ans|) - (RETURN - (SEQ - (COND - ((SPADCALL |p| (QREFELT |$| 9)) (|spadConstant| |$| 161)) - ((QUOTE T) - (SEQ - (LETT |ans| - (SPADCALL - (SPADCALL (SPADCALL |p| (QREFELT |$| 53)) (QREFELT |$| 30)) - (QREFELT |$| 162)) - |UPOLYC-;elt;S2F;44|) - (LETT |n| (SPADCALL |p| (QREFELT |$| 11)) |UPOLYC-;elt;S2F;44|) - (SEQ G190 - (COND - ((NULL - (COND - ((SPADCALL - (LETT |p| - (SPADCALL |p| (QREFELT |$| 55)) - |UPOLYC-;elt;S2F;44|) - (QREFELT |$| 9)) - (QUOTE NIL)) - ((QUOTE T) (QUOTE T)))) - (GO G191))) - (SEQ - (EXIT - (LETT |ans| - (SPADCALL - (SPADCALL |ans| - (SPADCALL |f| - (PROG1 - (LETT #1# - (|-| |n| - (LETT |n| - (SPADCALL |p| (QREFELT |$| 11)) - |UPOLYC-;elt;S2F;44|)) - |UPOLYC-;elt;S2F;44|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) - #1#)) - (QREFELT |$| 163)) - (QREFELT |$| 164)) - (SPADCALL - (SPADCALL - (SPADCALL |p| (QREFELT |$| 53)) - (QREFELT |$| 30)) - (QREFELT |$| 162)) - (QREFELT |$| 165)) - |UPOLYC-;elt;S2F;44|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT - (COND - ((ZEROP |n|) |ans|) - ((QUOTE T) - (SPADCALL |ans| - (SPADCALL |f| |n| (QREFELT |$| 166)) - (QREFELT |$| 164)))))))))))) - -(DEFUN |UPOLYC-;order;2SNni;45| (|p| |q| |$|) - (PROG (|u| #1=#:G103497 |ans|) - (RETURN - (SEQ - (EXIT - (COND - ((SPADCALL |p| (QREFELT |$| 9)) - (|error| "order: arguments must be nonzero")) - ((|<| (SPADCALL |q| (QREFELT |$| 11)) 1) - (|error| "order: place must be non-trivial")) - ((QUOTE T) - (SEQ - (LETT |ans| 0 |UPOLYC-;order;2SNni;45|) - (EXIT - (SEQ G190 - NIL - (SEQ - (LETT |u| - (SPADCALL |p| |q| (QREFELT |$| 126)) - |UPOLYC-;order;2SNni;45|) - (EXIT - (COND - ((QEQCAR |u| 1) - (PROGN - (LETT #1# |ans| |UPOLYC-;order;2SNni;45|) - (GO #1#))) - ((QUOTE T) - (SEQ - (LETT |p| (QCDR |u|) |UPOLYC-;order;2SNni;45|) - (EXIT - (LETT - |ans| - (|+| |ans| 1) - |UPOLYC-;order;2SNni;45|))))))) - NIL - (GO G190) - G191 - (EXIT NIL))))))) - #1# - (EXIT #1#))))) - -(DEFUN |UPOLYC-;squareFree;SF;46| (|p| |$|) - (SPADCALL |p| (QREFELT |$| 170))) - -(DEFUN |UPOLYC-;squareFreePart;2S;47| (|p| |$|) - (SPADCALL |p| (QREFELT |$| 172))) - -(DEFUN |UPOLYC-;gcdPolynomial;3Sup;48| (|pp| |qq| |$|) - (COND - ((SPADCALL |pp| (QREFELT |$| 174)) (SPADCALL |qq| (QREFELT |$| 175))) - ((SPADCALL |qq| (QREFELT |$| 174)) (SPADCALL |pp| (QREFELT |$| 175))) - ((QUOTE T) - (SPADCALL - (SPADCALL - (SPADCALL - (SPADCALL |pp| (QREFELT |$| 176)) - (SPADCALL |qq| (QREFELT |$| 176)) (QREFELT |$| 125)) - (SPADCALL - (SPADCALL - (SPADCALL |pp| (QREFELT |$| 177)) - (SPADCALL |qq| (QREFELT |$| 177)) (QREFELT |$| 178)) - (QREFELT |$| 177)) - (QREFELT |$| 179)) - (QREFELT |$| 175))))) - -(DEFUN |UPOLYC-;squareFreePolynomial;SupF;49| (|pp| |$|) - (SPADCALL |pp| (QREFELT |$| 182))) - -(DEFUN |UPOLYC-;elt;F2R;50| (|f| |r| |$|) - (SPADCALL - (SPADCALL - (SPADCALL |f| (QREFELT |$| 141)) - |r| - (QREFELT |$| 29)) - (SPADCALL (SPADCALL |f| (QREFELT |$| 144)) |r| (QREFELT |$| 29)) - (QREFELT |$| 184))) - -(DEFUN |UPOLYC-;euclideanSize;SNni;51| (|x| |$|) - (COND - ((SPADCALL |x| (QREFELT |$| 9)) - (|error| "euclideanSize called on 0 in Univariate Polynomial")) - ((QUOTE T) (SPADCALL |x| (QREFELT |$| 11))))) - -(DEFUN |UPOLYC-;divide;2SR;52| (|x| |y| |$|) - (PROG (|lc| |f| #1=#:G103510 |n| |quot|) - (RETURN - (SEQ - (COND - ((SPADCALL |y| (QREFELT |$| 9)) - (|error| "division by 0 in Univariate Polynomials")) - ((QUOTE T) - (SEQ - (LETT |quot| (|spadConstant| |$| 60) |UPOLYC-;divide;2SR;52|) - (LETT |lc| - (SPADCALL (SPADCALL |y| (QREFELT |$| 53)) (QREFELT |$| 187)) - |UPOLYC-;divide;2SR;52|) - (SEQ G190 - (COND - ((NULL - (COND - ((OR - (SPADCALL |x| (QREFELT |$| 9)) - (|<| - (SPADCALL |x| (QREFELT |$| 11)) - (SPADCALL |y| (QREFELT |$| 11)))) - (QUOTE NIL)) ((QUOTE T) (QUOTE T)))) - (GO G191))) - (SEQ - (LETT |f| - (SPADCALL |lc| - (SPADCALL |x| (QREFELT |$| 53)) - (QREFELT |$| 188)) - |UPOLYC-;divide;2SR;52|) - (LETT |n| - (PROG1 - (LETT #1# - (|-| - (SPADCALL |x| (QREFELT |$| 11)) - (SPADCALL |y| (QREFELT |$| 11))) - |UPOLYC-;divide;2SR;52|) - (|check-subtype| - (|>=| #1# 0) - (QUOTE (|NonNegativeInteger|)) - #1#)) - |UPOLYC-;divide;2SR;52|) - (LETT |quot| - (SPADCALL |quot| - (SPADCALL |f| |n| (QREFELT |$| 49)) - (QREFELT |$| 65)) - |UPOLYC-;divide;2SR;52|) - (EXIT - (LETT |x| - (SPADCALL |x| - (SPADCALL - (SPADCALL |f| |n| (QREFELT |$| 49)) - |y| - (QREFELT |$| 71)) - (QREFELT |$| 149)) - |UPOLYC-;divide;2SR;52|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT (CONS |quot| |x|))))))))) - -(DEFUN |UPOLYC-;integrate;2S;53| (|p| |$|) - (PROG (|l| |d| |ans|) - (RETURN - (SEQ - (LETT |ans| (|spadConstant| |$| 60) |UPOLYC-;integrate;2S;53|) - (SEQ G190 - (COND - ((NULL - (COND - ((SPADCALL |p| (|spadConstant| |$| 60) (QREFELT |$| 127)) - (QUOTE NIL)) - ((QUOTE T) (QUOTE T)))) (GO G191))) - (SEQ - (LETT |l| - (SPADCALL |p| (QREFELT |$| 53)) - |UPOLYC-;integrate;2S;53|) - (LETT |d| - (|+| 1 (SPADCALL |p| (QREFELT |$| 11))) - |UPOLYC-;integrate;2S;53|) - (LETT |ans| - (SPADCALL |ans| - (SPADCALL - (SPADCALL (SPADCALL |d| (QREFELT |$| 191)) (QREFELT |$| 192)) - (SPADCALL |l| |d| (QREFELT |$| 49)) (QREFELT |$| 193)) - (QREFELT |$| 65)) - |UPOLYC-;integrate;2S;53|) - (EXIT - (LETT |p| - (SPADCALL |p| (QREFELT |$| 55)) - |UPOLYC-;integrate;2S;53|))) - NIL - (GO G190) - G191 - (EXIT NIL)) - (EXIT |ans|))))) - -(DEFUN |UnivariatePolynomialCategory&| (|#1| |#2|) - (PROG (|DV$1| |DV$2| |dv$| |$| |pv$|) - (RETURN - (PROGN - (LETT |DV$1| (|devaluate| |#1|) . #1=(|UnivariatePolynomialCategory&|)) - (LETT |DV$2| (|devaluate| |#2|) . #1#) - (LETT |dv$| - (LIST (QUOTE |UnivariatePolynomialCategory&|) |DV$1| |DV$2|) . #1#) - (LETT |$| (GETREFV 201) . #1#) - (QSETREFV |$| 0 |dv$|) - (QSETREFV |$| 3 - (LETT |pv$| - (|buildPredVector| 0 0 - (LIST - (|HasCategory| |#2| - (QUOTE (|Algebra| (|Fraction| (|Integer|))))) - (|HasCategory| |#2| (QUOTE (|Field|))) - (|HasCategory| |#2| (QUOTE (|GcdDomain|))) - (|HasCategory| |#2| (QUOTE (|IntegralDomain|))) - (|HasCategory| |#2| (QUOTE (|CommutativeRing|))) - (|HasCategory| |#2| (QUOTE (|StepThrough|))))) . #1#)) - (|stuffDomainSlots| |$|) - (QSETREFV |$| 6 |#1|) - (QSETREFV |$| 7 |#2|) - (COND - ((|HasCategory| |#2| (QUOTE (|PolynomialFactorizationExplicit|))) - (PROGN - (QSETREFV |$| 81 - (CONS - (|dispatchFunction| - |UPOLYC-;solveLinearPolynomialEquation;LSupU;20|) - |$|)) - (QSETREFV |$| 85 - (CONS - (|dispatchFunction| |UPOLYC-;factorPolynomial;SupF;21|) - |$|)) - (QSETREFV |$| 87 - (CONS - (|dispatchFunction| - |UPOLYC-;factorSquareFreePolynomial;SupF;22|) - |$|)) - (QSETREFV |$| 105 - (CONS (|dispatchFunction| |UPOLYC-;factor;SF;23|) |$|))))) - (COND - ((|testBitVector| |pv$| 6) - (PROGN - (QSETREFV |$| 118 - (CONS (|dispatchFunction| |UPOLYC-;init;S;27|) |$|)) - NIL - (QSETREFV |$| 122 - (CONS (|dispatchFunction| |UPOLYC-;nextItem;SU;29|) |$|))))) - (COND - ((|testBitVector| |pv$| 3) - (PROGN - (QSETREFV |$| 124 - (CONS (|dispatchFunction| |UPOLYC-;content;SSaosS;30|) |$|)) - NIL - (QSETREFV |$| 129 - (CONS (|dispatchFunction| |UPOLYC-;separate;2SR;32|) |$|))))) - (COND - ((|testBitVector| |pv$| 5) - (QSETREFV |$| 133 - (CONS - (|dispatchFunction| |UPOLYC-;differentiate;SM2S;33|) - |$|))) - ((QUOTE T) - (PROGN - (QSETREFV |$| 133 - (CONS - (|dispatchFunction| |UPOLYC-;differentiate;SM2S;35|) - |$|))))) - (COND - ((|testBitVector| |pv$| 4) - (PROGN - (QSETREFV |$| 146 - (CONS (|dispatchFunction| |UPOLYC-;elt;3F;39|) |$|)) - (QSETREFV |$| 150 - (CONS (|dispatchFunction| |UPOLYC-;pseudoQuotient;3S;40|) |$|)) - (QSETREFV |$| 152 - (CONS (|dispatchFunction| |UPOLYC-;pseudoDivide;2SR;41|) |$|)) - (QSETREFV |$| 156 - (CONS (|dispatchFunction| |UPOLYC-;composite;FSU;42|) |$|)) - (QSETREFV |$| 160 - (CONS (|dispatchFunction| |UPOLYC-;composite;2SU;43|) |$|)) - (QSETREFV |$| 167 - (CONS (|dispatchFunction| |UPOLYC-;elt;S2F;44|) |$|)) - (QSETREFV |$| 168 - (CONS (|dispatchFunction| |UPOLYC-;order;2SNni;45|) |$|))))) - (COND - ((|testBitVector| |pv$| 3) - (PROGN - (QSETREFV |$| 171 - (CONS (|dispatchFunction| |UPOLYC-;squareFree;SF;46|) |$|)) - (QSETREFV |$| 173 - (CONS - (|dispatchFunction| |UPOLYC-;squareFreePart;2S;47|) - |$|))))) - (COND - ((|HasCategory| |#2| (QUOTE (|PolynomialFactorizationExplicit|))) - (PROGN - (QSETREFV |$| 180 - (CONS - (|dispatchFunction| |UPOLYC-;gcdPolynomial;3Sup;48|) - |$|)) - (QSETREFV |$| 183 - (CONS - (|dispatchFunction| |UPOLYC-;squareFreePolynomial;SupF;49|) - |$|))))) - (COND - ((|testBitVector| |pv$| 2) - (PROGN - (QSETREFV |$| 185 - (CONS (|dispatchFunction| |UPOLYC-;elt;F2R;50|) |$|)) - (QSETREFV |$| 186 - (CONS - (|dispatchFunction| |UPOLYC-;euclideanSize;SNni;51|) - |$|)) - (QSETREFV |$| 189 - (CONS (|dispatchFunction| |UPOLYC-;divide;2SR;52|) |$|))))) - (COND - ((|testBitVector| |pv$| 1) - (QSETREFV |$| 194 - (CONS - (|dispatchFunction| |UPOLYC-;integrate;2S;53|) - |$|)))) |$|)))) - -(MAKEPROP - (QUOTE |UnivariatePolynomialCategory&|) - (QUOTE |infovec|) - (LIST - (QUOTE - #(NIL NIL NIL NIL NIL NIL - (|local| |#1|) - (|local| |#2|) - (|Boolean|) - (0 . |zero?|) - (|NonNegativeInteger|) - (5 . |degree|) - (|SingletonAsOrderedSet|) - (10 . |create|) - (|List| 12) - |UPOLYC-;variables;SL;1| - |UPOLYC-;degree;SSaosNni;2| - (14 . |totalDegree|) - |UPOLYC-;totalDegree;SLNni;3| - (|List| 10) - |UPOLYC-;degree;SLL;4| - (19 . |eval|) - (|List| |$|) - |UPOLYC-;eval;SLLS;5| - (26 . |elt|) - |UPOLYC-;eval;SSaos2S;6| - (32 . |eval|) - (|List| 7) - |UPOLYC-;eval;SLLS;7| - (39 . |elt|) - (45 . |coerce|) - |UPOLYC-;eval;SSaosRS;8| - (|Equation| 6) - (50 . |lhs|) - (|Union| 12 (QUOTE "failed")) - (55 . |mainVariable|) - (60 . |rhs|) - (|List| 197) - |UPOLYC-;eval;SLS;9| - |UPOLYC-;mainVariable;SU;10| - (65 . |minimumDegree|) - |UPOLYC-;minimumDegree;SSaosNni;11| - |UPOLYC-;minimumDegree;SLL;12| - (70 . |+|) - (|Mapping| 10 10) - (76 . |mapExponents|) - |UPOLYC-;monomial;SSaosNniS;13| - (82 . |One|) - (86 . |One|) - (90 . |monomial|) - |UPOLYC-;coerce;SaosS;14| - (|SparseUnivariatePolynomial| 7) - (96 . |Zero|) - (100 . |leadingCoefficient|) - (105 . |monomial|) - (111 . |reductum|) - (116 . |makeSUP|) - (121 . |+|) - |UPOLYC-;makeSUP;SSup;15| - (127 . |zero?|) - (132 . |Zero|) - (136 . |leadingCoefficient|) - (141 . |degree|) - (146 . |reductum|) - (151 . |unmakeSUP|) - (156 . |+|) - |UPOLYC-;unmakeSUP;SupS;16| - (|Record| (|:| |quotient| |$|) (|:| |remainder| |$|)) - (162 . |monicDivide|) - |UPOLYC-;karatsubaDivide;SNniR;17| - |UPOLYC-;shiftRight;SNniS;18| - (168 . |*|) - |UPOLYC-;shiftLeft;SNniS;19| - (|Union| 74 (QUOTE "failed")) - (|List| 75) - (|SparseUnivariatePolynomial| 6) - (|PolynomialFactorizationByRecursionUnivariate| 7 6) - (174 . |solveLinearPolynomialEquationByRecursion|) - (|Union| 79 (QUOTE "failed")) - (|List| 80) - (|SparseUnivariatePolynomial| |$|) - (180 . |solveLinearPolynomialEquation|) - (|Factored| 75) - (186 . |factorByRecursion|) - (|Factored| 80) - (191 . |factorPolynomial|) - (196 . |factorSquareFreeByRecursion|) - (201 . |factorSquareFreePolynomial|) - (|Factored| |$|) - (206 . |factor|) - (|Factored| 7) - (211 . |unit|) - (|Union| (QUOTE "nil") (QUOTE "sqfr") (QUOTE "irred") (QUOTE "prime")) - (|Record| (|:| |flg| 92) (|:| |fctr| 7) (|:| |xpnt| 109)) - (|List| 93) - (216 . |factorList|) - (|Record| (|:| |flg| 92) (|:| |fctr| 6) (|:| |xpnt| 109)) - (|List| 96) - (|Factored| 6) - (221 . |makeFR|) - (227 . |factorPolynomial|) - (|Mapping| 6 51) - (|Factored| 51) - (|FactoredFunctions2| 51 6) - (232 . |map|) - (238 . |factor|) - (243 . |Zero|) - (|Vector| 7) - (247 . |new|) - (|Integer|) - (253 . |minIndex|) - (258 . |coefficient|) - (264 . |qsetelt!|) - |UPOLYC-;vectorise;SNniV;24| - |UPOLYC-;retract;SR;25| - (|Union| 7 (QUOTE "failed")) - |UPOLYC-;retractIfCan;SU;26| - (271 . |init|) - (275 . |init|) - (|Union| |$| (QUOTE "failed")) - (279 . |nextItem|) - (284 . |One|) - (288 . |nextItem|) - (293 . |content|) - (298 . |content|) - (304 . |gcd|) - (310 . |exquo|) - (316 . |=|) - (|Record| (|:| |primePart| |$|) (|:| |commonPart| |$|)) - (322 . |separate|) - (328 . |Zero|) - (332 . |*|) - (|Mapping| 7 7) - (338 . |differentiate|) - (345 . |*|) - (351 . |differentiate|) - |UPOLYC-;differentiate;SMS;36| - |UPOLYC-;differentiate;2S;37| - (358 . |differentiate|) - |UPOLYC-;differentiate;SSaosS;38| - (|Fraction| 6) - (363 . |numer|) - (|Fraction| |$|) - (368 . |elt|) - (374 . |denom|) - (379 . |/|) - (385 . |elt|) - (391 . |**|) - (397 . |pseudoRemainder|) - (403 . |-|) - (409 . |pseudoQuotient|) - (|Record| (|:| |coef| 7) (|:| |quotient| |$|) (|:| |remainder| |$|)) - (415 . |pseudoDivide|) - (421 . |composite|) - (427 . |/|) - (|Union| 142 (QUOTE "failed")) - (433 . |composite|) - (439 . |ground?|) - (444 . |pseudoDivide|) - (450 . |exquo|) - (456 . |composite|) - (462 . |Zero|) - (466 . |coerce|) - (471 . |**|) - (477 . |*|) - (483 . |+|) - (489 . |**|) - (495 . |elt|) - (501 . |order|) - (|UnivariatePolynomialSquareFree| 7 6) - (507 . |squareFree|) - (512 . |squareFree|) - (517 . |squareFreePart|) - (522 . |squareFreePart|) - (527 . |zero?|) - (532 . |unitCanonical|) - (537 . |content|) - (542 . |primitivePart|) - (547 . |subResultantGcd|) - (553 . |*|) - (559 . |gcdPolynomial|) - (|UnivariatePolynomialSquareFree| 6 75) - (565 . |squareFree|) - (570 . |squareFreePolynomial|) - (575 . |/|) - (581 . |elt|) - (587 . |euclideanSize|) - (592 . |inv|) - (597 . |*|) - (603 . |divide|) - (|Fraction| 109) - (609 . |coerce|) - (614 . |inv|) - (619 . |*|) - (625 . |integrate|) - (|Symbol|) - (|List| 195) - (|Equation| |$|) - (|Union| 109 (QUOTE "failed")) - (|Union| 190 (QUOTE "failed")) - (|OutputForm|))) - (QUOTE - #(|vectorise| 630 |variables| 636 |unmakeSUP| 641 |totalDegree| 646 - |squareFreePolynomial| 652 |squareFreePart| 657 |squareFree| 662 - |solveLinearPolynomialEquation| 667 |shiftRight| 673 |shiftLeft| 679 - |separate| 685 |retractIfCan| 691 |retract| 696 |pseudoQuotient| 701 - |pseudoDivide| 707 |order| 713 |nextItem| 719 |monomial| 724 - |minimumDegree| 731 |makeSUP| 743 |mainVariable| 748 - |karatsubaDivide| 753 |integrate| 759 |init| 764 |gcdPolynomial| 768 - |factorSquareFreePolynomial| 774 |factorPolynomial| 779 |factor| 784 - |eval| 789 |euclideanSize| 823 |elt| 828 |divide| 846 - |differentiate| 852 |degree| 876 |content| 888 |composite| 894 - |coerce| 906)) - (QUOTE NIL) - (CONS - (|makeByteWordVec2| 1 (QUOTE NIL)) - (CONS - (QUOTE #()) - (CONS - (QUOTE #()) - (|makeByteWordVec2| 194 - (QUOTE - (1 6 8 0 9 1 6 10 0 11 0 12 0 13 1 6 10 0 17 3 6 0 0 12 0 21 2 - 6 0 0 0 24 3 6 0 0 12 7 26 2 6 7 0 7 29 1 6 0 7 30 1 32 6 0 33 - 1 6 34 0 35 1 32 6 0 36 1 6 10 0 40 2 10 0 0 0 43 2 6 0 44 0 - 45 0 6 0 47 0 7 0 48 2 6 0 7 10 49 0 51 0 52 1 6 7 0 53 2 51 - 0 7 10 54 1 6 0 0 55 1 6 51 0 56 2 51 0 0 0 57 1 51 8 0 59 0 - 6 0 60 1 51 7 0 61 1 51 10 0 62 1 51 0 0 63 1 6 0 51 64 2 6 0 - 0 0 65 2 6 67 0 0 68 2 6 0 0 0 71 2 76 73 74 75 77 2 0 78 79 - 80 81 1 76 82 75 83 1 0 84 80 85 1 76 82 75 86 1 0 84 80 87 1 - 7 88 0 89 1 90 7 0 91 1 90 94 0 95 2 98 0 6 97 99 1 7 84 80 - 100 2 103 98 101 102 104 1 0 88 0 105 0 7 0 106 2 107 0 10 7 - 108 1 107 109 0 110 2 6 7 0 10 111 3 107 7 0 109 7 112 0 7 0 - 117 0 0 0 118 1 7 119 0 120 0 75 0 121 1 0 119 0 122 1 6 7 0 - 123 2 0 0 0 12 124 2 6 0 0 0 125 2 6 119 0 0 126 2 6 8 0 0 127 - 2 0 128 0 0 129 0 75 0 130 2 7 0 10 0 131 3 0 0 0 132 0 133 2 - 6 0 7 0 134 3 6 0 0 132 0 135 1 6 0 0 138 1 140 6 0 141 2 6 - 142 0 142 143 1 140 6 0 144 2 140 0 0 0 145 2 0 142 142 142 - 146 2 7 0 0 10 147 2 6 0 0 0 148 2 6 0 0 0 149 2 0 0 0 0 150 - 2 0 151 0 0 152 2 6 119 0 0 153 2 140 0 6 6 154 2 0 155 142 0 - 156 1 6 8 0 157 2 6 151 0 0 158 2 6 119 0 7 159 2 0 119 0 0 - 160 0 140 0 161 1 140 0 6 162 2 140 0 0 109 163 2 140 0 0 0 - 164 2 140 0 0 0 165 2 140 0 0 10 166 2 0 142 0 142 167 2 0 10 - 0 0 168 1 169 98 6 170 1 0 88 0 171 1 169 6 6 172 1 0 0 0 173 - 1 75 8 0 174 1 75 0 0 175 1 75 6 0 176 1 75 0 0 177 2 75 0 0 - 0 178 2 75 0 6 0 179 2 0 80 80 80 180 1 181 82 75 182 1 0 84 - 80 183 2 7 0 0 0 184 2 0 7 142 7 185 1 0 10 0 186 1 7 0 0 187 - 2 7 0 0 0 188 2 0 67 0 0 189 1 190 0 109 191 1 190 0 0 192 2 - 6 0 190 0 193 1 0 0 0 194 2 0 107 0 10 113 1 0 14 0 15 1 0 0 - 51 66 2 0 10 0 14 18 1 0 84 80 183 1 0 0 0 173 1 0 88 0 171 2 - 0 78 79 80 81 2 0 0 0 10 70 2 0 0 0 10 72 2 0 128 0 0 129 1 0 - 115 0 116 1 0 7 0 114 2 0 0 0 0 150 2 0 151 0 0 152 2 0 10 0 - 0 168 1 0 119 0 122 3 0 0 0 12 10 46 2 0 19 0 14 42 2 0 10 0 - 12 41 1 0 51 0 58 1 0 34 0 39 2 0 67 0 10 69 1 0 0 0 194 0 0 - 0 118 2 0 80 80 80 180 1 0 84 80 87 1 0 84 80 85 1 0 88 0 105 - 3 0 0 0 12 0 25 3 0 0 0 14 22 23 3 0 0 0 14 27 28 3 0 0 0 12 - 7 31 2 0 0 0 37 38 1 0 10 0 186 2 0 142 0 142 167 2 0 7 142 7 - 185 2 0 142 142 142 146 2 0 67 0 0 189 3 0 0 0 132 0 133 2 0 - 0 0 132 136 1 0 0 0 137 2 0 0 0 12 139 2 0 10 0 12 16 2 0 19 - 0 14 20 2 0 0 0 12 124 2 0 119 0 0 160 2 0 155 142 0 156 1 0 - 0 12 50)))))) - (QUOTE |lookupComplete|))) - -@ \section{package UPOLYC2 UnivariatePolynomialCategoryFunctions2} <>= )abbrev package UPOLYC2 UnivariatePolynomialCategoryFunctions2 @@ -4149,9 +183,7 @@ CommuteUnivariatePolynomialCategory(R, UP, UPUP): Exports == Impl where <<*>>= <> -<> <> -<> <> <> @