diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet index 6079fb9..3cc4291 100644 --- a/books/bookvol10.4.pamphlet +++ b/books/bookvol10.4.pamphlet @@ -10037,6 +10037,69 @@ DiophantineSolutionPackage(): Cat == Capsule where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package DIRPROD2 DirectProductFunctions2} +\pagehead{DirectProductFunctions2}{DIRPROD2} +\pagepic{ps/v104directproductfunctions2.ps}{DIRPROD2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package DIRPROD2 DirectProductFunctions2 +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This package provides operations which all take as arguments +++ direct products of elements of some type \spad{A} and functions from \spad{A} to another +++ type B. The operations all iterate over their vector argument +++ and either return a value of type B or a direct product over B. + +DirectProductFunctions2(dim, A, B): Exports == Implementation where + dim : NonNegativeInteger + A, B: Type + + DA ==> DirectProduct(dim, A) + DB ==> DirectProduct(dim, B) + VA ==> Vector A + VB ==> Vector B + O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) + + Exports ==> with + scan : ((A, B) -> B, DA, B) -> DB + ++ scan(func,vec,ident) creates a new vector whose elements are + ++ the result of applying reduce to the binary function func, + ++ increasing initial subsequences of the vector vec, + ++ and the element ident. + reduce : ((A, B) -> B, DA, B) -> B + ++ reduce(func,vec,ident) combines the elements in vec using the + ++ binary function func. Argument ident is returned if the vector is empty. + map : (A -> B, DA) -> DB + ++ map(f, v) applies the function f to every element of the vector v + ++ producing a new vector containing the values. + + Implementation ==> add + import FiniteLinearAggregateFunctions2(A, VA, B, VB) + + map(f, v) == directProduct map(f, v::VA) + scan(f, v, b) == directProduct scan(f, v::VA, b) + reduce(f, v, b) == reduce(f, v::VA, b) + +@ +<>= +"DIRPROD2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=DIRPROD2"] +"VECTCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=VECTCAT"] +"DIRPROD2" -> "VECTCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package DLP DiscreteLogarithmPackage} \pagehead{DiscreteLogarithmPackage}{DLP} \pagepic{ps/v104discretelogarithmpackage.ps}{DLP}{1.00} @@ -20459,6 +20522,464 @@ ExpertSystemContinuityPackage1(A:DF,B:DF): E == I where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ESTOOLS ExpertSystemToolsPackage} +\pagehead{ExpertSystemToolsPackage}{ESTOOLS} +\pagepic{ps/v104expertsystemtoolspackage.ps}{ESTOOLS}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ESTOOLS ExpertSystemToolsPackage +++ Author: Brian Dupee +++ Date Created: May 1994 +++ Date Last Updated: July 1996 +++ Basic Operations: +++ Description: +++ \axiom{ExpertSystemToolsPackage} contains some useful functions for use +++ by the computational agents of numerical solvers. +ExpertSystemToolsPackage():E == I where + LEDF ==> List Expression DoubleFloat + KEDF ==> Kernel Expression DoubleFloat + LKEDF ==> List Kernel Expression DoubleFloat + VEDF ==> Vector Expression DoubleFloat + VEF ==> Vector Expression Float + VMF ==> Vector MachineFloat + EF2 ==> ExpressionFunctions2 + EFI ==> Expression Fraction Integer + MDF ==> Matrix DoubleFloat + LDF ==> List DoubleFloat + PDF ==> Polynomial DoubleFloat + EDF ==> Expression DoubleFloat + EF ==> Expression Float + SDF ==> Stream DoubleFloat + DF ==> DoubleFloat + F ==> Float + MF ==> MachineFloat + INT ==> Integer + NNI ==> NonNegativeInteger + LS ==> List Symbol + ST ==> String + LST ==> List String + SS ==> Stream String + FI ==> Fraction Integer + R ==> Ring + OR ==> OrderedRing + ON ==> Record(additions:INT,multiplications:INT,exponentiations:INT,functionCalls:INT) + RVE ==> Record(val:EDF,exponent:INT) + BO ==> BasicOperator + OCF ==> OrderedCompletion Float + OCDF ==> OrderedCompletion DoubleFloat + SOCF ==> Segment OrderedCompletion Float + SOCDF ==> Segment OrderedCompletion DoubleFloat + Measure ==> Record(measure:F, name:String, explanations:List String) + Measure2 ==> Record(measure:F, name:String, explanations:List String, extra:Result) + CTYPE ==> Union(continuous: "Continuous at the end points", + lowerSingular: "There is a singularity at the lower end point", + upperSingular: "There is a singularity at the upper end point", + bothSingular: "There are singularities at both end points", + notEvaluated: "End point continuity not yet evaluated") + RTYPE ==> Union(finite: "The range is finite", + lowerInfinite: "The bottom of range is infinite", + upperInfinite: "The top of range is infinite", + bothInfinite: "Both top and bottom points are infinite", + notEvaluated: "Range not yet evaluated") + STYPE ==> Union(str:SDF, + notEvaluated:"Internal singularities not yet evaluated") + ATT ==> Record(endPointContinuity:CTYPE,singularitiesStream:STYPE,range:RTYPE) + IFV ==> Record(stiffness:F,stability:F,expense:F,accuracy:F,intermediateResults:F) + + E ==> with + + f2df:F -> DF + ++ f2df(f) is a function to convert a \axiomType{Float} to a + ++ \axiomType{DoubleFloat} + ef2edf:EF -> EDF + ++ ef2edf(f) is a function to convert an \axiomType{Expression Float} + ++ to an \axiomType{Expression DoubleFloat} + ocf2ocdf: OCF -> OCDF + ++ ocf2ocdf(a) is a function to convert an \axiomType{OrderedCompletion + ++ Float} to an \axiomType{OrderedCompletion DoubleFloat} + socf2socdf: SOCF -> SOCDF + ++ socf2socdf(a) is a function to convert a \axiomType{Segment OrderedCompletion Float} + ++ to a \axiomType{Segment OrderedCompletion DoubleFloat} + convert: List SOCF -> List SOCDF + ++ convert(l) is a function to convert a \axiomType{Segment OrderedCompletion Float} + ++ to a \axiomType{Segment OrderedCompletion DoubleFloat} + df2fi :DF -> FI + ++ df2fi(n) is a function to convert a \axiomType{DoubleFloat} to a + ++ \axiomType{Fraction Integer} + edf2fi :EDF -> FI + ++ edf2fi(n) maps \axiomType{Expression DoubleFloat} to + ++ \axiomType{Fraction Integer} + ++ It is an error if n is not coercible to Fraction Integer + edf2df :EDF -> DF + ++ edf2df(n) maps \axiomType{Expression DoubleFloat} to + ++ \axiomType{DoubleFloat} + ++ It is an error if \spad{n} is not coercible to DoubleFloat + isQuotient:EDF -> Union(EDF,"failed") + ++ isQuotient(expr) returns the quotient part of the input + ++ expression or \spad{"failed"} if the expression is not of that form. + expenseOfEvaluation:VEDF -> F + ++ expenseOfEvaluation(o) gives an approximation of the cost of + ++ evaluating a list of expressions in terms of the number of basic + ++ operations. + ++ < 0.3 inexpensive ; 0.5 neutral ; > 0.7 very expensive + ++ 400 `operation units' -> 0.75 + ++ 200 `operation units' -> 0.5 + ++ 83 `operation units' -> 0.25 + ++ ** = 4 units , function calls = 10 units. + numberOfOperations:VEDF -> ON + ++ numberOfOperations(ode) counts additions, multiplications, + ++ exponentiations and function calls in the input set of expressions. + edf2efi:EDF -> EFI + ++ edf2efi(e) coerces \axiomType{Expression DoubleFloat} into + ++ \axiomType{Expression Fraction Integer} + dfRange:SOCDF -> SOCDF + ++ dfRange(r) converts a range including + ++ \inputbitmap{\htbmdir{}/plusminus.bitmap} \infty + ++ to \axiomType{DoubleFloat} equavalents. + dflist:List(Record(left:FI,right:FI)) -> LDF + ++ dflist(l) returns a list of \axiomType{DoubleFloat} equivalents of list l + df2mf:DF -> MF + ++ df2mf(n) coerces a \axiomType{DoubleFloat} to \axiomType{MachineFloat} + ldf2vmf:LDF -> VMF + ++ ldf2vmf(l) coerces a \axiomType{List DoubleFloat} to + ++ \axiomType{List MachineFloat} + edf2ef:EDF -> EF + ++ edf2ef(e) maps \axiomType{Expression DoubleFloat} to + ++ \axiomType{Expression Float} + vedf2vef:VEDF -> VEF + ++ vedf2vef(v) maps \axiomType{Vector Expression DoubleFloat} to + ++ \axiomType{Vector Expression Float} + in?:(DF,SOCDF) -> Boolean + ++ in?(p,range) tests whether point p is internal to the + ++ range range + df2st:DF -> ST + ++ df2st(n) coerces a \axiomType{DoubleFloat} to \axiomType{String} + f2st:F -> ST + ++ f2st(n) coerces a \axiomType{Float} to \axiomType{String} + ldf2lst:LDF -> LST + ++ ldf2lst(ln) coerces a \axiomType{List DoubleFloat} to \axiomType{List String} + sdf2lst:SDF -> LST + ++ sdf2lst(ln) coerces a \axiomType{Stream DoubleFloat} to \axiomType{String} + getlo : SOCDF -> DF + ++ getlo(u) gets the \axiomType{DoubleFloat} equivalent of + ++ the first endpoint of the range \spad{u} + gethi : SOCDF -> DF + ++ gethi(u) gets the \axiomType{DoubleFloat} equivalent of + ++ the second endpoint of the range \spad{u} + concat:(Result,Result) -> Result + ++ concat(a,b) adds two aggregates of type \axiomType{Result}. + concat:(List Result) -> Result + ++ concat(l) concatenates a list of aggregates of type \axiomType{Result} + outputMeasure:F -> ST + ++ outputMeasure(n) rounds \spad{n} to 3 decimal places and outputs + ++ it as a string + measure2Result:Measure -> Result + ++ measure2Result(m) converts a measure record into a \axiomType{Result} + measure2Result:Measure2 -> Result + ++ measure2Result(m) converts a measure record into a \axiomType{Result} + att2Result:ATT -> Result + ++ att2Result(m) converts a attributes record into a \axiomType{Result} + iflist2Result:IFV -> Result + ++ iflist2Result(m) converts a attributes record into a \axiomType{Result} + pdf2ef:PDF -> EF + ++ pdf2ef(p) coerces a \axiomType{Polynomial DoubleFloat} to + ++ \axiomType{Expression Float} + pdf2df:PDF -> DF + ++ pdf2df(p) coerces a \axiomType{Polynomial DoubleFloat} to + ++ \axiomType{DoubleFloat}. It is an error if \axiom{p} is not + ++ retractable to DoubleFloat. + df2ef:DF -> EF + ++ df2ef(a) coerces a \axiomType{DoubleFloat} to \axiomType{Expression Float} + fi2df:FI -> DF + ++ fi2df(f) coerces a \axiomType{Fraction Integer} to \axiomType{DoubleFloat} + mat:(LDF,NNI) -> MDF + ++ mat(a,n) constructs a one-dimensional matrix of a. + + I ==> add + + mat(a:LDF,n:NNI):MDF == + empty?(a)$LDF => zero(1,n)$MDF + matrix(list([i for i in a for j in 1..n])$(List LDF))$MDF + + f2df(f:F):DF == (convert(f)@DF)$F + + ef2edf(f:EF):EDF == map(f2df,f)$EF2(F,DF) + + fi2df(f:FI):DF == coerce(f)$DF + + ocf2ocdf(a:OCF):OCDF == + finite? a => (f2df(retract(a)@F))::OCDF + a pretend OCDF + + socf2socdf(a:SOCF):SOCDF == + segment(ocf2ocdf(lo a),ocf2ocdf(hi a)) + + convert(l:List SOCF):List SOCDF == [socf2socdf a for a in l] + + pdf2df(p:PDF):DF == retract(p)@DF + + df2ef(a:DF):EF == + b := convert(a)@Float + coerce(b)$EF + + pdf2ef(p:PDF):EF == df2ef(pdf2df(p)) + + edf2fi(m:EDF):FI == retract(retract(m)@DF)@FI + + edf2df(m:EDF):DF == retract(m)@DF + + df2fi(r:DF):FI == (retract(r)@FI)$DF + + dfRange(r:SOCDF):SOCDF == + if infinite?(lo(r))$OCDF then r := -(max()$DF :: OCDF)..hi(r)$SOCDF + if infinite?(hi(r))$OCDF then r := lo(r)$SOCDF..(max()$DF :: OCDF) + r + + dflist(l:List(Record(left:FI,right:FI))):LDF == [u.left :: DF for u in l] + + edf2efi(f:EDF):EFI == map(df2fi,f)$EF2(DF,FI) + + df2st(n:DF):String == (convert((convert(n)@Float)$DF)@ST)$Float + + f2st(n:F):String == (convert(n)@ST)$Float + + ldf2lst(ln:LDF):LST == [df2st f for f in ln] + + sdf2lst(ln:SDF):LST == + explicitlyFinite? ln => + m := map(df2st,ln)$StreamFunctions2(DF,ST) + if index?(20,m)$SS then + split!(m,20) + m := concat(m,".......") + m := complete(m)$SS + entries(m)$SS + empty()$LST + + df2mf(n:DF):MF == (df2fi(n))::MF + + ldf2vmf(l:LDF):VMF == + m := [df2mf(n) for n in l] + vector(m)$VMF + + edf2ef(e:EDF):EF == map(convert$DF,e)$EF2(DF,Float) + + vedf2vef(vedf:VEDF):VEF == vector([edf2ef e for e in members(vedf)]) + + getlo(u:SOCDF):DF == retract(lo(u))@DF + + gethi(u:SOCDF):DF == retract(hi(u))@DF + + in?(p:DF,range:SOCDF):Boolean == + top := gethi(range) + bottom := getlo(range) + a:Boolean := (p < top)$DF + b:Boolean := (p > bottom)$DF + (a and b)@Boolean + + isQuotient(expr:EDF):Union(EDF,"failed") == + (k := mainKernel expr) case KEDF => + (expr = inv(f := k :: KEDF :: EDF)$EDF)$EDF => f +-- one?(numerator expr) => denominator expr + (numerator expr) = 1 => denominator expr + "failed" + "failed" + + numberOfOperations1(fn:EDF,numbersSoFar:ON):ON == + (u := isQuotient(fn)) case EDF => + numbersSoFar := numberOfOperations1(u,numbersSoFar) + (p := isPlus(fn)) case LEDF => + p := coerce(p)@LEDF + np := #p + numbersSoFar.additions := (numbersSoFar.additions)+np-1 + for i in 1..np repeat + numbersSoFar := numberOfOperations1(p.i,numbersSoFar) + numbersSoFar + (t:=isTimes(fn)) case LEDF => + t := coerce(t)@LEDF + nt := #t + numbersSoFar.multiplications := (numbersSoFar.multiplications)+nt-1 + for i in 1..nt repeat + numbersSoFar := numberOfOperations1(t.i,numbersSoFar) + numbersSoFar + if (e:=isPower(fn)) case RVE then + e := coerce(e)@RVE + e.exponent>1 => + numbersSoFar.exponentiations := inc(numbersSoFar.exponentiations) + numbersSoFar := numberOfOperations1(e.val,numbersSoFar) + lk := kernels(fn) + #lk = 1 => -- #lk = 0 => constant found (no further action) + k := first(lk)$LKEDF + n := name(operator(k)$KEDF)$BO + entry?(n,variables(fn)$EDF)$LS => numbersSoFar -- solo variable found + a := first(argument(k)$KEDF)$LEDF + numbersSoFar.functionCalls := inc(numbersSoFar.functionCalls)$INT + numbersSoFar := numberOfOperations1(a,numbersSoFar) + numbersSoFar + + numberOfOperations(ode:VEDF):ON == + n:ON := [0,0,0,0] + for i in 1..#ode repeat + n:ON := numberOfOperations1(ode.i,n) + n + + expenseOfEvaluation(o:VEDF):F == + ln:ON := numberOfOperations(o) + a := ln.additions + m := ln.multiplications + e := ln.exponentiations + f := 10*ln.functionCalls + n := (a + m + 4*e + 10*e) + (1.0-exp((-n::F/288.0))$F) + + concat(a:Result,b:Result):Result == + membersOfa := (members(a)@List(Record(key:Symbol,entry:Any))) + membersOfb := (members(b)@List(Record(key:Symbol,entry:Any))) + allMembers:= + concat(membersOfa,membersOfb)$List(Record(key:Symbol,entry:Any)) + construct(allMembers) + + concat(l:List Result):Result == + import List Result + empty? l => empty()$Result + f := first l + if empty?(r := rest l) then + f + else + concat(f,concat r) + + outputMeasure(m:F):ST == + fl:Float := round(m*(f:= 1000.0))/f + convert(fl)@ST + + measure2Result(m:Measure):Result == + mm := coerce(m.measure)$AnyFunctions1(Float) + mmr:Record(key:Symbol,entry:Any) := [bestMeasure@Symbol,mm] + mn := coerce(m.name)$AnyFunctions1(ST) + mnr:Record(key:Symbol,entry:Any) := [nameOfRoutine@Symbol,mn] + me := coerce(m.explanations)$AnyFunctions1(List String) + mer:Record(key:Symbol,entry:Any) := [allMeasures@Symbol,me] + mr := construct([mmr,mnr,mer])$Result + met := coerce(mr)$AnyFunctions1(Result) + meth:Record(key:Symbol,entry:Any):=[method@Symbol,met] + construct([meth])$Result + + measure2Result(m:Measure2):Result == + mm := coerce(m.measure)$AnyFunctions1(Float) + mmr:Record(key:Symbol,entry:Any) := [bestMeasure@Symbol,mm] + mn := coerce(m.name)$AnyFunctions1(ST) + mnr:Record(key:Symbol,entry:Any) := [nameOfRoutine@Symbol,mn] + me := coerce(m.explanations)$AnyFunctions1(List String) + mer:Record(key:Symbol,entry:Any) := [allMeasures@Symbol,me] + mx := coerce(m.extra)$AnyFunctions1(Result) + mxr:Record(key:Symbol,entry:Any) := [other@Symbol,mx] + mr := construct([mmr,mnr,mer,mxr])$Result + met := coerce(mr)$AnyFunctions1(Result) + meth:Record(key:Symbol,entry:Any):=[method@Symbol,met] + construct([meth])$Result + + att2Result(att:ATT):Result == + aepc := coerce(att.endPointContinuity)$AnyFunctions1(CTYPE) + ar := coerce(att.range)$AnyFunctions1(RTYPE) + as := coerce(att.singularitiesStream)$AnyFunctions1(STYPE) + aa:List Any := [aepc,ar,as] + aaa := coerce(aa)$AnyFunctions1(List Any) + aar:Record(key:Symbol,entry:Any) := [attributes@Symbol,aaa] + construct([aar])$Result + + iflist2Result(ifv:IFV):Result == + ifvs:List String := + [concat(["stiffness: ",outputMeasure(ifv.stiffness)]), + concat(["stability: ",outputMeasure(ifv.stability)]), + concat(["expense: ",outputMeasure(ifv.expense)]), + concat(["accuracy: ",outputMeasure(ifv.accuracy)]), + concat(["intermediateResults: ",outputMeasure(ifv.intermediateResults)])] + ifa:= coerce(ifvs)$AnyFunctions1(List String) + ifr:Record(key:Symbol,entry:Any) := [intensityFunctions@Symbol,ifa] + construct([ifr])$Result + +@ +<>= +"ESTOOLS" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ESTOOLS"] +"FS" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FS"] +"ESTOOLS" -> "FS" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ESTOOLS1 ExpertSystemToolsPackage1} +\pagehead{ExpertSystemToolsPackage1}{ESTOOLS1} +\pagepic{ps/v104expertsystemtoolspackage1.ps}{ESTOOLS1}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ESTOOLS1 ExpertSystemToolsPackage1 +++ Author: Brian Dupee +++ Date Created: February 1995 +++ Date Last Updated: February 1995 +++ Basic Operations: neglist +++ Description: +++ \axiom{ExpertSystemToolsPackage1} contains some useful functions for use +++ by the computational agents of Ordinary Differential Equation solvers. +ExpertSystemToolsPackage1(R1:OR): E == I where + OR ==> OrderedRing + E ==> with + neglist:List R1 -> List R1 + ++ neglist(l) returns only the negative elements of the list \spad{l} + I ==> add + neglist(l:List R1):List R1 == [u for u in l | negative?(u)$R1] + +@ +<>= +"ESTOOLS1" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ESTOOLS1"] +"OAGROUP" [color="#4488FF",href="bookvol10.2.pdf#nameddest=OAGROUP"] +"ESTOOLS1" -> "OAGROUP" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ESTOOLS2 ExpertSystemToolsPackage2} +\pagehead{ExpertSystemToolsPackage2}{ESTOOLS2} +\pagepic{ps/v104expertsystemtoolspackage2.ps}{ESTOOLS2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ESTOOLS2 ExpertSystemToolsPackage2 +++ Author: Brian Dupee +++ Date Created: February 1995 +++ Date Last Updated: July 1996 +++ Basic Operations: map +++ Related Constructors: Matrix +++ Description: +++ \axiom{ExpertSystemToolsPackage2} contains some useful functions for use +++ by the computational agents of Ordinary Differential Equation solvers. +ExpertSystemToolsPackage2(R1:R,R2:R): E == I where + R ==> Ring + E ==> with + map:(R1->R2,Matrix R1) -> Matrix R2 + ++ map(f,m) applies a mapping f:R1 -> R2 onto a matrix + ++ \spad{m} in R1 returning a matrix in R2 + I ==> add + map(f:R1->R2,m:Matrix R1):Matrix R2 == + matrix([[f u for u in v] for v in listOfLists(m)$(Matrix R1)])$(Matrix R2) + +@ +<>= +"ESTOOLS2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ESTOOLS2"] +"LMODULE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=LMODULE"] +"SGROUP" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SGROUP"] +"ESTOOLS2" -> "LMODULE" +"ESTOOLS2" -> "SGROUP" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package EXPR2 ExpressionFunctions2} \pagehead{ExpressionFunctions2}{EXPR2} \pagepic{ps/v104ExpressionFunctions2.ps}{EXPR2}{1.00} @@ -21539,6 +22060,197 @@ ExpressionToUnivariatePowerSeries(R,FE): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package EXPRTUBE ExpressionTubePlot} +\pagehead{ExpressionTubePlot}{EXPRTUBE} +\pagepic{ps/v104expressiontubeplot.ps}{EXPRTUBE}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package EXPRTUBE ExpressionTubePlot +++ Author: Clifton J. Williamson +++ Date Created: Bastille Day 1989 +++ Date Last Updated: 5 June 1990 +++ Keywords: +++ Examples: +++ Package for constructing tubes around 3-dimensional parametric curves. +ExpressionTubePlot(): Exports == Implementation where + B ==> Boolean + I ==> Integer + FE ==> Expression Integer + SY ==> Symbol + SF ==> DoubleFloat + L ==> List + S ==> String + SEG ==> Segment + F2F ==> MakeFloatCompiledFunction(FE) + Pt ==> Point SF + PLOT3 ==> Plot3D + TUBE ==> TubePlot Plot3D + + Exports ==> with + constantToUnaryFunction: SF -> (SF -> SF) + ++ constantToUnaryFunction(s) is a local function which takes the + ++ value of s, which may be a function of a constant, and returns + ++ a function which always returns the value \spadtype{DoubleFloat} s. + tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF -> SF,I) -> TUBE + ++ tubePlot(f,g,h,colorFcn,a..b,r,n) puts a tube of radius r(t) with + ++ n points on each circle about the curve \spad{x = f(t)}, + ++ \spad{y = g(t)}, \spad{z = h(t)} for t in \spad{[a,b]}. + ++ The tube is considered to be open. + tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF -> SF,I,S) -> TUBE + ++ tubePlot(f,g,h,colorFcn,a..b,r,n,s) puts a tube of radius \spad{r(t)} + ++ with n points on each circle about the curve \spad{x = f(t)}, + ++ \spad{y = g(t)}, + ++ \spad{z = h(t)} for t in \spad{[a,b]}. If s = "closed", the tube is + ++ considered to be closed; if s = "open", the tube is considered + ++ to be open. + tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF,I) -> TUBE + ++ tubePlot(f,g,h,colorFcn,a..b,r,n) puts a tube of radius r with + ++ n points on each circle about the curve \spad{x = f(t)}, + ++ \spad{y = g(t)}, \spad{z = h(t)} for t in \spad{[a,b]}. + ++ The tube is considered to be open. + tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF,I,S) -> TUBE + ++ tubePlot(f,g,h,colorFcn,a..b,r,n,s) puts a tube of radius r with + ++ n points on each circle about the curve \spad{x = f(t)}, + ++ \spad{y = g(t)}, \spad{z = h(t)} for t in \spad{[a,b]}. + ++ If s = "closed", the tube is + ++ considered to be closed; if s = "open", the tube is considered + ++ to be open. + + Implementation ==> add + import Plot3D + import F2F + import TubePlotTools + +--% variables + + getVariable: (FE,FE,FE) -> SY + getVariable(x,y,z) == + varList1 := variables x + varList2 := variables y + varList3 := variables z + (not (# varList1 <= 1)) or (not (# varList2 <= 1)) or _ + (not (# varList3 <= 1)) => + error "tubePlot: only one variable may be used" + null varList1 => + null varList2 => + null varList3 => + error "tubePlot: a variable must appear in functions" + first varList3 + t2 := first varList2 + null varList3 => t2 + not (first varList3 = t2) => + error "tubePlot: only one variable may be used" + t1 := first varList1 + null varList2 => + null varList3 => t1 + not (first varList3 = t1) => + error "tubePlot: only one variable may be used" + t1 + t2 := first varList2 + null varList3 => + not (t1 = t2) => + error "tubePlot: only one variable may be used" + t1 + not (first varList3 = t1) or not (t2 = t1) => + error "tubePlot: only one variable may be used" + t1 + +--% tubes: variable radius + + tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ + tRange:SEG SF,radFcn:SF -> SF,n:I,string:S) == + -- check value of n + n < 3 => error "tubePlot: n should be at least 3" + -- check string + flag : B := + string = "closed" => true + string = "open" => false + error "tubePlot: last argument should be open or closed" + -- check variables + t := getVariable(x,y,z) + -- coordinate functions + xFunc := makeFloatFunction(x,t) + yFunc := makeFloatFunction(y,t) + zFunc := makeFloatFunction(z,t) + -- derivatives of coordinate functions + xp := differentiate(x,t) + yp := differentiate(y,t) + zp := differentiate(z,t) + -- derivative of arc length + sp := sqrt(xp ** 2 + yp ** 2 + zp ** 2) + -- coordinates of unit tangent vector + Tx := xp/sp; Ty := yp/sp; Tz := zp/sp + -- derivatives of coordinates of unit tangent vector + Txp := differentiate(Tx,t) + Typ := differentiate(Ty,t) + Tzp := differentiate(Tz,t) + -- K = curvature = length of curvature vector + K := sqrt(Txp ** 2 + Typ ** 2 + Tzp ** 2) + -- coordinates of principal normal vector + Nx := Txp / K; Ny := Typ / K; Nz := Tzp / K + -- functions SF->SF giving coordinates of principal normal vector + NxFunc := makeFloatFunction(Nx,t); + NyFunc := makeFloatFunction(Ny,t); + NzFunc := makeFloatFunction(Nz,t); + -- coordinates of binormal vector + Bx := Ty * Nz - Tz * Ny + By := Tz * Nx - Tx * Nz + Bz := Tx * Ny - Ty * Nx + -- functions SF -> SF giving coordinates of binormal vector + BxFunc := makeFloatFunction(Bx,t); + ByFunc := makeFloatFunction(By,t); + BzFunc := makeFloatFunction(Bz,t); + -- create Plot3D + parPlot := plot(xFunc,yFunc,zFunc,colorFcn,tRange) + tvals := first tValues parPlot + curvePts := first listBranches parPlot + cosSin := cosSinInfo n + loopList : L L Pt := nil() + while not null tvals repeat + -- note: tvals and curvePts have the same number of elements + tval := first tvals; tvals := rest tvals + ctr := first curvePts; curvePts := rest curvePts + pNormList : L SF := + [NxFunc tval,NyFunc tval,NzFunc tval,colorFcn tval] + pNorm : Pt := point pNormList + bNormList : L SF := + [BxFunc tval,ByFunc tval,BzFunc tval,colorFcn tval] + bNorm : Pt := point bNormList + lps := loopPoints(ctr,pNorm,bNorm,radFcn tval,cosSin) + loopList := cons(lps,loopList) + tube(parPlot,reverse_! loopList,flag) + + tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ + tRange:SEG SF,radFcn:SF -> SF,n:I) == + tubePlot(x,y,z,colorFcn,tRange,radFcn,n,"open") + +--% tubes: constant radius + + project: (SF,SF) -> SF + project(x,y) == x + + constantToUnaryFunction x == project(x,#1) + + tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ + tRange:SEG SF,rad:SF,n:I,s:S) == + tubePlot(x,y,z,colorFcn,tRange,constantToUnaryFunction rad,n,s) + + tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ + tRange:SEG SF,rad:SF,n:I) == + tubePlot(x,y,z,colorFcn,tRange,rad,n,"open") + +@ +<>= +"EXPRTUBE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=EXPRTUBE"] +"FS" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FS"] +"EXPRTUBE" -> "FS" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package E04AGNT e04AgentsPackage} \pagehead{e04AgentsPackage}{E04AGNT} \pagepic{ps/v104e04agentspackage.ps}{E04AGNT}{1.00} @@ -22216,6 +22928,104 @@ FactoringUtilities(E,OV,R,P) : C == T where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package FGLMICPK FGLMIfCanPackage} +\pagehead{FGLMIfCanPackage}{FGLMICPK} +\pagepic{ps/v104fglmifcanpackage.ps}{FGLMICPK}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package FGLMICPK FGLMIfCanPackage +++ Author: Marc Moreno Maza +++ Date Created: 08/02/1999 +++ Date Last Updated: 08/02/1999 +++ Description: +++ This is just an interface between several packages and domains. +++ The goal is to compute lexicographical Groebner bases +++ of sets of polynomial with type \spadtype{Polynomial R} +++ by the {\em FGLM} algorithm if this is possible (i.e. +++ if the input system generates a zero-dimensional ideal). +++ Version: 1. +FGLMIfCanPackage(R,ls): Exports == Implementation where + R: GcdDomain + ls: List Symbol + V ==> OrderedVariableList ls + N ==> NonNegativeInteger + Z ==> Integer + B ==> Boolean + Q1 ==> Polynomial R + Q2 ==> HomogeneousDistributedMultivariatePolynomial(ls,R) + Q3 ==> DistributedMultivariatePolynomial(ls,R) + E2 ==> HomogeneousDirectProduct(#ls,NonNegativeInteger) + E3 ==> DirectProduct(#ls,NonNegativeInteger) + poltopol ==> PolToPol(ls, R) + lingrobpack ==> LinGroebnerPackage(ls,R) + groebnerpack2 ==> GroebnerPackage(R,E2,V,Q2) + groebnerpack3 ==> GroebnerPackage(R,E3,V,Q3) + Exports == with + + zeroDimensional?: List(Q1) -> B + ++ \axiom{zeroDimensional?(lq1)} returns true iff + ++ \axiom{lq1} generates a zero-dimensional ideal + ++ w.r.t. the variables of \axiom{ls}. + fglmIfCan: List(Q1) -> Union(List(Q1), "failed") + ++ \axiom{fglmIfCan(lq1)} returns the lexicographical Groebner + ++ basis of \axiom{lq1} by using the {\em FGLM} strategy, + ++ if \axiom{zeroDimensional?(lq1)} holds. + groebner: List(Q1) -> List(Q1) + ++ \axiom{groebner(lq1)} returns the lexicographical Groebner + ++ basis of \axiom{lq1}. If \axiom{lq1} generates a zero-dimensional + ++ ideal then the {\em FGLM} strategy is used, otherwise + ++ the {\em Sugar} strategy is used. + + Implementation == add + + zeroDim?(lq2: List Q2): Boolean == + lq2 := groebner(lq2)$groebnerpack2 + empty? lq2 => false + #lq2 < #ls => false + lv: List(V) := [(variable(s)$V)::V for s in ls] + for q2 in lq2 while not empty?(lv) repeat + m := leadingMonomial(q2) + x := mainVariable(m)::V + if ground?(leadingCoefficient(univariate(m,x))) then + lv := remove(x, lv) + empty? lv + + zeroDimensional?(lq1: List(Q1)): Boolean == + lq2: List(Q2) := [pToHdmp(q1)$poltopol for q1 in lq1] + zeroDim?(lq2) + + fglmIfCan(lq1:List(Q1)): Union(List(Q1),"failed") == + lq2: List(Q2) := [pToHdmp(q1)$poltopol for q1 in lq1] + lq2 := groebner(lq2)$groebnerpack2 + not zeroDim?(lq2) => "failed"::Union(List(Q1),"failed") + lq3: List(Q3) := totolex(lq2)$lingrobpack + lq1 := [dmpToP(q3)$poltopol for q3 in lq3] + lq1::Union(List(Q1),"failed") + + groebner(lq1:List(Q1)): List(Q1) == + lq2: List(Q2) := [pToHdmp(q1)$poltopol for q1 in lq1] + lq2 := groebner(lq2)$groebnerpack2 + not zeroDim?(lq2) => + lq3: List(Q3) := [pToDmp(q1)$poltopol for q1 in lq1] + lq3 := groebner(lq3)$groebnerpack3 + [dmpToP(q3)$poltopol for q3 in lq3] + lq3: List(Q3) := totolex(lq2)$lingrobpack + [dmpToP(q3)$poltopol for q3 in lq3] + +@ +<>= +"FGLMICPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FGLMICPK"] +"DIRPCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=DIRPCAT"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"FGLMICPK" -> "DIRPCAT" +"FGLMICPK" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package FORDER FindOrderFinite} \pagehead{FindOrderFinite}{FORDER} \pagepic{ps/v104findorderfinite.ps}{FORDER}{1.00} @@ -44335,6 +45145,215 @@ InternalPrintPackage(): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package IRURPK InternalRationalUnivariateRepresentationPackage} +\pagehead{InternalRationalUnivariateRepresentationPackage}{IRURPK} +\pagepic{ps/v104internalrationalunivariaterepresentationpackage.ps}{IRURPK}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package IRURPK InternalRationalUnivariateRepresentationPackage +++ Author: Marc Moreno Maza +++ Date Created: 01/1999 +++ Date Last Updated: 23/01/1999 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ Description: +++ An internal package for computing the rational univariate representation +++ of a zero-dimensional algebraic variety given by a square-free +++ triangular set. +++ The main operation is \axiomOpFrom{rur}{InternalRationalUnivariateRepresentationPackage}. +++ It is based on the {\em generic} algorithm description in [1]. \newline References: +++ [1] D. LAZARD "Solving Zero-dimensional Algebraic Systems" +++ Journal of Symbolic Computation, 1992, 13, 117-131 +++ Version: 1. + +InternalRationalUnivariateRepresentationPackage(R,E,V,P,TS): Exports == Implementation where + R : Join(EuclideanDomain,CharacteristicZero) + E : OrderedAbelianMonoidSup + V : OrderedSet + P : RecursivePolynomialCategory(R,E,V) + TS : SquareFreeRegularTriangularSetCategory(R,E,V,P) + N ==> NonNegativeInteger + Z ==> Integer + B ==> Boolean + LV ==> List V + LP ==> List P + PWT ==> Record(val: P, tower: TS) + LPWT ==> Record(val: LP, tower: TS) + WIP ==> Record(pol: P, gap: Z, tower: TS) + BWT ==> Record(val:Boolean, tower: TS) + polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,P) + normpack ==> NormalizationPackage(R,E,V,P,TS) + + Exports == with + + rur: (TS,B) -> List TS + ++ \spad{rur(ts,univ?)} returns a rational univariate representation + ++ of \spad{ts}. This assumes that the lowest polynomial in \spad{ts} + ++ is a variable \spad{v} which does not occur in the other polynomials + ++ of \spad{ts}. This variable will be used to define the simple + ++ algebraic extension over which these other polynomials will be + ++ rewritten as univariate polynomials with degree one. + ++ If \spad{univ?} is \spad{true} then these polynomials will have + ++ a constant initial. + checkRur: (TS, List TS) -> Boolean + ++ \spad{checkRur(ts,lus)} returns \spad{true} if \spad{lus} + ++ is a rational univariate representation of \spad{ts}. + + Implementation == add + + checkRur(ts: TS, lts: List TS): Boolean == + f0 := last(ts)::P + z := mvar(f0) + ts := collectUpper(ts,z) + dts: N := degree(ts) + lp := parts(ts) + dlts: N := 0 + for us in lts repeat + dlts := dlts + degree(us) + rems := [removeZero(p,us) for p in lp] + not every?(zero?,rems) => + output(us::OutputForm)$OutputPackage + return false + (dts =$N dlts)@Boolean + + convert(p:P,sqfr?:B):TS == + -- if sqfr? ASSUME p is square-free + newts: TS := empty() + sqfr? => internalAugment(p,newts) + p := squareFreePart(p) + internalAugment(p,newts) + + prepareRur(ts: TS): List LPWT == + not purelyAlgebraic?(ts)$TS => + error "rur$IRURPK: #1 is not zero-dimensional" + lp: LP := parts(ts)$TS + lp := sort(infRittWu?,lp) + empty? lp => + error "rur$IRURPK: #1 is empty" + f0 := first lp; lp := rest lp +-- not (one?(init(f0)) and one?(mdeg(f0)) and zero?(tail(f0))) => + not ((init(f0) = 1) and (mdeg(f0) = 1) and zero?(tail(f0))) => + error "rur$IRURPK: #1 has no generating root." + empty? lp => + error "rur$IRURPK: #1 has a generating root but no indeterminates" + z: V := mvar(f0) + f1 := first lp; lp := rest lp + x1: V := mvar(f1) + newf1 := x1::P - z::P + toSave: List LPWT := [] + for ff1 in irreducibleFactors([f1])$polsetpack repeat + newf0 := eval(ff1,mvar(f1),f0) + ts := internalAugment(newf1,convert(newf0,true)@TS) + toSave := cons([lp,ts],toSave) + toSave + + makeMonic(z:V,c:P,r:P,ts:TS,s:P,univ?:B): TS == + --ASSUME r is a irreducible univariate polynomial in z + --ASSUME c and s only depends on z and mvar(s) + --ASSUME c and a have main degree 1 + --ASSUME c and s have a constant initial + --ASSUME mvar(ts) < mvar(s) + lp: LP := parts(ts) + lp := sort(infRittWu?,lp) + newts: TS := convert(r,true)@TS + s := remainder(s,newts).polnum + if univ? + then + s := normalizedAssociate(s,newts)$normpack + for p in lp repeat + p := lazyPrem(eval(p,z,c),s) + p := remainder(p,newts).polnum + newts := internalAugment(p,newts) + internalAugment(s,newts) + + next(lambda:Z):Z == + if lambda < 0 then lambda := - lambda + 1 else lambda := - lambda + + makeLinearAndMonic(p: P, xi: V, ts: TS, univ?:B, check?: B, info?: B): List TS == + -- if check? THEN some VERIFICATIONS are performed + -- if info? THEN some INFORMATION is displayed + f0 := last(ts)::P + z: V := mvar(f0) + lambda: Z := 1 + ts := collectUpper(ts,z) + toSee: List WIP := [[f0,lambda,ts]$WIP] + toSave: List TS := [] + while not empty? toSee repeat + wip := first toSee; toSee := rest toSee + (f0, lambda, ts) := (wip.pol, wip.gap, wip.tower) + if check? and ((not univariate?(f0)$polsetpack) or (mvar(f0) ~= z)) + then + output("Bad f0: ")$OutputPackage + output(f0::OutputForm)$OutputPackage + c: P := lambda * xi::P + z::P + f := eval(f0,z,c); q := eval(p,z,c) + prs := subResultantChain(q,f) + r := first prs; prs := rest prs + check? and ((not zero? degree(r,xi)) or (empty? prs)) => + error "rur$IRURPK: should never happen !" + s := first prs; prs := rest prs + check? and (zero? degree(s,xi)) and (empty? prs) => + error "rur$IRURPK: should never happen !!" + if zero? degree(s,xi) then s := first prs +-- not one? degree(s,xi) => + not (degree(s,xi) = 1) => + toSee := cons([f0,next(lambda),ts]$WIP,toSee) + h := init(s) + r := squareFreePart(r) + ground?(h) or ground?(gcd(h,r)) => + for fr in irreducibleFactors([r])$polsetpack repeat + ground? fr => "leave" + toSave := cons(makeMonic(z,c,fr,ts,s,univ?),toSave) + if info? + then + output("Unlucky lambda")$OutputPackage + output(h::OutputForm)$OutputPackage + output(r::OutputForm)$OutputPackage + toSee := cons([f0,next(lambda),ts]$WIP,toSee) + toSave + + rur (ts: TS,univ?:Boolean): List TS == + toSee: List LPWT := prepareRur(ts) + toSave: List TS := [] + while not empty? toSee repeat + wip := first toSee; toSee := rest toSee + ts: TS := wip.tower + lp: LP := wip.val + empty? lp => toSave := cons(ts,toSave) + p := first lp; lp := rest lp + xi: V := mvar(p) + p := remainder(p,ts).polnum + if not univ? + then + p := primitivePart stronglyReduce(p,ts) + ground?(p) or (mvar(p) < xi) => + error "rur$IRUROK: should never happen" +-- (one? mdeg(p)) and (ground? init(p)) => + (mdeg(p) = 1) and (ground? init(p)) => + ts := internalAugment(p,ts) + wip := [lp,ts] + toSee := cons(wip,toSee) + lts := makeLinearAndMonic(p,xi,ts,univ?,false,false) + for ts in lts repeat + wip := [lp,ts] + toSee := cons(wip,toSee) + toSave + +@ +<>= +"IRURPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=IRURPK"] +"SFRTCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SFRTCAT"] +"IRURPK" -> "SFRTCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package IRREDFFX IrredPolyOverFiniteField} \pagehead{IrredPolyOverFiniteField}{IRREDFFX} \pagepic{ps/v104irredpolyoverfinitefield.ps}{IRREDFFX}{1.00} @@ -45494,6 +46513,3684 @@ LeadingCoefDetermination(OV,E,Z,P) : C == T @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package LEXTRIPK LexTriangularPackage} +<>= +-- zerodim.spad.pamphlet LexTriangularPackage.input +)spool LexTriangularPackage.output +)set message test on +)set message auto off +)clear all +--S 1 of 22 +R := Integer +--R +--R +--R (1) Integer +--R Type: Domain +--E 1 + +--S 2 of 22 +ls : List Symbol := [a,b,c,d,e,f] +--R +--R +--R (2) [a,b,c,d,e,f] +--R Type: List Symbol +--E 2 + +--S 3 of 22 +V := OVAR(ls) +--R +--R +--R (3) OrderedVariableList [a,b,c,d,e,f] +--R Type: Domain +--E 3 + +--S 4 of 22 +P := NSMP(R, V) +--R +--R +--R (4) +--R NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--R Type: Domain +--E 4 + +--S 5 of 22 +p1: P := a*b*c*d*e*f - 1 +--R +--R +--R (5) f e d c b a - 1 +--RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 5 + +--S 6 of 22 +p2: P := a*b*c*d*e +a*b*c*d*f +a*b*c*e*f +a*b*d*e*f +a*c*d*e*f +b*c*d*e*f +--R +--R +--R (6) ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b +--RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 6 + +--S 7 of 22 +p3: P := a*b*c*d + a*b*c*f + a*b*e*f + a*d*e*f + b*c*d*e + c*d*e*f +--R +--R +--R (7) (((d + f)c + f e)b + f e d)a + e d c b + f e d c +--RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 7 + +--S 8 of 22 +p4: P := a*b*c + a*b*f + a*e*f + b*c*d + c*d*e + d*e*f +--R +--R +--R (8) ((c + f)b + f e)a + d c b + e d c + f e d +--RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 8 + +--S 9 of 22 +p5: P := a*b + a*f + b*c + c*d + d*e + e*f +--R +--R +--R (9) (b + f)a + c b + d c + e d + f e +--RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 9 + +--S 10 of 22 +p6: P := a + b + c + d + e + f +--R +--R +--R (10) a + b + c + d + e + f +--RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 10 + +--S 11 of 22 +lp := [p1, p2, p3, p4, p5, p6] +--R +--R +--R (11) +--R [f e d c b a - 1, ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b, +--R (((d + f)c + f e)b + f e d)a + e d c b + f e d c, +--R ((c + f)b + f e)a + d c b + e d c + f e d, +--R (b + f)a + c b + d c + e d + f e, a + b + c + d + e + f] +--RType: List NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 11 + +--S 12 of 22 +lextripack := LEXTRIPK(R,ls) +--R +--R +--R (12) LexTriangularPackage(Integer,[a,b,c,d,e,f]) +--R Type: Domain +--E 12 + +--S 13 of 22 +lg := groebner(lp)$lextripack +--R +--R +--R (13) +--R [a + b + c + d + e + f, +--R +--R 2 2 +--R 3968379498283200b + 15873517993132800f b + 3968379498283200d +--R + +--R 3 5 4 4 +--R 15873517993132800f d + 3968379498283200f e - 15873517993132800f e +--R + +--R 5 3 6 2 +--R 23810276989699200f e + (206355733910726400f + 230166010900425600)e +--R + +--R 43 37 +--R - 729705987316687f + 1863667496867205421f +--R + +--R 31 25 +--R 291674853771731104461f + 365285994691106921745f +--R + +--R 19 13 +--R 549961185828911895f - 365048404038768439269f +--R + +--R 7 +--R - 292382820431504027669f - 2271898467631865497f +--R * +--R e +--R + +--R 44 38 +--R - 3988812642545399f + 10187423878429609997f +--R + +--R 32 26 +--R 1594377523424314053637f + 1994739308439916238065f +--R + +--R 20 14 +--R 1596840088052642815f - 1993494118301162145413f +--R + +--R 8 2 +--R - 1596049742289689815053f - 11488171330159667449f +--R , +--R +--R 2 +--R (23810276989699200c - 23810276989699200f)b + 23810276989699200c +--R + +--R 2 +--R 71430830969097600f c - 23810276989699200d - 95241107958796800f d +--R + +--R 3 5 4 4 5 3 +--R - 55557312975964800f e + 174608697924460800f e - 174608697924460800f e +--R + +--R 6 2 +--R (- 2428648252949318400f - 2611193709870345600)e +--R + +--R 43 37 +--R 8305444561289527f - 21212087151945459641f +--R + +--R 31 25 +--R - 3319815883093451385381f - 4157691646261657136445f +--R + +--R 19 13 +--R - 6072721607510764095f + 4154986709036460221649f +--R + +--R 7 +--R 3327761311138587096749f + 25885340608290841637f +--R * +--R e +--R + +--R 44 38 +--R 45815897629010329f - 117013765582151891207f +--R + +--R 32 26 +--R - 18313166848970865074187f - 22909971239649297438915f +--R + +--R 20 14 +--R - 16133250761305157265f + 22897305857636178256623f +--R + +--R 8 2 +--R 18329944781867242497923f + 130258531002020420699f +--R , +--R +--R (7936758996566400d - 7936758996566400f)b - 7936758996566400f d +--R + +--R 3 5 4 4 5 3 +--R - 7936758996566400f e + 23810276989699200f e - 23810276989699200f e +--R + +--R 6 2 +--R (- 337312257354072000f - 369059293340337600)e +--R + +--R 43 37 +--R 1176345388640471f - 3004383582891473073f +--R + +--R 31 25 +--R - 470203502707246105653f - 588858183402644348085f +--R + +--R 19 13 +--R - 856939308623513535f + 588472674242340526377f +--R + +--R 7 +--R 471313241958371103517f + 3659742549078552381f +--R * +--R e +--R + +--R 44 38 32 +--R 6423170513956901f - 16404772137036480803f - 2567419165227528774463f +--R + +--R 26 20 +--R - 3211938090825682172335f - 2330490332697587485f +--R + +--R 14 8 +--R 3210100109444754864587f + 2569858315395162617847f +--R + +--R 2 +--R 18326089487427735751f +--R , +--R +--R 3 5 +--R (11905138494849600e - 11905138494849600f)b - 3968379498283200f e +--R + +--R 4 4 5 3 +--R 15873517993132800f e - 27778656487982400f e +--R + +--R 6 2 +--R (- 208339923659868000f - 240086959646133600)e +--R + +--R 43 37 +--R 786029984751110f - 2007519008182245250f +--R + +--R 31 25 +--R - 314188062908073807090f - 393423667537929575250f +--R + +--R 19 13 +--R - 550329120654394950f + 393196408728889612770f +--R + +--R 7 +--R 314892372799176495730f + 2409386515146668530f +--R * +--R e +--R + +--R 44 38 32 +--R 4177638546747827f - 10669685294602576381f - 1669852980419949524601f +--R + +--R 26 20 +--R - 2089077057287904170745f - 1569899763580278795f +--R + +--R 14 8 +--R 2087864026859015573349f + 1671496085945199577969f +--R + +--R 2 +--R 11940257226216280177f +--R , +--R +--R 6 2 5 +--R (11905138494849600f - 11905138494849600)b - 15873517993132800f e +--R + +--R 3 4 4 3 +--R 39683794982832000f e - 39683794982832000f e +--R + +--R 11 5 2 +--R (- 686529653202993600f - 607162063237329600f )e +--R + +--R 42 36 30 +--R 65144531306704f - 166381280901088652f - 26033434502470283472f +--R + +--R 24 18 +--R - 31696259583860650140f + 971492093167581360f +--R + +--R 12 6 +--R 32220085033691389548f + 25526177666070529808f + 138603268355749244 +--R * +--R e +--R + +--R 43 37 31 +--R 167620036074811f - 428102417974791473f - 66997243801231679313f +--R + +--R 25 19 +--R - 83426716722148750485f + 203673895369980765f +--R + +--R 13 7 +--R 83523056326010432457f + 66995789640238066937f + 478592855549587901f +--R , +--R +--R 3 2 2 45 +--R 801692827936c + 2405078483808f c - 2405078483808f c - 13752945467f +--R + +--R 39 33 27 +--R 35125117815561f + 5496946957826433f + 6834659447749117f +--R + +--R 21 15 9 +--R - 44484880462461f - 6873406230093057f - 5450844938762633f +--R + +--R 3 +--R 1216586044571f +--R , +--R +--R 2 +--R (23810276989699200d - 23810276989699200f)c + 23810276989699200d +--R + +--R 3 5 4 4 +--R 71430830969097600f d + 7936758996566400f e - 31747035986265600f e +--R + +--R 5 3 6 2 +--R 31747035986265600f e + (404774708824886400f + 396837949828320000)e +--R + +--R 43 37 +--R - 1247372229446701f + 3185785654596621203f +--R + +--R 31 25 +--R 498594866849974751463f + 624542545845791047935f +--R + +--R 19 13 +--R 931085755769682885f - 624150663582417063387f +--R + +--R 7 +--R - 499881859388360475647f - 3926885313819527351f +--R * +--R e +--R + +--R 44 38 +--R - 7026011547118141f + 17944427051950691243f +--R + +--R 32 26 +--R 2808383522593986603543f + 3513624142354807530135f +--R + +--R 20 14 +--R 2860757006705537685f - 3511356735642190737267f +--R + +--R 8 2 +--R - 2811332494697103819887f - 20315011631522847311f +--R , +--R +--R (7936758996566400e - 7936758996566400f)c +--R + +--R 43 37 31 +--R - 4418748183673f + 11285568707456559f + 1765998617294451019f +--R + +--R 25 19 +--R 2173749283622606155f - 55788292195402895f +--R + +--R 13 7 +--R - 2215291421788292951f - 1718142665347430851f + 30256569458230237f +--R * +--R e +--R + +--R 44 38 32 +--R 4418748183673f - 11285568707456559f - 1765998617294451019f +--R + +--R 26 20 14 +--R - 2173749283622606155f + 55788292195402895f + 2215291421788292951f +--R + +--R 8 2 +--R 1718142665347430851f - 30256569458230237f +--R , +--R +--R 6 43 +--R (72152354514240f - 72152354514240)c + 40950859449f +--R + +--R 37 31 25 +--R - 104588980990367f - 16367227395575307f - 20268523416527355f +--R + +--R 19 13 7 +--R 442205002259535f + 20576059935789063f + 15997133796970563f +--R + +--R - 275099892785581f +--R , +--R +--R 3 2 2 +--R 1984189749141600d + 5952569247424800f d - 5952569247424800f d +--R + +--R 4 5 5 4 3 +--R - 3968379498283200f e + 15873517993132800f e + 17857707742274400e +--R + +--R 7 2 +--R (- 148814231185620000f - 162703559429611200f)e +--R + +--R 44 38 +--R - 390000914678878f + 996062704593756434f +--R + +--R 32 26 +--R 155886323972034823914f + 194745956143985421330f +--R + +--R 20 14 +--R 6205077595574430f - 194596512653299068786f +--R + +--R 8 2 +--R - 155796897940756922666f - 1036375759077320978f +--R * +--R e +--R + +--R 45 39 33 +--R - 374998630035991f + 957747106595453993f + 149889155566764891693f +--R + +--R 27 21 +--R 187154171443494641685f - 127129015426348065f +--R + +--R 15 9 3 +--R - 187241533243115040417f - 149719983567976534037f - 836654081239648061f +--R , +--R +--R 3 5 +--R (5952569247424800e - 5952569247424800f)d - 3968379498283200f e +--R + +--R 4 4 5 3 +--R 9920948745708000f e - 3968379498283200f e +--R + +--R 6 2 +--R (- 148814231185620000f - 150798420934761600)e +--R + +--R 43 37 +--R 492558110242553f - 1257992359608074599f +--R + +--R 31 25 +--R - 196883094539368513959f - 246562115745735428055f +--R + +--R 19 13 +--R - 325698701993885505f + 246417769883651808111f +--R + +--R 7 +--R 197327352068200652911f + 1523373796389332143f +--R * +--R e +--R + +--R 44 38 32 +--R 2679481081803026f - 6843392695421906608f - 1071020459642646913578f +--R + +--R 26 20 +--R - 1339789169692041240060f - 852746750910750210f +--R + +--R 14 8 +--R 1339105101971878401312f + 1071900289758712984762f +--R + +--R 2 +--R 7555239072072727756f +--R , +--R +--R 6 2 5 +--R (11905138494849600f - 11905138494849600)d - 7936758996566400f e +--R + +--R 3 4 4 3 +--R 31747035986265600f e - 31747035986265600f e +--R + +--R 11 5 2 +--R (- 420648226818019200f - 404774708824886400f )e +--R + +--R 42 36 30 +--R 15336187600889f - 39169739565161107f - 6127176127489690827f +--R + +--R 24 18 +--R - 7217708742310509615f + 538628483890722735f +--R + +--R 12 6 +--R 7506804353843507643f + 5886160769782607203f + 63576108396535879 +--R * +--R e +--R + +--R 43 37 31 +--R 71737781777066f - 183218856207557938f - 28672874271132276078f +--R + +--R 25 19 +--R - 35625223686939812010f + 164831339634084390f +--R + +--R 13 7 +--R 35724160423073052642f + 28627022578664910622f + 187459987029680506f +--R , +--R +--R 6 5 2 4 +--R 1322793166094400e - 3968379498283200f e + 3968379498283200f e +--R + +--R 3 3 +--R - 5291172664377600f e +--R + +--R 10 4 2 +--R (- 230166010900425600f - 226197631402142400f )e +--R + +--R 47 41 +--R - 152375364610443885f + 389166626064854890415f +--R + +--R 35 29 +--R 60906097841360558987335f + 76167367934608798697275f +--R + +--R 23 17 +--R 27855066785995181125f - 76144952817052723145495f +--R + +--R 11 5 +--R - 60933629892463517546975f - 411415071682002547795f +--R * +--R e +--R + +--R 42 36 30 +--R - 209493533143822f + 535045979490560586f + 83737947964973553146f +--R + +--R 24 18 +--R 104889507084213371570f + 167117997269207870f +--R + +--R 12 6 +--R - 104793725781390615514f - 83842685189903180394f - 569978796672974242 +--R , +--R +--R 6 3 +--R (25438330117200f + 25438330117200)e +--R + +--R 7 2 +--R (76314990351600f + 76314990351600f)e +--R + +--R 44 38 32 +--R - 1594966552735f + 4073543370415745f + 637527159231148925f +--R + +--R 26 20 14 +--R 797521176113606525f + 530440941097175f - 797160527306433145f +--R + +--R 8 2 +--R - 638132320196044965f - 4510507167940725f +--R * +--R e +--R + +--R 45 39 33 +--R - 6036376800443f + 15416903421476909f + 2412807646192304449f +--R + +--R 27 21 15 +--R 3017679923028013705f + 1422320037411955f - 3016560402417843941f +--R + +--R 9 3 +--R - 2414249368183033161f - 16561862361763873f +--R , +--R +--R 12 2 +--R (1387545279120f - 1387545279120)e +--R + +--R 43 37 31 +--R 4321823003f - 11037922310209f - 1727510711947989f +--R + +--R 25 19 13 +--R - 2165150991154425f - 5114342560755f + 2162682824948601f +--R + +--R 7 +--R 1732620732685741f + 13506088516033f +--R * +--R e +--R + +--R 44 38 32 +--R 24177661775f - 61749727185325f - 9664106795754225f +--R + +--R 26 20 14 +--R - 12090487758628245f - 8787672733575f + 12083693383005045f +--R + +--R 8 2 +--R 9672870290826025f + 68544102808525f +--R , +--R 48 42 36 30 18 12 6 +--R f - 2554f - 399710f - 499722f + 499722f + 399710f + 2554f - 1] +--RType: List NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 13 + +--S 14 of 22 +lexTriangular(lg,false)$lextripack +--R +--R +--R (14) +--R [ +--R 6 6 5 2 4 3 3 4 2 5 +--R {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, +--R 2 5 3 4 4 3 5 2 +--R 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, +--R 2 5 3 4 4 3 5 2 +--R 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, +--R 2 5 3 4 4 3 5 2 +--R a - f e + 3f e - 3f e + 4f e + 3e - 3f} +--R , +--R 6 2 2 2 +--R {f - 1,e - f,d - f,c + 4f c + f ,(c - f)b - f c - 5f ,a + b + c + 3f}, +--R 6 2 2 +--R {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, +--R 6 2 2 2 +--R {f - 1,e - f,d + 4f d + f ,(d - f)c - f d - 5f ,b - f,a + c + d + 3f}, +--R +--R 36 30 24 18 12 6 +--R {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, +--R +--R 12 2 +--R (161718564f - 161718564)e +--R + +--R 31 25 19 13 +--R - 504205f + 1287737951f + 201539391380f + 253982817368f +--R + +--R 7 +--R 201940704665f + 1574134601f +--R * +--R e +--R + +--R 32 26 20 14 +--R - 2818405f + 7198203911f + 1126548149060f + 1416530563364f +--R + +--R 8 2 +--R 1127377589345f + 7988820725f +--R , +--R +--R 6 2 5 3 4 +--R (693772639560f - 693772639560)d - 462515093040f e + 1850060372160f e +--R + +--R 4 3 11 5 2 +--R - 1850060372160f e + (- 24513299931120f - 23588269745040f )e +--R + +--R 30 24 18 +--R - 890810428f + 2275181044754f + 355937263869776f +--R + +--R 12 6 +--R 413736880104344f + 342849304487996f + 3704966481878 +--R * +--R e +--R + +--R 31 25 19 +--R - 4163798003f + 10634395752169f + 1664161760192806f +--R + +--R 13 7 +--R 2079424391370694f + 1668153650635921f + 10924274392693f +--R , +--R +--R 6 31 25 +--R (12614047992f - 12614047992)c - 7246825f + 18508536599f +--R + +--R 19 13 7 +--R 2896249516034f + 3581539649666f + 2796477571739f - 48094301893f +--R , +--R +--R 6 2 5 3 4 +--R (693772639560f - 693772639560)b - 925030186080f e + 2312575465200f e +--R + +--R 4 3 11 5 2 +--R - 2312575465200f e + (- 40007555547960f - 35382404617560f )e +--R + +--R 30 24 18 +--R - 3781280823f + 9657492291789f + 1511158913397906f +--R + +--R 12 6 +--R 1837290892286154f + 1487216006594361f + 8077238712093 +--R * +--R e +--R + +--R 31 25 19 +--R - 9736390478f + 24866827916734f + 3891495681905296f +--R + +--R 13 7 +--R 4872556418871424f + 3904047887269606f + 27890075838538f +--R , +--R a + b + c + d + e + f} +--R , +--R 6 2 2 2 +--R {f - 1,e + 4f e + f ,(e - f)d - f e - 5f ,c - f,b - f,a + d + e + 3f}] +--R Type: List RegularChain(Integer,[a,b,c,d,e,f]) +--E 14 + +--S 15 of 22 +lts := lexTriangular(lg,true)$lextripack +--R +--R +--R (15) +--R [ +--R 6 6 5 2 4 3 3 4 2 5 +--R {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, +--R 2 5 3 4 4 3 5 2 +--R 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, +--R 2 5 3 4 4 3 5 2 +--R 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, +--R 2 5 3 4 4 3 5 2 +--R a - f e + 3f e - 3f e + 4f e + 3e - 3f} +--R , +--R 6 2 2 +--R {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, +--R 6 2 2 +--R {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, +--R 6 2 2 +--R {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, +--R +--R 36 30 24 18 12 6 +--R {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, +--R +--R 2 +--R 1387545279120e +--R + +--R 31 25 19 +--R 4321823003f - 11037922310209f - 1727506390124986f +--R + +--R 13 7 +--R - 2176188913464634f - 1732620732685741f - 13506088516033f +--R * +--R e +--R + +--R 32 26 20 +--R 24177661775f - 61749727185325f - 9664082618092450f +--R + +--R 14 8 2 +--R - 12152237485813570f - 9672870290826025f - 68544102808525f +--R , +--R +--R 1387545279120d +--R + +--R 30 24 18 +--R - 1128983050f + 2883434331830f + 451234998755840f +--R + +--R 12 6 +--R 562426491685760f + 447129055314890f - 165557857270 +--R * +--R e +--R + +--R 31 25 19 +--R - 1816935351f + 4640452214013f + 726247129626942f +--R + +--R 13 7 +--R 912871801716798f + 726583262666877f + 4909358645961f +--R , +--R +--R 31 25 19 +--R 1387545279120c + 778171189f - 1987468196267f - 310993556954378f +--R + +--R 13 7 +--R - 383262822316802f - 300335488637543f + 5289595037041f +--R , +--R +--R 1387545279120b +--R + +--R 30 24 18 +--R 1128983050f - 2883434331830f - 451234998755840f +--R + +--R 12 6 +--R - 562426491685760f - 447129055314890f + 165557857270 +--R * +--R e +--R + +--R 31 25 19 +--R - 3283058841f + 8384938292463f + 1312252817452422f +--R + +--R 13 7 +--R 1646579934064638f + 1306372958656407f + 4694680112151f +--R , +--R +--R 31 25 +--R 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f +--R + +--R 19 13 7 +--R - 1727506390124986f - 2176188913464634f - 1732620732685741f +--R + +--R - 13506088516033f +--R } +--R , +--R 6 2 2 +--R {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] +--R Type: List RegularChain(Integer,[a,b,c,d,e,f]) +--E 15 + +--S 16 of 22 +[ [init(p) for p in (ts :: List(P))] for ts in lts] +--R +--R +--R (16) +--R [[1,3,1,3,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], +--R [1387545279120,1387545279120,1387545279120,1387545279120,1387545279120,1], +--R [1,1,1,1,1,1]] +--RType: List List NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) +--E 16 + +--S 17 of 22 +squareFreeLexTriangular(lg,true)$lextripack +--R +--R +--R (17) +--R [ +--R 6 6 5 2 4 3 3 4 2 5 +--R {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, +--R 2 5 3 4 4 3 5 2 +--R 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, +--R 2 5 3 4 4 3 5 2 +--R 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, +--R 2 5 3 4 4 3 5 2 +--R a - f e + 3f e - 3f e + 4f e + 3e - 3f} +--R , +--R 6 2 2 +--R {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, +--R 6 2 2 +--R {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, +--R 6 2 2 +--R {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, +--R +--R 36 30 24 18 12 6 +--R {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, +--R +--R 2 +--R 1387545279120e +--R + +--R 31 25 19 +--R 4321823003f - 11037922310209f - 1727506390124986f +--R + +--R 13 7 +--R - 2176188913464634f - 1732620732685741f - 13506088516033f +--R * +--R e +--R + +--R 32 26 20 +--R 24177661775f - 61749727185325f - 9664082618092450f +--R + +--R 14 8 2 +--R - 12152237485813570f - 9672870290826025f - 68544102808525f +--R , +--R +--R 1387545279120d +--R + +--R 30 24 18 +--R - 1128983050f + 2883434331830f + 451234998755840f +--R + +--R 12 6 +--R 562426491685760f + 447129055314890f - 165557857270 +--R * +--R e +--R + +--R 31 25 19 +--R - 1816935351f + 4640452214013f + 726247129626942f +--R + +--R 13 7 +--R 912871801716798f + 726583262666877f + 4909358645961f +--R , +--R +--R 31 25 19 +--R 1387545279120c + 778171189f - 1987468196267f - 310993556954378f +--R + +--R 13 7 +--R - 383262822316802f - 300335488637543f + 5289595037041f +--R , +--R +--R 1387545279120b +--R + +--R 30 24 18 +--R 1128983050f - 2883434331830f - 451234998755840f +--R + +--R 12 6 +--R - 562426491685760f - 447129055314890f + 165557857270 +--R * +--R e +--R + +--R 31 25 19 +--R - 3283058841f + 8384938292463f + 1312252817452422f +--R + +--R 13 7 +--R 1646579934064638f + 1306372958656407f + 4694680112151f +--R , +--R +--R 31 25 +--R 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f +--R + +--R 19 13 7 +--R - 1727506390124986f - 2176188913464634f - 1732620732685741f +--R + +--R - 13506088516033f +--R } +--R , +--R 6 2 2 +--R {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] +--RType: List SquareFreeRegularTriangularSet(Integer,IndexedExponents OrderedVariableList [a,b,c,d,e,f],OrderedVariableList [a,b,c,d,e,f],NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f])) +--E 17 + +--S 18 of 22 +reduce(+,[degree(ts) for ts in lts]) +--R +--R +--R (18) 156 +--R Type: PositiveInteger +--E 18 + +--S 19 of 22 +ls2 : List Symbol := concat(ls,new()$Symbol) +--R +--R +--R (19) [a,b,c,d,e,f,%A] +--R Type: List Symbol +--E 19 + +--S 20 of 22 +zdpack := ZDSOLVE(R,ls,ls2) +--R +--R +--R (20) ZeroDimensionalSolvePackage(Integer,[a,b,c,d,e,f],[a,b,c,d,e,f,%A]) +--R Type: Domain +--E 20 + +--S 21 of 22 +concat [univariateSolve(ts)$zdpack for ts in lts] +--R +--R +--R (21) +--R [ +--R 4 2 +--R [complexRoots= ? - 13? + 49, +--R +--R coordinates = +--R 3 3 3 3 +--R [7a + %A - 6%A, 21b + %A + %A, 21c - 2%A + 19%A, 7d - %A + 6%A, +--R 3 3 +--R 21e - %A - %A, 21f + 2%A - 19%A] +--R ] +--R , +--R +--R 4 2 +--R [complexRoots= ? + 11? + 49, +--R +--R coordinates = +--R 3 3 3 +--R [35a + 3%A + 19%A, 35b + %A + 18%A, 35c - 2%A - %A, +--R 3 3 3 +--R 35d - 3%A - 19%A, 35e - %A - 18%A, 35f + 2%A + %A] +--R ] +--R , +--R +--R [ +--R complexRoots = +--R 8 7 6 5 4 3 2 +--R ? - 12? + 58? - 120? + 207? - 360? + 802? - 1332? + 1369 +--R , +--R +--R coordinates = +--R [ +--R 7 6 5 4 +--R 43054532a + 33782%A - 546673%A + 3127348%A - 6927123%A +--R + +--R 3 2 +--R 4365212%A - 25086957%A + 39582814%A - 107313172 +--R , +--R +--R 7 6 5 4 +--R 43054532b - 33782%A + 546673%A - 3127348%A + 6927123%A +--R + +--R 3 2 +--R - 4365212%A + 25086957%A - 39582814%A + 107313172 +--R , +--R +--R 7 6 5 4 +--R 21527266c - 22306%A + 263139%A - 1166076%A + 1821805%A +--R + +--R 3 2 +--R - 2892788%A + 10322663%A - 9026596%A + 12950740 +--R , +--R +--R 7 6 5 4 +--R 43054532d + 22306%A - 263139%A + 1166076%A - 1821805%A +--R + +--R 3 2 +--R 2892788%A - 10322663%A + 30553862%A - 12950740 +--R , +--R +--R 7 6 5 4 +--R 43054532e - 22306%A + 263139%A - 1166076%A + 1821805%A +--R + +--R 3 2 +--R - 2892788%A + 10322663%A - 30553862%A + 12950740 +--R , +--R +--R 7 6 5 4 +--R 21527266f + 22306%A - 263139%A + 1166076%A - 1821805%A +--R + +--R 3 2 +--R 2892788%A - 10322663%A + 9026596%A - 12950740 +--R ] +--R ] +--R , +--R +--R [ +--R complexRoots = +--R 8 7 6 5 4 3 2 +--R ? + 12? + 58? + 120? + 207? + 360? + 802? + 1332? + 1369 +--R , +--R +--R coordinates = +--R [ +--R 7 6 5 4 +--R 43054532a + 33782%A + 546673%A + 3127348%A + 6927123%A +--R + +--R 3 2 +--R 4365212%A + 25086957%A + 39582814%A + 107313172 +--R , +--R +--R 7 6 5 4 +--R 43054532b - 33782%A - 546673%A - 3127348%A - 6927123%A +--R + +--R 3 2 +--R - 4365212%A - 25086957%A - 39582814%A - 107313172 +--R , +--R +--R 7 6 5 4 +--R 21527266c - 22306%A - 263139%A - 1166076%A - 1821805%A +--R + +--R 3 2 +--R - 2892788%A - 10322663%A - 9026596%A - 12950740 +--R , +--R +--R 7 6 5 4 +--R 43054532d + 22306%A + 263139%A + 1166076%A + 1821805%A +--R + +--R 3 2 +--R 2892788%A + 10322663%A + 30553862%A + 12950740 +--R , +--R +--R 7 6 5 4 +--R 43054532e - 22306%A - 263139%A - 1166076%A - 1821805%A +--R + +--R 3 2 +--R - 2892788%A - 10322663%A - 30553862%A - 12950740 +--R , +--R +--R 7 6 5 4 +--R 21527266f + 22306%A + 263139%A + 1166076%A + 1821805%A +--R + +--R 3 2 +--R 2892788%A + 10322663%A + 9026596%A + 12950740 +--R ] +--R ] +--R , +--R +--R 4 2 +--R [complexRoots= ? - ? + 1, +--R 3 3 3 3 +--R coordinates= [a - %A,b + %A - %A,c + %A ,d + %A,e - %A + %A,f - %A ]] +--R , +--R +--R 8 6 4 2 +--R [complexRoots= ? + 4? + 12? + 16? + 4, +--R +--R coordinates = +--R 7 5 3 7 5 3 +--R [4a - 2%A - 7%A - 20%A - 22%A, 4b + 2%A + 7%A + 20%A + 22%A, +--R 7 5 3 7 5 3 +--R 4c + %A + 3%A + 10%A + 10%A, 4d + %A + 3%A + 10%A + 6%A, +--R 7 5 3 7 5 3 +--R 4e - %A - 3%A - 10%A - 6%A, 4f - %A - 3%A - 10%A - 10%A] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 6? + 30? + 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [30a - %A - 5%A - 30%A - 6, 6b + %A + 5%A + 24%A + 6, +--R 3 2 3 2 +--R 30c - %A - 5%A - 6, 30d - %A - 5%A - 30%A - 6, +--R 3 2 3 2 +--R 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - 6? + 30? - 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [30a - %A + 5%A - 30%A + 6, 6b + %A - 5%A + 24%A - 6, +--R 3 2 3 2 +--R 30c - %A + 5%A + 6, 30d - %A + 5%A - 30%A + 6, +--R 3 2 3 2 +--R 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] +--R ] +--R , +--R +--R 2 +--R [complexRoots= ? + 6? + 6, +--R coordinates= [a + 1,b - %A - 5,c + %A + 1,d + 1,e + 1,f + 1]] +--R , +--R +--R 2 +--R [complexRoots= ? - 6? + 6, +--R coordinates= [a - 1,b - %A + 5,c + %A - 1,d - 1,e - 1,f - 1]] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 6? + 30? + 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [6a + %A + 5%A + 24%A + 6, 30b - %A - 5%A - 6, +--R 3 2 3 2 +--R 30c - %A - 5%A - 30%A - 6, 30d - %A - 5%A - 30%A - 6, +--R 3 2 3 2 +--R 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - 6? + 30? - 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [6a + %A - 5%A + 24%A - 6, 30b - %A + 5%A + 6, +--R 3 2 3 2 +--R 30c - %A + 5%A - 30%A + 6, 30d - %A + 5%A - 30%A + 6, +--R 3 2 3 2 +--R 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] +--R ] +--R , +--R +--R 2 +--R [complexRoots= ? + 6? + 6, +--R coordinates= [a - %A - 5,b + %A + 1,c + 1,d + 1,e + 1,f + 1]] +--R , +--R +--R 2 +--R [complexRoots= ? - 6? + 6, +--R coordinates= [a - %A + 5,b + %A - 1,c - 1,d - 1,e - 1,f - 1]] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 6? + 30? + 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, +--R 3 2 3 2 +--R 6c + %A + 5%A + 24%A + 6, 30d - %A - 5%A - 6, +--R 3 2 3 2 +--R 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - 6? + 30? - 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, +--R 3 2 3 2 +--R 6c + %A - 5%A + 24%A - 6, 30d - %A + 5%A + 6, +--R 3 2 3 2 +--R 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] +--R ] +--R , +--R +--R 2 +--R [complexRoots= ? + 6? + 6, +--R coordinates= [a + 1,b + 1,c - %A - 5,d + %A + 1,e + 1,f + 1]] +--R , +--R +--R 2 +--R [complexRoots= ? - 6? + 6, +--R coordinates= [a - 1,b - 1,c - %A + 5,d + %A - 1,e - 1,f - 1]] +--R , +--R +--R 8 7 6 5 4 2 +--R [complexRoots= ? + 6? + 16? + 24? + 18? - 8? + 4, +--R +--R coordinates = +--R 7 6 5 4 3 2 +--R [2a + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 2%A + 4, +--R 7 6 5 4 3 2 +--R 2b + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 4%A + 4, +--R 7 6 5 4 3 +--R 2c - %A - 4%A - 8%A - 9%A - 4%A - 2%A - 4, +--R 7 6 5 4 3 +--R 2d + %A + 4%A + 8%A + 9%A + 4%A + 2%A + 4, +--R 7 6 5 4 3 2 +--R 2e - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 4%A - 4, +--R 7 6 5 4 3 2 +--R 2f - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 2%A - 4] +--R ] +--R , +--R +--R [ +--R complexRoots = +--R 8 7 6 5 4 3 2 +--R ? + 12? + 64? + 192? + 432? + 768? + 1024? + 768? + 256 +--R , +--R +--R coordinates = +--R [ +--R 7 6 5 4 3 2 +--R 1408a - 19%A - 200%A - 912%A - 2216%A - 4544%A - 6784%A +--R + +--R - 6976%A - 1792 +--R , +--R +--R 7 6 5 4 3 2 +--R 1408b - 37%A - 408%A - 1952%A - 5024%A - 10368%A - 16768%A +--R + +--R - 17920%A - 5120 +--R , +--R +--R 7 6 5 4 3 2 +--R 1408c + 37%A + 408%A + 1952%A + 5024%A + 10368%A + 16768%A +--R + +--R 17920%A + 5120 +--R , +--R +--R 7 6 5 4 3 2 +--R 1408d + 19%A + 200%A + 912%A + 2216%A + 4544%A + 6784%A +--R + +--R 6976%A + 1792 +--R , +--R 2e + %A, 2f - %A] +--R ] +--R , +--R +--R 8 6 4 2 +--R [complexRoots= ? + 4? + 12? + 16? + 4, +--R +--R coordinates = +--R 7 5 3 7 5 3 +--R [4a - %A - 3%A - 10%A - 6%A, 4b - %A - 3%A - 10%A - 10%A, +--R 7 5 3 7 5 3 +--R 4c - 2%A - 7%A - 20%A - 22%A, 4d + 2%A + 7%A + 20%A + 22%A, +--R 7 5 3 7 5 3 +--R 4e + %A + 3%A + 10%A + 10%A, 4f + %A + 3%A + 10%A + 6%A] +--R ] +--R , +--R +--R 8 6 4 2 +--R [complexRoots= ? + 16? - 96? + 256? + 256, +--R +--R coordinates = +--R 7 5 3 +--R [512a - %A - 12%A + 176%A - 448%A, +--R 7 5 3 +--R 128b - %A - 16%A + 96%A - 256%A, +--R 7 5 3 +--R 128c + %A + 16%A - 96%A + 256%A, +--R 7 5 3 +--R 512d + %A + 12%A - 176%A + 448%A, 2e + %A, 2f - %A] +--R ] +--R , +--R +--R [ +--R complexRoots = +--R 8 7 6 5 4 3 2 +--R ? - 12? + 64? - 192? + 432? - 768? + 1024? - 768? + 256 +--R , +--R +--R coordinates = +--R [ +--R 7 6 5 4 3 2 +--R 1408a - 19%A + 200%A - 912%A + 2216%A - 4544%A + 6784%A +--R + +--R - 6976%A + 1792 +--R , +--R +--R 7 6 5 4 3 2 +--R 1408b - 37%A + 408%A - 1952%A + 5024%A - 10368%A + 16768%A +--R + +--R - 17920%A + 5120 +--R , +--R +--R 7 6 5 4 3 2 +--R 1408c + 37%A - 408%A + 1952%A - 5024%A + 10368%A - 16768%A +--R + +--R 17920%A - 5120 +--R , +--R +--R 7 6 5 4 3 2 +--R 1408d + 19%A - 200%A + 912%A - 2216%A + 4544%A - 6784%A +--R + +--R 6976%A - 1792 +--R , +--R 2e + %A, 2f - %A] +--R ] +--R , +--R +--R 8 7 6 5 4 2 +--R [complexRoots= ? - 6? + 16? - 24? + 18? - 8? + 4, +--R +--R coordinates = +--R 7 6 5 4 3 2 +--R [2a + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 2%A - 4, +--R 7 6 5 4 3 2 +--R 2b + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 4%A - 4, +--R 7 6 5 4 3 +--R 2c - %A + 4%A - 8%A + 9%A - 4%A - 2%A + 4, +--R 7 6 5 4 3 +--R 2d + %A - 4%A + 8%A - 9%A + 4%A + 2%A - 4, +--R 7 6 5 4 3 2 +--R 2e - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 4%A + 4, +--R 7 6 5 4 3 2 +--R 2f - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 2%A + 4] +--R ] +--R , +--R +--R 4 2 +--R [complexRoots= ? + 12? + 144, +--R +--R coordinates = +--R 2 2 2 2 +--R [12a - %A - 12, 12b - %A - 12, 12c - %A - 12, 12d - %A - 12, +--R 2 2 +--R 6e + %A + 3%A + 12, 6f + %A - 3%A + 12] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 6? + 30? + 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [6a - %A - 5%A - 24%A - 6, 30b + %A + 5%A + 30%A + 6, +--R 3 2 3 2 +--R 30c + %A + 5%A + 30%A + 6, 30d + %A + 5%A + 30%A + 6, +--R 3 2 3 2 +--R 30e + %A + 5%A + 30%A + 6, 30f + %A + 5%A + 6] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - 6? + 30? - 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [6a - %A + 5%A - 24%A + 6, 30b + %A - 5%A + 30%A - 6, +--R 3 2 3 2 +--R 30c + %A - 5%A + 30%A - 6, 30d + %A - 5%A + 30%A - 6, +--R 3 2 3 2 +--R 30e + %A - 5%A + 30%A - 6, 30f + %A - 5%A - 6] +--R ] +--R , +--R +--R 4 2 +--R [complexRoots= ? + 12? + 144, +--R +--R coordinates = +--R 2 2 2 2 +--R [12a + %A + 12, 12b + %A + 12, 12c + %A + 12, 12d + %A + 12, +--R 2 2 +--R 6e - %A + 3%A - 12, 6f - %A - 3%A - 12] +--R ] +--R , +--R +--R 2 +--R [complexRoots= ? - 12, +--R coordinates= [a - 1,b - 1,c - 1,d - 1,2e + %A + 4,2f - %A + 4]] +--R , +--R +--R 2 +--R [complexRoots= ? + 6? + 6, +--R coordinates= [a + %A + 5,b - 1,c - 1,d - 1,e - 1,f - %A - 1]] +--R , +--R +--R 2 +--R [complexRoots= ? - 6? + 6, +--R coordinates= [a + %A - 5,b + 1,c + 1,d + 1,e + 1,f - %A + 1]] +--R , +--R +--R 2 +--R [complexRoots= ? - 12, +--R coordinates= [a + 1,b + 1,c + 1,d + 1,2e + %A - 4,2f - %A - 4]] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 6? + 30? + 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, +--R 3 2 3 2 +--R 30c - %A - 5%A - 30%A - 6, 6d + %A + 5%A + 24%A + 6, +--R 3 2 3 2 +--R 30e - %A - 5%A - 6, 30f - %A - 5%A - 30%A - 6] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - 6? + 30? - 36? + 36, +--R +--R coordinates = +--R 3 2 3 2 +--R [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, +--R 3 2 3 2 +--R 30c - %A + 5%A - 30%A + 6, 6d + %A - 5%A + 24%A - 6, +--R 3 2 3 2 +--R 30e - %A + 5%A + 6, 30f - %A + 5%A - 30%A + 6] +--R ] +--R , +--R +--R 2 +--R [complexRoots= ? + 6? + 6, +--R coordinates= [a + 1,b + 1,c + 1,d - %A - 5,e + %A + 1,f + 1]] +--R , +--R +--R 2 +--R [complexRoots= ? - 6? + 6, +--R coordinates= [a - 1,b - 1,c - 1,d - %A + 5,e + %A - 1,f - 1]] +--R ] +--RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) +--E 21 + +--S 22 of 22 +concat [realSolve(ts)$zdpack for ts in lts] +--R +--R +--R (22) +--R [[%B1,%B1,%B1,%B5,- %B5 - 4%B1,%B1], [%B1,%B1,%B1,%B6,- %B6 - 4%B1,%B1], +--R [%B2,%B2,%B2,%B3,- %B3 - 4%B2,%B2], [%B2,%B2,%B2,%B4,- %B4 - 4%B2,%B2], +--R [%B7,%B7,%B7,%B7,%B11,- %B11 - 4%B7], [%B7,%B7,%B7,%B7,%B12,- %B12 - 4%B7], +--R [%B8,%B8,%B8,%B8,%B9,- %B9 - 4%B8], [%B8,%B8,%B8,%B8,%B10,- %B10 - 4%B8], +--R [%B13,%B13,%B17,- %B17 - 4%B13,%B13,%B13], +--R [%B13,%B13,%B18,- %B18 - 4%B13,%B13,%B13], +--R [%B14,%B14,%B15,- %B15 - 4%B14,%B14,%B14], +--R [%B14,%B14,%B16,- %B16 - 4%B14,%B14,%B14], +--R +--R [%B19, %B29, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B19 - ---------- %B19 - ----------- %B19 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B19 - ------------- %B19 - ----------- %B19 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B19 + ------------- %B19 + --------------- %B19 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B19 + --------------- %B19 - ------------ %B19 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B19 - ------------- %B19 - --------------- %B19 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B19 - --------------- %B19 - ------------- %B19 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B29 - ------------- %B19 + ------------ %B19 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B19 + ---------------- %B19 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B19 + -------------- %B19 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B19, %B30, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B19 - ---------- %B19 - ----------- %B19 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B19 - ------------- %B19 - ----------- %B19 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B19 + ------------- %B19 + --------------- %B19 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B19 + --------------- %B19 - ------------ %B19 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B19 - ------------- %B19 - --------------- %B19 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B19 - --------------- %B19 - ------------- %B19 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B30 - ------------- %B19 + ------------ %B19 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B19 + ---------------- %B19 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B19 + -------------- %B19 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B20, %B27, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B20 - ---------- %B20 - ----------- %B20 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B20 - ------------- %B20 - ----------- %B20 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B20 + ------------- %B20 + --------------- %B20 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B20 + --------------- %B20 - ------------ %B20 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B20 - ------------- %B20 - --------------- %B20 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B20 - --------------- %B20 - ------------- %B20 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B27 - ------------- %B20 + ------------ %B20 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B20 + ---------------- %B20 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B20 + -------------- %B20 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B20, %B28, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B20 - ---------- %B20 - ----------- %B20 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B20 - ------------- %B20 - ----------- %B20 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B20 + ------------- %B20 + --------------- %B20 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B20 + --------------- %B20 - ------------ %B20 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B20 - ------------- %B20 - --------------- %B20 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B20 - --------------- %B20 - ------------- %B20 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B28 - ------------- %B20 + ------------ %B20 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B20 + ---------------- %B20 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B20 + -------------- %B20 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B21, %B25, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B21 - ---------- %B21 - ----------- %B21 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B21 - ------------- %B21 - ----------- %B21 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B21 + ------------- %B21 + --------------- %B21 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B21 + --------------- %B21 - ------------ %B21 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B21 - ------------- %B21 - --------------- %B21 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B21 - --------------- %B21 - ------------- %B21 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B25 - ------------- %B21 + ------------ %B21 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B21 + ---------------- %B21 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B21 + -------------- %B21 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B21, %B26, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B21 - ---------- %B21 - ----------- %B21 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B21 - ------------- %B21 - ----------- %B21 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B21 + ------------- %B21 + --------------- %B21 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B21 + --------------- %B21 - ------------ %B21 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B21 - ------------- %B21 - --------------- %B21 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B21 - --------------- %B21 - ------------- %B21 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B26 - ------------- %B21 + ------------ %B21 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B21 + ---------------- %B21 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B21 + -------------- %B21 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B22, %B23, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B22 - ---------- %B22 - ----------- %B22 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B22 - ------------- %B22 - ----------- %B22 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B22 + ------------- %B22 + --------------- %B22 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B22 + --------------- %B22 - ------------ %B22 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B22 - ------------- %B22 - --------------- %B22 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B22 - --------------- %B22 - ------------- %B22 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B23 - ------------- %B22 + ------------ %B22 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B22 + ---------------- %B22 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B22 + -------------- %B22 +--R 1387545279120 1387545279120 +--R ] +--R , +--R +--R [%B22, %B24, +--R +--R 7865521 31 6696179241 25 25769893181 19 +--R ---------- %B22 - ---------- %B22 - ----------- %B22 +--R 6006689520 2002229840 49235160 +--R + +--R 1975912990729 13 1048460696489 7 21252634831 +--R - ------------- %B22 - ------------- %B22 - ----------- %B22 +--R 3003344760 2002229840 6006689520 +--R , +--R +--R 778171189 31 1987468196267 25 155496778477189 19 +--R - ------------- %B22 + ------------- %B22 + --------------- %B22 +--R 1387545279120 1387545279120 693772639560 +--R + +--R 191631411158401 13 300335488637543 7 755656433863 +--R --------------- %B22 + --------------- %B22 - ------------ %B22 +--R 693772639560 1387545279120 198220754160 +--R , +--R +--R 1094352947 31 2794979430821 25 218708802908737 19 +--R ------------ %B22 - ------------- %B22 - --------------- %B22 +--R 462515093040 462515093040 231257546520 +--R + +--R 91476663003591 13 145152550961823 7 1564893370717 +--R - -------------- %B22 - --------------- %B22 - ------------- %B22 +--R 77085848840 154171697680 462515093040 +--R , +--R +--R 4321823003 31 180949546069 25 +--R - %B24 - ------------- %B22 + ------------ %B22 +--R 1387545279120 22746643920 +--R + +--R 863753195062493 19 1088094456732317 13 +--R --------------- %B22 + ---------------- %B22 +--R 693772639560 693772639560 +--R + +--R 1732620732685741 7 13506088516033 +--R ---------------- %B22 + -------------- %B22 +--R 1387545279120 1387545279120 +--R ] +--R , +--R [%B31,%B35,- %B35 - 4%B31,%B31,%B31,%B31], +--R [%B31,%B36,- %B36 - 4%B31,%B31,%B31,%B31], +--R [%B32,%B33,- %B33 - 4%B32,%B32,%B32,%B32], +--R [%B32,%B34,- %B34 - 4%B32,%B32,%B32,%B32]] +--R Type: List List RealClosure Fraction Integer +--E 22 +)spool +)lisp (bye) +@ +<>= +==================================================================== +LexTriangularPackage examples +==================================================================== + +The LexTriangularPackage package constructor provides an +implementation of the lexTriangular algorithm (D. Lazard "Solving +Zero-dimensional Algebraic Systems", J. of Symbol. Comput., 1992). +This algorithm decomposes a zero-dimensional variety into zero-sets of +regular triangular sets. Thus the input system must have a finite +number of complex solutions. Moreover, this system needs to be a +lexicographical Groebner basis. + +This package takes two arguments: the coefficient-ring R of the +polynomials, which must be a GcdDomain and their set of variables +given by ls a List Symbol. The type of the input polynomials must be +NewSparseMultivariatePolynomial(R,V) where V is OrderedVariableList(ls). +The abbreviation for LexTriangularPackage is LEXTRIPK. The main operations +are lexTriangular and squareFreeLexTriangular. The later provide +decompositions by means of square-free regular triangular sets, built +with the SquareFreeRegularTriangularSet constructor, whereas the former +uses the RegularTriangularSet constructor. Note that these constructors +also implement another algorithm for solving algebraic systems by +means of regular triangular sets; in that case no computations of +Groebner bases are needed and the input system may have any dimension +(i.e. it may have an infinite number of solutions). + +The implementation of the lexTriangular algorithm provided in the +LexTriangularPackage constructor differs from that reported in +"Computations of gcd over algebraic towers of simple extensions" by +M. Moreno Maza and R. Rioboo (in proceedings of AAECC11, Paris, 1995). +Indeed, the squareFreeLexTriangular operation removes all multiplicities +of the solutions (i.e. the computed solutions are pairwise different) +and the lexTriangular operation may keep some multiplicities; this +later operation runs generally faster than the former. + +The interest of the lexTriangular algorithm is due to the +following experimental remark. For some examples, a triangular +decomposition of a zero-dimensional variety can be computed faster via +a lexicographical Groebner basis computation than by using a direct method +(like that of SquareFreeRegularTriangularSet and RegularTriangularSet). +This happens typically when the total degree of the system relies +essentially on its smallest variable (like in the Katsura systems). +When this is not the case, the direct method may give better timings +(like in the Rose system). + +Of course, the direct method can also be applied to a lexicographical +Groebner basis. However, the lexTriangular algorithm takes advantage +of the structure of this basis and avoids many unnecessary computations +which are performed by the direct method. + +For this purpose of solving algebraic systems with a finite number of +solutions, see also the ZeroDimensionalSolvePackage. It allows +to use both strategies (the lexTriangular algorithm and the direct +method) for computing either the complex or real roots of a system. + +Note that the way of understanding triangular decompositions is +detailed in the example of the RegularTriangularSet constructor. + +Since the LexTriangularPackage package constructor is limited to +zero-dimensional systems, it provides a zeroDimensional? operation to +check whether this requirement holds. There is also a groebner operation +to compute the lexicographical Groebner basis of a set of polynomials +with type NewSparseMultivariatePolynomial(R,V). The elimination ordering +is that given by ls (the greatest variable being the first element +of ls). This basis is computed by the FLGM algorithm (Faugere et al. +"Efficient Computation of Zero-Dimensional Groebner Bases by Change +of Ordering" , J. of Symbol. Comput., 1993) implemented in the +LinGroebnerPackage package constructor. + +Once a lexicographical Groebner basis is computed, then one can call +the operations lexTriangular and squareFreeLexTriangular. Note that +these operations admit an optional argument to produce normalized +triangular sets. There is also a zeroSetSplit operation which does +all the job from the input system; an error is produced if this system +is not zero-dimensional. + +Let us illustrate the facilities of the LexTriangularPackage constructor +by a famous example, the cyclic-6 root system. + +Define the coefficient ring. + + R := Integer + Integer + Type: Domain + +Define the list of variables, + + ls : List Symbol := [a,b,c,d,e,f] + [a,b,c,d,e,f] + Type: List Symbol + +and make it an ordered set. + + V := OVAR(ls) + OrderedVariableList [a,b,c,d,e,f] + Type: Domain + +Define the polynomial ring. + + P := NSMP(R, V) + NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) + Type: Domain + +Define the polynomials. + + p1: P := a*b*c*d*e*f - 1 + f e d c b a - 1 + Type: NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + + p2: P := a*b*c*d*e +a*b*c*d*f +a*b*c*e*f +a*b*d*e*f +a*c*d*e*f +b*c*d*e*f + ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b + Type: NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + + p3: P := a*b*c*d + a*b*c*f + a*b*e*f + a*d*e*f + b*c*d*e + c*d*e*f + (((d + f)c + f e)b + f e d)a + e d c b + f e d c + Type: NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + + p4: P := a*b*c + a*b*f + a*e*f + b*c*d + c*d*e + d*e*f + ((c + f)b + f e)a + d c b + e d c + f e d + Type: NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + + p5: P := a*b + a*f + b*c + c*d + d*e + e*f + (b + f)a + c b + d c + e d + f e + Type: NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + + p6: P := a + b + c + d + e + f + a + b + c + d + e + f + Type: NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + + lp := [p1, p2, p3, p4, p5, p6] + [f e d c b a - 1, ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b, + (((d + f)c + f e)b + f e d)a + e d c b + f e d c, + ((c + f)b + f e)a + d c b + e d c + f e d, + (b + f)a + c b + d c + e d + f e, a + b + c + d + e + f] + Type: List NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + +Now call LEXTRIPK. + + lextripack := LEXTRIPK(R,ls) + LexTriangularPackage(Integer,[a,b,c,d,e,f]) + Type: Domain + +Compute the lexicographical Groebner basis of the system. This may +take between 5 minutes and one hour, depending on your machine. + + lg := groebner(lp)$lextripack + [a + b + c + d + e + f, + 2 2 + 3968379498283200b + 15873517993132800f b + 3968379498283200d + + + 3 5 4 4 + 15873517993132800f d + 3968379498283200f e - 15873517993132800f e + + + 5 3 6 2 + 23810276989699200f e + (206355733910726400f + 230166010900425600)e + + + 43 37 + - 729705987316687f + 1863667496867205421f + + + 31 25 + 291674853771731104461f + 365285994691106921745f + + + 19 13 + 549961185828911895f - 365048404038768439269f + + + 7 + - 292382820431504027669f - 2271898467631865497f + * + e + + + 44 38 + - 3988812642545399f + 10187423878429609997f + + + 32 26 + 1594377523424314053637f + 1994739308439916238065f + + + 20 14 + 1596840088052642815f - 1993494118301162145413f + + + 8 2 + - 1596049742289689815053f - 11488171330159667449f + , + 2 + (23810276989699200c - 23810276989699200f)b + 23810276989699200c + + + 2 + 71430830969097600f c - 23810276989699200d - 95241107958796800f d + + + 3 5 4 4 5 3 + - 55557312975964800f e + 174608697924460800f e - 174608697924460800f e + + + 6 2 + (- 2428648252949318400f - 2611193709870345600)e + + + 43 37 + 8305444561289527f - 21212087151945459641f + + + 31 25 + - 3319815883093451385381f - 4157691646261657136445f + + + 19 13 + - 6072721607510764095f + 4154986709036460221649f + + + 7 + 3327761311138587096749f + 25885340608290841637f + * + e + + + 44 38 + 45815897629010329f - 117013765582151891207f + + + 32 26 + - 18313166848970865074187f - 22909971239649297438915f + + + 20 14 + - 16133250761305157265f + 22897305857636178256623f + + + 8 2 + 18329944781867242497923f + 130258531002020420699f + , + (7936758996566400d - 7936758996566400f)b - 7936758996566400f d + + + 3 5 4 4 5 3 + - 7936758996566400f e + 23810276989699200f e - 23810276989699200f e + + + 6 2 + (- 337312257354072000f - 369059293340337600)e + + + 43 37 + 1176345388640471f - 3004383582891473073f + + + 31 25 + - 470203502707246105653f - 588858183402644348085f + + + 19 13 + - 856939308623513535f + 588472674242340526377f + + + 7 + 471313241958371103517f + 3659742549078552381f + * + e + + + 44 38 32 + 6423170513956901f - 16404772137036480803f - 2567419165227528774463f + + + 26 20 + - 3211938090825682172335f - 2330490332697587485f + + + 14 8 + 3210100109444754864587f + 2569858315395162617847f + + + 2 + 18326089487427735751f + , + 3 5 + (11905138494849600e - 11905138494849600f)b - 3968379498283200f e + + + 4 4 5 3 + 15873517993132800f e - 27778656487982400f e + + + 6 2 + (- 208339923659868000f - 240086959646133600)e + + + 43 37 + 786029984751110f - 2007519008182245250f + + + 31 25 + - 314188062908073807090f - 393423667537929575250f + + + 19 13 + - 550329120654394950f + 393196408728889612770f + + + 7 + 314892372799176495730f + 2409386515146668530f + * + e + + + 44 38 32 + 4177638546747827f - 10669685294602576381f - 1669852980419949524601f + + + 26 20 + - 2089077057287904170745f - 1569899763580278795f + + + 14 8 + 2087864026859015573349f + 1671496085945199577969f + + + 2 + 11940257226216280177f + , + 6 2 5 + (11905138494849600f - 11905138494849600)b - 15873517993132800f e + + + 3 4 4 3 + 39683794982832000f e - 39683794982832000f e + + + 11 5 2 + (- 686529653202993600f - 607162063237329600f )e + + + 42 36 30 + 65144531306704f - 166381280901088652f - 26033434502470283472f + + + 24 18 + - 31696259583860650140f + 971492093167581360f + + + 12 6 + 32220085033691389548f + 25526177666070529808f + 138603268355749244 + * + e + + + 43 37 31 + 167620036074811f - 428102417974791473f - 66997243801231679313f + + + 25 19 + - 83426716722148750485f + 203673895369980765f + + + 13 7 + 83523056326010432457f + 66995789640238066937f + 478592855549587901f + , + 3 2 2 45 + 801692827936c + 2405078483808f c - 2405078483808f c - 13752945467f + + + 39 33 27 + 35125117815561f + 5496946957826433f + 6834659447749117f + + + 21 15 9 + - 44484880462461f - 6873406230093057f - 5450844938762633f + + + 3 + 1216586044571f + , + 2 + (23810276989699200d - 23810276989699200f)c + 23810276989699200d + + + 3 5 4 4 + 71430830969097600f d + 7936758996566400f e - 31747035986265600f e + + + 5 3 6 2 + 31747035986265600f e + (404774708824886400f + 396837949828320000)e + + + 43 37 + - 1247372229446701f + 3185785654596621203f + + + 31 25 + 498594866849974751463f + 624542545845791047935f + + + 19 13 + 931085755769682885f - 624150663582417063387f + + + 7 + - 499881859388360475647f - 3926885313819527351f + * + e + + + 44 38 + - 7026011547118141f + 17944427051950691243f + + + 32 26 + 2808383522593986603543f + 3513624142354807530135f + + + 20 14 + 2860757006705537685f - 3511356735642190737267f + + + 8 2 + - 2811332494697103819887f - 20315011631522847311f + , + (7936758996566400e - 7936758996566400f)c + + + 43 37 31 + - 4418748183673f + 11285568707456559f + 1765998617294451019f + + + 25 19 + 2173749283622606155f - 55788292195402895f + + + 13 7 + - 2215291421788292951f - 1718142665347430851f + 30256569458230237f + * + e + + + 44 38 32 + 4418748183673f - 11285568707456559f - 1765998617294451019f + + + 26 20 14 + - 2173749283622606155f + 55788292195402895f + 2215291421788292951f + + + 8 2 + 1718142665347430851f - 30256569458230237f + , + 6 43 + (72152354514240f - 72152354514240)c + 40950859449f + + + 37 31 25 + - 104588980990367f - 16367227395575307f - 20268523416527355f + + + 19 13 7 + 442205002259535f + 20576059935789063f + 15997133796970563f + + + - 275099892785581f + , + 3 2 2 + 1984189749141600d + 5952569247424800f d - 5952569247424800f d + + + 4 5 5 4 3 + - 3968379498283200f e + 15873517993132800f e + 17857707742274400e + + + 7 2 + (- 148814231185620000f - 162703559429611200f)e + + + 44 38 + - 390000914678878f + 996062704593756434f + + + 32 26 + 155886323972034823914f + 194745956143985421330f + + + 20 14 + 6205077595574430f - 194596512653299068786f + + + 8 2 + - 155796897940756922666f - 1036375759077320978f + * + e + + + 45 39 33 + - 374998630035991f + 957747106595453993f + 149889155566764891693f + + + 27 21 + 187154171443494641685f - 127129015426348065f + + + 15 9 3 + - 187241533243115040417f - 149719983567976534037f - 836654081239648061f + , + 3 5 + (5952569247424800e - 5952569247424800f)d - 3968379498283200f e + + + 4 4 5 3 + 9920948745708000f e - 3968379498283200f e + + + 6 2 + (- 148814231185620000f - 150798420934761600)e + + + 43 37 + 492558110242553f - 1257992359608074599f + + + 31 25 + - 196883094539368513959f - 246562115745735428055f + + + 19 13 + - 325698701993885505f + 246417769883651808111f + + + 7 + 197327352068200652911f + 1523373796389332143f + * + e + + + 44 38 32 + 2679481081803026f - 6843392695421906608f - 1071020459642646913578f + + + 26 20 + - 1339789169692041240060f - 852746750910750210f + + + 14 8 + 1339105101971878401312f + 1071900289758712984762f + + + 2 + 7555239072072727756f + , + 6 2 5 + (11905138494849600f - 11905138494849600)d - 7936758996566400f e + + + 3 4 4 3 + 31747035986265600f e - 31747035986265600f e + + + 11 5 2 + (- 420648226818019200f - 404774708824886400f )e + + + 42 36 30 + 15336187600889f - 39169739565161107f - 6127176127489690827f + + + 24 18 + - 7217708742310509615f + 538628483890722735f + + + 12 6 + 7506804353843507643f + 5886160769782607203f + 63576108396535879 + * + e + + + 43 37 31 + 71737781777066f - 183218856207557938f - 28672874271132276078f + + + 25 19 + - 35625223686939812010f + 164831339634084390f + + + 13 7 + 35724160423073052642f + 28627022578664910622f + 187459987029680506f + , + 6 5 2 4 + 1322793166094400e - 3968379498283200f e + 3968379498283200f e + + + 3 3 + - 5291172664377600f e + + + 10 4 2 + (- 230166010900425600f - 226197631402142400f )e + + + 47 41 + - 152375364610443885f + 389166626064854890415f + + + 35 29 + 60906097841360558987335f + 76167367934608798697275f + + + 23 17 + 27855066785995181125f - 76144952817052723145495f + + + 11 5 + - 60933629892463517546975f - 411415071682002547795f + * + e + + + 42 36 30 + - 209493533143822f + 535045979490560586f + 83737947964973553146f + + + 24 18 + 104889507084213371570f + 167117997269207870f + + + 12 6 + - 104793725781390615514f - 83842685189903180394f - 569978796672974242 + , + 6 3 + (25438330117200f + 25438330117200)e + + + 7 2 + (76314990351600f + 76314990351600f)e + + + 44 38 32 + - 1594966552735f + 4073543370415745f + 637527159231148925f + + + 26 20 14 + 797521176113606525f + 530440941097175f - 797160527306433145f + + + 8 2 + - 638132320196044965f - 4510507167940725f + * + e + + + 45 39 33 + - 6036376800443f + 15416903421476909f + 2412807646192304449f + + + 27 21 15 + 3017679923028013705f + 1422320037411955f - 3016560402417843941f + + + 9 3 + - 2414249368183033161f - 16561862361763873f + , + 12 2 + (1387545279120f - 1387545279120)e + + + 43 37 31 + 4321823003f - 11037922310209f - 1727510711947989f + + + 25 19 13 + - 2165150991154425f - 5114342560755f + 2162682824948601f + + + 7 + 1732620732685741f + 13506088516033f + * + e + + + 44 38 32 + 24177661775f - 61749727185325f - 9664106795754225f + + + 26 20 14 + - 12090487758628245f - 8787672733575f + 12083693383005045f + + + 8 2 + 9672870290826025f + 68544102808525f + , + 48 42 36 30 18 12 6 + f - 2554f - 399710f - 499722f + 499722f + 399710f + 2554f - 1] + Type: List NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + +Apply lexTriangular to compute a decomposition into regular triangular sets. +This should not take more than 5 seconds. + + lexTriangular(lg,false)$lextripack + [ + 6 6 5 2 4 3 3 4 2 5 + {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, + 2 5 3 4 4 3 5 2 + 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, + 2 5 3 4 4 3 5 2 + 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, + 2 5 3 4 4 3 5 2 + a - f e + 3f e - 3f e + 4f e + 3e - 3f} + , + 6 2 2 2 + {f - 1,e - f,d - f,c + 4f c + f ,(c - f)b - f c - 5f ,a + b + c + 3f}, + 6 2 2 + {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, + 6 2 2 2 + {f - 1,e - f,d + 4f d + f ,(d - f)c - f d - 5f ,b - f,a + c + d + 3f}, + 36 30 24 18 12 6 + {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, + 12 2 + (161718564f - 161718564)e + + + 31 25 19 13 + - 504205f + 1287737951f + 201539391380f + 253982817368f + + + 7 + 201940704665f + 1574134601f + * + e + + + 32 26 20 14 + - 2818405f + 7198203911f + 1126548149060f + 1416530563364f + + + 8 2 + 1127377589345f + 7988820725f + , + 6 2 5 3 4 + (693772639560f - 693772639560)d - 462515093040f e + 1850060372160f e + + + 4 3 11 5 2 + - 1850060372160f e + (- 24513299931120f - 23588269745040f )e + + + 30 24 18 + - 890810428f + 2275181044754f + 355937263869776f + + + 12 6 + 413736880104344f + 342849304487996f + 3704966481878 + * + e + + + 31 25 19 + - 4163798003f + 10634395752169f + 1664161760192806f + + + 13 7 + 2079424391370694f + 1668153650635921f + 10924274392693f + , + 6 31 25 + (12614047992f - 12614047992)c - 7246825f + 18508536599f + + + 19 13 7 + 2896249516034f + 3581539649666f + 2796477571739f - 48094301893f + , + 6 2 5 3 4 + (693772639560f - 693772639560)b - 925030186080f e + 2312575465200f e + + + 4 3 11 5 2 + - 2312575465200f e + (- 40007555547960f - 35382404617560f )e + + + 30 24 18 + - 3781280823f + 9657492291789f + 1511158913397906f + + + 12 6 + 1837290892286154f + 1487216006594361f + 8077238712093 + * + e + + + 31 25 19 + - 9736390478f + 24866827916734f + 3891495681905296f + + + 13 7 + 4872556418871424f + 3904047887269606f + 27890075838538f + , + a + b + c + d + e + f} + , + 6 2 2 2 + {f - 1,e + 4f e + f ,(e - f)d - f e - 5f ,c - f,b - f,a + d + e + 3f}] + Type: List RegularChain(Integer,[a,b,c,d,e,f]) + +Note that the first set of the decomposition is normalized (all +initials are integer numbers) but not the second one (normalized +triangular sets are defined in the description of the +NormalizedTriangularSetCategory constructor). + +So apply now lexTriangular to produce normalized triangular sets. + + lts := lexTriangular(lg,true)$lextripack + [ + 6 6 5 2 4 3 3 4 2 5 + {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, + 2 5 3 4 4 3 5 2 + 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, + 2 5 3 4 4 3 5 2 + 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, + 2 5 3 4 4 3 5 2 + a - f e + 3f e - 3f e + 4f e + 3e - 3f} + , + 6 2 2 + {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, + 6 2 2 + {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, + 6 2 2 + {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, + 36 30 24 18 12 6 + {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, + 2 + 1387545279120e + + + 31 25 19 + 4321823003f - 11037922310209f - 1727506390124986f + + + 13 7 + - 2176188913464634f - 1732620732685741f - 13506088516033f + * + e + + + 32 26 20 + 24177661775f - 61749727185325f - 9664082618092450f + + + 14 8 2 + - 12152237485813570f - 9672870290826025f - 68544102808525f + , + 1387545279120d + + + 30 24 18 + - 1128983050f + 2883434331830f + 451234998755840f + + + 12 6 + 562426491685760f + 447129055314890f - 165557857270 + * + e + + + 31 25 19 + - 1816935351f + 4640452214013f + 726247129626942f + + + 13 7 + 912871801716798f + 726583262666877f + 4909358645961f + , + 31 25 19 + 1387545279120c + 778171189f - 1987468196267f - 310993556954378f + + + 13 7 + - 383262822316802f - 300335488637543f + 5289595037041f + , + 1387545279120b + + + 30 24 18 + 1128983050f - 2883434331830f - 451234998755840f + + + 12 6 + - 562426491685760f - 447129055314890f + 165557857270 + * + e + + + 31 25 19 + - 3283058841f + 8384938292463f + 1312252817452422f + + + 13 7 + 1646579934064638f + 1306372958656407f + 4694680112151f + , + 31 25 + 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f + + + 19 13 7 + - 1727506390124986f - 2176188913464634f - 1732620732685741f + + + - 13506088516033f + } + , + 6 2 2 + {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] + Type: List RegularChain(Integer,[a,b,c,d,e,f]) + +We check that all initials are constant. + + [ [init(p) for p in (ts :: List(P))] for ts in lts] + [[1,3,1,3,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], + [1387545279120,1387545279120,1387545279120,1387545279120,1387545279120,1], + [1,1,1,1,1,1]] + Type: List List NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f]) + +Note that each triangular set in lts is a lexicographical Groebner +basis. Recall that a point belongs to the variety associated with lp +if and only if it belongs to that associated with one triangular set +ts in lts. + +By running the squareFreeLexTriangular operation, we retrieve the +above decomposition. + + squareFreeLexTriangular(lg,true)$lextripack + [ + 6 6 5 2 4 3 3 4 2 5 + {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, + 2 5 3 4 4 3 5 2 + 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, + 2 5 3 4 4 3 5 2 + 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, + 2 5 3 4 4 3 5 2 + a - f e + 3f e - 3f e + 4f e + 3e - 3f} + , + 6 2 2 + {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, + 6 2 2 + {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, + 6 2 2 + {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, + 36 30 24 18 12 6 + {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, + 2 + 1387545279120e + + + 31 25 19 + 4321823003f - 11037922310209f - 1727506390124986f + + + 13 7 + - 2176188913464634f - 1732620732685741f - 13506088516033f + * + e + + + 32 26 20 + 24177661775f - 61749727185325f - 9664082618092450f + + + 14 8 2 + - 12152237485813570f - 9672870290826025f - 68544102808525f + , + 1387545279120d + + + 30 24 18 + - 1128983050f + 2883434331830f + 451234998755840f + + + 12 6 + 562426491685760f + 447129055314890f - 165557857270 + * + e + + + 31 25 19 + - 1816935351f + 4640452214013f + 726247129626942f + + + 13 7 + 912871801716798f + 726583262666877f + 4909358645961f + , + 31 25 19 + 1387545279120c + 778171189f - 1987468196267f - 310993556954378f + + + 13 7 + - 383262822316802f - 300335488637543f + 5289595037041f + , + 1387545279120b + + + 30 24 18 + 1128983050f - 2883434331830f - 451234998755840f + + + 12 6 + - 562426491685760f - 447129055314890f + 165557857270 + * + e + + + 31 25 19 + - 3283058841f + 8384938292463f + 1312252817452422f + + + 13 7 + 1646579934064638f + 1306372958656407f + 4694680112151f + , + 31 25 + 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f + + + 19 13 7 + - 1727506390124986f - 2176188913464634f - 1732620732685741f + + + - 13506088516033f + } + , + 6 2 2 + {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] + Type: List SquareFreeRegularTriangularSet(Integer, + IndexedExponents OrderedVariableList [a,b,c,d,e,f], + OrderedVariableList [a,b,c,d,e,f], + NewSparseMultivariatePolynomial(Integer, + OrderedVariableList [a,b,c,d,e,f])) + +Thus the solutions given by lts are pairwise different. + +We count them as follows. + + reduce(+,[degree(ts) for ts in lts]) + 156 + Type: PositiveInteger + +We can investigate the triangular decomposition lts by using the +ZeroDimensionalSolvePackage. + +This requires to add an extra variable (smaller than the others) as follows. + + ls2 : List Symbol := concat(ls,new()$Symbol) + [a,b,c,d,e,f,%A] + Type: List Symbol + +Then we call the package. + + zdpack := ZDSOLVE(R,ls,ls2) + (20) ZeroDimensionalSolvePackage(Integer,[a,b,c,d,e,f],[a,b,c,d,e,f,%A]) + Type: Domain + +We compute a univariate representation of the variety associated with +the input system as follows. + + concat [univariateSolve(ts)$zdpack for ts in lts] + [ + 4 2 + [complexRoots= ? - 13? + 49, + coordinates = + 3 3 3 3 + [7a + %A - 6%A, 21b + %A + %A, 21c - 2%A + 19%A, 7d - %A + 6%A, + 3 3 + 21e - %A - %A, 21f + 2%A - 19%A] + ] + , + 4 2 + [complexRoots= ? + 11? + 49, + coordinates = + 3 3 3 + [35a + 3%A + 19%A, 35b + %A + 18%A, 35c - 2%A - %A, + 3 3 3 + 35d - 3%A - 19%A, 35e - %A - 18%A, 35f + 2%A + %A] + ] + , + [ + complexRoots = + 8 7 6 5 4 3 2 + ? - 12? + 58? - 120? + 207? - 360? + 802? - 1332? + 1369 + , + coordinates = + [ + 7 6 5 4 + 43054532a + 33782%A - 546673%A + 3127348%A - 6927123%A + + + 3 2 + 4365212%A - 25086957%A + 39582814%A - 107313172 + , + 7 6 5 4 + 43054532b - 33782%A + 546673%A - 3127348%A + 6927123%A + + + 3 2 + - 4365212%A + 25086957%A - 39582814%A + 107313172 + , + 7 6 5 4 + 21527266c - 22306%A + 263139%A - 1166076%A + 1821805%A + + + 3 2 + - 2892788%A + 10322663%A - 9026596%A + 12950740 + , + 7 6 5 4 + 43054532d + 22306%A - 263139%A + 1166076%A - 1821805%A + + + 3 2 + 2892788%A - 10322663%A + 30553862%A - 12950740 + , + 7 6 5 4 + 43054532e - 22306%A + 263139%A - 1166076%A + 1821805%A + + + 3 2 + - 2892788%A + 10322663%A - 30553862%A + 12950740 + , + 7 6 5 4 + 21527266f + 22306%A - 263139%A + 1166076%A - 1821805%A + + + 3 2 + 2892788%A - 10322663%A + 9026596%A - 12950740 + ] + ] + , + [ + complexRoots = + 8 7 6 5 4 3 2 + ? + 12? + 58? + 120? + 207? + 360? + 802? + 1332? + 1369 + , + coordinates = + [ + 7 6 5 4 + 43054532a + 33782%A + 546673%A + 3127348%A + 6927123%A + + + 3 2 + 4365212%A + 25086957%A + 39582814%A + 107313172 + , + 7 6 5 4 + 43054532b - 33782%A - 546673%A - 3127348%A - 6927123%A + + + 3 2 + - 4365212%A - 25086957%A - 39582814%A - 107313172 + , + 7 6 5 4 + 21527266c - 22306%A - 263139%A - 1166076%A - 1821805%A + + + 3 2 + - 2892788%A - 10322663%A - 9026596%A - 12950740 + , + 7 6 5 4 + 43054532d + 22306%A + 263139%A + 1166076%A + 1821805%A + + + 3 2 + 2892788%A + 10322663%A + 30553862%A + 12950740 + , + 7 6 5 4 + 43054532e - 22306%A - 263139%A - 1166076%A - 1821805%A + + + 3 2 + - 2892788%A - 10322663%A - 30553862%A - 12950740 + , + 7 6 5 4 + 21527266f + 22306%A + 263139%A + 1166076%A + 1821805%A + + + 3 2 + 2892788%A + 10322663%A + 9026596%A + 12950740 + ] + ] + , + 4 2 + [complexRoots= ? - ? + 1, + 3 3 3 3 + coordinates= [a - %A,b + %A - %A,c + %A ,d + %A,e - %A + %A,f - %A ]] + , + 8 6 4 2 + [complexRoots= ? + 4? + 12? + 16? + 4, + coordinates = + 7 5 3 7 5 3 + [4a - 2%A - 7%A - 20%A - 22%A, 4b + 2%A + 7%A + 20%A + 22%A, + 7 5 3 7 5 3 + 4c + %A + 3%A + 10%A + 10%A, 4d + %A + 3%A + 10%A + 6%A, + 7 5 3 7 5 3 + 4e - %A - 3%A - 10%A - 6%A, 4f - %A - 3%A - 10%A - 10%A] + ] + , + 4 3 2 + [complexRoots= ? + 6? + 30? + 36? + 36, + coordinates = + 3 2 3 2 + [30a - %A - 5%A - 30%A - 6, 6b + %A + 5%A + 24%A + 6, + 3 2 3 2 + 30c - %A - 5%A - 6, 30d - %A - 5%A - 30%A - 6, + 3 2 3 2 + 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] + ] + , + 4 3 2 + [complexRoots= ? - 6? + 30? - 36? + 36, + coordinates = + 3 2 3 2 + [30a - %A + 5%A - 30%A + 6, 6b + %A - 5%A + 24%A - 6, + 3 2 3 2 + 30c - %A + 5%A + 6, 30d - %A + 5%A - 30%A + 6, + 3 2 3 2 + 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] + ] + , + 2 + [complexRoots= ? + 6? + 6, + coordinates= [a + 1,b - %A - 5,c + %A + 1,d + 1,e + 1,f + 1]] + , + 2 + [complexRoots= ? - 6? + 6, + coordinates= [a - 1,b - %A + 5,c + %A - 1,d - 1,e - 1,f - 1]] + , + 4 3 2 + [complexRoots= ? + 6? + 30? + 36? + 36, + coordinates = + 3 2 3 2 + [6a + %A + 5%A + 24%A + 6, 30b - %A - 5%A - 6, + 3 2 3 2 + 30c - %A - 5%A - 30%A - 6, 30d - %A - 5%A - 30%A - 6, + 3 2 3 2 + 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] + ] + , + 4 3 2 + [complexRoots= ? - 6? + 30? - 36? + 36, + coordinates = + 3 2 3 2 + [6a + %A - 5%A + 24%A - 6, 30b - %A + 5%A + 6, + 3 2 3 2 + 30c - %A + 5%A - 30%A + 6, 30d - %A + 5%A - 30%A + 6, + 3 2 3 2 + 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] + ] + , + 2 + [complexRoots= ? + 6? + 6, + coordinates= [a - %A - 5,b + %A + 1,c + 1,d + 1,e + 1,f + 1]] + , + 2 + [complexRoots= ? - 6? + 6, + coordinates= [a - %A + 5,b + %A - 1,c - 1,d - 1,e - 1,f - 1]] + , + 4 3 2 + [complexRoots= ? + 6? + 30? + 36? + 36, + coordinates = + 3 2 3 2 + [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, + 3 2 3 2 + 6c + %A + 5%A + 24%A + 6, 30d - %A - 5%A - 6, + 3 2 3 2 + 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] + ] + , + 4 3 2 + [complexRoots= ? - 6? + 30? - 36? + 36, + coordinates = + 3 2 3 2 + [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, + 3 2 3 2 + 6c + %A - 5%A + 24%A - 6, 30d - %A + 5%A + 6, + 3 2 3 2 + 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] + ] + , + 2 + [complexRoots= ? + 6? + 6, + coordinates= [a + 1,b + 1,c - %A - 5,d + %A + 1,e + 1,f + 1]] + , + 2 + [complexRoots= ? - 6? + 6, + coordinates= [a - 1,b - 1,c - %A + 5,d + %A - 1,e - 1,f - 1]] + , + 8 7 6 5 4 2 + [complexRoots= ? + 6? + 16? + 24? + 18? - 8? + 4, + coordinates = + 7 6 5 4 3 2 + [2a + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 2%A + 4, + 7 6 5 4 3 2 + 2b + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 4%A + 4, + 7 6 5 4 3 + 2c - %A - 4%A - 8%A - 9%A - 4%A - 2%A - 4, + 7 6 5 4 3 + 2d + %A + 4%A + 8%A + 9%A + 4%A + 2%A + 4, + 7 6 5 4 3 2 + 2e - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 4%A - 4, + 7 6 5 4 3 2 + 2f - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 2%A - 4] + ] + , + [ + complexRoots = + 8 7 6 5 4 3 2 + ? + 12? + 64? + 192? + 432? + 768? + 1024? + 768? + 256 + , + coordinates = + [ + 7 6 5 4 3 2 + 1408a - 19%A - 200%A - 912%A - 2216%A - 4544%A - 6784%A + + + - 6976%A - 1792 + , + 7 6 5 4 3 2 + 1408b - 37%A - 408%A - 1952%A - 5024%A - 10368%A - 16768%A + + + - 17920%A - 5120 + , + 7 6 5 4 3 2 + 1408c + 37%A + 408%A + 1952%A + 5024%A + 10368%A + 16768%A + + + 17920%A + 5120 + , + 7 6 5 4 3 2 + 1408d + 19%A + 200%A + 912%A + 2216%A + 4544%A + 6784%A + + + 6976%A + 1792 + , + 2e + %A, 2f - %A] + ] + , + 8 6 4 2 + [complexRoots= ? + 4? + 12? + 16? + 4, + coordinates = + 7 5 3 7 5 3 + [4a - %A - 3%A - 10%A - 6%A, 4b - %A - 3%A - 10%A - 10%A, + 7 5 3 7 5 3 + 4c - 2%A - 7%A - 20%A - 22%A, 4d + 2%A + 7%A + 20%A + 22%A, + 7 5 3 7 5 3 + 4e + %A + 3%A + 10%A + 10%A, 4f + %A + 3%A + 10%A + 6%A] + ] + , + 8 6 4 2 + [complexRoots= ? + 16? - 96? + 256? + 256, + coordinates = + 7 5 3 + [512a - %A - 12%A + 176%A - 448%A, + 7 5 3 + 128b - %A - 16%A + 96%A - 256%A, + 7 5 3 + 128c + %A + 16%A - 96%A + 256%A, + 7 5 3 + 512d + %A + 12%A - 176%A + 448%A, 2e + %A, 2f - %A] + ] + , + [ + complexRoots = + 8 7 6 5 4 3 2 + ? - 12? + 64? - 192? + 432? - 768? + 1024? - 768? + 256 + , + coordinates = + [ + 7 6 5 4 3 2 + 1408a - 19%A + 200%A - 912%A + 2216%A - 4544%A + 6784%A + + + - 6976%A + 1792 + , + 7 6 5 4 3 2 + 1408b - 37%A + 408%A - 1952%A + 5024%A - 10368%A + 16768%A + + + - 17920%A + 5120 + , + 7 6 5 4 3 2 + 1408c + 37%A - 408%A + 1952%A - 5024%A + 10368%A - 16768%A + + + 17920%A - 5120 + , + 7 6 5 4 3 2 + 1408d + 19%A - 200%A + 912%A - 2216%A + 4544%A - 6784%A + + + 6976%A - 1792 + , + 2e + %A, 2f - %A] + ] + , + 8 7 6 5 4 2 + [complexRoots= ? - 6? + 16? - 24? + 18? - 8? + 4, + coordinates = + 7 6 5 4 3 2 + [2a + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 2%A - 4, + 7 6 5 4 3 2 + 2b + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 4%A - 4, + 7 6 5 4 3 + 2c - %A + 4%A - 8%A + 9%A - 4%A - 2%A + 4, + 7 6 5 4 3 + 2d + %A - 4%A + 8%A - 9%A + 4%A + 2%A - 4, + 7 6 5 4 3 2 + 2e - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 4%A + 4, + 7 6 5 4 3 2 + 2f - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 2%A + 4] + ] + , + 4 2 + [complexRoots= ? + 12? + 144, + coordinates = + 2 2 2 2 + [12a - %A - 12, 12b - %A - 12, 12c - %A - 12, 12d - %A - 12, + 2 2 + 6e + %A + 3%A + 12, 6f + %A - 3%A + 12] + ] + , + 4 3 2 + [complexRoots= ? + 6? + 30? + 36? + 36, + coordinates = + 3 2 3 2 + [6a - %A - 5%A - 24%A - 6, 30b + %A + 5%A + 30%A + 6, + 3 2 3 2 + 30c + %A + 5%A + 30%A + 6, 30d + %A + 5%A + 30%A + 6, + 3 2 3 2 + 30e + %A + 5%A + 30%A + 6, 30f + %A + 5%A + 6] + ] + , + 4 3 2 + [complexRoots= ? - 6? + 30? - 36? + 36, + coordinates = + 3 2 3 2 + [6a - %A + 5%A - 24%A + 6, 30b + %A - 5%A + 30%A - 6, + 3 2 3 2 + 30c + %A - 5%A + 30%A - 6, 30d + %A - 5%A + 30%A - 6, + 3 2 3 2 + 30e + %A - 5%A + 30%A - 6, 30f + %A - 5%A - 6] + ] + , + 4 2 + [complexRoots= ? + 12? + 144, + coordinates = + 2 2 2 2 + [12a + %A + 12, 12b + %A + 12, 12c + %A + 12, 12d + %A + 12, + 2 2 + 6e - %A + 3%A - 12, 6f - %A - 3%A - 12] + ] + , + 2 + [complexRoots= ? - 12, + coordinates= [a - 1,b - 1,c - 1,d - 1,2e + %A + 4,2f - %A + 4]] + , + 2 + [complexRoots= ? + 6? + 6, + coordinates= [a + %A + 5,b - 1,c - 1,d - 1,e - 1,f - %A - 1]] + , + 2 + [complexRoots= ? - 6? + 6, + coordinates= [a + %A - 5,b + 1,c + 1,d + 1,e + 1,f - %A + 1]] + , + 2 + [complexRoots= ? - 12, + coordinates= [a + 1,b + 1,c + 1,d + 1,2e + %A - 4,2f - %A - 4]] + , + 4 3 2 + [complexRoots= ? + 6? + 30? + 36? + 36, + coordinates = + 3 2 3 2 + [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, + 3 2 3 2 + 30c - %A - 5%A - 30%A - 6, 6d + %A + 5%A + 24%A + 6, + 3 2 3 2 + 30e - %A - 5%A - 6, 30f - %A - 5%A - 30%A - 6] + ] + , + 4 3 2 + [complexRoots= ? - 6? + 30? - 36? + 36, + coordinates = + 3 2 3 2 + [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, + 3 2 3 2 + 30c - %A + 5%A - 30%A + 6, 6d + %A - 5%A + 24%A - 6, + 3 2 3 2 + 30e - %A + 5%A + 6, 30f - %A + 5%A - 30%A + 6] + ] + , + 2 + [complexRoots= ? + 6? + 6, + coordinates= [a + 1,b + 1,c + 1,d - %A - 5,e + %A + 1,f + 1]] + , + 2 + [complexRoots= ? - 6? + 6, + coordinates= [a - 1,b - 1,c - 1,d - %A + 5,e + %A - 1,f - 1]] + ] + Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, + coordinates: List Polynomial Integer) + +Since the univariateSolve operation may split a regular set, it +returns a list. This explains the use of concat. + +Look at the last item of the result. It consists of two parts. For +any complex root ? of the univariate polynomial in the first part, we +get a tuple of univariate polynomials (in a, ...,f respectively) by +replacing %A by ? in the second part. Each of these tuples t +describes a point of the variety associated with lp by equaling to +zero the polynomials in t. + +Note that the way of reading these univariate representations is +explained also in the example illustrating the ZeroDimensionalSolvePackage +constructor. + +Now, we compute the points of the variety with real coordinates. + + concat [realSolve(ts)$zdpack for ts in lts] + [[%B1,%B1,%B1,%B5,- %B5 - 4%B1,%B1], [%B1,%B1,%B1,%B6,- %B6 - 4%B1,%B1], + [%B2,%B2,%B2,%B3,- %B3 - 4%B2,%B2], [%B2,%B2,%B2,%B4,- %B4 - 4%B2,%B2], + [%B7,%B7,%B7,%B7,%B11,- %B11 - 4%B7], [%B7,%B7,%B7,%B7,%B12,- %B12 - 4%B7], + [%B8,%B8,%B8,%B8,%B9,- %B9 - 4%B8], [%B8,%B8,%B8,%B8,%B10,- %B10 - 4%B8], + [%B13,%B13,%B17,- %B17 - 4%B13,%B13,%B13], + [%B13,%B13,%B18,- %B18 - 4%B13,%B13,%B13], + [%B14,%B14,%B15,- %B15 - 4%B14,%B14,%B14], + [%B14,%B14,%B16,- %B16 - 4%B14,%B14,%B14], + [%B19, %B29, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B19 - ---------- %B19 - ----------- %B19 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B19 - ------------- %B19 - ----------- %B19 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B19 + ------------- %B19 + --------------- %B19 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B19 + --------------- %B19 - ------------ %B19 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B19 - ------------- %B19 - --------------- %B19 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B19 - --------------- %B19 - ------------- %B19 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B29 - ------------- %B19 + ------------ %B19 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B19 + ---------------- %B19 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B19 + -------------- %B19 + 1387545279120 1387545279120 + ] + , + [%B19, %B30, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B19 - ---------- %B19 - ----------- %B19 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B19 - ------------- %B19 - ----------- %B19 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B19 + ------------- %B19 + --------------- %B19 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B19 + --------------- %B19 - ------------ %B19 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B19 - ------------- %B19 - --------------- %B19 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B19 - --------------- %B19 - ------------- %B19 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B30 - ------------- %B19 + ------------ %B19 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B19 + ---------------- %B19 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B19 + -------------- %B19 + 1387545279120 1387545279120 + ] + , + [%B20, %B27, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B20 - ---------- %B20 - ----------- %B20 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B20 - ------------- %B20 - ----------- %B20 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B20 + ------------- %B20 + --------------- %B20 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B20 + --------------- %B20 - ------------ %B20 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B20 - ------------- %B20 - --------------- %B20 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B20 - --------------- %B20 - ------------- %B20 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B27 - ------------- %B20 + ------------ %B20 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B20 + ---------------- %B20 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B20 + -------------- %B20 + 1387545279120 1387545279120 + ] + , + [%B20, %B28, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B20 - ---------- %B20 - ----------- %B20 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B20 - ------------- %B20 - ----------- %B20 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B20 + ------------- %B20 + --------------- %B20 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B20 + --------------- %B20 - ------------ %B20 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B20 - ------------- %B20 - --------------- %B20 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B20 - --------------- %B20 - ------------- %B20 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B28 - ------------- %B20 + ------------ %B20 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B20 + ---------------- %B20 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B20 + -------------- %B20 + 1387545279120 1387545279120 + ] + , + [%B21, %B25, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B21 - ---------- %B21 - ----------- %B21 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B21 - ------------- %B21 - ----------- %B21 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B21 + ------------- %B21 + --------------- %B21 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B21 + --------------- %B21 - ------------ %B21 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B21 - ------------- %B21 - --------------- %B21 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B21 - --------------- %B21 - ------------- %B21 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B25 - ------------- %B21 + ------------ %B21 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B21 + ---------------- %B21 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B21 + -------------- %B21 + 1387545279120 1387545279120 + ] + , + [%B21, %B26, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B21 - ---------- %B21 - ----------- %B21 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B21 - ------------- %B21 - ----------- %B21 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B21 + ------------- %B21 + --------------- %B21 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B21 + --------------- %B21 - ------------ %B21 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B21 - ------------- %B21 - --------------- %B21 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B21 - --------------- %B21 - ------------- %B21 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B26 - ------------- %B21 + ------------ %B21 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B21 + ---------------- %B21 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B21 + -------------- %B21 + 1387545279120 1387545279120 + ] + , + [%B22, %B23, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B22 - ---------- %B22 - ----------- %B22 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B22 - ------------- %B22 - ----------- %B22 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B22 + ------------- %B22 + --------------- %B22 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B22 + --------------- %B22 - ------------ %B22 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B22 - ------------- %B22 - --------------- %B22 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B22 - --------------- %B22 - ------------- %B22 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B23 - ------------- %B22 + ------------ %B22 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B22 + ---------------- %B22 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B22 + -------------- %B22 + 1387545279120 1387545279120 + ] + , + [%B22, %B24, + 7865521 31 6696179241 25 25769893181 19 + ---------- %B22 - ---------- %B22 - ----------- %B22 + 6006689520 2002229840 49235160 + + + 1975912990729 13 1048460696489 7 21252634831 + - ------------- %B22 - ------------- %B22 - ----------- %B22 + 3003344760 2002229840 6006689520 + , + 778171189 31 1987468196267 25 155496778477189 19 + - ------------- %B22 + ------------- %B22 + --------------- %B22 + 1387545279120 1387545279120 693772639560 + + + 191631411158401 13 300335488637543 7 755656433863 + --------------- %B22 + --------------- %B22 - ------------ %B22 + 693772639560 1387545279120 198220754160 + , + 1094352947 31 2794979430821 25 218708802908737 19 + ------------ %B22 - ------------- %B22 - --------------- %B22 + 462515093040 462515093040 231257546520 + + + 91476663003591 13 145152550961823 7 1564893370717 + - -------------- %B22 - --------------- %B22 - ------------- %B22 + 77085848840 154171697680 462515093040 + , + 4321823003 31 180949546069 25 + - %B24 - ------------- %B22 + ------------ %B22 + 1387545279120 22746643920 + + + 863753195062493 19 1088094456732317 13 + --------------- %B22 + ---------------- %B22 + 693772639560 693772639560 + + + 1732620732685741 7 13506088516033 + ---------------- %B22 + -------------- %B22 + 1387545279120 1387545279120 + ] + , + [%B31,%B35,- %B35 - 4%B31,%B31,%B31,%B31], + [%B31,%B36,- %B36 - 4%B31,%B31,%B31,%B31], + [%B32,%B33,- %B33 - 4%B32,%B32,%B32,%B32], + [%B32,%B34,- %B34 - 4%B32,%B32,%B32,%B32]] + Type: List List RealClosure Fraction Integer + +We obtain 24 points given by lists of elements in the RealClosure +of Fraction of R. In each list, the first value corresponds +to the indeterminate f, the second to e and so on. + +See Also: +o )help RegularChain +o )help RegularTriangularSet +o )help SquareFreeRegularTriangularSet +o )help ZeroDimensionalSolvePackage +o )help NewSparseMultivariatePolynomial +o )help LinGroebnerPackage +o )help NormalizedTriangularSetCategory +o )help RealClosure +o )help Fraction +o )show LexTriangularPackage + +@ +\pagehead{LexTriangularPackage}{LEXTRIPK} +\pagepic{ps/v104lextriangularpackage.ps}{LEXTRIPK}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package LEXTRIPK LexTriangularPackage +++ Author: Marc Moreno Maza +++ Date Created: 08/02/1999 +++ Date Last Updated: 08/02/1999 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ Description: +++ A package for solving polynomial systems with finitely many solutions. +++ The decompositions are given by means of regular triangular sets. +++ The computations use lexicographical Groebner bases. +++ The main operations are \axiomOpFrom{lexTriangular}{LexTriangularPackage} +++ and \axiomOpFrom{squareFreeLexTriangular}{LexTriangularPackage}. +++ The second one provide decompositions by means of square-free regular triangular sets. +++ Both are based on the {\em lexTriangular} method described in [1]. +++ They differ from the algorithm described in [2] by the fact that +++ multiciplities of the roots are not kept. +++ With the \axiomOpFrom{squareFreeLexTriangular}{LexTriangularPackage} operation +++ all multiciplities are removed. With the other operation some multiciplities may remain. +++ Both operations admit an optional argument to produce normalized triangular sets. \newline +++ References: \newline +++ [1] D. LAZARD "Solving Zero-dimensional Algebraic Systems" +++ published in the J. of Symbol. Comput. (1992) 13, 117-131.\newline +++ [2] M. MORENO MAZA and R. RIOBOO "Computations of gcd over +++ algebraic towers of simple extensions" In proceedings of AAECC11, Paris, 1995.\newline +++ Version: 2. + +LexTriangularPackage(R,ls): Exports == Implementation where + + R: GcdDomain + ls: List Symbol + V ==> OrderedVariableList ls + E ==> IndexedExponents V + P ==> NewSparseMultivariatePolynomial(R,V) + TS ==> RegularChain(R,ls) + ST ==> SquareFreeRegularTriangularSet(R,E,V,P) + Q1 ==> Polynomial R + PS ==> GeneralPolynomialSet(R,E,V,P) + N ==> NonNegativeInteger + Z ==> Integer + B ==> Boolean + S ==> String + K ==> Fraction R + LP ==> List P + BWTS ==> Record(val : Boolean, tower : TS) + LpWTS ==> Record(val : (List P), tower : TS) + BWST ==> Record(val : Boolean, tower : ST) + LpWST ==> Record(val : (List P), tower : ST) + polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,P) + quasicomppackTS ==> QuasiComponentPackage(R,E,V,P,TS) + regsetgcdpackTS ==> SquareFreeRegularTriangularSetGcdPackage(R,E,V,P,TS) + normalizpackTS ==> NormalizationPackage(R,E,V,P,TS) + quasicomppackST ==> QuasiComponentPackage(R,E,V,P,ST) + regsetgcdpackST ==> SquareFreeRegularTriangularSetGcdPackage(R,E,V,P,ST) + normalizpackST ==> NormalizationPackage(R,E,V,P,ST) + + Exports == with + + zeroDimensional?: LP -> B + ++ \axiom{zeroDimensional?(lp)} returns true iff + ++ \axiom{lp} generates a zero-dimensional ideal + ++ w.r.t. the variables involved in \axiom{lp}. + fglmIfCan: LP -> Union(LP, "failed") + ++ \axiom{fglmIfCan(lp)} returns the lexicographical Groebner + ++ basis of \axiom{lp} by using the {\em FGLM} strategy, + ++ if \axiom{zeroDimensional?(lp)} holds . + groebner: LP -> LP + ++ \axiom{groebner(lp)} returns the lexicographical Groebner + ++ basis of \axiom{lp}. If \axiom{lp} generates a zero-dimensional + ++ ideal then the {\em FGLM} strategy is used, otherwise + ++ the {\em Sugar} strategy is used. + lexTriangular: (LP, B) -> List TS + ++ \axiom{lexTriangular(base, norm?)} decomposes the variety + ++ associated with \axiom{base} into regular chains. + ++ Thus a point belongs to this variety iff it is a regular + ++ zero of a regular set in in the output. + ++ Note that \axiom{base} needs to be a lexicographical Groebner basis + ++ of a zero-dimensional ideal. If \axiom{norm?} is \axiom{true} + ++ then the regular sets are normalized. + squareFreeLexTriangular: (LP, B) -> List ST + ++ \axiom{squareFreeLexTriangular(base, norm?)} decomposes the variety + ++ associated with \axiom{base} into square-free regular chains. + ++ Thus a point belongs to this variety iff it is a regular + ++ zero of a regular set in in the output. + ++ Note that \axiom{base} needs to be a lexicographical Groebner basis + ++ of a zero-dimensional ideal. If \axiom{norm?} is \axiom{true} + ++ then the regular sets are normalized. + zeroSetSplit: (LP, B) -> List TS + ++ \axiom{zeroSetSplit(lp, norm?)} decomposes the variety + ++ associated with \axiom{lp} into regular chains. + ++ Thus a point belongs to this variety iff it is a regular + ++ zero of a regular set in in the output. + ++ Note that \axiom{lp} needs to generate a zero-dimensional ideal. + ++ If \axiom{norm?} is \axiom{true} then the regular sets are normalized. + zeroSetSplit: (LP, B) -> List ST + ++ \axiom{zeroSetSplit(lp, norm?)} decomposes the variety + ++ associated with \axiom{lp} into square-free regular chains. + ++ Thus a point belongs to this variety iff it is a regular + ++ zero of a regular set in in the output. + ++ Note that \axiom{lp} needs to generate a zero-dimensional ideal. + ++ If \axiom{norm?} is \axiom{true} then the regular sets are normalized. + + Implementation == add + + trueVariables(lp: List(P)): List Symbol == + lv: List V := variables([lp]$PS) + truels: List Symbol := [] + for s in ls repeat + if member?(variable(s)::V, lv) then truels := cons(s,truels) + reverse truels + + zeroDimensional?(lp:List(P)): Boolean == + truels: List Symbol := trueVariables(lp) + fglmpack := FGLMIfCanPackage(R,truels) + lq1: List(Q1) := [p::Q1 for p in lp] + zeroDimensional?(lq1)$fglmpack + + fglmIfCan(lp:List(P)): Union(List(P), "failed") == + truels: List Symbol := trueVariables(lp) + fglmpack := FGLMIfCanPackage(R,truels) + lq1: List(Q1) := [p::Q1 for p in lp] + foo := fglmIfCan(lq1)$fglmpack + foo case "failed" => return("failed" :: Union(List(P), "failed")) + lp := [retract(q1)$P for q1 in (foo :: List(Q1))] + lp::Union(List(P), "failed") + + groebner(lp:List(P)): List(P) == + truels: List Symbol := trueVariables(lp) + fglmpack := FGLMIfCanPackage(R,truels) + lq1: List(Q1) := [p::Q1 for p in lp] + lq1 := groebner(lq1)$fglmpack + lp := [retract(q1)$P for q1 in lq1] + + lexTriangular(base: List(P), norm?: Boolean): List(TS) == + base := sort(infRittWu?,base) + base := remove(zero?, base) + any?(ground?, base) => [] + ts: TS := empty() + toSee: List LpWTS := [[base,ts]$LpWTS] + toSave: List TS := [] + while not empty? toSee repeat + lpwt := first toSee; toSee := rest toSee + lp := lpwt.val; ts := lpwt.tower + empty? lp => toSave := cons(ts, toSave) + p := first lp; lp := rest lp; v := mvar(p) + algebraic?(v,ts) => + error "lexTriangular$LEXTRIPK: should never happen !" + norm? and zero? remainder(init(p),ts).polnum => + toSee := cons([lp, ts]$LpWTS, toSee) + (not norm?) and zero? (initiallyReduce(init(p),ts)) => + toSee := cons([lp, ts]$LpWTS, toSee) + lbwt: List BWTS := invertible?(init(p),ts)$TS + while (not empty? lbwt) repeat + bwt := first lbwt; lbwt := rest lbwt + b := bwt.val; us := bwt.tower + (not b) => toSee := cons([lp, us], toSee) + lus: List TS + if norm? + then + newp := normalizedAssociate(p,us)$normalizpackTS + lus := [internalAugment(newp,us)$TS] + else + newp := p + lus := augment(newp,us)$TS + newlp := lp + while (not empty? newlp) and (mvar(first newlp) = v) repeat + newlp := rest newlp + for us in lus repeat + toSee := cons([newlp, us]$LpWTS, toSee) + algebraicSort(toSave)$quasicomppackTS + + zeroSetSplit(lp:List(P), norm?:B): List TS == + bar := fglmIfCan(lp) + bar case "failed" => + error "zeroSetSplit$LEXTRIPK: #1 not zero-dimensional" + lexTriangular(bar::(List P),norm?) + + squareFreeLexTriangular(base: List(P), norm?: Boolean): List(ST) == + base := sort(infRittWu?,base) + base := remove(zero?, base) + any?(ground?, base) => [] + ts: ST := empty() + toSee: List LpWST := [[base,ts]$LpWST] + toSave: List ST := [] + while not empty? toSee repeat + lpwt := first toSee; toSee := rest toSee + lp := lpwt.val; ts := lpwt.tower + empty? lp => toSave := cons(ts, toSave) + p := first lp; lp := rest lp; v := mvar(p) + algebraic?(v,ts) => + error "lexTriangular$LEXTRIPK: should never happen !" + norm? and zero? remainder(init(p),ts).polnum => + toSee := cons([lp, ts]$LpWST, toSee) + (not norm?) and zero? (initiallyReduce(init(p),ts)) => + toSee := cons([lp, ts]$LpWST, toSee) + lbwt: List BWST := invertible?(init(p),ts)$ST + while (not empty? lbwt) repeat + bwt := first lbwt; lbwt := rest lbwt + b := bwt.val; us := bwt.tower + (not b) => toSee := cons([lp, us], toSee) + lus: List ST + if norm? + then + newp := normalizedAssociate(p,us)$normalizpackST + lus := augment(newp,us)$ST + else + lus := augment(p,us)$ST + newlp := lp + while (not empty? newlp) and (mvar(first newlp) = v) repeat + newlp := rest newlp + for us in lus repeat + toSee := cons([newlp, us]$LpWST, toSee) + algebraicSort(toSave)$quasicomppackST + + zeroSetSplit(lp:List(P), norm?:B): List ST == + bar := fglmIfCan(lp) + bar case "failed" => + error "zeroSetSplit$LEXTRIPK: #1 not zero-dimensional" + squareFreeLexTriangular(bar::(List P),norm?) + +@ +<>= +"LEXTRIPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=LEXTRIPK"] +"SFRTCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SFRTCAT"] +"LEXTRIPK" -> "SFRTCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package LINDEP LinearDependence} \pagehead{LinearDependence}{LINDEP} \pagepic{ps/v104lineardependence.ps}{LINDEP}{1.00} @@ -59679,6 +64376,77 @@ NormInMonogenicAlgebra(R, PolR, E, PolE): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package NORMRETR NormRetractPackage} +\pagehead{NormRetractPackage}{NORMRETR} +\pagepic{ps/v104normretractpackage.ps}{NORMRETR}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package NORMRETR NormRetractPackage +++ Description: +++ This package \undocumented +NormRetractPackage(F, ExtF, SUEx, ExtP, n):C == T where + F : FiniteFieldCategory + ExtF : FiniteAlgebraicExtensionField(F) + SUEx : UnivariatePolynomialCategory ExtF + ExtP : UnivariatePolynomialCategory SUEx + n : PositiveInteger + SUP ==> SparseUnivariatePolynomial + R ==> SUP F + P ==> SUP R + + C ==> with + normFactors : ExtP -> List ExtP + ++ normFactors(x) \undocumented + retractIfCan : ExtP -> Union(P, "failed") + ++ retractIfCan(x) \undocumented + Frobenius : ExtP -> ExtP + ++ Frobenius(x) \undocumented + + T ==> add + + normFactors(p:ExtP):List ExtP == + facs : List ExtP := [p] + for i in 1..n-1 repeat + member?((p := Frobenius p), facs) => return facs + facs := cons(p, facs) + facs + + Frobenius(ff:ExtP):ExtP == + fft:ExtP:=0 + while ff^=0 repeat + fft:=fft + monomial(map(Frobenius, leadingCoefficient ff), + degree ff) + ff:=reductum ff + fft + + retractIfCan(ff:ExtP):Union(P, "failed") == + fft:P:=0 + while ff ^= 0 repeat + lc : SUEx := leadingCoefficient ff + plc: SUP F := 0 + while lc ^= 0 repeat + lclc:ExtF := leadingCoefficient lc + (retlc := retractIfCan lclc) case "failed" => return "failed" + plc := plc + monomial(retlc::F, degree lc) + lc := reductum lc + fft:=fft+monomial(plc, degree ff) + ff:=reductum ff + fft + +@ +<>= +"NORMRETR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=NORMRETR"] +"FAXF" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FAXF"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"NORMRETR" -> "FAXF" +"NORMRETR" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package NPCOEF NPCoef} \pagehead{NPCoef}{NPCOEF} \pagepic{ps/v104npcoef.ps}{NPCOEF}{1.00} @@ -62017,6 +66785,126 @@ NumericRealEigenPackage(Par) : C == T @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package NUMTUBE NumericTubePlot} +\pagehead{NumericTubePlot}{NUMTUBE} +\pagepic{ps/v104numerictubeplot.ps}{NUMTUBE}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package NUMTUBE NumericTubePlot +++ Author: Clifton J. Williamson +++ Date Created: Bastille Day 1989 +++ Date Last Updated: 5 June 1990 +++ Keywords: +++ Examples: +++ Package for constructing tubes around 3-dimensional parametric curves. +NumericTubePlot(Curve): Exports == Implementation where + Curve : PlottableSpaceCurveCategory + B ==> Boolean + I ==> Integer + SF ==> DoubleFloat + L ==> List + S ==> String + SEG ==> Segment + Pt ==> Point SF + TUBE ==> TubePlot Curve + Triad ==> Record(tang:Pt,norm:Pt,bin:Pt) + + Exports ==> with + tube: (Curve,SF,I) -> TUBE + ++ tube(c,r,n) creates a tube of radius r around the curve c. + + Implementation ==> add + import TubePlotTools + + LINMAX := convert(0.995)@SF + XHAT := point(1,0,0,0) + YHAT := point(0,1,0,0) + PREV0 := point(1,1,0,0) + PREV := PREV0 + + colinearity: (Pt,Pt) -> SF + colinearity(x,y) == dot(x,y)**2/(dot(x,x) * dot(y,y)) + + orthog: (Pt,Pt) -> Pt + orthog(x,y) == + if colinearity(x,y) > LINMAX then y := PREV + if colinearity(x,y) > LINMAX then + y := (colinearity(x,XHAT) < LINMAX => XHAT; YHAT) + a := -dot(x,y)/dot(x,x) + PREV := a*x + y + + poTriad:(Pt,Pt,Pt) -> Triad + poTriad(pl,po,pr) == + -- use divided difference for t. + t := unitVector(pr - pl) + -- compute n as orthogonal to t in plane containing po. + pol := pl - po + n := unitVector orthog(t,pol) + [t,n,cross(t,n)] + + curveTriads: L Pt -> L Triad + curveTriads l == + (k := #l) < 2 => error "Need at least 2 points to specify a curve" + PREV := PREV0 + k = 2 => + t := unitVector(second l - first l) + n := unitVector(t - XHAT) + b := cross(t,n) + triad : Triad := [t,n,b] + [triad,triad] + -- compute interior triads using divided differences + midtriads : L Triad := + [poTriad(pl,po,pr) for pl in l for po in rest l _ + for pr in rest rest l] + -- compute first triad using a forward difference + x := first midtriads + t := unitVector(second l - first l) + n := unitVector orthog(t,x.norm) + begtriad : Triad := [t,n,cross(t,n)] + -- compute last triad using a backward difference + x := last midtriads + -- efficiency!! + t := unitVector(l.k - l.(k-1)) + n := unitVector orthog(t,x.norm) + endtriad : Triad := [t,n,cross(t,n)] + concat(begtriad,concat(midtriads,endtriad)) + + curveLoops: (L Pt,SF,I) -> L L Pt + curveLoops(pts,r,nn) == + triads := curveTriads pts + cosSin := cosSinInfo nn + loops : L L Pt := nil() + for pt in pts for triad in triads repeat + n := triad.norm; b := triad.bin + loops := concat(loopPoints(pt,n,b,r,cosSin),loops) + reverse_! loops + + tube(curve,r,n) == + n < 3 => error "tube: n should be at least 3" + brans := listBranches curve + loops : L L Pt := nil() + for bran in brans repeat + loops := concat(loops,curveLoops(bran,r,n)) + tube(curve,loops,false) + +@ +<>= +"NUMTUBE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=NUMTUBE"] +"FIELD" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FIELD"] +"RADCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=RADCAT"] +"FLAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FLAGG"] +"FLAGG-" [color="#88FF44",href="bookvol10.3.pdf#nameddest=FLAGG"] +"NUMTUBE" -> "FIELD" +"NUMTUBE" -> "RADCAT" +"NUMTUBE" -> "FLAGG" +"NUMTUBE" -> "FLAGG-" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter O} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package OCTCT2 OctonionCategoryFunctions2} @@ -63378,6 +68266,62 @@ PAdicWildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package YSTREAM ParadoxicalCombinatorsForStreams} +\pagehead{ParadoxicalCombinatorsForStreams}{YSTREAM} +\pagepic{ps/v104paradoxicalcombinatorsforstreams.ps}{YSTREAM}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package YSTREAM ParadoxicalCombinatorsForStreams +++ Computation of fixed points of mappings on streams +++ Author: Burge, Watt (revised by Williamson) +++ Date Created: 1986 +++ Date Last Updated: 21 October 1989 +++ Keywords: stream, fixed point +++ Examples: +++ References: +ParadoxicalCombinatorsForStreams(A):Exports == Implementation where + ++ This package implements fixed-point computations on streams. + A : Type + ST ==> Stream + L ==> List + I ==> Integer + + Exports ==> with + Y: (ST A -> ST A) -> ST A + ++ Y(f) computes a fixed point of the function f. + Y: (L ST A -> L ST A,I) -> L ST A + ++ Y(g,n) computes a fixed point of the function g, where g takes + ++ a list of n streams and returns a list of n streams. + + Implementation ==> add + + Y f == + y : ST A := CONS(0$I,0$I)$Lisp + j := f y + RPLACA(y,frst j)$Lisp + RPLACD(y,rst j)$Lisp + y + + Y(g,n) == + x : L ST A := [CONS(0$I,0$I)$Lisp for i in 1..n] + j := g x + for xi in x for ji in j repeat + RPLACA(xi,frst ji)$Lisp + RPLACD(xi,rst ji)$Lisp + x + +@ +<>= +"YSTREAM" [color="#FF4488",href="bookvol10.4.pdf#nameddest=YSTREAM"] +"TYPE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=TYPE"] +"YSTREAM" -> "TYPE" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package PLEQN ParametricLinearEquations} \pagehead{ParametricLinearEquations}{PLEQN} \pagepic{ps/v104parametriclinearequations.ps}{PLEQN}{1.00} @@ -69216,6 +74160,840 @@ PolynomialRoots(E, V, R, P, F):Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package PSETPK PolynomialSetUtilitiesPackage} +\pagehead{PolynomialSetUtilitiesPackage}{PSETPK} +\pagepic{ps/v104polynomialsetutilitiespackage.ps}{PSETPK}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package PSETPK PolynomialSetUtilitiesPackage +++ Author: Marc Moreno Maza (marc@nag.co.uk) +++ Date Created: 12/01/1995 +++ Date Last Updated: 12/15/1998 +++ SPARC Version +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ Examples: +++ References: +++ Description: +++ This package provides modest routines for polynomial system solving. +++ The aim of many of the operations of this package is to remove certain +++ factors in some polynomials in order to avoid unnecessary computations +++ in algorithms involving splitting techniques by partial factorization. +++ Version: 3 + +PolynomialSetUtilitiesPackage (R,E,V,P) : Exports == Implementation where + + R : IntegralDomain + E : OrderedAbelianMonoidSup + V : OrderedSet + P : RecursivePolynomialCategory(R,E,V) + N ==> NonNegativeInteger + Z ==> Integer + B ==> Boolean + LP ==> List P + FP ==> Factored P + T ==> GeneralTriangularSet(R,E,V,P) + RRZ ==> Record(factor: P,exponent: Integer) + RBT ==> Record(bas:T,top:LP) + RUL ==> Record(chs:Union(T,"failed"),rfs:LP) + GPS ==> GeneralPolynomialSet(R,E,V,P) + pf ==> MultivariateFactorize(V, E, R, P) + + Exports == with + + removeRedundantFactors: LP -> LP + ++ \axiom{removeRedundantFactors(lp)} returns \axiom{lq} such that if + ++ \axiom{lp = [p1,...,pn]} and \axiom{lq = [q1,...,qm]} + ++ then the product \axiom{p1*p2*...*pn} vanishes iff the product \axiom{q1*q2*...*qm} vanishes, + ++ and the product of degrees of the \axiom{qi} is not greater than + ++ the one of the \axiom{pj}, and no polynomial in \axiom{lq} + ++ divides another polynomial in \axiom{lq}. In particular, + ++ polynomials lying in the base ring \axiom{R} are removed. + ++ Moreover, \axiom{lq} is sorted w.r.t \axiom{infRittWu?}. + ++ Furthermore, if R is gcd-domain, the polynomials in \axiom{lq} are + ++ pairwise without common non trivial factor. + removeRedundantFactors: (P,P) -> LP + ++ \axiom{removeRedundantFactors(p,q)} returns the same as + ++ \axiom{removeRedundantFactors([p,q])} + removeSquaresIfCan : LP -> LP + ++ \axiom{removeSquaresIfCan(lp)} returns + ++ \axiom{removeDuplicates [squareFreePart(p)$P for p in lp]} + ++ if \axiom{R} is gcd-domain else returns \axiom{lp}. + unprotectedRemoveRedundantFactors: (P,P) -> LP + ++ \axiom{unprotectedRemoveRedundantFactors(p,q)} returns the same as + ++ \axiom{removeRedundantFactors(p,q)} but does assume that neither + ++ \axiom{p} nor \axiom{q} lie in the base ring \axiom{R} and assumes that + ++ \axiom{infRittWu?(p,q)} holds. Moreover, if \axiom{R} is gcd-domain, + ++ then \axiom{p} and \axiom{q} are assumed to be square free. + removeRedundantFactors: (LP,P) -> LP + ++ \axiom{removeRedundantFactors(lp,q)} returns the same as + ++ \axiom{removeRedundantFactors(cons(q,lp))} assuming + ++ that \axiom{removeRedundantFactors(lp)} returns \axiom{lp} + ++ up to replacing some polynomial \axiom{pj} in \axiom{lp} + ++ by some some polynomial \axiom{qj} associated to \axiom{pj}. + removeRedundantFactors : (LP,LP) -> LP + ++ \axiom{removeRedundantFactors(lp,lq)} returns the same as + ++ \axiom{removeRedundantFactors(concat(lp,lq))} assuming + ++ that \axiom{removeRedundantFactors(lp)} returns \axiom{lp} + ++ up to replacing some polynomial \axiom{pj} in \axiom{lp} + ++ by some polynomial \axiom{qj} associated to \axiom{pj}. + removeRedundantFactors : (LP,LP,(LP -> LP)) -> LP + ++ \axiom{removeRedundantFactors(lp,lq,remOp)} returns the same as + ++ \axiom{concat(remOp(removeRoughlyRedundantFactorsInPols(lp,lq)),lq)} + ++ assuming that \axiom{remOp(lq)} returns \axiom{lq} up to similarity. + certainlySubVariety? : (LP,LP) -> B + ++ \axiom{certainlySubVariety?(newlp,lp)} returns true iff for every \axiom{p} + ++ in \axiom{lp} the remainder of \axiom{p} by \axiom{newlp} using the division algorithm + ++ of Groebner techniques is zero. + possiblyNewVariety? : (LP, List LP) -> B + ++ \axiom{possiblyNewVariety?(newlp,llp)} returns true iff for every \axiom{lp} + ++ in \axiom{llp} certainlySubVariety?(newlp,lp) does not hold. + probablyZeroDim?: LP -> B + ++ \axiom{probablyZeroDim?(lp)} returns true iff the number of polynomials + ++ in \axiom{lp} is not smaller than the number of variables occurring + ++ in these polynomials. + selectPolynomials : ((P -> B),LP) -> Record(goodPols:LP,badPols:LP) + ++ \axiom{selectPolynomials(pred?,ps)} returns \axiom{gps,bps} where + ++ \axiom{gps} is a list of the polynomial \axiom{p} in \axiom{ps} + ++ such that \axiom{pred?(p)} holds and \axiom{bps} are the other ones. + selectOrPolynomials : (List (P -> B),LP) -> Record(goodPols:LP,badPols:LP) + ++ \axiom{selectOrPolynomials(lpred?,ps)} returns \axiom{gps,bps} where + ++ \axiom{gps} is a list of the polynomial \axiom{p} in \axiom{ps} + ++ such that \axiom{pred?(p)} holds for some \axiom{pred?} in \axiom{lpred?} + ++ and \axiom{bps} are the other ones. + selectAndPolynomials : (List (P -> B),LP) -> Record(goodPols:LP,badPols:LP) + ++ \axiom{selectAndPolynomials(lpred?,ps)} returns \axiom{gps,bps} where + ++ \axiom{gps} is a list of the polynomial \axiom{p} in \axiom{ps} + ++ such that \axiom{pred?(p)} holds for every \axiom{pred?} in \axiom{lpred?} + ++ and \axiom{bps} are the other ones. + quasiMonicPolynomials : LP -> Record(goodPols:LP,badPols:LP) + ++ \axiom{quasiMonicPolynomials(lp)} returns \axiom{qmps,nqmps} where + ++ \axiom{qmps} is a list of the quasi-monic polynomials in \axiom{lp} + ++ and \axiom{nqmps} are the other ones. + univariate? : P -> B + ++ \axiom{univariate?(p)} returns true iff \axiom{p} involves one and + ++ only one variable. + univariatePolynomials : LP -> Record(goodPols:LP,badPols:LP) + ++ \axiom{univariatePolynomials(lp)} returns \axiom{ups,nups} where + ++ \axiom{ups} is a list of the univariate polynomials, + ++ and \axiom{nups} are the other ones. + linear? : P -> B + ++ \axiom{linear?(p)} returns true iff \axiom{p} does not lie + ++ in the base ring \axiom{R} and has main degree \axiom{1}. + linearPolynomials : LP -> Record(goodPols:LP,badPols:LP) + ++ \axiom{linearPolynomials(lp)} returns \axiom{lps,nlps} where + ++ \axiom{lps} is a list of the linear polynomials in lp, + ++ and \axiom{nlps} are the other ones. + bivariate? : P -> B + ++ \axiom{bivariate?(p)} returns true iff \axiom{p} involves two and + ++ only two variables. + bivariatePolynomials : LP -> Record(goodPols:LP,badPols:LP) + ++ \axiom{bivariatePolynomials(lp)} returns \axiom{bps,nbps} where + ++ \axiom{bps} is a list of the bivariate polynomials, + ++ and \axiom{nbps} are the other ones. + removeRoughlyRedundantFactorsInPols : (LP, LP) -> LP + ++ \axiom{removeRoughlyRedundantFactorsInPols(lp,lf)} returns + ++ \axiom{newlp}where \axiom{newlp} is obtained from \axiom{lp} + ++ by removing in every polynomial \axiom{p} of \axiom{lp} + ++ any occurence of a polynomial \axiom{f} in \axiom{lf}. + ++ This may involve a lot of exact-quotients computations. + removeRoughlyRedundantFactorsInPols : (LP, LP,B) -> LP + ++ \axiom{removeRoughlyRedundantFactorsInPols(lp,lf,opt)} returns + ++ the same as \axiom{removeRoughlyRedundantFactorsInPols(lp,lf)} + ++ if \axiom{opt} is \axiom{false} and if the previous operation + ++ does not return any non null and constant polynomial, + ++ else return \axiom{[1]}. + removeRoughlyRedundantFactorsInPol : (P,LP) -> P + ++ \axiom{removeRoughlyRedundantFactorsInPol(p,lf)} returns the same as + ++ removeRoughlyRedundantFactorsInPols([p],lf,true) + interReduce: LP -> LP + ++ \axiom{interReduce(lp)} returns \axiom{lq} such that \axiom{lp} + ++ and \axiom{lq} generate the same ideal and no polynomial + ++ in \axiom{lq} is reducuble by the others in the sense + ++ of Groebner bases. Since no assumptions are required + ++ the result may depend on the ordering the reductions are + ++ performed. + roughBasicSet: LP -> Union(Record(bas:T,top:LP),"failed") + ++ \axiom{roughBasicSet(lp)} returns the smallest (with Ritt-Wu + ++ ordering) triangular set contained in \axiom{lp}. + crushedSet: LP -> LP + ++ \axiom{crushedSet(lp)} returns \axiom{lq} such that \axiom{lp} and + ++ and \axiom{lq} generate the same ideal and no rough basic + ++ sets reduce (in the sense of Groebner bases) the other + ++ polynomials in \axiom{lq}. + rewriteSetByReducingWithParticularGenerators : (LP,(P->B),((P,P)->B),((P,P)->P)) -> LP + ++ \axiom{rewriteSetByReducingWithParticularGenerators(lp,pred?,redOp?,redOp)} + ++ returns \axiom{lq} where \axiom{lq} is computed by the following + ++ algorithm. Chose a basic set w.r.t. the reduction-test \axiom{redOp?} + ++ among the polynomials satisfying property \axiom{pred?}, + ++ if it is empty then leave, else reduce the other polynomials by + ++ this basic set w.r.t. the reduction-operation \axiom{redOp}. + ++ Repeat while another basic set with smaller rank can be computed. + ++ See code. If \axiom{pred?} is \axiom{quasiMonic?} the ideal is unchanged. + rewriteIdealWithQuasiMonicGenerators : (LP,((P,P)->B),((P,P)->P)) -> LP + ++ \axiom{rewriteIdealWithQuasiMonicGenerators(lp,redOp?,redOp)} returns + ++ \axiom{lq} where \axiom{lq} and \axiom{lp} generate + ++ the same ideal in \axiom{R^(-1) P} and \axiom{lq} + ++ has rank not higher than the one of \axiom{lp}. + ++ Moreover, \axiom{lq} is computed by reducing \axiom{lp} + ++ w.r.t. some basic set of the ideal generated by + ++ the quasi-monic polynomials in \axiom{lp}. + if R has GcdDomain + then + squareFreeFactors : P -> LP + ++ \axiom{squareFreeFactors(p)} returns the square-free factors of \axiom{p} + ++ over \axiom{R} + univariatePolynomialsGcds : LP -> LP + ++ \axiom{univariatePolynomialsGcds(lp)} returns \axiom{lg} where + ++ \axiom{lg} is a list of the gcds of every pair in \axiom{lp} + ++ of univariate polynomials in the same main variable. + univariatePolynomialsGcds : (LP,B) -> LP + ++ \axiom{univariatePolynomialsGcds(lp,opt)} returns the same as + ++ \axiom{univariatePolynomialsGcds(lp)} if \axiom{opt} is + ++ \axiom{false} and if the previous operation does not return + ++ any non null and constant polynomial, else return \axiom{[1]}. + removeRoughlyRedundantFactorsInContents : (LP, LP) -> LP + ++ \axiom{removeRoughlyRedundantFactorsInContents(lp,lf)} returns + ++ \axiom{newlp}where \axiom{newlp} is obtained from \axiom{lp} + ++ by removing in the content of every polynomial of \axiom{lp} + ++ any occurence of a polynomial \axiom{f} in \axiom{lf}. Moreover, + ++ squares over \axiom{R} are first removed in the content + ++ of every polynomial of \axiom{lp}. + removeRedundantFactorsInContents : (LP, LP) -> LP + ++ \axiom{removeRedundantFactorsInContents(lp,lf)} returns \axiom{newlp} + ++ where \axiom{newlp} is obtained from \axiom{lp} by removing + ++ in the content of every polynomial of \axiom{lp} any non trivial + ++ factor of any polynomial \axiom{f} in \axiom{lf}. Moreover, + ++ squares over \axiom{R} are first removed in the content + ++ of every polynomial of \axiom{lp}. + removeRedundantFactorsInPols : (LP, LP) -> LP + ++ \axiom{removeRedundantFactorsInPols(lp,lf)} returns \axiom{newlp} + ++ where \axiom{newlp} is obtained from \axiom{lp} by removing + ++ in every polynomial \axiom{p} of \axiom{lp} any non trivial + ++ factor of any polynomial \axiom{f} in \axiom{lf}. Moreover, + ++ squares over \axiom{R} are first removed in every + ++ polynomial \axiom{lp}. + if (R has EuclideanDomain) and (R has CharacteristicZero) + then + irreducibleFactors : LP -> LP + ++ \axiom{irreducibleFactors(lp)} returns \axiom{lf} such that if + ++ \axiom{lp = [p1,...,pn]} and \axiom{lf = [f1,...,fm]} then + ++ \axiom{p1*p2*...*pn=0} means \axiom{f1*f2*...*fm=0}, and the \axiom{fi} + ++ are irreducible over \axiom{R} and are pairwise distinct. + lazyIrreducibleFactors : LP -> LP + ++ \axiom{lazyIrreducibleFactors(lp)} returns \axiom{lf} such that if + ++ \axiom{lp = [p1,...,pn]} and \axiom{lf = [f1,...,fm]} then + ++ \axiom{p1*p2*...*pn=0} means \axiom{f1*f2*...*fm=0}, and the \axiom{fi} + ++ are irreducible over \axiom{R} and are pairwise distinct. + ++ The algorithm tries to avoid factorization into irreducible + ++ factors as far as possible and makes previously use of gcd + ++ techniques over \axiom{R}. + removeIrreducibleRedundantFactors : (LP, LP) -> LP + ++ \axiom{removeIrreducibleRedundantFactors(lp,lq)} returns the same + ++ as \axiom{irreducibleFactors(concat(lp,lq))} assuming + ++ that \axiom{irreducibleFactors(lp)} returns \axiom{lp} + ++ up to replacing some polynomial \axiom{pj} in \axiom{lp} + ++ by some polynomial \axiom{qj} associated to \axiom{pj}. + + Implementation == add + + autoRemainder: T -> List(P) + + removeAssociates (lp:LP):LP == + removeDuplicates [primPartElseUnitCanonical(p) for p in lp] + + selectPolynomials (pred?,ps) == + gps : LP := [] + bps : LP := [] + while not empty? ps repeat + p := first ps + ps := rest ps + if pred?(p) + then + gps := cons(p,gps) + else + bps := cons(p,bps) + gps := sort(infRittWu?,gps) + bps := sort(infRittWu?,bps) + [gps,bps] + + selectOrPolynomials (lpred?,ps) == + gps : LP := [] + bps : LP := [] + while not empty? ps repeat + p := first ps + ps := rest ps + clpred? := lpred? + while (not empty? clpred?) and (not (first clpred?)(p)) repeat + clpred? := rest clpred? + if not empty?(clpred?) + then + gps := cons(p,gps) + else + bps := cons(p,bps) + gps := sort(infRittWu?,gps) + bps := sort(infRittWu?,bps) + [gps,bps] + + selectAndPolynomials (lpred?,ps) == + gps : LP := [] + bps : LP := [] + while not empty? ps repeat + p := first ps + ps := rest ps + clpred? := lpred? + while (not empty? clpred?) and ((first clpred?)(p)) repeat + clpred? := rest clpred? + if empty?(clpred?) + then + gps := cons(p,gps) + else + bps := cons(p,bps) + gps := sort(infRittWu?,gps) + bps := sort(infRittWu?,bps) + [gps,bps] + + linear? p == + ground? p => false +-- one?(mdeg(p)) + (mdeg(p) = 1) + + linearPolynomials ps == + selectPolynomials(linear?,ps) + + univariate? p == + ground? p => false + not(ground?(init(p))) => false + tp := tail(p) + ground?(tp) => true + not (mvar(p) = mvar(tp)) => false + univariate?(tp) + + univariatePolynomials ps == + selectPolynomials(univariate?,ps) + + bivariate? p == + ground? p => false + ground? tail(p) => univariate?(init(p)) + vp := mvar(p) + vtp := mvar(tail(p)) + ((ground? init(p)) and (vp = vtp)) => bivariate? tail(p) + ((ground? init(p)) and (vp > vtp)) => univariate? tail(p) + not univariate?(init(p)) => false + vip := mvar(init(p)) + vip > vtp => false + vip = vtp => univariate? tail(p) + vtp < vp => false + zero? degree(tail(p),vip) => univariate? tail(p) + bivariate? tail(p) + + bivariatePolynomials ps == + selectPolynomials(bivariate?,ps) + + quasiMonicPolynomials ps == + selectPolynomials(quasiMonic?,ps) + + removeRoughlyRedundantFactorsInPols (lp,lf,opt) == + empty? lp => lp + newlp : LP := [] + stop : B := false + lp := remove(zero?,lp) + lf := sort(infRittWu?,lf) + test : Union(P,"failed") + while (not empty? lp) and (not stop) repeat + p := first lp + lp := rest lp + copylf := lf + while (not empty? copylf) and (not ground? p) and (not (mvar(p) < mvar(first copylf))) repeat + f := first copylf + copylf := rest copylf + while (((test := p exquo$P f)) case P) repeat + p := test::P + stop := opt and ground?(p) + newlp := cons(unitCanonical(p),newlp) + stop => [1$P] + newlp + + removeRoughlyRedundantFactorsInPol(p,lf) == + zero? p => p + lp : LP := [p] + first removeRoughlyRedundantFactorsInPols (lp,lf,true()$B) + + removeRoughlyRedundantFactorsInPols (lp,lf) == + removeRoughlyRedundantFactorsInPols (lp,lf,false()$B) + + possiblyNewVariety?(newlp,llp) == + while (not empty? llp) and _ + (not certainlySubVariety?(newlp,first(llp))) repeat + llp := rest llp + empty? llp + + certainlySubVariety?(lp,lq) == + gs := construct(lp)$GPS + while (not empty? lq) and _ + (zero? (remainder(first(lq),gs)$GPS).polnum) repeat + lq := rest lq + empty? lq + + probablyZeroDim?(lp: List P) : Boolean == + m := #lp + lv : List V := variables(first lp) + while not empty? (lp := rest lp) repeat + lv := concat(variables(first lp),lv) + n := #(removeDuplicates lv) + not (n > m) + + interReduce(lp: LP): LP == + ps := lp + rs: List(P) := [] + repeat + empty? ps => return rs + ps := sort(supRittWu?, ps) + p := first ps + ps := rest ps + r := remainder(p,[ps]$GPS).polnum + zero? r => "leave" + ground? r => return [] + associates?(r,p) => rs := cons(r,rs) + ps := concat(ps,cons(r,rs)) + rs := [] + + roughRed?(p:P,q:P):B == + ground? p => false + ground? q => true + mvar(p) > mvar(q) + + roughBasicSet(lp) == basicSet(lp,roughRed?)$T + + autoRemainder(ts:T): List(P) == + empty? ts => members(ts) + lp := sort(infRittWu?, reverse members(ts)) + newlp : List(P) := [primPartElseUnitCanonical first(lp)] + lp := rest(lp) + while not empty? lp repeat + p := (remainder(first(lp),construct(newlp)$GPS)$GPS).polnum + if not zero? p + then + if ground? p + then + newlp := [1$P] + lp := [] + else + newlp := cons(p,newlp) + lp := rest(lp) + else + lp := rest(lp) + newlp + + crushedSet(lp) == + rec := roughBasicSet(lp) + contradiction := (rec case "failed")@B + finished : B := false + while (not finished) and (not contradiction) repeat + bs := (rec::RBT).bas + rs := (rec::RBT).top + rs := rewriteIdealWithRemainder(rs,bs)$T +-- contradiction := ((not empty? rs) and (one? first(rs))) + contradiction := ((not empty? rs) and (first(rs) = 1)) + if not contradiction + then + rs := concat(rs,autoRemainder(bs)) + rec := roughBasicSet(rs) + contradiction := (rec case "failed")@B + not contradiction => finished := not infRittWu?((rec::RBT).bas,bs) + contradiction => [1$P] + rs + + rewriteSetByReducingWithParticularGenerators (ps,pred?,redOp?,redOp) == + rs : LP := remove(zero?,ps) + any?(ground?,rs) => [1$P] + contradiction : B := false + bs1 : T := empty()$T + rec : Union(RBT,"failed") + ar : Union(T,List(P)) + stop : B := false + while (not contradiction) and (not stop) repeat + rec := basicSet(rs,pred?,redOp?)$T + bs2 : T := (rec::RBT).bas + rs := (rec::RBT).top + -- ar := autoReduce(bs2,lazyPrem,reduced?)@Union(T,List(P)) + ar := bs2::Union(T,List(P)) + if (ar case T)@B + then + bs2 := ar::T + if infRittWu?(bs2,bs1) + then + rs := rewriteSetWithReduction(rs,bs2,redOp,redOp?)$T + bs1 := bs2 + else + stop := true + rs := concat(members(bs2),rs) + else + rs := concat(ar::LP,rs) + if any?(ground?,rs) + then + contradiction := true + rs := [1$P] + rs + + removeRedundantFactors (lp:LP,lq :LP, remOp : (LP -> LP)) == + -- ASSUME remOp(lp) returns lp up to similarity + lq := removeRoughlyRedundantFactorsInPols(lq,lp,false) + lq := remOp lq + sort(infRittWu?,concat(lp,lq)) + + removeRedundantFactors (lp:LP,lq :LP) == + lq := removeRoughlyRedundantFactorsInPols(lq,lp,false) + lq := removeRedundantFactors lq + sort(infRittWu?,concat(lp,lq)) + + if (R has EuclideanDomain) and (R has CharacteristicZero) + then + irreducibleFactors lp == + newlp : LP := [] + lrrz : List RRZ + rrz : RRZ + fp : FP + while not empty? lp repeat + p := first lp + lp := rest lp + fp := factor(p)$pf + lrrz := factors(fp)$FP + lf := remove(ground?,[rrz.factor for rrz in lrrz]) + newlp := concat(lf,newlp) + removeDuplicates newlp + + lazyIrreducibleFactors lp == + lp := removeRedundantFactors(lp) + newlp : LP := [] + lrrz : List RRZ + rrz : RRZ + fp : FP + while not empty? lp repeat + p := first lp + lp := rest lp + fp := factor(p)$pf + lrrz := factors(fp)$FP + lf := remove(ground?,[rrz.factor for rrz in lrrz]) + newlp := concat(lf,newlp) + newlp + + removeIrreducibleRedundantFactors (lp:LP,lq :LP) == + -- ASSUME lp only contains irreducible factors over R + lq := removeRoughlyRedundantFactorsInPols(lq,lp,false) + lq := irreducibleFactors lq + sort(infRittWu?,concat(lp,lq)) + + if R has GcdDomain + then + + squareFreeFactors(p:P) == + sfp: Factored P := squareFree(p)$P + lsf: List P := [foo.factor for foo in factors(sfp)] + lsf + + univariatePolynomialsGcds (ps,opt) == + lg : LP := [] + pInV : LP + stop : B := false + ps := sort(infRittWu?,ps) + p,g : P + v : V + while (not empty? ps) and (not stop) repeat + while (not empty? ps) and (not univariate?((p := first(ps)))) repeat + ps := rest ps + if not empty? ps + then + v := mvar(p)$P + pInV := [p] + while (not empty? ps) and (mvar((p := first(ps))) = v) repeat + if (univariate?(p)) + then + pInV := cons(p,pInV) + ps := rest ps + g := gcd(pInV)$P + stop := opt and (ground? g) + lg := cons(g,lg) + stop => [1$P] + lg + + univariatePolynomialsGcds ps == + univariatePolynomialsGcds (ps,false) + + removeSquaresIfCan lp == + empty? lp => lp + removeDuplicates [squareFreePart(p)$P for p in lp] + + rewriteIdealWithQuasiMonicGenerators (ps,redOp?,redOp) == + ups := removeSquaresIfCan(univariatePolynomialsGcds(ps,true)) + ps := removeDuplicates concat(ups,ps) + rewriteSetByReducingWithParticularGenerators(ps,quasiMonic?,redOp?,redOp) + + removeRoughlyRedundantFactorsInContents (ps,lf) == + empty? ps => ps + newps : LP := [] + p,newp,cp,newcp,f,g : P + test : Union(P,"failed") + copylf : LP + while not empty? ps repeat + p := first ps + ps := rest ps + cp := mainContent(p)$P + newcp := squareFreePart(cp)$P + newp := (p exquo$P cp)::P + if not ground? newcp + then + copylf := [f for f in lf | mvar(f) <= mvar(newcp)] + while (not empty? copylf) and (not ground? newcp) repeat + f := first copylf + copylf := rest copylf + test := (newcp exquo$P f) + if (test case P)@B + then + newcp := test::P + if ground? newcp + then + newp := unitCanonical(newp) + else + newp := unitCanonical(newp * newcp) + newps := cons(newp,newps) + newps + + removeRedundantFactorsInContents (ps,lf) == + empty? ps => ps + newps : LP := [] + p,newp,cp,newcp,f,g : P + while not empty? ps repeat + p := first ps + ps := rest ps + cp := mainContent(p)$P + newcp := squareFreePart(cp)$P + newp := (p exquo$P cp)::P + if not ground? newcp + then + copylf := lf + while (not empty? copylf) and (not ground? newcp) repeat + f := first copylf + copylf := rest copylf + g := gcd(newcp,f)$P + if not ground? g + then + newcp := (newcp exquo$P g)::P + if ground? newcp + then + newp := unitCanonical(newp) + else + newp := unitCanonical(newp * newcp) + newps := cons(newp,newps) + newps + + removeRedundantFactorsInPols (ps,lf) == + empty? ps => ps + newps : LP := [] + p,newp,cp,newcp,f,g : P + while not empty? ps repeat + p := first ps + ps := rest ps + cp := mainContent(p)$P + newcp := squareFreePart(cp)$P + newp := (p exquo$P cp)::P + newp := squareFreePart(newp)$P + copylf := lf + while not empty? copylf repeat + f := first copylf + copylf := rest copylf + if not ground? newcp + then + g := gcd(newcp,f)$P + if not ground? g + then + newcp := (newcp exquo$P g)::P + if not ground? newp + then + g := gcd(newp,f)$P + if not ground? g + then + newp := (newp exquo$P g)::P + if ground? newcp + then + newp := unitCanonical(newp) + else + newp := unitCanonical(newp * newcp) + newps := cons(newp,newps) + newps + + removeRedundantFactors (a:P,b:P) : LP == + a := primPartElseUnitCanonical(squareFreePart(a)) + b := primPartElseUnitCanonical(squareFreePart(b)) + if not infRittWu?(a,b) + then + (a,b) := (b,a) + if ground? a + then + if ground? b + then + return([]) + else + return([b]) + else + if ground? b + then + return([a]) + else + return(unprotectedRemoveRedundantFactors(a,b)) + + unprotectedRemoveRedundantFactors (a,b) == + c := b exquo$P a + if (c case P)@B + then + d : P := c::P + if ground? d + then + return([a]) + else + return([a,d]) + else + g : P := gcd(a,b)$P + if ground? g + then + return([a,b]) + else + return([g,(a exquo$P g)::P,(b exquo$P g)::P]) + + else + + removeSquaresIfCan lp == + lp + + rewriteIdealWithQuasiMonicGenerators (ps,redOp?,redOp) == + rewriteSetByReducingWithParticularGenerators(ps,quasiMonic?,redOp?,redOp) + + removeRedundantFactors (a:P,b:P) == + a := primPartElseUnitCanonical(a) + b := primPartElseUnitCanonical(b) + if not infRittWu?(a,b) + then + (a,b) := (b,a) + if ground? a + then + if ground? b + then + return([]) + else + return([b]) + else + if ground? b + then + return([a]) + else + return(unprotectedRemoveRedundantFactors(a,b)) + + unprotectedRemoveRedundantFactors (a,b) == + c := b exquo$P a + if (c case P)@B + then + d : P := c::P + if ground? d + then + return([a]) + else + if infRittWu?(d,a) then (a,d) := (d,a) + return(unprotectedRemoveRedundantFactors(a,d)) + else + return([a,b]) + + removeRedundantFactors (lp:LP) == + lp := remove(ground?, lp) + lp := removeDuplicates [primPartElseUnitCanonical(p) for p in lp] + lp := removeSquaresIfCan lp + lp := removeDuplicates [unitCanonical(p) for p in lp] + empty? lp => lp + size?(lp,1$N)$(List P) => lp + lp := sort(infRittWu?,lp) + p : P := first lp + lp := rest lp + base : LP := unprotectedRemoveRedundantFactors(p,first lp) + top : LP := rest lp + while not empty? top repeat + p := first top + base := removeRedundantFactors(base,p) + top := rest top + base + + removeRedundantFactors (lp:LP,a:P) == + lp := remove(ground?, lp) + lp := sort(infRittWu?, lp) + ground? a => lp + empty? lp => [a] + toSee : LP := lp + toSave : LP := [] + while not empty? toSee repeat + b := first toSee + toSee := rest toSee + if not infRittWu?(b,a) + then + (c,d) := (a,b) + else + (c,d) := (b,a) + rrf := unprotectedRemoveRedundantFactors(c,d) + empty? rrf => error"in removeRedundantFactors : (LP,P) -> LP from PSETPK" + c := first rrf + rrf := rest rrf + if empty? rrf + then + if associates?(c,b) + then + toSave := concat(toSave,toSee) + a := b + toSee := [] + else + a := c + toSee := concat(toSave,toSee) + toSave := [] + else + d := first rrf + rrf := rest rrf + if empty? rrf + then + if associates?(c,b) + then + toSave := concat(toSave,[b]) + a := d + else + if associates?(d,b) + then + toSave := concat(toSave,[b]) + a := c + else + toSave := removeRedundantFactors(toSave,c) + a := d + else + e := first rrf + not empty? rest(rrf) => error"in removeRedundantFactors:(LP,P)->LP from PSETPK" + -- ASSUME that neither c, nor d, nor e may be associated to b + toSave := removeRedundantFactors(toSave,c) + toSave := removeRedundantFactors(toSave,d) + a := e + if empty? toSee + then + toSave := sort(infRittWu?,cons(a,toSave)) + toSave + +@ +<>= +"PSETPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PSETPK"] +"RPOLCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=RPOLCAT"] +"PSETPK" -> "RPOLCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package SOLVEFOR PolynomialSolveByFormulas} \pagehead{PolynomialSolveByFormulas}{SOLVEFOR} \pagepic{ps/v104polynomialsolvebyformulas.ps}{SOLVEFOR}{1.00} @@ -75666,6 +81444,152 @@ RationalRicDE(F, UP): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package RURPK RationalUnivariateRepresentationPackage} +\pagehead{RationalUnivariateRepresentationPackage}{RURPK} +\pagepic{ps/v104rationalunivariaterepresentationpackage.ps}{RURPK}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package RURPK RationalUnivariateRepresentationPackage +++ Author: Marc Moreno Maza +++ Date Created: 01/1999 +++ Date Last Updated: 23/01/1999 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Description: +++ A package for computing the rational univariate representation +++ of a zero-dimensional algebraic variety given by a regular +++ triangular set. This package is essentially an interface for the +++ \spadtype{InternalRationalUnivariateRepresentationPackage} constructor. +++ It is used in the \spadtype{ZeroDimensionalSolvePackage} +++ for solving polynomial systems with finitely many solutions. +++ Version: 1. + +RationalUnivariateRepresentationPackage(R,ls): Exports == Implementation where + R : Join(EuclideanDomain,CharacteristicZero) + ls: List Symbol + N ==> NonNegativeInteger + Z ==> Integer + P ==> Polynomial R + LP ==> List P + U ==> SparseUnivariatePolynomial(R) + RUR ==> Record(complexRoots: U, coordinates: LP) + + Exports == with + + rur: (LP,Boolean) -> List RUR + ++ \spad{rur(lp,univ?)} returns a rational univariate representation + ++ of \spad{lp}. This assumes that \spad{lp} defines a regular + ++ triangular \spad{ts} whose associated variety is zero-dimensional + ++ over \spad{R}. \spad{rur(lp,univ?)} returns a list of items + ++ \spad{[u,lc]} where \spad{u} is an irreducible univariate polynomial + ++ and each \spad{c} in \spad{lc} involves two variables: one from \spad{ls}, + ++ called the coordinate of \spad{c}, and an extra variable which + ++ represents any root of \spad{u}. Every root of \spad{u} leads to + ++ a tuple of values for the coordinates of \spad{lc}. Moreover, + ++ a point \spad{x} belongs to the variety associated with \spad{lp} iff + ++ there exists an item \spad{[u,lc]} in \spad{rur(lp,univ?)} and + ++ a root \spad{r} of \spad{u} such that \spad{x} is given by the + ++ tuple of values for the coordinates of \spad{lc} evaluated at \spad{r}. + ++ If \spad{univ?} is \spad{true} then each polynomial \spad{c} + ++ will have a constant leading coefficient w.r.t. its coordinate. + ++ See the example which illustrates the \spadtype{ZeroDimensionalSolvePackage} + ++ package constructor. + rur: (LP) -> List RUR + ++ \spad{rur(lp)} returns the same as \spad{rur(lp,true)} + rur: (LP,Boolean,Boolean) -> List RUR + ++ \spad{rur(lp,univ?,check?)} returns the same as \spad{rur(lp,true)}. + ++ Moreover, if \spad{check?} is \spad{true} then the result is checked. + + Implementation == add + news: Symbol := new()$Symbol + lv: List Symbol := concat(ls,news) + V ==> OrderedVariableList(lv) + Q ==> NewSparseMultivariatePolynomial(R,V) + E ==> IndexedExponents V + TS ==> SquareFreeRegularTriangularSet(R,E,V,Q) + QWT ==> Record(val: Q, tower: TS) + LQWT ==> Record(val: List Q, tower: TS) + polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,Q) + normpack ==> NormalizationPackage(R,E,V,Q,TS) + rurpack ==> InternalRationalUnivariateRepresentationPackage(R,E,V,Q,TS) + newv: V := variable(news)::V + newq : Q := newv :: Q + + rur(lp: List P, univ?: Boolean, check?: Boolean): List RUR == + lp := remove(zero?,lp) + empty? lp => + error "rur$RURPACK: #1 is empty" + any?(ground?,lp) => + error "rur$RURPACK: #1 is not a triangular set" + ts: TS := [[newq]$(List Q)] + lq: List Q := [] + for p in lp repeat + rif: Union(Q,"failed") := retractIfCan(p)$Q + rif case "failed" => + error "rur$RURPACK: #1 is not a subset of R[ls]" + q: Q := rif::Q + lq := cons(q,lq) + lq := sort(infRittWu?,lq) + toSee: List LQWT := [[lq,ts]$LQWT] + toSave: List TS := [] + while not empty? toSee repeat + lqwt := first toSee; toSee := rest toSee + lq := lqwt.val; ts := lqwt.tower + empty? lq => + -- output(ts::OutputForm)$OutputPackage + toSave := cons(ts,toSave) + q := first lq; lq := rest lq + not (mvar(q) > mvar(ts)) => + error "rur$RURPACK: #1 is not a triangular set" + empty? (rest(ts)::TS) => + lfq := irreducibleFactors([q])$polsetpack + for fq in lfq repeat + newts := internalAugment(fq,ts) + newlq := [remainder(q,newts).polnum for q in lq] + toSee := cons([newlq,newts]$LQWT,toSee) + lsfqwt: List QWT := squareFreePart(q,ts) + for qwt in lsfqwt repeat + q := qwt.val; ts := qwt.tower + if not ground? init(q) + then + q := normalizedAssociate(q,ts)$normpack + newts := internalAugment(q,ts) + newlq := [remainder(q,newts).polnum for q in lq] + toSee := cons([newlq,newts]$LQWT,toSee) + toReturn: List RUR := [] + for ts in toSave repeat + lus := rur(ts,univ?)$rurpack + check? and (not checkRur(ts,lus)$rurpack) => + output("RUR for: ")$OutputPackage + output(ts::OutputForm)$OutputPackage + output("Is: ")$OutputPackage + for us in lus repeat output(us::OutputForm)$OutputPackage + error "rur$RURPACK: bad result with function rur$IRURPK" + for us in lus repeat + g: U := univariate(select(us,newv)::Q)$Q + lc: LP := [convert(q)@P for q in parts(collectUpper(us,newv))] + toReturn := cons([g,lc]$RUR, toReturn) + toReturn + + rur(lp: List P, univ?: Boolean): List RUR == + rur(lp,univ?,false) + + rur(lp: List P): List RUR == rur(lp,true) + +@ +<>= +"RURPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=RURPK"] +"SFRTCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SFRTCAT"] +"RURPK" -> "SFRTCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package POLUTIL RealPolynomialUtilitiesPackage} This file describes the Real Closure 1.0 package which consists of different packages, categoris and domains : @@ -79129,6 +85053,54 @@ RepresentationPackage2(R): public == private where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package RESLATC ResolveLatticeCompletion} +\pagehead{ResolveLatticeCompletion}{RESLATC} +\pagepic{ps/v104resolvelatticecompletion.ps}{RESLATC}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package RESLATC ResolveLatticeCompletion +++ Author: Stephen M. Watt +++ Date Created: 1986 +++ Date Last Updated: May 30, 1991 +++ Basic Operations: +++ Related Domains: ErrorFunctions, Exit, Void +++ Also See: +++ AMS Classifications: +++ Keywords: mode, resolve, type lattice +++ Examples: +++ References: +++ Description: +++ This package provides coercions for the special types \spadtype{Exit} +++ and \spadtype{Void}. +ResolveLatticeCompletion(S: Type): with + coerce: S -> Void + ++ coerce(s) throws all information about s away. + ++ This coercion allows values of any type to appear + ++ in contexts where they will not be used. + ++ For example, it allows the resolution of different types in + ++ the \spad{then} and \spad{else} branches when an \spad{if} + ++ is in a context where the resulting value is not used. + coerce: Exit -> S + ++ coerce(e) is never really evaluated. This coercion is + ++ used for formal type correctness when a function will not + ++ return directly to its caller. + == add + coerce(s: S): Void == void() + coerce(e: Exit): S == + error "Bug: Should not be able to obtain value of type Exit" + +@ +<>= +"RESLATC" [color="#FF4488",href="bookvol10.4.pdf#nameddest=RESLATC"] +"TYPE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=TYPE"] +"RESLATC" -> "TYPE" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package RETSOL RetractSolvePackage} \pagehead{RetractSolvePackage}{RETSOL} \pagepic{ps/v104retractsolvepackage.ps}{RETSOL}{1.00} @@ -84650,6 +90622,148 @@ SymmetricFunctions(R:Ring): Exports == Implementation where %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter T} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package TABLBUMP TableauxBumpers} +\pagehead{TableauxBumpers}{TABLBUMP} +\pagepic{ps/v104tableauxbumpers.ps}{TABLBUMP}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package TABLBUMP TableauxBumpers +++ Author: William H. Burge +++ Date Created: 1987 +++ Date Last Updated: 23 Sept 1991 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: Young tableau +++ References: +++ Description: +++ TableauBumpers implements the Schenstead-Knuth +++ correspondence between sequences and pairs of Young tableaux. +++ The 2 Young tableaux are represented as a single tableau with +++ pairs as components. +TableauxBumpers(S:OrderedSet):T==C where + L==>List + ST==>Stream + B==>Boolean + ROW==>Record(fs:B,sd:L S,td:L L S) + RC==>Record(f1:L S,f2:L L L S,f3:L L S,f4:L L L S) + PAIR==>L S + T== with + bumprow:((S,S)->B,PAIR,L PAIR)->ROW + ++ bumprow(cf,pr,r) is an auxiliary function which + ++ bumps a row r with a pair pr + ++ using comparison function cf, and returns a record + bumptab:((S,S)->B,PAIR,L L PAIR)->L L PAIR + ++ bumptab(cf,pr,t) bumps a tableau t with a pair pr + ++ using comparison function cf, returning a new tableau + bumptab1:(PAIR,L L PAIR)->L L PAIR + ++ bumptab1(pr,t) bumps a tableau t with a pair pr + ++ using comparison function \spadfun{<}, + ++ returning a new tableau + untab: (L PAIR,L L PAIR)->L PAIR + ++ untab(lp,llp) is an auxiliary function + ++ which unbumps a tableau llp, + ++ using lp to accumulate pairs + bat1:L L PAIR->L PAIR + ++ bat1(llp) unbumps a tableau llp. + ++ Operation bat1 is the inverse of tab1. + bat:Tableau(L S)->L L S + ++ bat(ls) unbumps a tableau ls + tab1:L PAIR->L L PAIR + ++ tab1(lp) creates a tableau from a list of pairs lp + tab:L S->Tableau(L S) + ++ tab(ls) creates a tableau from ls by first creating + ++ a list of pairs using \spadfunFrom{slex}{TableauBumpers}, + ++ then creating a tableau using \spadfunFrom{tab1}{TableauBumpers}. + lex:L PAIR->L PAIR + ++ lex(ls) sorts a list of pairs to lexicographic order + slex:L S->L PAIR + ++ slex(ls) sorts the argument sequence ls, then + ++ zips (see \spadfunFrom{map}{ListFunctions3}) the + ++ original argument sequence with the sorted result to + ++ a list of pairs + inverse:L S->L S + ++ inverse(ls) forms the inverse of a sequence ls + maxrow:(PAIR,L L PAIR,L PAIR,L L PAIR,L L PAIR,L L PAIR)->RC + ++ maxrow(a,b,c,d,e) is an auxiliary function for mr + mr:L L PAIR->RC + ++ mr(t) is an auxiliary function which + ++ finds the position of the maximum element of a tableau t + ++ which is in the lowest row, producing a record of results + C== add + cf:(S,S)->B + bumprow(cf,x:(PAIR),lls:(L PAIR))== + if null lls + then [false,x,[x]]$ROW + else (y:(PAIR):=first lls; + if cf(x.2,y.2) + then [true,[x.1,y.2],cons([y.1,x.2],rest lls)]$ROW + else (rw:ROW:=bumprow(cf,x,rest lls); + [rw.fs,rw.sd,cons(first lls,rw.td)]$ROW )) + + bumptab(cf,x:(PAIR),llls:(L L PAIR))== + if null llls + then [[x]] + else (rw:ROW:= bumprow(cf,x,first llls); + if rw.fs + then cons(rw.td, bumptab(cf,rw.sd,rest llls)) + else cons(rw.td,rest llls)) + + bumptab1(x,llls)==bumptab(#1<#2,x,llls) + + rd==> reduce$StreamFunctions2(PAIR,L L PAIR) + tab1(lls:(L PAIR))== rd([],bumptab1,lls::(ST PAIR)) + + srt==>sort$(PAIR) + lexorder:(PAIR,PAIR)->B + lexorder(p1,p2)==if p1.1=p2.1 then p1.2n.1 + then maxrow(fst,d,rst,rest llls,cons(first llls,d),rest llls) + else maxrow(n,a,b,c,cons(first llls,d),rest llls)) + + mr llls==maxrow(first first llls,[],rest first llls,rest llls, + [],llls) + + untab(lp, llls)== + if null llls + then lp + else (rc:RC:=mr llls; + rv:=reverse (bumptab(#2<#1,rc.f1,rc.f2)); + untab(cons(first first rv,lp) + ,append(rest rv, + if null rc.f3 + then [] + else cons(rc.f3,rc.f4)))) + + bat1 llls==untab([],[reverse lls for lls in llls]) + bat tb==bat1(listOfLists tb) + +@ +<>= +"TABLBUMP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=TABLBUMP"] +"FLAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FLAGG"] +"FLAGG-" [color="#88FF44",href="bookvol10.3.pdf#nameddest=FLAGG"] +"TABLBUMP" -> "FLAGG-" +"TABLBUMP" -> "FLAGG" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package TBCMPPK TabulatedComputationPackage} \pagehead{TabulatedComputationPackage}{TBCMPPK} \pagepic{ps/v104tabulatedcomputationpackage.ps}{TBCMPPK}{1.00} @@ -85075,6 +91189,55 @@ TemplateUtilities(): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package TEX1 TexFormat1} +\pagehead{TexFormat1}{TEX1} +\pagepic{ps/v104texformat1.ps}{TEX1}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package TEX1 TexFormat1 +++ Author: Robert S. Sutor +++ Date Created: 1987 through 1990 +++ Change History: +++ Basic Operations: coerce +++ Related Constructors: TexFormat +++ Also See: ScriptFormulaFormat, ScriptFormulaFormat1 +++ AMS Classifications: +++ Keywords: TeX, output, format +++ References: \TeX{} is a trademark of the American Mathematical +++ Society. +++ Description: +++ \spadtype{TexFormat1} provides a utility coercion for changing +++ to TeX format anything that has a coercion to the standard output +++ format. + +TexFormat1(S : SetCategory): public == private where + public == with + coerce: S -> TexFormat() + ++ coerce(s) provides a direct coercion from a domain S to + ++ TeX format. This allows the user to skip the step of first + ++ manually coercing the object to standard output format before + ++ it is coerced to TeX format. + + private == add + import TexFormat() + + coerce(s : S): TexFormat == + coerce(s :: OutputForm)$TexFormat + +@ +<>= +"TEX1" [color="#FF4488",href="bookvol10.4.pdf#nameddest=TEX1"] +"BASTYPE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=BASTYPE"] +"KOERCE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=KOERCE"] +"TEX1" -> "BASTYPE" +"TEX1" -> "KOERCE" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package TOOLSIGN ToolsForSign} \pagehead{ToolsForSign}{TOOLSIGN} \pagepic{ps/v104toolsforsign.ps}{TOOLSIGN}{1.00} @@ -87782,6 +93945,673 @@ TranscendentalRischDESystem(F, UP): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package SOLVETRA TransSolvePackage} +\pagehead{TransSolvePackage}{SOLVETRA} +\pagepic{ps/v104transsolvepackage.ps}{SOLVETRA}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package SOLVETRA TransSolvePackage +++ Author: W. Wiwianka, Martin Rubey +++ Date Created: Summer 1991 +++ Change History: 9/91 +++ Basic Operations: solve +++ Related Constructors: RadicalSolvePackage, FloatingRealPackage +++ Keywords: +++ Description: +++ This package tries to find solutions of equations of type Expression(R). +++ This means expressions involving transcendental, exponential, logarithmic +++ and nthRoot functions. +++ After trying to transform different kernels to one kernel by applying +++ several rules, it calls zerosOf for the SparseUnivariatePolynomial in +++ the remaining kernel. +++ For example the expression \spad{sin(x)*cos(x)-2} will be transformed to +++ \spad{-2 tan(x/2)**4 -2 tan(x/2)**3 -4 tan(x/2)**2 +2 tan(x/2) -2} +++ by using the function normalize and then to +++ \spad{-2 tan(x)**2 + tan(x) -2} +++ with help of subsTan. This function tries to express the given function +++ in terms of \spad{tan(x/2)} to express in terms of \spad{tan(x)} . +++ Other examples are the expressions \spad{sqrt(x+1)+sqrt(x+7)+1} or +++ \spad{sqrt(sin(x))+1} . + + +TransSolvePackage(R) : Exports == Implementation where + R : Join(OrderedSet, EuclideanDomain, RetractableTo Integer, + LinearlyExplicitRingOver Integer, CharacteristicZero) + + I ==> Integer + NNI ==> NonNegativeInteger + RE ==> Expression R + EQ ==> Equation + S ==> Symbol + V ==> Variable + L ==> List + K ==> Kernel RE + SUP ==> SparseUnivariatePolynomial + C ==> Complex + F ==> Float + INT ==> Interval + SMP ==> SparseMultivariatePolynomial + + + Exports == with + + solve : RE -> L EQ RE + ++ solve(expr) finds the solutions of the equation expr = 0 + ++ where expr is a function of type Expression(R) + ++ with respect to the unique symbol x appearing in eq. + solve : EQ RE -> L EQ RE + ++ solve(eq) finds the solutions of the equation eq + ++ where eq is an equation of functions of type Expression(R) + ++ with respect to the unique symbol x appearing in eq. + solve : ( EQ RE , S ) -> L EQ RE + ++ solve(eq,x) finds the solutions of the equation eq + ++ where eq is an equation of functions of type Expression(R) + ++ with respect to the symbol x. + solve : ( RE , S) -> L EQ RE + ++ solve(expr,x) finds the solutions of the equation expr = 0 + ++ with respect to the symbol x where expr is a function + ++ of type Expression(R). + solve : (L EQ RE, L S) -> L L EQ RE + ++ solve(leqs, lvar) returns a list of solutions to the list of + ++ equations leqs with respect to the list of symbols lvar. +-- solve : (L EQ RE, L Kernel RE) -> L L EQ RE +-- ++ solve(leqs, lker) returns a list of solutions to the list +-- ++ of equations leqs with respect to the list of kernels lker. + + Implementation == add + import ACF + import HomogeneousAggregate(R) + import AlgebraicManipulations(R, RE) + import TranscendentalManipulations(R, RE) + import TrigonometricManipulations(R, RE) + import ElementaryFunctionStructurePackage(R, RE) + import SparseUnivariatePolynomial(R) + import LinearSystemMatrixPackage(RE,Vector RE,Vector RE,Matrix RE) + import TransSolvePackageService(R) + import MultivariateFactorize(K, IndexedExponents K, R, SMP(R, K)) + + + + ---- Local Function Declarations ---- + + solveInner : (RE, S) -> L EQ RE + tryToTrans : ( RE , S) -> RE + + eliminateKernRoot: (RE , K) -> RE + eliminateRoot: (RE , S) -> RE + + combineLog : ( RE , S ) -> RE + testLog : ( RE , S ) -> Boolean + splitExpr : ( RE ) -> L RE + buildnexpr : ( RE , S ) -> L RE + logsumtolog : RE -> RE + logexpp : ( RE , RE ) -> RE + + testRootk : ( RE, S) -> Boolean + testkernel : ( RE , S ) -> Boolean + funcinv : ( RE , RE ) -> Union(RE,"failed") + testTrig : ( RE , S ) -> Boolean + testHTrig : ( RE , S ) -> Boolean + tableXkernels : ( RE , S ) -> L RE + subsTan : ( RE , S ) -> RE + + + -- exported functions + + + solve(oside: RE) : L EQ RE == + zero? oside => error "equation is always satisfied" + lv := variables oside + empty? lv => error "inconsistent equation" + #lv>1 => error "too many variables" + solve(oside,lv.first) + + solve(equ:EQ RE) : L EQ RE == + solve(lhs(equ)-rhs(equ)) + + solve(equ:EQ RE, x:S) : L EQ RE == + oneside:=lhs(equ)-rhs(equ) + solve(oneside,x) + + testZero?(lside:RE,sol:EQ RE):Boolean == + if R has QuotientFieldCategory(Integer) then + retractIfCan(rhs sol)@Union(Integer,"failed") case "failed" => true + else + retractIfCan(rhs sol)@Union(Fraction Integer,"failed") case "failed" => true + zero? eval(lside,sol) => true + false + + solve(lside: RE, x:S) : L EQ RE == + [sol for sol in solveInner(lside,x) | testZero?(lside,sol)] + + solveInner(lside: RE, x:S) : L EQ RE == + lside:=eliminateRoot(lside,x) + ausgabe1:=tableXkernels(lside,x) + + X:=new()@Symbol + Y:=new()@Symbol::RE + (#ausgabe1) = 1 => + bigX:= (first ausgabe1)::RE + eq1:=eval(lside,bigX=(X::RE)) + -- Type : Expression R + f:=univariate(eq1,first kernels (X::RE)) + -- Type : Fraction SparseUnivariatePolynomial Expression R + lfatt:= factors factorPolynomial numer f + lr:L RE := "append" /[zerosOf(fatt.factor,x) for fatt in lfatt] + -- Type : List Expression R + r1:=[]::L RE + for i in 1..#lr repeat + finv := funcinv(bigX,lr(i)) + if finv case RE then r1:=cons(finv::RE,r1) + bigX_back:=funcinv(bigX,bigX)::RE + if not testkernel(bigX_back,x) then + if bigX = bigX_back then return []::L EQ RE + return + "append"/[solve(bigX_back-ri, x) for ri in r1] + newlist:=[]::L EQ RE + + for i in 1..#r1 repeat + elR := eliminateRoot((numer(bigX_back - r1(i))::RE ),x) + f:=univariate(elR, kernel(x)) + -- Type : Fraction SparseUnivariatePolynomial Expression R + lfatt:= factors factorPolynomial numer f + secondsol:="append" /[zerosOf(ff.factor,x) for ff in lfatt] + for j in 1..#secondsol repeat + newlist:=cons((x::RE)=rootSimp( secondsol(j) ),newlist) + newlist + newlside:=tryToTrans(lside,x) ::RE + listofkernels:=tableXkernels(newlside,x) + (#listofkernels) = 1 => solve(newlside,x) + lfacts := factors factor(numer lside) + #lfacts > 1 => + sols : L EQ RE := [] + for frec in lfacts repeat + sols := append(solve(frec.factor :: RE, x), sols) + sols + return []::L EQ RE + + -- local functions + + -- This function was suggested by Manuel Bronstein as a simpler + -- alternative to normalize. + simplifyingLog(f:RE):RE == + (u:=isExpt(f,"exp"::Symbol)) case Record(var:Kernel RE,exponent:Integer) => + rec := u::Record(var:Kernel RE,exponent:Integer) + rec.exponent * first argument(rec.var) + log f + + + testkernel(var1:RE,y:S) : Boolean == + var1:=eliminateRoot(var1,y) + listvar1:=tableXkernels(var1,y) + if (#listvar1 = 1) and ((listvar1(1) = (y::RE))@Boolean ) then + true + else if #listvar1 = 0 then true + else false + + solveRetract(lexpr:L RE, lvar:L S):Union(L L EQ RE, "failed") == + nlexpr : L Fraction Polynomial R := [] + for expr in lexpr repeat + rf:Union(Fraction Polynomial R, "failed") := retractIfCan(expr)$RE + rf case "failed" => return "failed" + nlexpr := cons(rf, nlexpr) + radicalSolve(nlexpr, lvar)$RadicalSolvePackage(R) + + tryToTrans(lside: RE, x:S) : RE == + if testTrig(lside,x) or testHTrig(lside,x) then + convLside:=( simplify(lside) )::RE + resultLside:=convLside + listConvLside:=tableXkernels(convLside,x) + if (#listConvLside) > 1 then + NormConvLside:=normalize(convLside,x) + NormConvLside:=( NormConvLside ) :: RE + resultLside:=subsTan(NormConvLside , x) + + else if testLog(lside,x) then + numlside:=numer(lside)::RE + resultLside:=combineLog(numlside,x) + else + NormConvLside:=normalize(lside,x) + NormConvLside:=( NormConvLside ) :: RE + resultLside:=NormConvLside + listConvLside:=tableXkernels(NormConvLside,x) + if (#listConvLside) > 1 then + cnormConvLside:=complexNormalize(lside,x) + cnormConvLside:=cnormConvLside::RE + resultLside:=cnormConvLside + listcnorm:=tableXkernels(cnormConvLside,x) + if (#listcnorm) > 1 then + if testLog(cnormConvLside,x) then + numlside:=numer(cnormConvLside)::RE + resultLside:=combineLog(numlside,x) + resultLside + + + subsTan(exprvar:RE,y:S) : RE == + Z:=new()@Symbol + listofkern:=tableXkernels(exprvar,y) + varkern:=(first listofkern)::RE + Y:=(numer first argument first (kernels(varkern)))::RE + test : Boolean := varkern=tan(((Y::RE)/(2::RE))::RE) + if not( (#listofkern=1) and test) then + return exprvar + fZ:=eval(exprvar,varkern=(Z::RE)) + fN:=(numer fZ)::RE + f:=univariate(fN, first kernels(Z::RE)) + secondfun:=(-2*(Y::RE)/((Y::RE)**2-1) )::RE + g:=univariate(secondfun,first kernels(y::RE)) + H:=(new()@Symbol)::RE + newH:=univariate(H,first kernels(Z::RE)) + result:=decomposeFunc(f,g,newH) + if not ( result = f ) then + result1:=result( H::RE ) + resultnew:=eval(result1,H=(( tan((Y::RE))::RE ) )) + else return exprvar + + + eliminateKernRoot(var: RE, varkern: K) : RE == + X:=new()@Symbol + var1:=eval(var, (varkern::RE)=(X::RE) ) + var2:=numer univariate(var1, first kernels(X::RE)) + var3:= monomial(1, ( retract( second argument varkern)@I )::NNI)@SUP RE_ + - monomial(first argument varkern, 0::NNI)@SUP RE + resultvar:=resultant(var2, var3) + + eliminateRoot(var:RE, y:S) : RE == + var1:=var + while testRootk(var1,y) repeat + varlistk1:=tableXkernels(var1,y) + for i in varlistk1 repeat + if is?(i, "nthRoot"::S) then + var1:=eliminateKernRoot(var1,first kernels(i::RE)) + var1 + + + logsumtolog(var:RE) : RE == + (listofexpr:=isPlus(var)) case "failed" => var + listofexpr:= listofexpr ::L RE + listforgcd:=[]::L R + for i in listofexpr repeat + exprcoeff:=leadingCoefficient(numer(i)) + listforgcd:=cons(exprcoeff, listforgcd) + gcdcoeff:=gcd(listforgcd)::RE + newexpr:RE :=0 + for i in listofexpr repeat + exprlist:=splitExpr(i::RE) + newexpr:=newexpr + logexpp(exprlist.2, exprlist.1/gcdcoeff) + kernelofvar:=kernels(newexpr) + var2:=1::RE + for i in kernelofvar repeat + var2:=var2*(first argument i) + gcdcoeff * log(var2) + + + testLog(expr:RE,Z:S) : Boolean == + testList:=[log]::L S + kernelofexpr:=tableXkernels(expr,Z) + if #kernelofexpr = 0 then + return false + for i in kernelofexpr repeat + if not member?(name(first kernels(i)),testList) or _ + not testkernel( (first argument first kernels(i)) ,Z) then + return false + true + + splitExpr(expr:RE) : L RE == + lcoeff:=leadingCoefficient((numer expr)) + exprwcoeff:=expr + listexpr:=isTimes(exprwcoeff) + if listexpr case "failed" then + [1::RE , expr] + else + listexpr:=remove_!(lcoeff::RE , listexpr) + cons(lcoeff::RE , listexpr) + + buildnexpr(expr:RE, Z:S) : L RE == + nlist:=splitExpr(expr) + n2list:=remove_!(nlist.1, nlist) + anscoeff:RE:=1 + ansmant:RE:=0 + for i in n2list repeat + if freeOf?(i::RE,Z) then + anscoeff:=(i::RE)*anscoeff + else + ansmant:=(i::RE) + [anscoeff, ansmant * nlist.1 ] + + logexpp(expr1:RE, expr2:RE) : RE == + log( (first argument first kernels(expr1))**expr2 ) + + combineLog(expr:RE,Y:S) : RE == + exprtable:Table(RE,RE):=table() + (isPlus(expr)) case "failed" => expr + ans:RE:=0 + while expr ^= 0 repeat + loopexpr:RE:=leadingMonomial(numer(expr))::RE + if testLog(loopexpr,Y) and (#tableXkernels(loopexpr,Y)=1) then + exprr:=buildnexpr(loopexpr,Y) + if search(exprr.1,exprtable) case "failed" then + exprtable.(exprr.1):=0 + exprtable.(exprr.1):= exprtable.(exprr.1) + exprr.2 + else + ans:=ans+loopexpr + expr:=(reductum(numer expr))::RE + ansexpr:RE:=0 + for i in keys(exprtable) repeat + ansexpr:=ansexpr + logsumtolog(exprtable.i) * (i::RE) + ansexpr:=ansexpr + ans + + + testRootk(varlistk:RE,y:S) : Boolean == + testList:=[nthRoot]::L S + kernelofeqnvar:=tableXkernels(varlistk,y) + if #kernelofeqnvar = 0 then + return false + for i in kernelofeqnvar repeat + if member?(name(first kernels(i)),testList) then + return true + false + + tableXkernels(evar:RE,Z:S) : L RE == + kOfvar:=kernels(evar) + listkOfvar:=[]::L RE + for i in kOfvar repeat + if not freeOf?(i::RE,Z) then + listkOfvar:=cons(i::RE,listkOfvar) + listkOfvar + + testTrig(eqnvar:RE,Z:S) : Boolean == + testList:=[sin , cos , tan , cot , sec , csc]::L S + kernelofeqnvar:=tableXkernels(eqnvar,Z) + if #kernelofeqnvar = 0 then + return false + for i in kernelofeqnvar repeat + if not member?(name(first kernels(i)),testList) or _ + not testkernel( (first argument first kernels(i)) ,Z) then + return false + true + + + testHTrig(eqnvar:RE,Z:S) : Boolean == + testList:=[sinh , cosh , tanh , coth , sech , csch]::L S + kernelofeqnvar:=tableXkernels(eqnvar,Z) + if #kernelofeqnvar = 0 then + return false + for i in kernelofeqnvar repeat + if not member?(name(first kernels(i)),testList) or _ + not testkernel( (first argument first kernels(i)) ,Z) then + return false + true + + -- Auxiliary local function for use in funcinv. + makeInterval(l:R):C INT F == + if R has complex and R has ConvertibleTo(C F) then + map(interval$INT(F),convert(l)$R)$ComplexFunctions2(F,INT F) + else + error "This should never happen" + + funcinv(k:RE,l:RE) : Union(RE,"failed") == + is?(k, "sin"::Symbol) => asin(l) + is?(k, "cos"::Symbol) => acos(l) + is?(k, "tan"::Symbol) => atan(l) + is?(k, "cot"::Symbol) => acot(l) + is?(k, "sec"::Symbol) => + l = 0 => "failed" + asec(l) + is?(k, "csc"::Symbol) => + l = 0 => "failed" + acsc(l) + is?(k, "sinh"::Symbol) => asinh(l) + is?(k, "cosh"::Symbol) => acosh(l) + is?(k, "tanh"::Symbol) => atanh(l) + is?(k, "coth"::Symbol) => acoth(l) + is?(k, "sech"::Symbol) => asech(l) + is?(k, "csch"::Symbol) => acsch(l) + is?(k, "atan"::Symbol) => tan(l) + is?(k, "acot"::Symbol) => + l = 0 => "failed" + cot(l) + is?(k, "asin"::Symbol) => sin(l) + is?(k, "acos"::Symbol) => cos(l) + is?(k, "asec"::Symbol) => sec(l) + is?(k, "acsc"::Symbol) => + l = 0 => "failed" + csc(l) + is?(k, "asinh"::Symbol) => sinh(l) + is?(k, "acosh"::Symbol) => cosh(l) + is?(k, "atanh"::Symbol) => tanh(l) + is?(k, "acoth"::Symbol) => + l = 0 => "failed" + coth(l) + is?(k, "asech"::Symbol) => sech(l) + is?(k, "acsch"::Symbol) => + l = 0 => "failed" + csch(l) + is?(k, "exp"::Symbol) => + l = 0 => "failed" + simplifyingLog l + is?(k, "log"::Symbol) => + if R has complex and R has ConvertibleTo(C F) then + -- We will check to see if the imaginary part lies in [-Pi,Pi) + ze : Expression C INT F + ze := map(makeInterval,l)$ExpressionFunctions2(R,C INT F) + z : Union(C INT F,"failed") := retractIfCan ze + z case "failed" => exp l + im := imag z + fpi : Float := pi() + (-fpi < inf(im)) and (sup(im) <= fpi) => exp l + "failed" + else -- R not Complex or something which doesn't map to Complex Floats + exp l + is?(k, "%power"::Symbol) => + (t:=normalize(l)) = 0 => "failed" + log t + l + + import SystemSolvePackage(RE) + + ker2Poly(k:Kernel RE, lvar:L S):Polynomial RE == + member?(nm:=name k, lvar) => nm :: Polynomial RE + k :: RE :: Polynomial RE + + smp2Poly(pol:SMP(R,Kernel RE), lvar:L S):Polynomial RE == + map(ker2Poly(#1, lvar), + #1::RE::Polynomial RE, pol)$PolynomialCategoryLifting( + IndexedExponents Kernel RE, Kernel RE, R, SMP(R, Kernel RE), + Polynomial RE) + + makeFracPoly(expr:RE, lvar:L S):Fraction Polynomial RE == + smp2Poly(numer expr, lvar) / smp2Poly(denom expr, lvar) + + makeREpol(pol:Polynomial RE):RE == + lvar := variables pol + lval : List RE := [v::RE for v in lvar] + ground eval(pol,lvar,lval) + + makeRE(frac:Fraction Polynomial RE):RE == + makeREpol(numer frac)/makeREpol(denom frac) + + solve1Pol(pol:Polynomial RE, var: S, sol:L EQ RE):L L EQ RE == + repol := eval(makeREpol pol, sol) + vsols := solve(repol, var) + [cons(vsol, sol) for vsol in vsols] + + solve1Sys(plist:L Polynomial RE, lvar:L S):L L EQ RE == + rplist := reverse plist + rlvar := reverse lvar + sols : L L EQ RE := list(empty()) + for p in rplist for v in rlvar repeat + sols := "append"/[solve1Pol(p,v,sol) for sol in sols] + sols + +@ +The input +\begin{verbatim} + solve(sinh(z)=cosh(z),z) +\end{verbatim} +generates the error (reported as bug \# 102): +\begin{verbatim} + >> Error detected within library code: + No identity element for reduce of empty list using operation append +\end{verbatim} +<>= + + solveList(lexpr:L RE, lvar:L S):L L EQ RE == + ans1 := solveRetract(lexpr, lvar) + not(ans1 case "failed") => ans1 :: L L EQ RE + lfrac:L Fraction Polynomial RE := + [makeFracPoly(expr, lvar) for expr in lexpr] + trianglist := triangularSystems(lfrac, lvar) +-- "append"/[solve1Sys(plist, lvar) for plist in trianglist] + l: L L L EQ RE := [solve1Sys(plist, lvar) for plist in trianglist] + reduce(append, l, []) + + solve(leqs:L EQ RE, lvar:L S):L L EQ RE == + lexpr:L RE := [lhs(eq)-rhs(eq) for eq in leqs] + solveList(lexpr, lvar) + +-- solve(leqs:L EQ RE, lker:L Kernel RE):L L EQ RE == +-- lexpr:L RE := [lhs(eq)-rhs(eq) for eq in leqs] +-- lvar :L S := [new()$S for k in lker] +-- lval :L RE := [kernel v for v in lvar] +-- nlexpr := [eval(expr,lker,lval) for expr in lexpr] +-- ans := solveList(nlexpr, lvar) +-- lker2 :L Kernel RE := [v::Kernel(RE) for v in lvar] +-- lval2 := [k::RE for k in lker] +-- [[map(eval(#1,lker2,lval2), neq) for neq in sol] for sol in ans] + +@ +<>= +"SOLVETRA" [color="#FF4488",href="bookvol10.4.pdf#nameddest=SOLVETRA"] +"FS" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FS"] +"SOLVETRA" -> "FS" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package SOLVESER TransSolvePackageService} +\pagehead{TransSolvePackageService}{SOLVESER} +\pagepic{ps/v104transsolvepackageservice.ps}{SOLVESER}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package SOLVESER TransSolvePackageService +++ Author: W. Wiwianka +++ Date Created: Summer 1991 +++ Change History: 9/91 +++ Basic Operations: decomposeFunc, unvectorise +++ Related Constructors: +++ Keywords: +++ Description: This package finds the function func3 where func1 and func2 +++ are given and func1 = func3(func2) . If there is no solution then +++ function func1 will be returned. +++ An example would be \spad{func1:= 8*X**3+32*X**2-14*X ::EXPR INT} and +++ \spad{func2:=2*X ::EXPR INT} convert them via univariate +++ to FRAC SUP EXPR INT and then the solution is \spad{func3:=X**3+X**2-X} +++ of type FRAC SUP EXPR INT +TransSolvePackageService(R) : Exports == Implementation where + R : Join(IntegralDomain, OrderedSet) + + RE ==> Expression R + EQ ==> Equation + S ==> Symbol + V ==> Variable + L ==> List + SUP ==> SparseUnivariatePolynomial + ACF ==> AlgebraicallyClosedField() + + + Exports == with + + decomposeFunc : ( Fraction SUP RE , Fraction SUP RE, Fraction SUP RE ) -> Fraction SUP RE + ++ decomposeFunc(func1, func2, newvar) returns a function func3 where + ++ func1 = func3(func2) and expresses it in the new variable newvar. + ++ If there is no solution then func1 will be returned. + unvectorise : ( Vector RE , Fraction SUP RE , Integer ) -> Fraction SUP RE + ++ unvectorise(vect, var, n) returns + ++ \spad{vect(1) + vect(2)*var + ... + vect(n+1)*var**(n)} where + ++ vect is the vector of the coefficients of the polynomail , var + ++ the new variable and n the degree. + + + Implementation == add + import ACF + import TranscendentalManipulations(R, RE) + import ElementaryFunctionStructurePackage(R, RE) + import SparseUnivariatePolynomial(R) + import LinearSystemMatrixPackage(RE,Vector RE,Vector RE,Matrix RE) + import HomogeneousAggregate(R) + + ---- Local Function Declarations ---- + + subsSolve : ( SUP RE, NonNegativeInteger, SUP RE, SUP RE, Integer, Fraction SUP RE) -> Union(SUP RE , "failed" ) + --++ subsSolve(f, degf, g1, g2, m, h) + + + -- exported functions + + + unvectorise(vect:Vector RE, var:Fraction SUP RE,n:Integer) : Fraction SUP RE == + Z:=new()@Symbol + polyvar: Fraction SUP RE :=0 + for i in 1..((n+1)::Integer) repeat + vecti:=univariate(vect( i ),first kernels(Z::RE)) + polyvar:=polyvar + ( vecti )*( var )**( (n-i+1)::NonNegativeInteger ) + polyvar + + + decomposeFunc(exprf:Fraction SUP RE , exprg:Fraction SUP RE, newH:Fraction SUP RE ) : Fraction SUP RE == + X:=new()@Symbol + f1:=numer(exprf) + f2:=denom(exprf) + g1:=numer(exprg) + g2:=denom(exprg) + degF:=max(degree(numer(exprf)),degree(denom(exprf))) + degG:=max(degree(g1),degree(g2)) + newF1,newF2 : Union(SUP RE, "failed") + N:= degF exquo degG + if not ( N case "failed" ) then + m:=N::Integer + newF1:=subsSolve(f1,degF,g1,g2,m,newH) + if f2 = 1 then + newF2:= 1 :: SUP RE + else newF2:=subsSolve(f2,degF,g1,g2,m,newH) + if ( not ( newF1 case "failed" ) ) and ( not ( newF2 case "failed" ) ) then + newF:=newF1/newF2 + else return exprf + else return exprf + + + -- local functions + + + subsSolve(F:SUP RE, DegF:NonNegativeInteger, G1:SUP RE, G2:SUP RE, M:Integer, HH: Fraction SUP RE) : Union(SUP RE , "failed" ) == + coeffmat:=new((DegF+1),1,0)@Matrix RE + for i in 0..M repeat + coeffmat:=horizConcat(coeffmat, (vectorise( ( ( G1**((M-i)::NonNegativeInteger) )*G2**i ), (DegF+1) )::Matrix RE) ) + vec:= vectorise(F,DegF+1) + coeffma:=subMatrix(coeffmat,1,(DegF+1),2,(M+2)) + solvar:=solve(coeffma,vec) + if not ( solvar.particular case "failed" ) then + solvevarlist:=(solvar.particular)::Vector RE + resul:= numer(unvectorise(solvevarlist,( HH ),M)) + resul + else return "failed" + +@ +<>= +"SOLVESER" [color="#FF4488",href="bookvol10.4.pdf#nameddest=SOLVESER"] +"FS" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FS"] +"SOLVESER" -> "FS" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package TRIMAT TriangularMatrixOperations} \pagehead{TriangularMatrixOperations}{TRIMAT} \pagepic{ps/v104triangularmatrixoperations.ps}{TRIMAT}{1.00} @@ -88026,6 +94856,139 @@ TrigonometricManipulations(R, F): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package TUBETOOL TubePlotTools} +\pagehead{TubePlotTools}{TUBETOOL} +\pagepic{ps/v104tubeplottools.ps}{TUBETOOL}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package TUBETOOL TubePlotTools +++ Author: Clifton J. Williamson +++ Date Created: Bastille Day 1989 +++ Date Last Updated: 5 June 1990 +++ Keywords: +++ Examples: +++ Description: +++ Tools for constructing tubes around 3-dimensional parametric curves. +TubePlotTools(): Exports == Implementation where + I ==> Integer + SF ==> DoubleFloat + L ==> List + Pt ==> Point SF + + Exports ==> with + point: (SF,SF,SF,SF) -> Pt + ++ point(x1,x2,x3,c) creates and returns a point from the three + ++ specified coordinates \spad{x1}, \spad{x2}, \spad{x3}, and also + ++ a fourth coordinate, c, which is generally used to specify the + ++ color of the point. + "*" : (SF,Pt) -> Pt + ++ s * p returns a point whose coordinates are the scalar multiple + ++ of the point p by the scalar s, preserving the color, or fourth + ++ coordinate, of p. + "+" : (Pt,Pt) -> Pt + ++ p + q computes and returns a point whose coordinates are the sums + ++ of the coordinates of the two points \spad{p} and \spad{q}, using + ++ the color, or fourth coordinate, of the first point \spad{p} + ++ as the color also of the point \spad{q}. + "-" : (Pt,Pt) -> Pt + ++ p - q computes and returns a point whose coordinates are the + ++ differences of the coordinates of two points \spad{p} and \spad{q}, + ++ using the color, or fourth coordinate, of the first point \spad{p} + ++ as the color also of the point \spad{q}. + dot : (Pt,Pt) -> SF + ++ dot(p,q) computes the dot product of the two points \spad{p} + ++ and \spad{q} using only the first three coordinates, and returns + ++ the resulting \spadtype{DoubleFloat}. + cross : (Pt,Pt) -> Pt + ++ cross(p,q) computes the cross product of the two points \spad{p} + ++ and \spad{q} using only the first three coordinates, and keeping + ++ the color of the first point p. The result is returned as a point. + unitVector: Pt -> Pt + ++ unitVector(p) creates the unit vector of the point p and returns + ++ the result as a point. Note: \spad{unitVector(p) = p/|p|}. + cosSinInfo: I -> L L SF + ++ cosSinInfo(n) returns the list of lists of values for n, in the + ++ form: \spad{[[cos(n - 1) a,sin(n - 1) a],...,[cos 2 a,sin 2 a],[cos a,sin a]]} + ++ where \spad{a = 2 pi/n}. Note: n should be greater than 2. + loopPoints: (Pt,Pt,Pt,SF,L L SF) -> L Pt + ++ loopPoints(p,n,b,r,lls) creates and returns a list of points + ++ which form the loop with radius r, around the center point + ++ indicated by the point p, with the principal normal vector of + ++ the space curve at point p given by the point(vector) n, and the + ++ binormal vector given by the point(vector) b, and a list of lists, + ++ lls, which is the \spadfun{cosSinInfo} of the number of points + ++ defining the loop. + + Implementation ==> add + import PointPackage(SF) + + point(x,y,z,c) == point(l : L SF := [x,y,z,c]) + + getColor: Pt -> SF + getColor pt == (maxIndex pt > 3 => color pt; 0) + + getColor2: (Pt,Pt) -> SF + getColor2(p0,p1) == + maxIndex p0 > 3 => color p0 + maxIndex p1 > 3 => color p1 + 0 + + a * p == + l : L SF := [a * xCoord p,a * yCoord p,a * zCoord p,getColor p] + point l + + p0 + p1 == + l : L SF := [xCoord p0 + xCoord p1,yCoord p0 + yCoord p1,_ + zCoord p0 + zCoord p1,getColor2(p0,p1)] + point l + + p0 - p1 == + l : L SF := [xCoord p0 - xCoord p1,yCoord p0 - yCoord p1,_ + zCoord p0 - zCoord p1,getColor2(p0,p1)] + point l + + dot(p0,p1) == + (xCoord p0 * xCoord p1) + (yCoord p0 * yCoord p1) +_ + (zCoord p0 * zCoord p1) + + cross(p0,p1) == + x0 := xCoord p0; y0 := yCoord p0; z0 := zCoord p0; + x1 := xCoord p1; y1 := yCoord p1; z1 := zCoord p1; + l : L SF := [y0 * z1 - y1 * z0,z0 * x1 - z1 * x0,_ + x0 * y1 - x1 * y0,getColor2(p0,p1)] + point l + + unitVector p == (inv sqrt dot(p,p)) * p + + cosSinInfo n == + ans : L L SF := nil() + theta : SF := 2 * pi()/n + for i in 1..(n-1) repeat --!! make more efficient + angle := i * theta + ans := concat([cos angle,sin angle],ans) + ans + + loopPoints(ctr,pNorm,bNorm,rad,cosSin) == + ans : L Pt := nil() + while not null cosSin repeat + cossin := first cosSin; cos := first cossin; sin := second cossin + ans := cons(ctr + rad * (cos * pNorm + sin * bNorm),ans) + cosSin := rest cosSin + pt := ctr + rad * pNorm + concat(pt,concat(ans,pt)) + +@ +<>= +"TUBETOOL" [color="#FF4488",href="bookvol10.4.pdf#nameddest=TUBETOOL"] +"FRAC" [color="#88FF44",href="bookvol10.3.pdf#nameddest=FRAC"] +"TUBETOOL" -> "FRAC" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package CLIP TwoDimensionalPlotClipping} \pagehead{TwoDimensionalPlotClipping}{CLIP} \pagepic{ps/v104twodimensionalplotclipping.ps}{CLIP}{1.00} @@ -88327,8 +95290,572 @@ TwoDimensionalPlotClipping(): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package TWOFACT TwoFactorize} +\pagehead{TwoFactorize}{TWOFACT} +\pagepic{ps/v104twofactorize.ps}{TWOFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package TWOFACT TwoFactorize +++ Authors : P.Gianni, J.H.Davenport +++ Date Created : May 1990 +++ Date Last Updated: March 1992 +++ Description: +++ A basic package for the factorization of bivariate polynomials +++ over a finite field. +++ The functions here represent the base step for the multivariate factorizer. + +TwoFactorize(F) : C == T + where + F : FiniteFieldCategory + SUP ==> SparseUnivariatePolynomial + R ==> SUP F + P ==> SUP R + UPCF2 ==> UnivariatePolynomialCategoryFunctions2 + + C == with + generalTwoFactor : (P) -> Factored P + ++ generalTwoFactor(p) returns the factorisation of polynomial p, + ++ a sparse univariate polynomial (sup) over a + ++ sup over F. + generalSqFr : (P) -> Factored P + ++ generalSqFr(p) returns the square-free factorisation of polynomial p, + ++ a sparse univariate polynomial (sup) over a + ++ sup over F. + twoFactor : (P,Integer) -> Factored P + ++ twoFactor(p,n) returns the factorisation of polynomial p, + ++ a sparse univariate polynomial (sup) over a + ++ sup over F. + ++ Also, p is assumed primitive and square-free and n is the + ++ degree of the inner variable of p (maximum of the degrees + ++ of the coefficients of p). + + T == add + PI ==> PositiveInteger + NNI ==> NonNegativeInteger + import CommuteUnivariatePolynomialCategory(F,R,P) + + ---- Local Functions ---- + computeDegree : (P,Integer,Integer) -> PI + exchangeVars : P -> P + exchangeVarTerm: (R, NNI) -> P + pthRoot : (R, NNI, NNI) -> R + + -- compute the degree of the extension to reduce the polynomial to a + -- univariate one + computeDegree(m : P,mx:Integer,q:Integer): PI == + my:=degree m + n1:Integer:=length(10*mx*my) + n2:Integer:=length(q)-1 + n:=(n1 quo n2)+1 + n::PI +-- n=1 => 1$PositiveInteger +-- (nextPrime(max(n,min(mx,my)))$IntegerPrimesPackage(Integer))::PI + + exchangeVars(p : P) : P == + p = 0 => 0 + exchangeVarTerm(leadingCoefficient p, degree p) + + exchangeVars(reductum p) + + exchangeVarTerm(c:R, e:NNI) : P == + c = 0 => 0 + monomial(monomial(leadingCoefficient c, e)$R, degree c)$P + + exchangeVarTerm(reductum c, e) + + pthRoot(poly:R,p:NonNegativeInteger,PthRootPow:NonNegativeInteger):R == + tmp:=divideExponents(map((#1::F)**PthRootPow,poly),p) + tmp case "failed" => error "consistency error in TwoFactor" + tmp + + fUnion ==> Union("nil", "sqfr", "irred", "prime") + FF ==> Record(flg:fUnion, fctr:P, xpnt:Integer) + + generalSqFr(m:P): Factored P == + m = 0 => 0 + degree m = 0 => + l:=squareFree(leadingCoefficient m) + makeFR(unit(l)::P,[[u.flg,u.fctr::P,u.xpnt] for u in factorList l]) + cont := content m + m := (m exquo cont)::P + sqfrm := squareFree m + pfaclist : List FF := empty() + unitPart := unit sqfrm + for u in factorList sqfrm repeat + u.flg = "nil" => + uexp:NNI:=(u.xpnt):NNI + nfacs:=squareFree(exchangeVars u.fctr) + for v in factorList nfacs repeat + pfaclist:=cons([v.flg, exchangeVars v.fctr, v.xpnt*uexp], + pfaclist) + unitPart := unit(nfacs)**uexp * unitPart + pfaclist := cons(u,pfaclist) + cont ^= 1 => + sqp := squareFree cont + contlist:=[[w.flg,(w.fctr)::P,w.xpnt] for w in factorList sqp] + pfaclist:= append(contlist, pfaclist) + makeFR(unit(sqp)*unitPart,pfaclist) + makeFR(unitPart,pfaclist) + + + generalTwoFactor(m:P): Factored P == + m = 0 => 0 + degree m = 0 => + l:=factor(leadingCoefficient m)$DistinctDegreeFactorize(F,R) + makeFR(unit(l)::P,[[u.flg,u.fctr::P,u.xpnt] for u in factorList l]) + ll:List FF + ll:=[] + unitPart:P + cont:=content m + if degree(cont)>0 then + m1:=m exquo cont + m1 case "failed" => error "content doesn't divide" + m:=m1 + contfact:=factor(cont)$DistinctDegreeFactorize(F,R) + unitPart:=(unit contfact)::P + ll:=[[w.flg,(w.fctr)::P,w.xpnt] for w in factorList contfact] + else + unitPart:=cont::P + sqfrm:=squareFree m + for u in factors sqfrm repeat + expo:=u.exponent + if expo < 0 then error "negative exponent in a factorisation" + expon:NonNegativeInteger:=expo::NonNegativeInteger + fac:=u.factor + degree fac = 1 => ll:=[["irred",fac,expon],:ll] + differentiate fac = 0 => + -- the polynomial is inseparable w.r.t. its main variable + map(differentiate,fac) = 0 => + p:=characteristic$F + PthRootPow:=(size$F exquo p)::NonNegativeInteger + m1:=divideExponents(map(pthRoot(#1,p,PthRootPow),fac),p) + m1 case "failed" => error "consistency error in TwoFactor" + res:=generalTwoFactor m1 + unitPart:=unitPart*unit(res)**((p*expon)::NNI) + ll:=[:[[v.flg,v.fctr,expon *p*v.xpnt] for v in factorList res],:ll] + m2:=generalTwoFactor swap fac + unitPart:=unitPart*unit(m2)**(expon::NNI) + ll:=[:[[v.flg,swap v.fctr,expon*v.xpnt] for v in factorList m2],:ll] + ydeg:="max"/[degree w for w in coefficients fac] + twoF:=twoFactor(fac,ydeg) + unitPart:=unitPart*unit(twoF)**expon + ll:=[:[[v.flg,v.fctr,expon*v.xpnt] for v in factorList twoF], + :ll] + makeFR(unitPart,ll) + + -- factorization of a primitive square-free bivariate polynomial -- + twoFactor(m:P,dx:Integer):Factored P == + -- choose the degree for the extension + n:PI:=computeDegree(m,dx,size()$F) + -- extend the field + -- find the substitution for x + look:Boolean:=true + dm:=degree m + try:Integer:=min(5,size()$F) + i:Integer:=0 + lcm := leadingCoefficient m + umv : R + while look and i < try repeat + vval := random()$F + i:=i+1 + zero? elt(lcm, vval) => "next value" + umv := map(elt(#1,vval), m)$UPCF2(R, P, F, R) + degree(gcd(umv,differentiate umv))^=0 => "next val" + n := 1 + look := false + extField:=FiniteFieldExtension(F,n) + SUEx:=SUP extField + TP:=SparseUnivariatePolynomial SUEx + mm:TP:=0 + m1:=m + while m1^=0 repeat + mm:=mm+monomial(map(coerce,leadingCoefficient m1)$UPCF2(F,R, + extField,SUEx),degree m1) + m1:=reductum m1 + lcmm := leadingCoefficient mm + val : extField + umex : SUEx + if not look then + val := vval :: extField + umex := map(coerce, umv)$UPCF2(F, R, extField, SUEx) + while look repeat + val:=random()$extField + i:=i+1 + elt(lcmm,val)=0 => "next value" + umex := map(elt(#1,val), mm)$UPCF2(SUEx, TP, extField, SUEx) + degree(gcd(umex,differentiate umex))^=0 => "next val" + look:=false + prime:SUEx:=monomial(1,1)-monomial(val,0) + fumex:=factor(umex)$DistinctDegreeFactorize(extField,SUEx) + lfact1:=factors fumex + + #lfact1=1 => primeFactor(m,1) + lfact : List TP := + [map(coerce,lf.factor)$UPCF2(extField,SUEx,SUEx,TP) + for lf in lfact1] + lfact:=cons(map(coerce,unit fumex)$UPCF2(extField,SUEx,SUEx,TP), + lfact) + import GeneralHenselPackage(SUEx,TP) + dx1:PI:=(dx+1)::PI + lfacth:=completeHensel(mm,lfact,prime,dx1) + lfactk: List P :=[] + Normp := NormRetractPackage(F, extField, SUEx, TP, n) + + while not empty? lfacth repeat + ff := first lfacth + lfacth := rest lfacth + if (c:=leadingCoefficient leadingCoefficient ff) ^=1 then + ff:=((inv c)::SUEx)* ff + not ((ffu:= retractIfCan(ff)$Normp) case "failed") => + lfactk := cons(ffu::P, lfactk) + normfacs := normFactors(ff)$Normp + lfacth := [g for g in lfacth | not member?(g, normfacs)] + ffn := */normfacs + lfactk:=cons(retractIfCan(ffn)$Normp :: P, lfactk) + */[primeFactor(ff1,1) for ff1 in lfactk] + +@ +<>= +"TWOFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=TWOFACT"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"FAXF" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FAXF"] +"TWOFACT" -> "PFECAT" +"TWOFACT" -> "FAXF" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter U} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package UNIFACT UnivariateFactorize} +\pagehead{UnivariateFactorize}{UNIFACT} +\pagepic{ps/v104univariatefactorize.ps}{UNIFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package UNIFACT UnivariateFactorize +++ Factorisation of univariate polynomials with integer coefficients +++ Author: Patrizia Gianni +++ Date Created: ??? +++ Date Last Updated: December 1993 +++ Description: +++ Package for the factorization of univariate polynomials with integer +++ coefficients. The factorization is done by "lifting" (HENSEL) the +++ factorization over a finite field. +UnivariateFactorize(ZP) : public == private where + Z ==> Integer + PI ==> PositiveInteger + NNI ==> NonNegativeInteger + SUPZ ==> SparseUnivariatePolynomial Z + + ZP : UnivariatePolynomialCategory Z + + FR ==> Factored ZP + fUnion ==> Union("nil", "sqfr", "irred", "prime") + FFE ==> Record(flg:fUnion, fctr:ZP, xpnt:Z) + ParFact ==> Record(irr: ZP,pow: Z) + FinalFact ==> Record(contp: Z,factors:List(ParFact)) + + + public == with + factor : ZP -> FR + ++ factor(m) returns the factorization of m + factorSquareFree : ZP -> FR + ++ factorSquareFree(m) returns the factorization of m square free + ++ polynomial + henselFact : (ZP,Boolean) -> FinalFact + ++ henselFact(m,flag) returns the factorization of m, + ++ FinalFact is a Record s.t. FinalFact.contp=content m, + ++ FinalFact.factors=List of irreducible factors + ++ of m with exponent , if flag =true the polynomial is + ++ assumed square free. + + private == add + --- local functions --- + + henselfact : ZP -> List(ZP) + quadratic : ZP -> List(ZP) + remp : (Z, PI) -> Z + negShiftz : (Z, PI) -> Z + negShiftp : (ZP,PI) -> ZP + bound : ZP -> PI + choose : ZP -> FirstStep + eisenstein : ZP -> Boolean + isPowerOf2 : Z -> Boolean + subMinusX : SUPZ -> ZP + sqroot : Z -> Z + + --- declarations --- + CYC ==> CyclotomicPolynomialPackage() + DDRecord ==> Record(factor: ZP,degree: Z) + DDList ==> List DDRecord + FirstStep ==> Record(prime:PI,factors:DDList) + ContPrim ==> Record(cont: Z,prim: ZP) + + import GeneralHenselPackage(Z,ZP) + import ModularDistinctDegreeFactorizer ZP + + + factor(m: ZP) == + flist := henselFact(m,false) + ctp:=unitNormal flist.contp + makeFR((ctp.unit)::ZP,cons(["nil",ctp.canonical::ZP,1$Z]$FFE, + [["prime",u.irr,u.pow]$FFE for u in flist.factors])) + + factorSquareFree(m: ZP) == + flist := henselFact(m,true) + ctp:=unitNormal flist.contp + makeFR((ctp.unit)::ZP,cons(["nil",ctp.canonical::ZP,1$Z]$FFE, + [["prime",u.irr,u.pow]$FFE for u in flist.factors])) + + + -- Integer square root: returns 0 if t is non-positive + sqroot(t: Z): Z == + t <= 0 => 0 + s:Integer:=t::Integer + s:=approxSqrt(s)$IntegerRoots(Integer) + t:=s::Z + t + + -- Eisenstein criterion: returns true if polynomial is + -- irreducible. Result of false in inconclusive. + eisenstein(m : ZP): Boolean == + -- calculate the content of the terms after the first + c := content reductum m + c = 0 => false + c = 1 => false + -- factor the content + -- if there is a prime in the factorization that does not divide + -- the leading term and appears to multiplicity 1, and the square + -- of this does not divide the last coef, return true. + -- Otherwise reurn false. + lead := leadingCoefficient m + trail := lead + m := reductum m + while m ^= 0 repeat + trail := leadingCoefficient m + m:= reductum m + fc := factor(c) :: Factored(Z) + for r in factors fc repeat + if (r.exponent = 1) and (0 ^= (lead rem r.factor)) and + (0 ^= (trail rem (r.factor ** 2))) then return true + false + + negShiftz(n: Z,Modulus:PI): Z == + if n < 0 then n := n+Modulus + n > (Modulus quo 2) => n-Modulus + n + + negShiftp(pp: ZP,Modulus:PI): ZP == + map(negShiftz(#1,Modulus),pp) + + -- Choose the bound for the coefficients of factors + bound(m: ZP):PI == + nm,nmq2,lcm,bin0,bin1:NNI + cbound,j : PI + k:NNI + lcm := abs(leadingCoefficient m)::NNI + nm := (degree m)::NNI + nmq2:NNI := nm quo 2 + norm: Z := sqroot(+/[coefficient(m,k)**2 for k in 0..nm]) + if nmq2^=1 then nm := (nmq2-1):NNI + else nm := nmq2 + bin0 := nm + cbound := (bin0*norm+lcm)::PI + for i in 2..(nm-1)::NNI repeat + bin1 := bin0 + bin0 := (bin0*(nm+1-i):NNI) quo i + j := (bin0*norm+bin1*lcm)::PI + if cbound t+q ;t) + + numFactors(ddlist:DDList): Z == + ans: Z := 0 + for dd in ddlist repeat + (d := degree(dd.factor)) = 0 => nil + ans := ans + ((d pretend Z) exquo dd.degree):: Z + ans + + -- select the prime,try up to 4 primes, + -- choose the one yielding the fewest factors, but stopping if + -- fewer than 9 factors + choose(m: ZP):FirstStep == + qSave:PI := 1 + ddSave:DDList := [] + numberOfFactors: Z := 0 + lcm := leadingCoefficient m + k: Z := 1 + ddRep := 5 + disc:ZP:=0 + q:PI:=2 + while k "next prime" + disc:=gcd(m,differentiate m,q) + (degree disc)^=0 => "next prime" + k := k+1 + newdd := ddFact(m,q) + ((n := numFactors(newdd)) < 9) => + ddSave := newdd + qSave := q + k := 5 + (numberOfFactors = 0) or (n < numberOfFactors) => + ddSave := newdd + qSave := q + numberOfFactors := n + [qSave,ddSave]$FirstStep + + -- Find the factors of m,primitive, square-free, with lc positive + -- and mindeg m = 0 + henselfact1(m: ZP):List(ZP) == + zero? degree m => +-- one? m => [] + (m = 1) => [] + [m] + selected := choose(m) + (numFactors(selected.factors) = 1$Z) => [m] + q := selected.prime + fl := separateFactors(selected.factors,q) + --choose the bound + cbound := bound(m) + completeHensel(m,fl,q,cbound) + + -- check for possible degree reduction + -- could use polynomial decomposition ? + henselfact(m: ZP):List ZP == + deggcd:=degree m + mm:= m + while not zero? mm repeat (deggcd:=gcd(deggcd, degree mm); mm:=reductum mm) + deggcd>1 and deggcd + faclist := henselfact1(divideExponents(m, deggcd)::ZP) + "append"/[henselfact1 multiplyExponents(mm, deggcd) for mm in faclist] + henselfact1 m + + quadratic(m: ZP):List(ZP) == + d,d2: Z + d := coefficient(m,1)**2-4*coefficient(m,0)*coefficient(m,2) + d2 := sqroot(d) + (d-d2**2)^=0 => [m] + alpha: Z := coefficient(m,1)+d2 + beta: Z := 2*coefficient(m,2) + d := gcd(alpha,beta) + if d ^=1 then + alpha := alpha quo d + beta := beta quo d + m0: ZP := monomial(beta,1)+monomial(alpha,0) + cons(m0,[(m exquo m0):: ZP]) + + isPowerOf2(n : Z): Boolean == + n = 1 => true + qr : Record(quotient: Z, remainder: Z) := divide(n,2) + qr.remainder = 1 => false + isPowerOf2 qr.quotient + + subMinusX(supPol : SUPZ): ZP == + minusX : SUPZ := monomial(-1,1)$SUPZ + (elt(supPol,minusX)$SUPZ) : ZP + +-- Factorize the polynomial m, test=true if m is known to be +-- square-free, false otherwise. +-- FinalFact.contp=content m, FinalFact.factors=List of irreducible +-- factors with exponent . + henselFact(m: ZP,test:Boolean):FinalFact == + factorlist : List(ParFact) := [] + c : Z + + -- make m primitive + c := content m + m := (m exquo c)::ZP + + -- make the lc m positive + if leadingCoefficient m < 0 then + c := -c + m := -m + + -- is x**d factor of m? + if (d := minimumDegree m) >0 then + m := (monicDivide(m,monomial(1,d))).quotient + factorlist := [[monomial(1,1),d]$ParFact] + + d := degree m + + -- is m constant? + d=0 => [c,factorlist]$FinalFact + + -- is m linear? + d=1 => [c,cons([m,1]$ParFact,factorlist)]$FinalFact + + -- does m satisfy Eisenstein's criterion? + eisenstein m => [c,cons([m,1]$ParFact,factorlist)]$FinalFact + + lcPol : ZP := leadingCoefficient(m) :: ZP + + -- is m cyclotomic (x**n - 1)? + -lcPol = reductum(m) => -- if true, both will = 1 + for fac in + (cyclotomicDecomposition(degree m)$CYC : List ZP) repeat + factorlist := cons([fac,1]$ParFact,factorlist) + [c,factorlist]$FinalFact + + -- is m odd cyclotomic (x**(2*n+1) + 1)? + odd?(d) and (lcPol = reductum(m)) => + for sfac in cyclotomicDecomposition(degree m)$CYC repeat + fac:=subMinusX sfac + if leadingCoefficient fac < 0 then fac := -fac + factorlist := cons([fac,1]$ParFact,factorlist) + [c,factorlist]$FinalFact + + -- is the poly of the form x**n + 1 with n a power of 2? + -- if so, then irreducible + isPowerOf2(d) and (lcPol = reductum(m)) => + factorlist := cons([m,1]$ParFact,factorlist) + [c,factorlist]$FinalFact + + -- is m quadratic? + d=2 => + lfq:List(ZP) := quadratic m + #lfq=1 => [c,cons([lfq.first,1]$ParFact,factorlist)]$FinalFact + (lf0,lf1) := (lfq.first,second lfq) + if lf0=lf1 then factorlist := cons([lf0,2]$ParFact,factorlist) + else factorlist := append([[v,1]$ParFact for v in lfq],factorlist) + [c,factorlist]$FinalFact + + -- m is square-free + test => + fln := henselfact(m) + [c,append(factorlist,[[pf,1]$ParFact for pf in fln])]$FinalFact + + -- find the square-free decomposition of m + irrFact := squareFree(m) + llf := factors irrFact + + -- factorize the square-free primitive terms + for l1 in llf repeat + d1 := l1.exponent + pol := l1.factor + degree pol=1 => factorlist := cons([pol,d1]$ParFact,factorlist) + degree pol=2 => + fln := quadratic(pol) + factorlist := append([[pf,d1]$ParFact for pf in fln],factorlist) + fln := henselfact(pol) + factorlist := append([[pf,d1]$ParFact for pf in fln],factorlist) + [c,factorlist]$FinalFact + +@ +<>= +"UNIFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=UNIFACT"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"UNIFACT" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package UFPS1 UnivariateFormalPowerSeriesFunctions} \pagehead{UnivariateFormalPowerSeriesFunctions}{UFPS1} \pagepic{ps/v104univariateformalpowerseriesfunctions.ps}{UFPS1}{1.00} @@ -88526,6 +96053,203 @@ UnivariatePolynomialCommonDenominator(R, Q, UP): Exports == Impl where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package UPDECOMP UnivariatePolynomialDecompositionPackage} +\pagehead{UnivariatePolynomialDecompositionPackage}{UPDECOMP} +\pagepic{ps/v104univariatepolynomialdecompositionpackage.ps}{UPDECOMP}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package UPDECOMP UnivariatePolynomialDecompositionPackage +++ Author: Frederic Lehobey +++ Date Created: 17 June 1996 +++ Date Last Updated: 4 June 1997 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keyword: +++ Exemples: +++ References: +++ [1] Peter Henrici, Automatic Computations with Power Series, +++ Journal of the Association for Computing Machinery, Volume 3, No. 1, +++ January 1956, 10-15 +++ [2] Dexter Kozen and Susan Landau, Polynomial Decomposition +++ Algorithms, Journal of Symbolic Computation (1989) 7, 445-456 +-- Decomposition would be speeded up (O(n log n) instead of O(n^2)) by +-- implementing the algorithm described in [3] based on [4] and [5]. +++ [3] Joachim von zur Gathen, Functional Decomposition Polynomials: +++ the Tame Case, Journal of Symbolic Computation (1990) 9, 281-299 +++ [4] R. P. Brent and H. T. Kung, Fast Algorithms for Manipulating +++ Formal Power Series, Journal of the Association for Computing +++ Machinery, Vol. 25, No. 4, October 1978, 581-595 +++ [5] R. P. Brent, Multiple-Precision Zero-Finding Methods and the +++ Complexity of Elementary Function Evaluation, Analytic +++ Computational Complexity, J. F. Traub, Ed., Academic Press, +++ New York 1975, 151-176 +++ Description: UnivariatePolynomialDecompositionPackage implements +++ functional decomposition of univariate polynomial with coefficients +++ in an \spad{IntegralDomain} of \spad{CharacteristicZero}. +UnivariatePolynomialDecompositionPackage(R,UP): Exports == Implementation where + R : Join(IntegralDomain,CharacteristicZero) + UP : UnivariatePolynomialCategory(R) + N ==> NonNegativeInteger + LR ==> Record(left: UP, right: UP) + QR ==> Record(quotient: UP, remainder: UP) + + + Exports ==> with + + monicRightFactorIfCan: (UP,N) -> Union(UP,"failed") + ++ monicRightFactorIfCan(f,d) returns a candidate to be the + ++ monic right factor (h in f = g o h) of degree d of a + ++ functional decomposition of the polynomial f or + ++ \spad{"failed"} if no such candidate. + rightFactorIfCan: (UP,N,R) -> Union(UP,"failed") + ++ rightFactorIfCan(f,d,c) returns a candidate to be the + ++ right factor (h in f = g o h) of degree d with leading + ++ coefficient c of a functional decomposition of the + ++ polynomial f or \spad{"failed"} if no such candidate. + leftFactorIfCan: (UP,UP) -> Union(UP,"failed") + ++ leftFactorIfCan(f,h) returns the left factor (g in f = g o h) + ++ of the functional decomposition of the polynomial f with + ++ given h or \spad{"failed"} if g does not exist. + monicDecomposeIfCan: UP -> Union(LR,"failed") + ++ monicDecomposeIfCan(f) returns a functional decomposition + ++ of the monic polynomial f of "failed" if it has not found any. + monicCompleteDecompose: UP -> List UP + ++ monicCompleteDecompose(f) returns a list of factors of f for + ++ the functional decomposition ([ f1, ..., fn ] means + ++ f = f1 o ... o fn). + + Implementation ==> add + + rightFactorIfCan(p,dq,lcq) == + dp := degree p + zero? lcq => + error "rightFactorIfCan: leading coefficient may not be zero" + (zero? dp) or (zero? dq) => "failed" + nc := dp exquo dq + nc case "failed" => "failed" + n := nc::N + s := subtractIfCan(dq,1)::N + lcp := leadingCoefficient p + q: UP := monomial(lcq,dq) + k: N + for k in 1..s repeat + c: R := 0 + i: N + for i in 0..subtractIfCan(k,1)::N repeat + c := c+(k::R-(n::R+1)*(i::R))* + coefficient(q,subtractIfCan(dq,i)::N)* + coefficient(p,subtractIfCan(dp+i,k)::N) + cquo := c exquo ((k*n)::R*lcp) + cquo case "failed" => return "failed" + q := q+monomial(cquo::R,subtractIfCan(dq,k)::N) + q + + monicRightFactorIfCan(p,dq) == rightFactorIfCan(p,dq,1$R) + + import UnivariatePolynomialDivisionPackage(R,UP) + + leftFactorIfCan(f,h) == + g: UP := 0 + zero? degree h => "failed" + for i in 0.. while not zero? f repeat + qrf := divideIfCan(f,h) + qrf case "failed" => return "failed" + qr := qrf :: QR + r := qr.remainder + not ground? r => return "failed" + g := g+monomial(ground(r),i) + f := qr.quotient + g + + monicDecomposeIfCan f == + df := degree f + zero? df => "failed" + for dh in 2..subtractIfCan(df,1)::N | zero?(df rem dh) repeat + h := monicRightFactorIfCan(f,dh) + h case UP => + g := leftFactorIfCan(f,h::UP) + g case UP => return [g::UP,h::UP] + "failed" + + monicCompleteDecompose f == + cf := monicDecomposeIfCan f + cf case "failed" => [ f ] + lr := cf :: LR + append(monicCompleteDecompose lr.left,[lr.right]) + +@ +<>= +"UPDECOMP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=UPDECOMP"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"UPDECOMP" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package UPDIVP UnivariatePolynomialDivisionPackage} +\pagehead{UnivariatePolynomialDivisionPackage}{UPDIVP} +\pagepic{ps/v104univariatepolynomialdivisionpackage.ps}{UPDIVP}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package UPDIVP UnivariatePolynomialDivisionPackage +++ Author: Frederic Lehobey +++ Date Created: 3 June 1997 +++ Date Last Updated: 3 June 1997 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keyword: +++ Exemples: +++ References: +++ Description: UnivariatePolynomialDivisionPackage provides a +++ division for non monic univarite polynomials with coefficients in +++ an \spad{IntegralDomain}. +UnivariatePolynomialDivisionPackage(R,UP): Exports == Implementation where + R : IntegralDomain + UP : UnivariatePolynomialCategory(R) + N ==> NonNegativeInteger + QR ==> Record(quotient: UP, remainder: UP) + + Exports ==> with + + divideIfCan: (UP,UP) -> Union(QR,"failed") + ++ divideIfCan(f,g) returns quotient and remainder of the + ++ division of f by g or "failed" if it has not succeeded. + + Implementation ==> add + + divideIfCan(p1:UP,p2:UP):Union(QR,"failed") == + zero? p2 => error "divideIfCan: division by zero" +-- one? (lc := leadingCoefficient p2) => monicDivide(p1,p2) + ((lc := leadingCoefficient p2) = 1) => monicDivide(p1,p2) + q: UP := 0 + while not ((e := subtractIfCan(degree(p1),degree(p2))) case "failed") + repeat + c := leadingCoefficient(p1) exquo lc + c case "failed" => return "failed" + ee := e::N + q := q+monomial(c::R,ee) + p1 := p1-c*mapExponents(#1+ee,p2) + [q,p1] + +@ +<>= +"UPDIVP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=UPDIVP"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"UPDIVP" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package UP2 UnivariatePolynomialFunctions2} \pagehead{UnivariatePolynomialFunctions2}{UP2} \pagepic{ps/v104univariatepolynomialfunctions2.ps}{UP2}{1.00} @@ -89006,6 +96730,195 @@ UnivariateSkewPolynomialCategoryOps(R, C): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package UTS2 UnivariateTaylorSeriesFunctions2} +\pagehead{UnivariateTaylorSeriesFunctions2}{UTS2} +\pagepic{ps/v104univariatetaylorseriesfunctions2.ps}{UTS2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package UTS2 UnivariateTaylorSeriesFunctions2 +++ Author: Clifton J. Williamson +++ Date Created: 9 February 1990 +++ Date Last Updated: 9 February 1990 +++ Basic Operations: +++ Related Domains: UnivariateTaylorSeries(Coef1,var,cen) +++ Also See: +++ AMS Classifications: +++ Keywords: Taylor series, map +++ Examples: +++ References: +++ Description: Mapping package for univariate Taylor series. +++ This package allows one to apply a function to the coefficients of +++ a univariate Taylor series. +UnivariateTaylorSeriesFunctions2(Coef1,Coef2,UTS1,UTS2):_ + Exports == Implementation where + Coef1 : Ring + Coef2 : Ring + UTS1 : UnivariateTaylorSeriesCategory Coef1 + UTS2 : UnivariateTaylorSeriesCategory Coef2 + ST2 ==> StreamFunctions2(Coef1,Coef2) + + Exports ==> with + map: (Coef1 -> Coef2,UTS1) -> UTS2 + ++\spad{map(f,g(x))} applies the map f to the coefficients of + ++ the Taylor series \spad{g(x)}. + + Implementation ==> add + + map(f,uts) == series map(f,coefficients uts)$ST2 + +@ +<>= +"UTS2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=UTS2"] +"UTSCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=UTSCAT"] +"UTS2" -> "UTSCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package UTSODE UnivariateTaylorSeriesODESolver} +\pagehead{UnivariateTaylorSeriesODESolver}{UTSODE} +\pagepic{ps/v104univariatetaylorseriesodesolver.ps}{UTSODE}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package UTSODE UnivariateTaylorSeriesODESolver +++ Taylor series solutions of explicit ODE's. +++ Author: Stephen Watt (revised by Clifton J. Williamson) +++ Date Created: February 1988 +++ Date Last Updated: 30 September 1993 +++ Keywords: differential equation, ODE, Taylor series +++ Examples: +++ References: +UnivariateTaylorSeriesODESolver(Coef,UTS):_ + Exports == Implementation where + ++ This package provides Taylor series solutions to regular + ++ linear or non-linear ordinary differential equations of + ++ arbitrary order. + Coef : Algebra Fraction Integer + UTS : UnivariateTaylorSeriesCategory Coef + L ==> List + L2 ==> ListFunctions2 + FN ==> (L UTS) -> UTS + ST ==> Stream Coef + YS ==> Y$ParadoxicalCombinatorsForStreams(Coef) + STT ==> StreamTaylorSeriesOperations(Coef) + + Exports ==> with + stFunc1: (UTS -> UTS) -> (ST -> ST) + ++ stFunc1(f) is a local function exported due to compiler problem. + ++ This function is of no interest to the top-level user. + stFunc2: ((UTS,UTS) -> UTS) -> ((ST,ST) -> ST) + ++ stFunc2(f) is a local function exported due to compiler problem. + ++ This function is of no interest to the top-level user. + stFuncN: FN -> ((L ST) -> ST) + ++ stFuncN(f) is a local function xported due to compiler problem. + ++ This function is of no interest to the top-level user. + fixedPointExquo: (UTS,UTS) -> UTS + ++ fixedPointExquo(f,g) computes the exact quotient of \spad{f} and + ++ \spad{g} using a fixed point computation. + ode1: ((UTS -> UTS),Coef) -> UTS + ++ ode1(f,c) is the solution to \spad{y' = f(y)} + ++ such that \spad{y(a) = c}. + ode2: ((UTS, UTS) -> UTS,Coef,Coef) -> UTS + ++ ode2(f,c0,c1) is the solution to \spad{y'' = f(y,y')} such that + ++ \spad{y(a) = c0} and \spad{y'(a) = c1}. + ode: (FN,List Coef) -> UTS + ++ ode(f,cl) is the solution to \spad{y=f(y,y',..,y)} such that + ++ \spad{y(a) = cl.i} for i in 1..n. + mpsode:(L Coef,L FN) -> L UTS + ++ mpsode(r,f) solves the system of differential equations + ++ \spad{dy[i]/dx =f[i] [x,y[1],y[2],...,y[n]]}, + ++ \spad{y[i](a) = r[i]} for i in 1..n. + + Implementation ==> add + + stFunc1 f == coefficients f series(#1) + stFunc2 f == coefficients f(series(#1),series(#2)) + stFuncN f == coefficients f map(series,#1)$ListFunctions2(ST,UTS) + + import StreamTaylorSeriesOperations(Coef) + divloopre:(Coef,ST,Coef,ST,ST) -> ST + divloopre(hx,tx,hy,ty,c) == delay(concat(hx*hy,hy*(tx-(ty*c)))) + divloop: (Coef,ST,Coef,ST) -> ST + divloop(hx,tx,hy,ty) == YS(divloopre(hx,tx,hy,ty,#1)) + + sdiv:(ST,ST) -> ST + sdiv(x,y) == delay + empty? x => empty() + empty? y => error "stream division by zero" + hx := frst x; tx := rst x + hy := frst y; ty := rst y + zero? hy => + zero? hx => sdiv(tx,ty) + error "stream division by zero" + rhy := recip hy + rhy case "failed" => error "stream division:no reciprocal" + divloop(hx,tx,rhy::Coef,ty) + + fixedPointExquo(f,g) == series sdiv(coefficients f,coefficients g) + +-- first order + + ode1re: (ST -> ST,Coef,ST) -> ST + ode1re(f,c,y) == lazyIntegrate(c,f y)$STT + + iOde1: ((ST -> ST),Coef) -> ST + iOde1(f,c) == YS ode1re(f,c,#1) + + ode1(f,c) == series iOde1(stFunc1 f,c) + +-- second order + + ode2re: ((ST,ST)-> ST,Coef,Coef,ST) -> ST + ode2re(f,c0,c1,y)== + yi := lazyIntegrate(c1,f(y,deriv(y)$STT))$STT + lazyIntegrate(c0,yi)$STT + + iOde2: ((ST,ST) -> ST,Coef,Coef) -> ST + iOde2(f,c0,c1) == YS ode2re(f,c0,c1,#1) + + ode2(f,c0,c1) == series iOde2(stFunc2 f,c0,c1) + +-- nth order + + odeNre: (List ST -> ST,List Coef,List ST) -> List ST + odeNre(f,cl,yl) == + -- yl is [y, y', ..., y] + -- integrate [y',..,y] to get [y,..,y] + yil := [lazyIntegrate(c,y)$STT for c in cl for y in rest yl] + -- use y = f(y,..,y) + concat(yil,[f yil]) + + iOde: ((L ST) -> ST,List Coef) -> ST + iOde(f,cl) == first YS(odeNre(f,cl,#1),#cl + 1) + + ode(f,cl) == series iOde(stFuncN f,cl) + + simulre:(L Coef,L ((L ST) -> ST),L ST) -> L ST + simulre(cst,lsf,c) == + [lazyIntegrate(csti,lsfi concat(monom(1,1)$STT,c))_ + for csti in cst for lsfi in lsf] + iMpsode:(L Coef,L ((L ST) -> ST)) -> L ST + iMpsode(cs,lsts) == YS(simulre(cs,lsts,#1),# cs) + mpsode(cs,lsts) == +-- stSol := iMpsode(cs,map(stFuncN,lsts)$L2(FN,(L ST) -> ST)) + stSol := iMpsode(cs,[stFuncN(lst) for lst in lsts]) + map(series,stSol)$L2(ST,UTS) + +@ +<>= +"UTSODE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=UTSODE"] +"UTSCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=UTSCAT"] +"UTSODE" -> "UTSCAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package UNISEG2 UniversalSegmentFunctions2} \pagehead{UniversalSegmentFunctions2}{UNISEG2} \pagepic{ps/v104universalsegmentfunctions2.ps}{UNISEG2}{1.00} @@ -89293,9 +97206,584 @@ UTSodetools(F, UP, L, UTS): Exports == Implementation where %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter V} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package VECTOR2 VectorFunctions2} +\pagehead{VectorFunctions2}{VECTOR2} +\pagepic{ps/v104vectorfunctions2.ps}{VECTOR2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package VECTOR2 VectorFunctions2 +++ Author: +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This package provides operations which all take as arguments +++ vectors of elements of some type \spad{A} and functions from \spad{A} to +++ another of type B. The operations all iterate over their vector argument +++ and either return a value of type B or a vector over B. + +VectorFunctions2(A, B): Exports == Implementation where + A, B: Type + + VA ==> Vector A + VB ==> Vector B + O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) + UB ==> Union(B,"failed") + + Exports ==> with + scan : ((A, B) -> B, VA, B) -> VB + ++ scan(func,vec,ident) creates a new vector whose elements are + ++ the result of applying reduce to the binary function func, + ++ increasing initial subsequences of the vector vec, + ++ and the element ident. + reduce : ((A, B) -> B, VA, B) -> B + ++ reduce(func,vec,ident) combines the elements in vec using the + ++ binary function func. Argument ident is returned if vec is empty. + map : (A -> B, VA) -> VB + ++ map(f, v) applies the function f to every element of the vector v + ++ producing a new vector containing the values. + map : (A -> UB, VA) -> Union(VB,"failed") + ++ map(f, v) applies the function f to every element of the vector v + ++ producing a new vector containing the values or \spad{"failed"}. + + Implementation ==> add + scan(f, v, b) == scan(f, v, b)$O2 + reduce(f, v, b) == reduce(f, v, b)$O2 + map(f:(A->B), v:VA):VB == map(f, v)$O2 + + map(f:(A -> UB), a:VA):Union(VB,"failed") == + res : List B := [] + for u in entries(a) repeat + r := f u + r = "failed" => return "failed" + res := [r::B,:res] + vector reverse! res + +@ +<>= +"VECTOR2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=VECTOR2"] +"IVECTOR" [color="#88FF44",href="bookvol10.3.pdf#nameddest=IVECTOR"] +"VECTOR2" -> "IVECTOR" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package VIEWDEF ViewDefaultsPackage} +\pagehead{ViewDefaultsPackage}{VIEWDEF} +\pagepic{ps/v104viewdefaultspackage.ps}{VIEWDEF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package VIEWDEF ViewDefaultsPackage +++ Author: Jim Wen +++ Date Created: 15 January 1990 +++ Date Last Updated: +++ Basic Operations: pointColorDefault, lineColorDefault, axesColorDefault, +++ unitsColorDefault, pointSizeDefault, viewPosDefault, viewSizeDefault, +++ viewDefaults, viewWriteDefault, viewWriteAvailable, var1StepsDefault, +++ var2StepsDefault, tubePointsDefault, tubeRadiusDefault +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: ViewportDefaultsPackage describes default and user definable +++ values for graphics + +ViewDefaultsPackage():Exports == Implementation where + I ==> Integer + C ==> Color + PAL ==> Palette + L ==> List + S ==> String + E ==> Expression + PI ==> PositiveInteger + NNI ==> NonNegativeInteger + SF ==> DoubleFloat + B ==> Boolean + + writeAvailable ==> (["PIXMAP","BITMAP","POSTSCRIPT","IMAGE"]::L S) + -- need not worry about case of letters + + Exports ==> with + pointColorDefault : () -> PAL + ++ pointColorDefault() returns the default color of points in a 2D + ++ viewport. + pointColorDefault : PAL -> PAL + ++ pointColorDefault(p) sets the default color of points in a 2D viewport + ++ to the palette p. + lineColorDefault : () -> PAL + ++ lineColorDefault() returns the default color of lines connecting + ++ points in a 2D viewport. + lineColorDefault : PAL -> PAL + ++ lineColorDefault(p) sets the default color of lines connecting points + ++ in a 2D viewport to the palette p. + axesColorDefault : () -> PAL + ++ axesColorDefault() returns the default color of the axes in a + ++ 2D viewport. + axesColorDefault : PAL -> PAL + ++ axesColorDefault(p) sets the default color of the axes in a 2D + ++ viewport to the palette p. + unitsColorDefault : () -> PAL + ++ unitsColorDefault() returns the default color of the unit ticks in + ++ a 2D viewport. + unitsColorDefault : PAL -> PAL + ++ unitsColorDefault(p) sets the default color of the unit ticks in + ++ a 2D viewport to the palette p. + pointSizeDefault : () -> PI + ++ pointSizeDefault() returns the default size of the points in + ++ a 2D viewport. + pointSizeDefault : PI -> PI + ++ pointSizeDefault(i) sets the default size of the points in a 2D + ++ viewport to i. + viewPosDefault : () -> L NNI + ++ viewPosDefault() returns the default X and Y position of a + ++ viewport window unless overriden explicityly, newly created + ++ viewports will have this X and Y coordinate. + viewPosDefault : L NNI -> L NNI + ++ viewPosDefault([x,y]) sets the default X and Y position of a + ++ viewport window unless overriden explicityly, newly created + ++ viewports will have th X and Y coordinates x, y. + viewSizeDefault : () -> L PI + ++ viewSizeDefault() returns the default viewport width and height. + viewSizeDefault : L PI -> L PI + ++ viewSizeDefault([w,h]) sets the default viewport width to w and height + ++ to h. + viewDefaults : () -> Void + ++ viewDefaults() resets all the default graphics settings. + viewWriteDefault : () -> L S + ++ viewWriteDefault() returns the list of things to write in a viewport + ++ data file; a viewalone file is always generated. + viewWriteDefault : L S -> L S + ++ viewWriteDefault(l) sets the default list of things to write in a + ++ viewport data file to the strings in l; a viewalone file is always + ++ genereated. + viewWriteAvailable : () -> L S + ++ viewWriteAvailable() returns a list of available methods for writing, + ++ such as BITMAP, POSTSCRIPT, etc. + var1StepsDefault : () -> PI + ++ var1StepsDefault() is the current setting for the number of steps to + ++ take when creating a 3D mesh in the direction of the first defined + ++ free variable (a free variable is considered defined when its + ++ range is specified (e.g. x=0..10)). + var2StepsDefault : () -> PI + ++ var2StepsDefault() is the current setting for the number of steps to + ++ take when creating a 3D mesh in the direction of the first defined + ++ free variable (a free variable is considered defined when its + ++ range is specified (e.g. x=0..10)). + var1StepsDefault : PI -> PI + ++ var1StepsDefault(i) sets the number of steps to take when creating a + ++ 3D mesh in the direction of the first defined free variable to i + ++ (a free variable is considered defined when its range is specified + ++ (e.g. x=0..10)). + var2StepsDefault : PI -> PI + ++ var2StepsDefault(i) sets the number of steps to take when creating a + ++ 3D mesh in the direction of the first defined free variable to i + ++ (a free variable is considered defined when its range is specified + ++ (e.g. x=0..10)). + tubePointsDefault : PI -> PI + ++ tubePointsDefault(i) sets the number of points to use when creating + ++ the circle to be used in creating a 3D tube plot to i. + tubePointsDefault : () -> PI + ++ tubePointsDefault() returns the number of points to be used when + ++ creating the circle to be used in creating a 3D tube plot. + tubeRadiusDefault : Float -> SF -- current tube.spad asks for SF + ++ tubeRadiusDefault(r) sets the default radius for a 3D tube plot to r. + tubeRadiusDefault : () -> SF + ++ tubeRadiusDefault() returns the radius used for a 3D tube plot. + + Implementation ==> add + + import Color() + import Palette() + --import StringManipulations() + + defaultPointColor : Reference(PAL) := ref bright red() + defaultLineColor : Reference(PAL) := ref pastel green() --bright blue() + defaultAxesColor : Reference(PAL) := ref dim red() + defaultUnitsColor : Reference(PAL) := ref dim yellow() + defaultPointSize : Reference(PI) := ref(3::PI) + defaultXPos : Reference(NNI) := ref(0::NNI) + defaultYPos : Reference(NNI) := ref(0::NNI) + defaultWidth : Reference(PI) := ref(400::PI) + defaultHeight : Reference(PI) := ref(400::PI) + defaultThingsToWrite : Reference(L S) := ref([]::L S) + defaultVar1Steps : Reference(PI) := ref(27::PI) + defaultVar2Steps : Reference(PI) := ref(27::PI) + defaultTubePoints : Reference(PI) := ref(6::PI) + defaultTubeRadius : Reference(SF) := ref(convert(0.5)@SF) + defaultClosed : Reference(B) := ref(false) + +--%Viewport window dimensions specifications + viewPosDefault == [defaultXPos(),defaultYPos()] + viewPosDefault l == + #l < 2 => error "viewPosDefault expects a list with two elements" + [defaultXPos() := first l,defaultYPos() := last l] + + viewSizeDefault == [defaultWidth(),defaultHeight()] + viewSizeDefault l == + #l < 2 => error "viewSizeDefault expects a list with two elements" + [defaultWidth() := first l,defaultHeight() := last l] + + viewDefaults == + defaultPointColor : Reference(PAL) := ref bright red() + defaultLineColor : Reference(PAL) := ref pastel green() --bright blue() + defaultAxesColor : Reference(PAL) := ref dim red() + defaultUnitsColor : Reference(PAL) := ref dim yellow() + defaultPointSize : Reference(PI) := ref(3::PI) + defaultXPos : Reference(NNI) := ref(0::NNI) + defaultYPos : Reference(NNI) := ref(0::NNI) + defaultWidth : Reference(PI) := ref(400::PI) + defaultHeight : Reference(PI) := ref(427::PI) + +--%2D graphical output specifications + pointColorDefault == defaultPointColor() + pointColorDefault p == defaultPointColor() := p + + lineColorDefault == defaultLineColor() + lineColorDefault p == defaultLineColor() := p + + axesColorDefault == defaultAxesColor() + axesColorDefault p == defaultAxesColor() := p + + unitsColorDefault == defaultUnitsColor() + unitsColorDefault p == defaultUnitsColor() := p + + pointSizeDefault == defaultPointSize() + pointSizeDefault x == defaultPointSize() := x + + +--%3D specific stuff + var1StepsDefault == defaultVar1Steps() + var1StepsDefault i == defaultVar1Steps() := i + + var2StepsDefault == defaultVar2Steps() + var2StepsDefault i == defaultVar2Steps() := i + + tubePointsDefault == defaultTubePoints() + tubePointsDefault i == defaultTubePoints() := i + + tubeRadiusDefault == defaultTubeRadius() + tubeRadiusDefault f == defaultTubeRadius() := convert(f)@SF + +--%File output stuff + viewWriteAvailable == writeAvailable + + viewWriteDefault == defaultThingsToWrite() + + viewWriteDefault listOfThings == + thingsToWrite : L S := [] + for aTypeOfFile in listOfThings repeat + if (writeTypeInt := position(upperCase aTypeOfFile,viewWriteAvailable())) < 0 then + sayBrightly([" > ",concat(aTypeOfFile, + " is not a valid file type for writing a viewport")])$Lisp + else + thingsToWrite := append(thingsToWrite,[aTypeOfFile]) + defaultThingsToWrite() := thingsToWrite + +@ +<>= +"VIEWDEF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=VIEWDEF"] +"STRING" [color="#88FF44",href="bookvol10.3.pdf#nameddest=STRING"] +"VIEWDEF" -> "STRING" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package VIEW ViewportPackage} +\pagehead{ViewportPackage}{VIEW} +\pagepic{ps/v104viewportpackage.ps}{VIEW}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package VIEW ViewportPackage +++ Author: Jim Wen +++ Date Created: 30 April 1989 +++ Date Last Updated: 15 June 1990 +++ Basic Operations: graphCurves, drawCurves, coerce +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: ViewportPackage provides functions for creating GraphImages +++ and TwoDimensionalViewports from lists of lists of points. + +ViewportPackage():Exports == Implementation where + DROP ==> DrawOption + GRIMAGE ==> GraphImage + L ==> List + P ==> Point DoubleFloat + PAL ==> Palette + PI ==> PositiveInteger + VIEW2D ==> TwoDimensionalViewport + + Exports ==> with + + graphCurves : (L L P,PAL,PAL,PI,L DROP) -> GRIMAGE + ++ graphCurves([[p0],[p1],...,[pn]],ptColor,lineColor,ptSize,[options]) + ++ creates a \spadtype{GraphImage} from the list of lists of points, p0 + ++ throught pn, using the options specified in the list \spad{options}. + ++ The graph point color is specified by \spad{ptColor}, the graph line + ++ color is specified by \spad{lineColor}, and the size of the points is + ++ specified by \spad{ptSize}. + graphCurves : L L P -> GRIMAGE + ++ graphCurves([[p0],[p1],...,[pn]]) creates a \spadtype{GraphImage} from + ++ the list of lists of points indicated by p0 through pn. + graphCurves : (L L P,L DROP) -> GRIMAGE + ++ graphCurves([[p0],[p1],...,[pn]],[options]) creates a + ++ \spadtype{GraphImage} from the list of lists of points, p0 throught pn, + ++ using the options specified in the list \spad{options}. + drawCurves : (L L P,PAL,PAL,PI,L DROP) -> VIEW2D + ++ drawCurves([[p0],[p1],...,[pn]],ptColor,lineColor,ptSize,[options]) + ++ creates a \spadtype{TwoDimensionalViewport} from the list of lists of + ++ points, p0 throught pn, using the options specified in the list + ++ \spad{options}. The point color is specified by \spad{ptColor}, the + ++ line color is specified by \spad{lineColor}, and the point size is + ++ specified by \spad{ptSize}. + drawCurves : (L L P,L DROP) -> VIEW2D + ++ drawCurves([[p0],[p1],...,[pn]],[options]) creates a + ++ \spadtype{TwoDimensionalViewport} from the list of lists of points, + ++ p0 throught pn, using the options specified in the list \spad{options}; + coerce : GRIMAGE -> VIEW2D + ++ coerce(gi) converts the indicated \spadtype{GraphImage}, gi, into the + ++ \spadtype{TwoDimensionalViewport} form. + + Implementation ==> add + + import ViewDefaultsPackage + import DrawOptionFunctions0 + +--% Functions that return GraphImages + + graphCurves(listOfListsOfPoints) == + graphCurves(listOfListsOfPoints, pointColorDefault(),_ + lineColorDefault(), pointSizeDefault(),nil()) + + graphCurves(listOfListsOfPoints,optionsList) == + graphCurves(listOfListsOfPoints, pointColorDefault(),_ + lineColorDefault(), pointSizeDefault(),optionsList) + + graphCurves(listOfListsOfPoints,ptColor,lineColor,ptSize,optionsList) == + len := #listOfListsOfPoints + listOfPointColors : L PAL := [ptColor for i in 1..len] + listOfLineColors : L PAL := [lineColor for i in 1..len] + listOfPointSizes : L PI := [ptSize for i in 1..len] + makeGraphImage(listOfListsOfPoints,listOfPointColors, _ + listOfLineColors,listOfPointSizes,optionsList) + +--% Functions that return Two Dimensional Viewports + + drawCurves(listOfListsOfPoints,optionsList) == + drawCurves(listOfListsOfPoints,pointColorDefault(),_ + lineColorDefault(),pointSizeDefault(),optionsList) + + drawCurves(ptLists:L L P,ptColor:PAL,lColor:PAL,ptSize:PI,optList:L DROP) == + v := viewport2D() + options(v,optList) + g := graphCurves(ptLists,ptColor,lColor,ptSize,optList) + putGraph(v,g,1) + makeViewport2D v + +--% Coercions + + coerce(graf:GRIMAGE):VIEW2D == + if (key graf = 0) then makeGraphImage graf + v := viewport2D() + title(v,"VIEW2D") +-- dimensions(v,viewPosDefault().1,viewPosDefault().2,viewSizeDefault().1,viewSizeDefault().2) + putGraph(v,graf,1::PI) + makeViewport2D v + +@ +<>= +"VIEW" [color="#FF4488",href="bookvol10.4.pdf#nameddest=VIEW"] +"FIELD" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FIELD"] +"RADCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=RADCAT"] +"FLAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FLAGG"] +"VIEW" -> "FIELD" +"VIEW" -> "RADCAT" +"VIEW" -> "FLAGG" + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter W} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package WEIER WeierstrassPreparation} +\pagehead{WeierstrassPreparation}{WEIER} +\pagepic{ps/v104weierstrasspreparation.ps}{WEIER}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package WEIER WeierstrassPreparation +++ Author:William H. Burge +++ Date Created:Sept 1988 +++ Date Last Updated:Feb 15 1992 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ Examples: +++ References: +++ Description: This package implements the Weierstrass preparation +++ theorem f or multivariate power series. +++ weierstrass(v,p) where v is a variable, and p is a +++ TaylorSeries(R) in which the terms +++ of lowest degree s must include c*v**s where c is a constant,s>0, +++ is a list of TaylorSeries coefficients A[i] of the +++ equivalent polynomial +++ A = A[0] + A[1]*v + A[2]*v**2 + ... + A[s-1]*v**(s-1) + v**s +++ such that p=A*B , B being a TaylorSeries of minimum degree 0 +WeierstrassPreparation(R): Defn == Impl where + R : Field + VarSet==>Symbol + SMP ==> Polynomial R + PS ==> InnerTaylorSeries SMP + NNI ==> NonNegativeInteger + ST ==> Stream + StS ==> Stream SMP + STPS==>StreamTaylorSeriesOperations + STTAYLOR==>StreamTaylorSeriesOperations + SUP==> SparseUnivariatePolynomial(SMP) + ST2==>StreamFunctions2 + SMPS==> TaylorSeries(R) + L==>List + null ==> empty? + likeUniv ==> univariate + coef ==> coefficient$SUP + nil ==> empty + + + Defn ==> with + + crest:(NNI->( StS-> StS)) + ++\spad{crest n} is used internally. + cfirst:(NNI->( StS-> StS)) + ++\spad{cfirst n} is used internally. + sts2stst:(VarSet,StS)->ST StS + ++\spad{sts2stst(v,s)} is used internally. + clikeUniv:VarSet->(SMP->SUP) + ++\spad{clikeUniv(v)} is used internally. + weierstrass:(VarSet,SMPS)->L SMPS + ++\spad{weierstrass(v,ts)} where v is a variable and ts is + ++ a TaylorSeries, impements the Weierstrass Preparation + ++ Theorem. The result is a list of TaylorSeries that + ++ are the coefficients of the equivalent series. + qqq:(NNI,SMPS,ST SMPS)->((ST SMPS)->ST SMPS) + ++\spad{qqq(n,s,st)} is used internally. + + Impl ==> add + import TaylorSeries(R) + import StreamTaylorSeriesOperations SMP + import StreamTaylorSeriesOperations SMPS + + + map1==>map$(ST2(SMP,SUP)) + map2==>map$(ST2(StS,SMP)) + map3==>map$(ST2(StS,StS)) + transback:ST SMPS->L SMPS + transback smps== + if null smps + then nil()$(L SMPS) + else + if null first (smps:(ST StS)) + then nil()$(L SMPS) + else + cons(map2(first,smps:ST StS):SMPS, + transback(map3(rest,smps:ST StS):(ST SMPS)))$(L SMPS) + + + clikeUniv(var)==likeUniv(#1,var) + mind:(NNI,StS)->NNI + mind(n, sts)== + if null sts + then error "no mindegree" + else if first sts=0 + then mind(n+1,rest sts) + else n + mindegree (sts:StS):NNI== mind(0,sts) + + + streamlikeUniv:(SUP,NNI)->StS + streamlikeUniv(p:SUP,n:NNI): StS == + if n=0 + then cons(coef (p,0),nil()$StS) + else cons(coef (p,n),streamlikeUniv(p,(n-1):NNI)) + + transpose:ST StS->ST StS + transpose(s:ST StS)==delay( + if null s + then nil()$(ST StS) + else cons(map2(first,s),transpose(map3(rest,rst s)))) + + zp==>map$StreamFunctions3(SUP,NNI,StS) + + sts2stst(var, sts)== + zp(streamlikeUniv(#1,#2), + map1(clikeUniv var, sts),(integers 0):(ST NNI)) + + tp:(VarSet,StS)->ST StS + tp(v,sts)==transpose sts2stst(v,sts) + map4==>map$(ST2 (StS,StS)) + maptake:(NNI,ST StS)->ST SMPS + maptake(n,p)== map4(cfirst n,p) pretend ST SMPS + mapdrop:(NNI,ST StS)->ST SMPS + mapdrop(n,p)== map4(crest n,p) pretend ST SMPS + YSS==>Y$ParadoxicalCombinatorsForStreams(SMPS) + weier:(VarSet,StS)->ST SMPS + weier(v,sts)== + a:=mindegree sts + if a=0 + then error "has constant term" + else + p:=tp(v,sts) pretend (ST SMPS) + b:StS:=rest(((first p pretend StS)),a::NNI) + c:=retractIfCan first b + c case "failed"=>_ + error "the coefficient of the lowest degree of the variable should _ + be a constant" + e:=recip b + f:= if e case "failed" + then error "no reciprocal" + else e::StS + q:=(YSS qqq(a,f:SMPS,rest p)) + maptake(a,(p*q) pretend ST StS) + + cfirst n== first(#1,n)$StS + crest n== rest(#1,n)$StS + qq:(NNI,SMPS,ST SMPS,ST SMPS)->ST SMPS + qq(a,e,p,c)== + cons(e,(-e)*mapdrop(a,(p*c)pretend(ST StS))) + qqq(a,e,p)== qq(a,e,p,#1) + wei:(VarSet,SMPS)->ST SMPS + wei(v:VarSet,s:SMPS)==weier(v,s:StS) + weierstrass(v,smps)== transback wei (v,smps) + +@ +<>= +"WEIER" [color="#FF4488",href="bookvol10.4.pdf#nameddest=WEIER"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"WEIER" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package WFFINTBS WildFunctionFieldIntegralBasis} \pagehead{WildFunctionFieldIntegralBasis}{WFFINTBS} \pagepic{ps/v104wildfunctionfieldintegralbasis.ps}{WFFINTBS}{1.00} @@ -89510,12 +97998,3692 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter X} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package XEXPPKG XExponentialPackage} +\pagehead{XExponentialPackage}{XEXPPKG} +\pagepic{ps/v104xexponentialpackage.ps}{XEXPPKG}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +"XEXPPKG" [color="#FF4488",href="bookvol10.4.pdf#nameddest=XEXPPKG"] + +@ +<>= +)abbrev package XEXPPKG XExponentialPackage +++ Author: Michel Petitot (petitot@lifl.fr). +++ Date Created: 91 +++ Date Last Updated: 7 Juillet 92 +++ Fix History: compilation v 2.1 le 13 dec 98 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This package provides computations of logarithms and exponentials +++ for polynomials in non-commutative +++ variables. \newline Author: Michel Petitot (petitot@lifl.fr). + +XExponentialPackage(R, VarSet, XPOLY): Public == Private where + RN ==> Fraction Integer + NNI ==> NonNegativeInteger + I ==> Integer + R : Join(Ring, Module RN) + -- R : Field + VarSet : OrderedSet + XPOLY : XPolynomialsCat(VarSet, R) + + Public == with + exp: (XPOLY, NNI) -> XPOLY + ++ \axiom{exp(p, n)} returns the exponential of \axiom{p} + ++ truncated at order \axiom{n}. + log: (XPOLY, NNI) -> XPOLY + ++ \axiom{log(p, n)} returns the logarithm of \axiom{p} + ++ truncated at order \axiom{n}. + Hausdorff: (XPOLY, XPOLY, NNI) -> XPOLY + ++ \axiom{Hausdorff(a,b,n)} returns log(exp(a)*exp(b)) + ++ truncated at order \axiom{n}. + + Private == add + + log (p,n) == + p1 : XPOLY := p - 1 + not quasiRegular? p1 => + error "constant term <> 1, impossible log" + s : XPOLY := 0 -- resultat + k : I := n :: I + for i in 1 .. n repeat + k1 :RN := 1/k + k2 : R := k1 * 1$R + s := trunc( trunc(p1,i) * (k2 :: XPOLY - s) , i) + k := k - 1 + s + + exp (p,n) == + not quasiRegular? p => + error "constant term <> 0, exp impossible" + p = 0 => 1 + s : XPOLY := 1$XPOLY -- resultat + k : I := n :: I + for i in 1 .. n repeat + k1 :RN := 1/k + k2 : R := k1 * 1$R + s := trunc( 1 +$XPOLY k2 * trunc(p,i) * s , i) + k := k - 1 + s + + Hausdorff(p,q,n) == + p1: XPOLY := exp(p,n) + q1: XPOLY := exp(q,n) + log(p1*q1, n) + +@ +<>= +"XEXPPKG" [color="#FF4488",href="bookvol10.4.pdf#nameddest=XEXPPKG"] +"XPOLYC" [color="#4488FF",href="bookvol10.2.pdf#nameddest=XPOLYC"] +"XEXPPKG" -> "XPOLYC" + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter Y} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter Z} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ZDSOLVE ZeroDimensionalSolvePackage} +Based on triangular decompositions and the {\bf RealClosure} constructor, +the pacakge {\bf ZeroDimensionalSolvePackage} provides operations for +computing symbolically the real or complex roots of polynomial systems +with finitely many solutions. +<>= +-- zerodim.spad.pamphlet ZeroDimensionalSolvePackage.input +)spool ZeroDimensionalSolvePackage.output +)set message test on +)set message auto off +)clear all +--S 1 of 28 +R := Integer +--R +--R +--R (1) Integer +--R Type: Domain +--E 1 + +--S 2 of 28 +ls : List Symbol := [x,y,z,t] +--R +--R +--R (2) [x,y,z,t] +--R Type: List Symbol +--E 2 + +--S 3 of 28 +ls2 : List Symbol := [x,y,z,t,new()$Symbol] +--R +--R +--R (3) [x,y,z,t,%A] +--R Type: List Symbol +--E 3 + +--S 4 of 28 +pack := ZDSOLVE(R,ls,ls2) +--R +--R +--R (4) ZeroDimensionalSolvePackage(Integer,[x,y,z,t],[x,y,z,t,%A]) +--R Type: Domain +--E 4 + +--S 5 of 28 +p1 := x**2*y*z + x*y**2*z + x*y*z**2 + x*y*z + x*y + x*z + y*z +--R +--R +--R 2 2 2 +--R (5) x y z + (x y + (x + x + 1)y + x)z + x y +--R Type: Polynomial Integer +--E 5 + +--S 6 of 28 +p2 := x**2*y**2*z + x*y**2*z**2 + x**2*y*z + x*y*z + y*z + x + z +--R +--R +--R 2 2 2 2 2 +--R (6) x y z + (x y + (x + x + 1)y + 1)z + x +--R Type: Polynomial Integer +--E 6 + +--S 7 of 28 +p3 := x**2*y**2*z**2 + x**2*y**2*z + x*y**2*z + x*y*z + x*z + z + 1 +--R +--R +--R 2 2 2 2 2 +--R (7) x y z + ((x + x)y + x y + x + 1)z + 1 +--R Type: Polynomial Integer +--E 7 + +--S 8 of 28 +lp := [p1, p2, p3] +--R +--R +--R (8) +--R 2 2 2 +--R [x y z + (x y + (x + x + 1)y + x)z + x y, +--R 2 2 2 2 2 +--R x y z + (x y + (x + x + 1)y + 1)z + x, +--R 2 2 2 2 2 +--R x y z + ((x + x)y + x y + x + 1)z + 1] +--R Type: List Polynomial Integer +--E 8 + +--S 9 of 28 +triangSolve(lp)$pack +--R +--R +--R (9) +--R [ +--R { +--R 20 19 18 17 16 15 14 13 12 +--R z - 6z - 41z + 71z + 106z + 92z + 197z + 145z + 257z +--R + +--R 11 10 9 8 7 6 5 4 3 +--R 278z + 201z + 278z + 257z + 145z + 197z + 92z + 106z + 71z +--R + +--R 2 +--R - 41z - 6z + 1 +--R , +--R +--R 19 18 17 16 +--R 14745844z + 50357474z - 130948857z - 185261586z +--R + +--R 15 14 13 12 +--R - 180077775z - 338007307z - 275379623z - 453190404z +--R + +--R 11 10 9 8 +--R - 474597456z - 366147695z - 481433567z - 430613166z +--R + +--R 7 6 5 4 +--R - 261878358z - 326073537z - 163008796z - 177213227z +--R + +--R 3 2 +--R - 104356755z + 65241699z + 9237732z - 1567348 +--R * +--R y +--R + +--R 19 18 17 16 15 +--R 1917314z + 6508991z - 16973165z - 24000259z - 23349192z +--R + +--R 14 13 12 11 10 +--R - 43786426z - 35696474z - 58724172z - 61480792z - 47452440z +--R + +--R 9 8 7 6 5 +--R - 62378085z - 55776527z - 33940618z - 42233406z - 21122875z +--R + +--R 4 3 2 +--R - 22958177z - 13504569z + 8448317z + 1195888z - 202934 +--R , +--R 3 2 3 2 2 2 +--R ((z - 2z)y + (- z - z - 2z - 1)y - z - z + 1)x + z - 1} +--R ] +--R Type: List RegularChain(Integer,[x,y,z,t]) +--E 9 + +--S 10 of 28 +univariateSolve(lp)$pack +--R +--R +--R (10) +--R [ +--R [ +--R complexRoots = +--R 12 11 10 9 8 7 6 5 4 3 +--R ? - 12? + 24? + 4? - 9? + 27? - 21? + 27? - 9? + 4? +--R + +--R 2 +--R 24? - 12? + 1 +--R , +--R +--R coordinates = +--R [ +--R 11 10 9 8 7 6 +--R 63x + 62%A - 721%A + 1220%A + 705%A - 285%A + 1512%A +--R + +--R 5 4 3 2 +--R - 735%A + 1401%A - 21%A + 215%A + 1577%A - 142 +--R , +--R +--R 11 10 9 8 7 6 +--R 63y - 75%A + 890%A - 1682%A - 516%A + 588%A - 1953%A +--R + +--R 5 4 3 2 +--R 1323%A - 1815%A + 426%A - 243%A - 1801%A + 679 +--R , +--R z - %A] +--R ] +--R , +--R +--R 6 5 4 3 2 +--R [complexRoots= ? + ? + ? + ? + ? + ? + 1, +--R 5 3 +--R coordinates= [x - %A ,y - %A ,z - %A]] +--R , +--R 2 +--R [complexRoots= ? + 5? + 1,coordinates= [x - 1,y - 1,z - %A]]] +--RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) +--E 10 + +--S 11 of 28 +lr := realSolve(lp)$pack +--R +--R +--R (11) +--R [ +--R [%B1, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B1 - ------- %B1 - ------- %B1 + -------- %B1 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B1 + -------- %B1 + ------ %B1 + --------- %B1 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B1 + --------- %B1 + --------- %B1 + --------- %B1 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B1 + ------- %B1 + ------ %B1 + ------- %B1 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B1 + -------- %B1 - ---- %B1 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B1 + ------ %B1 + ------- %B1 - ------- %B1 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B1 - -------- %B1 - -------- %B1 - ------ %B1 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B1 - -------- %B1 - -------- %B1 - ------- %B1 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B1 - -------- %B1 - -------- %B1 - -------- %B1 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B1 - -------- %B1 - ------- %B1 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B2, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B2 - ------- %B2 - ------- %B2 + -------- %B2 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B2 + -------- %B2 + ------ %B2 + --------- %B2 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B2 + --------- %B2 + --------- %B2 + --------- %B2 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B2 + ------- %B2 + ------ %B2 + ------- %B2 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B2 + -------- %B2 - ---- %B2 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B2 + ------ %B2 + ------- %B2 - ------- %B2 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B2 - -------- %B2 - -------- %B2 - ------ %B2 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B2 - -------- %B2 - -------- %B2 - ------- %B2 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B2 - -------- %B2 - -------- %B2 - -------- %B2 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B2 - -------- %B2 - ------- %B2 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B3, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B3 - ------- %B3 - ------- %B3 + -------- %B3 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B3 + -------- %B3 + ------ %B3 + --------- %B3 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B3 + --------- %B3 + --------- %B3 + --------- %B3 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B3 + ------- %B3 + ------ %B3 + ------- %B3 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B3 + -------- %B3 - ---- %B3 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B3 + ------ %B3 + ------- %B3 - ------- %B3 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B3 - -------- %B3 - -------- %B3 - ------ %B3 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B3 - -------- %B3 - -------- %B3 - ------- %B3 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B3 - -------- %B3 - -------- %B3 - -------- %B3 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B3 - -------- %B3 - ------- %B3 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B4, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B4 - ------- %B4 - ------- %B4 + -------- %B4 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B4 + -------- %B4 + ------ %B4 + --------- %B4 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B4 + --------- %B4 + --------- %B4 + --------- %B4 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B4 + ------- %B4 + ------ %B4 + ------- %B4 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B4 + -------- %B4 - ---- %B4 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B4 + ------ %B4 + ------- %B4 - ------- %B4 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B4 - -------- %B4 - -------- %B4 - ------ %B4 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B4 - -------- %B4 - -------- %B4 - ------- %B4 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B4 - -------- %B4 - -------- %B4 - -------- %B4 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B4 - -------- %B4 - ------- %B4 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B5, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B5 - ------- %B5 - ------- %B5 + -------- %B5 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B5 + -------- %B5 + ------ %B5 + --------- %B5 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B5 + --------- %B5 + --------- %B5 + --------- %B5 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B5 + ------- %B5 + ------ %B5 + ------- %B5 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B5 + -------- %B5 - ---- %B5 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B5 + ------ %B5 + ------- %B5 - ------- %B5 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B5 - -------- %B5 - -------- %B5 - ------ %B5 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B5 - -------- %B5 - -------- %B5 - ------- %B5 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B5 - -------- %B5 - -------- %B5 - -------- %B5 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B5 - -------- %B5 - ------- %B5 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B6, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B6 - ------- %B6 - ------- %B6 + -------- %B6 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B6 + -------- %B6 + ------ %B6 + --------- %B6 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B6 + --------- %B6 + --------- %B6 + --------- %B6 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B6 + ------- %B6 + ------ %B6 + ------- %B6 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B6 + -------- %B6 - ---- %B6 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B6 + ------ %B6 + ------- %B6 - ------- %B6 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B6 - -------- %B6 - -------- %B6 - ------ %B6 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B6 - -------- %B6 - -------- %B6 - ------- %B6 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B6 - -------- %B6 - -------- %B6 - -------- %B6 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B6 - -------- %B6 - ------- %B6 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B7, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B7 - ------- %B7 - ------- %B7 + -------- %B7 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B7 + -------- %B7 + ------ %B7 + --------- %B7 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B7 + --------- %B7 + --------- %B7 + --------- %B7 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B7 + ------- %B7 + ------ %B7 + ------- %B7 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B7 + -------- %B7 - ---- %B7 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B7 + ------ %B7 + ------- %B7 - ------- %B7 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B7 - -------- %B7 - -------- %B7 - ------ %B7 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B7 - -------- %B7 - -------- %B7 - ------- %B7 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B7 - -------- %B7 - -------- %B7 - -------- %B7 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B7 - -------- %B7 - ------- %B7 + ------ +--R 26117 705159 705159 705159 +--R ] +--R , +--R +--R [%B8, +--R +--R 1184459 19 2335702 18 5460230 17 79900378 16 +--R ------- %B8 - ------- %B8 - ------- %B8 + -------- %B8 +--R 1645371 548457 182819 1645371 +--R + +--R 43953929 15 13420192 14 553986 13 193381378 12 +--R -------- %B8 + -------- %B8 + ------ %B8 + --------- %B8 +--R 548457 182819 3731 1645371 +--R + +--R 35978916 11 358660781 10 271667666 9 118784873 8 +--R -------- %B8 + --------- %B8 + --------- %B8 + --------- %B8 +--R 182819 1645371 1645371 548457 +--R + +--R 337505020 7 1389370 6 688291 5 3378002 4 +--R --------- %B8 + ------- %B8 + ------ %B8 + ------- %B8 +--R 1645371 11193 4459 42189 +--R + +--R 140671876 3 32325724 2 8270 9741532 +--R --------- %B8 + -------- %B8 - ---- %B8 - ------- +--R 1645371 548457 343 1645371 +--R , +--R +--R 91729 19 487915 18 4114333 17 1276987 16 +--R - ------ %B8 + ------ %B8 + ------- %B8 - ------- %B8 +--R 705159 705159 705159 235053 +--R + +--R 13243117 15 16292173 14 26536060 13 722714 12 +--R - -------- %B8 - -------- %B8 - -------- %B8 - ------ %B8 +--R 705159 705159 705159 18081 +--R + +--R 5382578 11 15449995 10 14279770 9 6603890 8 +--R - ------- %B8 - -------- %B8 - -------- %B8 - ------- %B8 +--R 100737 235053 235053 100737 +--R + +--R 409930 7 37340389 6 34893715 5 26686318 4 +--R - ------ %B8 - -------- %B8 - -------- %B8 - -------- %B8 +--R 6027 705159 705159 705159 +--R + +--R 801511 3 17206178 2 4406102 377534 +--R - ------ %B8 - -------- %B8 - ------- %B8 + ------ +--R 26117 705159 705159 705159 +--R ] +--R ] +--R Type: List List RealClosure Fraction Integer +--E 11 + +--S 12 of 28 +# lr +--R +--R +--R (12) 8 +--R Type: PositiveInteger +--E 12 + +--S 13 of 28 +[ [approximate(r,1/1000000) for r in point] for point in lr] +--R +--R +--R (13) +--R [ +--R 10048059 +--R [- --------, +--R 2097152 +--R +--R 4503057316985387943524397913838966414596731976211768219335881208385516_ +--R 314058924567176091423629695777403099833360761048898228916578137094309_ +--R 838597331137202584846939132376157019506760357601165917454986815382098_ +--R 789094851523420392811293126141329856546977145464661495487825919941188_ +--R 447041722440491921567263542158028061437758844364634410045253024786561_ +--R 923163288214175 +--R / +--R 4503057283025245488516511806985826635083100693757320465280554706865644_ +--R 949577509916867201889438090408354817931718593862797624551518983570793_ +--R 048774424291488708829840324189200301436123314860200821443733790755311_ +--R 243632919864895421704228949571290016119498807957023663865443069392027_ +--R 148979688266712323356043491523434068924275280417338574817381189277066_ +--R 143312396681216 +--R , +--R +--R 2106260768823475073894798680486016596249607148690685538763683715020639_ +--R 680858649650790055889505646893309447097099937802187329095325898785247_ +--R 249020717504983660482075156618738724514685333060011202964635166381351_ +--R 543255982200250305283981086837110614842307026091211297929876896285681_ +--R 830479054760056380762664905618462055306047816191782011588703789138988_ +--R 1895 +--R / +--R 2106260609498464192472113804816474175341962953296434102413903142368757_ +--R 967685273888585590975965211778862189872881953943640246297357061959812_ +--R 326103659799025126863258676567202342106877031710184247484181423288921_ +--R 837681237062708470295706218485928867400771937828499200923760593314168_ +--R 901000666373896347598118228556731037072026474496776228383762993923280_ +--R 0768 +--R ] +--R , +--R +--R 2563013 +--R [- -------, +--R 2097152 +--R +--R - +--R 2611346176791927789698617693237757719238259963063541781922752330440_ +--R 189899668072928338490768623593207442125925986733815932243504809294_ +--R 837523030237337236806668167446173001727271353311571242897 +--R / +--R 1165225400505222530583981916004589143757226610276858990008790134819_ +--R 914940922413753983971394019523433320408139928153188829495755455163_ +--R 963417619308395977544797140231469234269034921938055593984 +--R , +--R +--R 3572594550275917221096588729615788272998517054675603239578198141006034_ +--R 091735282826590621902304466963941971038923304526273329316373757450061_ +--R 9789892286110976997087250466235373 +--R / +--R 1039548269345598936877071244834026055800814551120170592200522366591759_ +--R 409659486442339141029452950265179989960104811875822530205346505131581_ +--R 2439017247289173865014702966308864 +--R ] +--R , +--R +--R 1715967 +--R [- -------, +--R 2097152 +--R +--R - +--R 4213093533784303521084839517977082390377261503969586224828998436606_ +--R 030656076359374564813773498376603121267822565801436206939519951465_ +--R 18222580524697287410022543952491 +--R / +--R 9441814144185374458649692034349224052436597470966253663930641960795_ +--R 805882585493199840191699917659443264824641135187383583888147867340_ +--R 19307857605820364195856822304768 +--R , +--R +--R 7635833347112644222515625424410831225347475669008589338834162172501904_ +--R 994376346730876809042845208919919925302105720971453918982731389072591_ +--R 4035 +--R / +--R 2624188764086097199784297610478066633934230467895851602278580978503784_ +--R 549205788499019640602266966026891580103543567625039018629887141284916_ +--R 75648 +--R ] +--R , +--R +--R 437701 +--R [- -------, +--R 2097152 +--R +--R 1683106908638349588322172332654225913562986313181951031452750161441497_ +--R 473455328150721364868355579646781603507777199075077835213366484533654_ +--R 91383623741304759 +--R / +--R 1683106868095213389001709982705913638963077668731226111167785188004907_ +--R 425226298680325887810962614140298597366984264887998908377068799998454_ +--R 23381649008099328 +--R , +--R +--R 4961550109835010186422681013422108735958714801003760639707968096646912_ +--R 82670847283444311723917219104249213450966312411133 +--R / +--R 4961549872757738315509192078210209029852897118611097126236384040829376_ +--R 59261914313170254867464792718363492160482442215424 +--R ] +--R , +--R +--R 222801 +--R [-------, +--R 2097152 +--R +--R - +--R 8994884880402428265107595121970691427136045692541978275573001865213_ +--R 759921588137716696126349101655220195142994932299137183241705867672_ +--R 383477 +--R / +--R 1167889998665026372177765100691888582708969960229934769690835752457_ +--R 077779416435209473767866507769405888942764587718542434255625992456_ +--R 372224 +--R , +--R +--R - +--R 2389704888133156878320801544373808395612771509208491019847452991885_ +--R 509546519525467839016613593999693886640036283570552321155037871291_ +--R 458703265 +--R / +--R 5355487273645096326090403286689931905988225444685411433221593833681_ +--R 192957562833671468654290340746993656285925599117602120446183443145_ +--R 479421952 +--R ] +--R , +--R +--R 765693 +--R [-------, +--R 2097152 +--R +--R 8558969219816716267873244761178198088724698958616670140213765754322002_ +--R 303251685786118678330840203328837654339523418704917749518340772512899_ +--R 000391009630373148561 +--R / +--R 2941442445533010790976428411376393499815580215945856917906452535495723_ +--R 013856818941702330228779890141296236721138154231997238917322156711965_ +--R 2444639331719460159488 +--R , +--R +--R - +--R 2057618230582572101247650324860242561111302581543588808843923662767_ +--R 549382241659362712290777612800192921420574408948085193743688582762_ +--R 2246433251878894899015 +--R / +--R 2671598203325735538097952353501450220576313759890835097091722520642_ +--R 710198771902667183948906289863714759678360292483949204616471537777_ +--R 775324180661095366656 +--R ] +--R , +--R +--R 5743879 +--R [-------, +--R 2097152 +--R +--R 1076288816968906847955546394773570208171456724942618614023663123574768_ +--R 960850434263971398072546592772662158833449797698617455397887562900072_ +--R 984768000608343553189801693408727205047612559889232757563830528688953_ +--R 535421809482771058917542602890060941949620874083007858366669453501766_ +--R 24841488732463225 +--R / +--R 3131768957080317946648461940023552044190376613458584986228549631916196_ +--R 601616219781765615532532294746529648276430583810894079374566460757823_ +--R 146888581195556029208515218838883200318658407469399426063260589828612_ +--R 309231596669129707986481319851571942927230340622934023923486703042068_ +--R 1530440845099008 +--R , +--R +--R - +--R 2113286699185750918364120475565458437870172489865485994389828135335_ +--R 264444665284557526492734931691731407872701432935503473348172076098_ +--R 720545849008780077564160534317894688366119529739980502944162668550_ +--R 098127961950496210221942878089359674925850594427768502251789758706_ +--R 752831632503615 +--R / +--R 1627615584937987580242906624347104580889144466168459718043153839408_ +--R 372525533309808070363699585502216011211087103263609551026027769414_ +--R 087391148126221168139781682587438075322591466131939975457200522349_ +--R 838568964285634448018562038272378787354460106106141518010935617205_ +--R 1706396253618176 +--R ] +--R , +--R +--R 19739877 +--R [--------, +--R 2097152 +--R +--R - +--R 2997249936832703303799015804861520949215040387500707177701285766720_ +--R 192530579422478953566024359860143101547801638082771611160372212874_ +--R 847778035809872843149225484238365858013629341705321702582333350918_ +--R 009601789937023985935304900460493389873837030853410347089908880814_ +--R 853981132018464582458800615394770741699487295875960210750215891948_ +--R 814476854871031530931295467332190133702671098200902282300510751860_ +--R 7185928457030277807397796525813862762239286996106809728023675 +--R / +--R 2308433274852278590728910081191811023906504141321432646123936794873_ +--R 933319270608960702138193417647898360620229519176632937631786851455_ +--R 014766027206259022252505551741823688896883806636602574431760472240_ +--R 292093196729475160247268834121141893318848728661844434927287285112_ +--R 897080767552864895056585864033178565910387065006112801516403522741_ +--R 037360990556054476949527059227070809593049491257519554708879259595_ +--R 52929920110858560812556635485429471554031675979542656381353984 +--R , +--R +--R - +--R 5128189263548228489096276397868940080600938410663080459407966335845_ +--R 009264109490520459825316250084723010047035024497436523038925818959_ +--R 289312931584701353927621435434398674263047293909122850133851990696_ +--R 490231566094371994333795070782624011727587749989296611277318372294_ +--R 624207116537910436554574146082884701305543912620419354885410735940_ +--R 157775896602822364575864611831512943973974715166920465061850603762_ +--R 87516256195847052412587282839139194642913955 +--R / +--R 2288281939778439330531208793181290471183631092455368990386390824243_ +--R 509463644236249773080647438987739144921607794682653851741189091711_ +--R 741868145114978337284191822497675868358729486644730856622552687209_ +--R 203724411800481405702837198310642291275676195774614443815996713502_ +--R 629391749783590041470860127752372996488627742672487622480063268808_ +--R 889324891850842494934347337603075939980268208482904859678177751444_ +--R 65749979827872616963053217673201717237252096 +--R ] +--R ] +--R Type: List List Fraction Integer +--E 13 + +--S 14 of 28 +lpr := positiveSolve(lp)$pack +--R +--R +--R (14) [] +--R Type: List List RealClosure Fraction Integer +--E 14 + +--S 15 of 28 +f0 := x**3 + y + z + t- 1 +--R +--R +--R 3 +--R (15) z + y + x + t - 1 +--R Type: Polynomial Integer +--E 15 + +--S 16 of 28 +f1 := x + y**3 + z + t -1 +--R +--R +--R 3 +--R (16) z + y + x + t - 1 +--R Type: Polynomial Integer +--E 16 + +--S 17 of 28 +f2 := x + y + z**3 + t-1 +--R +--R +--R 3 +--R (17) z + y + x + t - 1 +--R Type: Polynomial Integer +--E 17 + +--S 18 of 28 +f3 := x + y + z + t**3 -1 +--R +--R +--R 3 +--R (18) z + y + x + t - 1 +--R Type: Polynomial Integer +--E 18 + +--S 19 of 28 +lf := [f0, f1, f2, f3] +--R +--R +--R (19) +--R 3 3 3 3 +--R [z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1] +--R Type: List Polynomial Integer +--E 19 + +--S 20 of 28 +lts := triangSolve(lf)$pack +--R +--R +--R (20) +--R [ +--R 2 3 3 +--R {t + t + 1, z - z - t + t, +--R +--R 3 2 2 3 6 3 3 2 +--R (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z +--R + +--R 6 3 9 6 3 +--R (3t - 6t + 3)z + t - 3t + 5t - 3t +--R , +--R x + y + z} +--R , +--R +--R 16 13 10 7 4 2 +--R {t - 6t + 9t + 4t + 15t - 54t + 27, +--R +--R 15 14 13 12 11 +--R 4907232t + 40893984t - 115013088t + 22805712t + 36330336t +--R + +--R 10 9 8 7 +--R 162959040t - 159859440t - 156802608t + 117168768t +--R + +--R 6 5 4 3 +--R 126282384t - 129351600t + 306646992t + 475302816t +--R + +--R 2 +--R - 1006837776t - 237269088t + 480716208 +--R * +--R z +--R + +--R 54 51 48 46 45 43 42 +--R 48t - 912t + 8232t - 72t - 46848t + 1152t + 186324t +--R + +--R 40 39 38 37 36 35 +--R - 3780t - 543144t - 3168t - 21384t + 1175251t + 41184t +--R + +--R 34 33 32 31 30 +--R 278003t - 1843242t - 301815t - 1440726t + 1912012t +--R + +--R 29 28 27 26 25 +--R 1442826t + 4696262t - 922481t - 4816188t - 10583524t +--R + +--R 24 23 22 21 20 +--R - 208751t + 11472138t + 16762859t - 857663t - 19328175t +--R + +--R 19 18 17 16 15 +--R - 18270421t + 4914903t + 22483044t + 12926517t - 8605511t +--R + +--R 14 13 12 11 10 +--R - 17455518t - 5014597t + 8108814t + 8465535t + 190542t +--R + +--R 9 8 7 6 5 4 +--R - 4305624t - 2226123t + 661905t + 1169775t + 226260t - 209952t +--R + +--R 3 +--R - 141183t + 27216t +--R , +--R +--R 3 2 2 3 6 3 3 2 +--R (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z +--R + +--R 6 3 9 6 3 +--R (3t - 6t + 3)z + t - 3t + 5t - 3t +--R , +--R 3 +--R x + y + z + t - 1} +--R , +--R 2 2 2 +--R {t,z - 1,y - 1,x + y}, {t - 1,z,y - 1,x + y}, {t - 1,z - 1,z y + 1,x}, +--R +--R 16 13 10 7 4 2 +--R {t - 6t + 9t + 4t + 15t - 54t + 27, +--R +--R 29 28 27 26 25 +--R 4907232t + 40893984t - 115013088t - 1730448t - 168139584t +--R + +--R 24 23 22 21 +--R 738024480t - 195372288t + 315849456t - 2567279232t +--R + +--R 20 19 18 17 +--R 937147968t + 1026357696t + 4780488240t - 2893767696t +--R + +--R 16 15 14 13 +--R - 5617160352t - 3427651728t + 5001100848t + 8720098416t +--R + +--R 12 11 10 9 +--R 2331732960t - 499046544t - 16243306272t - 9748123200t +--R + +--R 8 7 6 5 +--R 3927244320t + 25257280896t + 10348032096t - 17128672128t +--R + +--R 4 3 2 +--R - 14755488768t + 544086720t + 10848188736t + 1423614528t +--R + +--R - 2884297248 +--R * +--R z +--R + +--R 68 65 62 60 59 57 56 +--R - 48t + 1152t - 13560t + 360t + 103656t - 7560t - 572820t +--R + +--R 54 53 52 51 50 49 +--R 71316t + 2414556t + 2736t - 402876t - 7985131t - 49248t +--R + +--R 48 47 46 45 44 +--R 1431133t + 20977409t + 521487t - 2697635t - 43763654t +--R + +--R 43 42 41 40 39 +--R - 3756573t - 2093410t + 71546495t + 19699032t + 35025028t +--R + +--R 38 37 36 35 34 +--R - 89623786t - 77798760t - 138654191t + 87596128t + 235642497t +--R + +--R 33 32 31 30 29 +--R 349607642t - 93299834t - 551563167t - 630995176t + 186818962t +--R + +--R 28 27 26 25 +--R 995427468t + 828416204t - 393919231t - 1076617485t +--R + +--R 24 23 22 21 +--R - 1609479791t + 595738126t + 1198787136t + 4342832069t +--R + +--R 20 19 18 17 +--R - 2075938757t - 4390835799t - 4822843033t + 6932747678t +--R + +--R 16 15 14 13 +--R 6172196808t + 1141517740t - 4981677585t - 9819815280t +--R + +--R 12 11 10 9 +--R - 7404299976t - 157295760t + 29124027630t + 14856038208t +--R + +--R 8 7 6 5 +--R - 16184101410t - 26935440354t - 3574164258t + 10271338974t +--R + +--R 4 3 2 +--R 11191425264t + 6869861262t - 9780477840t - 3586674168t + 2884297248 +--R , +--R +--R 3 3 2 6 3 9 6 3 +--R (3z + (6t - 6)z + (6t - 12t + 3)z + 2t - 6t + t + 3t)y +--R + +--R 3 3 6 3 2 9 6 3 12 9 +--R (3t - 3)z + (6t - 12t + 6)z + (4t - 12t + 11t - 3)z + t - 4t +--R + +--R 6 3 +--R 5t - 2t +--R , +--R 3 +--R x + y + z + t - 1} +--R , +--R 2 +--R {t - 1,z - 1,y,x + z}, +--R +--R 8 7 6 5 4 3 2 +--R {t + t + t - 2t - 2t - 2t + 19t + 19t - 8, +--R +--R 7 6 5 4 3 +--R 2395770t + 3934440t - 3902067t - 10084164t - 1010448t +--R + +--R 2 +--R 32386932t + 22413225t - 10432368 +--R * +--R z +--R + +--R 7 6 5 4 3 +--R - 463519t + 3586833t + 9494955t - 8539305t - 33283098t +--R + +--R 2 +--R 35479377t + 46263256t - 17419896 +--R , +--R +--R 4 3 3 6 3 2 3 +--R 3z + (9t - 9)z + (12t - 24t + 9)z + (- 152t + 219t - 67)z +--R + +--R 6 4 3 +--R - 41t + 57t + 25t - 57t + 16 +--R * +--R y +--R + +--R 3 4 6 3 3 3 2 +--R (3t - 3)z + (9t - 18t + 9)z + (- 181t + 270t - 89)z +--R + +--R 6 4 3 7 6 4 3 +--R (- 92t + 135t + 49t - 135t + 43)z + 27t - 27t - 54t + 396t +--R + +--R - 486t + 144 +--R , +--R 3 +--R x + y + z + t - 1} +--R , +--R 3 +--R {t,z - t + 1,y - 1,x - 1}, {t - 1,z,y,x}, {t,z - 1,y,x}, {t,z,y - 1,x}, +--R {t,z,y,x - 1}] +--R Type: List RegularChain(Integer,[x,y,z,t]) +--E 20 + +--S 21 of 28 +univariateSolve(lf)$pack +--R +--R +--R (21) +--R [[complexRoots= ?,coordinates= [x - 1,y - 1,z + 1,t - %A]], +--R [complexRoots= ?,coordinates= [x,y - 1,z,t - %A]], +--R [complexRoots= ? - 1,coordinates= [x,y,z,t - %A]], +--R [complexRoots= ?,coordinates= [x - 1,y,z,t - %A]], +--R [complexRoots= ?,coordinates= [x,y,z - 1,t - %A]], +--R [complexRoots= ? - 2,coordinates= [x - 1,y + 1,z,t - 1]], +--R [complexRoots= ?,coordinates= [x + 1,y - 1,z,t - 1]], +--R [complexRoots= ? - 1,coordinates= [x - 1,y + 1,z - 1,t]], +--R [complexRoots= ? + 1,coordinates= [x + 1,y - 1,z - 1,t]], +--R +--R 6 3 2 +--R [complexRoots= ? - 2? + 3? - 3, +--R 3 3 +--R coordinates= [2x + %A + %A - 1,2y + %A + %A - 1,z - %A,t - %A]] +--R , +--R +--R 5 3 2 +--R [complexRoots= ? + 3? - 2? + 3? - 3, +--R 3 +--R coordinates= [x - %A,y - %A,z + %A + 2%A - 1,t - %A]] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - ? - 2? + 3, +--R 3 3 3 +--R coordinates= [x + %A - %A - 1,y + %A - %A - 1,z - %A + 2%A + 1,t - %A]] +--R , +--R [complexRoots= ? + 1,coordinates= [x - 1,y - 1,z,t - %A]], +--R +--R 6 3 2 +--R [complexRoots= ? + 2? + 3? - 3, +--R 3 3 +--R coordinates= [2x - %A - %A - 1,y + %A,2z - %A - %A - 1,t + %A]] +--R , +--R +--R 6 4 3 2 +--R [complexRoots= ? + 12? + 20? - 45? - 42? - 953, +--R +--R coordinates = +--R 5 4 3 2 +--R [12609x + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239, +--R 5 4 3 2 +--R 25218y + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, +--R 5 4 3 2 +--R 25218z + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, +--R 5 4 3 2 +--R 12609t + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239] +--R ] +--R , +--R +--R 5 3 2 +--R [complexRoots= ? + 12? - 16? + 48? - 96, +--R 3 +--R coordinates= [8x + %A + 8%A - 8,2y - %A,2z - %A,2t - %A]] +--R , +--R +--R 5 4 3 2 +--R [complexRoots= ? + ? - 5? - 3? + 9? + 3, +--R +--R coordinates = +--R 3 3 3 +--R [2x - %A + 2%A - 1, 2y + %A - 4%A + 1, 2z - %A + 2%A - 1, +--R 3 +--R 2t - %A + 2%A - 1] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - 3? + 4? - 6? + 13, +--R +--R coordinates = +--R 3 2 3 2 +--R [9x - 2%A + 4%A - %A + 2, 9y + %A - 2%A + 5%A - 1, +--R 3 2 3 2 +--R 9z + %A - 2%A + 5%A - 1, 9t + %A - 2%A - 4%A - 1] +--R ] +--R , +--R +--R 4 2 +--R [complexRoots= ? - 11? + 37, +--R +--R coordinates = +--R 2 2 2 2 +--R [3x - %A + 7,6y + %A + 3%A - 7,3z - %A + 7,6t + %A - 3%A - 7] +--R ] +--R , +--R [complexRoots= ? + 1,coordinates= [x - 1,y,z - 1,t + 1]], +--R [complexRoots= ? + 2,coordinates= [x,y - 1,z - 1,t + 1]], +--R [complexRoots= ? - 2,coordinates= [x,y - 1,z + 1,t - 1]], +--R [complexRoots= ?,coordinates= [x,y + 1,z - 1,t - 1]], +--R [complexRoots= ? - 2,coordinates= [x - 1,y,z + 1,t - 1]], +--R [complexRoots= ?,coordinates= [x + 1,y,z - 1,t - 1]], +--R +--R 4 3 2 +--R [complexRoots= ? + 5? + 16? + 30? + 57, +--R +--R coordinates = +--R 3 2 3 2 +--R [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, +--R 3 2 3 2 +--R 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - ? - 2? + 3, +--R 3 3 3 +--R coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 2? - 8? + 48, +--R +--R coordinates = +--R 3 3 3 +--R [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] +--R ] +--R , +--R +--R 5 4 3 2 +--R [complexRoots= ? + ? - 2? - 4? + 5? + 8, +--R 3 3 3 +--R coordinates= [3x + %A - 1,3y + %A - 1,3z + %A - 1,t - %A]] +--R , +--R 3 +--R [complexRoots= ? + 3? - 1,coordinates= [x - %A,y - %A,z - %A,t - %A]]] +--RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) +--E 21 + +--S 22 of 28 +ts := lts.1 +--R +--R +--R (22) +--R 2 3 3 +--R {t + t + 1, z - z - t + t, +--R +--R 3 2 2 3 6 3 3 2 +--R (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z +--R + +--R 6 3 9 6 3 +--R (3t - 6t + 3)z + t - 3t + 5t - 3t +--R , +--R x + y + z} +--R Type: RegularChain(Integer,[x,y,z,t]) +--E 22 + +univariateSolve(ts)$pack +--S 23 of 28 +--R +--R +--R (23) +--R [ +--R 4 3 2 +--R [complexRoots= ? + 5? + 16? + 30? + 57, +--R +--R coordinates = +--R 3 2 3 2 +--R [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, +--R 3 2 3 2 +--R 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] +--R ] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? - ? - 2? + 3, +--R 3 3 3 +--R coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] +--R , +--R +--R 4 3 2 +--R [complexRoots= ? + 2? - 8? + 48, +--R +--R coordinates = +--R 3 3 3 +--R [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] +--R ] +--R ] +--RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) +--E 23 + +--S 24 of 28 +realSolve(ts)$pack +--R +--R +--R (24) [] +--R Type: List List RealClosure Fraction Integer +--E 24 + +--S 25 of 28 +lr2 := realSolve(lf)$pack +--R +--R +--R (25) +--R [[0,- 1,1,1], [0,0,1,0], [1,0,0,0], [0,0,0,1], [0,1,0,0], [1,0,%B37,- %B37], +--R [1,0,%B38,- %B38], [0,1,%B35,- %B35], [0,1,%B36,- %B36], [- 1,0,1,1], +--R +--R [%B32, +--R +--R 1 15 2 14 1 13 4 12 11 11 4 10 +--R -- %B32 + -- %B32 + -- %B32 - -- %B32 - -- %B32 - -- %B32 +--R 27 27 27 27 27 27 +--R + +--R 1 9 14 8 1 7 2 6 1 5 2 4 3 +--R -- %B32 + -- %B32 + -- %B32 + - %B32 + - %B32 + - %B32 + %B32 +--R 27 27 27 9 3 9 +--R + +--R 4 2 +--R - %B32 - %B32 - 2 +--R 3 +--R , +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B32 + - %B32 + - +--R 3 2 2 +--R , +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B32 + - %B32 + - +--R 3 2 2 +--R ] +--R , +--R +--R [%B33, +--R +--R 1 15 2 14 1 13 4 12 11 11 4 10 +--R -- %B33 + -- %B33 + -- %B33 - -- %B33 - -- %B33 - -- %B33 +--R 27 27 27 27 27 27 +--R + +--R 1 9 14 8 1 7 2 6 1 5 2 4 3 +--R -- %B33 + -- %B33 + -- %B33 + - %B33 + - %B33 + - %B33 + %B33 +--R 27 27 27 9 3 9 +--R + +--R 4 2 +--R - %B33 - %B33 - 2 +--R 3 +--R , +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B33 + - %B33 + - +--R 3 2 2 +--R , +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B33 + - %B33 + - +--R 3 2 2 +--R ] +--R , +--R +--R [%B34, +--R +--R 1 15 2 14 1 13 4 12 11 11 4 10 +--R -- %B34 + -- %B34 + -- %B34 - -- %B34 - -- %B34 - -- %B34 +--R 27 27 27 27 27 27 +--R + +--R 1 9 14 8 1 7 2 6 1 5 2 4 3 +--R -- %B34 + -- %B34 + -- %B34 + - %B34 + - %B34 + - %B34 + %B34 +--R 27 27 27 9 3 9 +--R + +--R 4 2 +--R - %B34 - %B34 - 2 +--R 3 +--R , +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B34 + - %B34 + - +--R 3 2 2 +--R , +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B34 + - %B34 + - +--R 3 2 2 +--R ] +--R , +--R [- 1,1,0,1], [- 1,1,1,0], +--R +--R [%B23, +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B23 + - %B23 + - +--R 3 2 2 +--R , +--R %B30, +--R +--R 1 15 1 14 1 13 2 12 11 11 +--R - %B30 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 +--R 54 27 54 27 54 +--R + +--R 2 10 1 9 7 8 1 7 1 6 1 5 +--R - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 +--R 27 54 27 54 9 6 +--R + +--R 1 4 2 2 1 1 +--R - %B23 + - %B23 - - %B23 - - +--R 9 3 2 2 +--R ] +--R , +--R +--R [%B23, +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B23 + - %B23 + - +--R 3 2 2 +--R , +--R %B31, +--R +--R 1 15 1 14 1 13 2 12 11 11 +--R - %B31 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 +--R 54 27 54 27 54 +--R + +--R 2 10 1 9 7 8 1 7 1 6 1 5 +--R - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 +--R 27 54 27 54 9 6 +--R + +--R 1 4 2 2 1 1 +--R - %B23 + - %B23 - - %B23 - - +--R 9 3 2 2 +--R ] +--R , +--R +--R [%B24, +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B24 + - %B24 + - +--R 3 2 2 +--R , +--R %B28, +--R +--R 1 15 1 14 1 13 2 12 11 11 +--R - %B28 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 +--R 54 27 54 27 54 +--R + +--R 2 10 1 9 7 8 1 7 1 6 1 5 +--R - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 +--R 27 54 27 54 9 6 +--R + +--R 1 4 2 2 1 1 +--R - %B24 + - %B24 - - %B24 - - +--R 9 3 2 2 +--R ] +--R , +--R +--R [%B24, +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B24 + - %B24 + - +--R 3 2 2 +--R , +--R %B29, +--R +--R 1 15 1 14 1 13 2 12 11 11 +--R - %B29 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 +--R 54 27 54 27 54 +--R + +--R 2 10 1 9 7 8 1 7 1 6 1 5 +--R - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 +--R 27 54 27 54 9 6 +--R + +--R 1 4 2 2 1 1 +--R - %B24 + - %B24 - - %B24 - - +--R 9 3 2 2 +--R ] +--R , +--R +--R [%B25, +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B25 + - %B25 + - +--R 3 2 2 +--R , +--R %B26, +--R +--R 1 15 1 14 1 13 2 12 11 11 +--R - %B26 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 +--R 54 27 54 27 54 +--R + +--R 2 10 1 9 7 8 1 7 1 6 1 5 +--R - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 +--R 27 54 27 54 9 6 +--R + +--R 1 4 2 2 1 1 +--R - %B25 + - %B25 - - %B25 - - +--R 9 3 2 2 +--R ] +--R , +--R +--R [%B25, +--R +--R 1 15 1 14 1 13 2 12 11 11 2 10 +--R - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 +--R 54 27 54 27 54 27 +--R + +--R 1 9 7 8 1 7 1 6 1 5 1 4 3 +--R - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 +--R 54 27 54 9 6 9 +--R + +--R 2 2 1 3 +--R - - %B25 + - %B25 + - +--R 3 2 2 +--R , +--R %B27, +--R +--R 1 15 1 14 1 13 2 12 11 11 +--R - %B27 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 +--R 54 27 54 27 54 +--R + +--R 2 10 1 9 7 8 1 7 1 6 1 5 +--R - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 +--R 27 54 27 54 9 6 +--R + +--R 1 4 2 2 1 1 +--R - %B25 + - %B25 - - %B25 - - +--R 9 3 2 2 +--R ] +--R , +--R [1,%B21,- %B21,0], [1,%B22,- %B22,0], [1,%B19,0,- %B19], [1,%B20,0,- %B20], +--R 1 3 1 1 3 1 1 3 1 +--R [%B17,- - %B17 + -,- - %B17 + -,- - %B17 + -], +--R 3 3 3 3 3 3 +--R 1 3 1 1 3 1 1 3 1 +--R [%B18,- - %B18 + -,- - %B18 + -,- - %B18 + -]] +--R 3 3 3 3 3 3 +--R Type: List List RealClosure Fraction Integer +--E 25 + +--S 26 of 28 +#lr2 +--R +--R +--R (26) 27 +--R Type: PositiveInteger +--E 26 + +--S 27 of 28 +lpr2 := positiveSolve(lf)$pack +--R +--R +--R 1 3 1 1 3 1 1 3 1 +--R (27) [[%B40,- - %B40 + -,- - %B40 + -,- - %B40 + -]] +--R 3 3 3 3 3 3 +--R Type: List List RealClosure Fraction Integer +--E 27 + +--S 28 of 28 +[approximate(r,1/10**21)::Float for r in lpr2.1] +--R +--R +--R (28) +--R [0.3221853546 2608559291, 0.3221853546 2608559291, 0.3221853546 2608559291, +--R 0.3221853546 2608559291] +--R Type: List Float +--E 28 +)spool +)lisp (bye) +@ +<>= +==================================================================== +ZeroDimensionalSolvePackage examples +==================================================================== + +The ZeroDimensionalSolvePackage package constructor provides +operations for computing symbolically the complex or real roots of +zero-dimensional algebraic systems. + +The package provides no multiplicity information (i.e. some returned +roots may be double or higher) but only distinct roots are returned. + +Complex roots are given by means of univariate representations of +irreducible regular chains. These representations are computed by the +univariateSolve operation (by calling the +InternalRationalUnivariateRepresentationPackage package constructor +which does the job). + +Real roots are given by means of tuples of coordinates lying in the +RealClosure of the coefficient ring. They are computed by the +realSolve and positiveSolve operations. The former computes all the +solutions of the input system with real coordinates whereas the later +concentrate on the solutions with (strictly) positive coordinates. In +both cases, the computations are performed by the RealClosure constructor. + +Both computations of complex roots and real roots rely on triangular +decompositions. These decompositions can be computed in two different +ways. First, by a applying the zeroSetSplit operation from the REGSET +domain constructor. In that case, no Groebner bases are computed. +This strategy is used by default. Secondly, by applying the zeroSetSplit +from LEXTRIPK. To use this later strategy with the operations +univariateSolve, realSolve and positiveSolve one just needs to use an +extra boolean argument. + +Note that the way of understanding triangular decompositions is +detailed in the example of the RegularTriangularSet constructor. + +The ZeroDimensionalSolvePackage constructor takes three arguments.The +first one R is the coefficient ring; it must belong to the categories +OrderedRing, EuclideanDomain, CharacteristicZero and RealConstant. This +means essentially that R is Integer or Fraction(Integer). The second +argument ls is the list of variables involved in the systems to solve. +The third one MUST BE concat(ls,s) where s is an additional symbol used +for the univariate representations. The abbreviation for +ZeroDimensionalSolvePackage is ZDSOLVE. + +We illustrate now how to use the constructor ZDSOLVE by two examples: +the Arnborg and Lazard system and the L-3 system (Aubry and Moreno +Maza). Note that the use of this package is also demonstrated in the +example of the LexTriangularPackage constructor. + +Define the coefficient ring. + + R := Integer + Integer + Type: Domain + +Define the lists of variables: + + ls : List Symbol := [x,y,z,t] + [x,y,z,t] + Type: List Symbol + +and: + + ls2 : List Symbol := [x,y,z,t,new()$Symbol] + [x,y,z,t,%A] + Type: List Symbol + +Call the package: + + pack := ZDSOLVE(R,ls,ls2) + ZeroDimensionalSolvePackage(Integer,[x,y,z,t],[x,y,z,t,%A]) + Type: Domain + +Define a polynomial system (Arnborg-Lazard) + + p1 := x**2*y*z + x*y**2*z + x*y*z**2 + x*y*z + x*y + x*z + y*z + 2 2 2 + x y z + (x y + (x + x + 1)y + x)z + x y + Type: Polynomial Integer + + p2 := x**2*y**2*z + x*y**2*z**2 + x**2*y*z + x*y*z + y*z + x + z + 2 2 2 2 2 + x y z + (x y + (x + x + 1)y + 1)z + x + Type: Polynomial Integer + + p3 := x**2*y**2*z**2 + x**2*y**2*z + x*y**2*z + x*y*z + x*z + z + 1 + 2 2 2 2 2 + x y z + ((x + x)y + x y + x + 1)z + 1 + Type: Polynomial Integer + + lp := [p1, p2, p3] + 2 2 2 + [x y z + (x y + (x + x + 1)y + x)z + x y, + 2 2 2 2 2 + x y z + (x y + (x + x + 1)y + 1)z + x, + 2 2 2 2 2 + x y z + ((x + x)y + x y + x + 1)z + 1] + Type: List Polynomial Integer + +Note that these polynomials do not involve the variable t; we will use +it in the second example. + +First compute a decomposition into regular chains (i.e. regular +triangular sets). + + triangSolve(lp)$pack + [ + { + 20 19 18 17 16 15 14 13 12 + z - 6z - 41z + 71z + 106z + 92z + 197z + 145z + 257z + + + 11 10 9 8 7 6 5 4 3 + 278z + 201z + 278z + 257z + 145z + 197z + 92z + 106z + 71z + + + 2 + - 41z - 6z + 1 + , + 19 18 17 16 + 14745844z + 50357474z - 130948857z - 185261586z + + + 15 14 13 12 + - 180077775z - 338007307z - 275379623z - 453190404z + + + 11 10 9 8 + - 474597456z - 366147695z - 481433567z - 430613166z + + + 7 6 5 4 + - 261878358z - 326073537z - 163008796z - 177213227z + + + 3 2 + - 104356755z + 65241699z + 9237732z - 1567348 + * + y + + + 19 18 17 16 15 + 1917314z + 6508991z - 16973165z - 24000259z - 23349192z + + + 14 13 12 11 10 + - 43786426z - 35696474z - 58724172z - 61480792z - 47452440z + + + 9 8 7 6 5 + - 62378085z - 55776527z - 33940618z - 42233406z - 21122875z + + + 4 3 2 + - 22958177z - 13504569z + 8448317z + 1195888z - 202934 + , + 3 2 3 2 2 2 + ((z - 2z)y + (- z - z - 2z - 1)y - z - z + 1)x + z - 1} + ] + Type: List RegularChain(Integer,[x,y,z,t]) + +We can see easily from this decomposition (consisting of a single +regular chain) that the input system has 20 complex roots. + +Then we compute a univariate representation of this regular chain. + + univariateSolve(lp)$pack + [ + [ + complexRoots = + 12 11 10 9 8 7 6 5 4 3 + ? - 12? + 24? + 4? - 9? + 27? - 21? + 27? - 9? + 4? + + + 2 + 24? - 12? + 1 + , + coordinates = + [ + 11 10 9 8 7 6 + 63x + 62%A - 721%A + 1220%A + 705%A - 285%A + 1512%A + + + 5 4 3 2 + - 735%A + 1401%A - 21%A + 215%A + 1577%A - 142 + , + 11 10 9 8 7 6 + 63y - 75%A + 890%A - 1682%A - 516%A + 588%A - 1953%A + + + 5 4 3 2 + 1323%A - 1815%A + 426%A - 243%A - 1801%A + 679 + , + z - %A] + ] + , + 6 5 4 3 2 + [complexRoots= ? + ? + ? + ? + ? + ? + 1, + 5 3 + coordinates= [x - %A ,y - %A ,z - %A]] + , + 2 + [complexRoots= ? + 5? + 1,coordinates= [x - 1,y - 1,z - %A]]] + Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, + coordinates: List Polynomial Integer) + +We see that the zeros of our regular chain are split into three components. +This is due to the use of univariate polynomial factorization. + +Each of these components consist of two parts. The first one is an +irreducible univariate polynomial p(?) which defines a simple +algebraic extension of the field of fractions of R. The second one +consists of multivariate polynomials pol1(x,%A), pol2(y,%A) and +pol3(z,%A). Each of these polynomials involve two variables: one is +an indeterminate x, y or z of the input system lp and the other is %A +which represents any root of p(?). Recall that this %A is the last +element of the third parameter of ZDSOLVE. Thus any complex root ? of +p(?) leads to a solution of the input system lp by replacing %A by +this ? in pol1(x,%A), pol2(y,%A) and pol3(z,%A). Note that the +polynomials pol1(x,%A), pol2(y,%A) and pol3(z,%A) have degree one +w.r.t. x, y or z respectively. This is always the case for all +univariate representations. Hence the operation univariateSolve +replaces a system of multivariate polynomials by a list of univariate +polynomials, what justifies its name. Another example of univariate +representations illustrates the LexTriangularPackage package constructor. + +We now compute the solutions with real coordinates: + + lr := realSolve(lp)$pack + [ + [%B1, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B1 - ------- %B1 - ------- %B1 + -------- %B1 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B1 + -------- %B1 + ------ %B1 + --------- %B1 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B1 + --------- %B1 + --------- %B1 + --------- %B1 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B1 + ------- %B1 + ------ %B1 + ------- %B1 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B1 + -------- %B1 - ---- %B1 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B1 + ------ %B1 + ------- %B1 - ------- %B1 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B1 - -------- %B1 - -------- %B1 - ------ %B1 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B1 - -------- %B1 - -------- %B1 - ------- %B1 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B1 - -------- %B1 - -------- %B1 - -------- %B1 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B1 - -------- %B1 - ------- %B1 + ------ + 26117 705159 705159 705159 + ] + , + [%B2, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B2 - ------- %B2 - ------- %B2 + -------- %B2 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B2 + -------- %B2 + ------ %B2 + --------- %B2 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B2 + --------- %B2 + --------- %B2 + --------- %B2 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B2 + ------- %B2 + ------ %B2 + ------- %B2 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B2 + -------- %B2 - ---- %B2 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B2 + ------ %B2 + ------- %B2 - ------- %B2 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B2 - -------- %B2 - -------- %B2 - ------ %B2 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B2 - -------- %B2 - -------- %B2 - ------- %B2 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B2 - -------- %B2 - -------- %B2 - -------- %B2 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B2 - -------- %B2 - ------- %B2 + ------ + 26117 705159 705159 705159 + ] + , + [%B3, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B3 - ------- %B3 - ------- %B3 + -------- %B3 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B3 + -------- %B3 + ------ %B3 + --------- %B3 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B3 + --------- %B3 + --------- %B3 + --------- %B3 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B3 + ------- %B3 + ------ %B3 + ------- %B3 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B3 + -------- %B3 - ---- %B3 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B3 + ------ %B3 + ------- %B3 - ------- %B3 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B3 - -------- %B3 - -------- %B3 - ------ %B3 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B3 - -------- %B3 - -------- %B3 - ------- %B3 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B3 - -------- %B3 - -------- %B3 - -------- %B3 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B3 - -------- %B3 - ------- %B3 + ------ + 26117 705159 705159 705159 + ] + , + [%B4, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B4 - ------- %B4 - ------- %B4 + -------- %B4 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B4 + -------- %B4 + ------ %B4 + --------- %B4 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B4 + --------- %B4 + --------- %B4 + --------- %B4 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B4 + ------- %B4 + ------ %B4 + ------- %B4 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B4 + -------- %B4 - ---- %B4 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B4 + ------ %B4 + ------- %B4 - ------- %B4 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B4 - -------- %B4 - -------- %B4 - ------ %B4 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B4 - -------- %B4 - -------- %B4 - ------- %B4 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B4 - -------- %B4 - -------- %B4 - -------- %B4 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B4 - -------- %B4 - ------- %B4 + ------ + 26117 705159 705159 705159 + ] + , + [%B5, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B5 - ------- %B5 - ------- %B5 + -------- %B5 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B5 + -------- %B5 + ------ %B5 + --------- %B5 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B5 + --------- %B5 + --------- %B5 + --------- %B5 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B5 + ------- %B5 + ------ %B5 + ------- %B5 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B5 + -------- %B5 - ---- %B5 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B5 + ------ %B5 + ------- %B5 - ------- %B5 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B5 - -------- %B5 - -------- %B5 - ------ %B5 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B5 - -------- %B5 - -------- %B5 - ------- %B5 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B5 - -------- %B5 - -------- %B5 - -------- %B5 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B5 - -------- %B5 - ------- %B5 + ------ + 26117 705159 705159 705159 + ] + , + [%B6, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B6 - ------- %B6 - ------- %B6 + -------- %B6 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B6 + -------- %B6 + ------ %B6 + --------- %B6 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B6 + --------- %B6 + --------- %B6 + --------- %B6 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B6 + ------- %B6 + ------ %B6 + ------- %B6 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B6 + -------- %B6 - ---- %B6 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B6 + ------ %B6 + ------- %B6 - ------- %B6 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B6 - -------- %B6 - -------- %B6 - ------ %B6 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B6 - -------- %B6 - -------- %B6 - ------- %B6 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B6 - -------- %B6 - -------- %B6 - -------- %B6 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B6 - -------- %B6 - ------- %B6 + ------ + 26117 705159 705159 705159 + ] + , + [%B7, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B7 - ------- %B7 - ------- %B7 + -------- %B7 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B7 + -------- %B7 + ------ %B7 + --------- %B7 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B7 + --------- %B7 + --------- %B7 + --------- %B7 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B7 + ------- %B7 + ------ %B7 + ------- %B7 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B7 + -------- %B7 - ---- %B7 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B7 + ------ %B7 + ------- %B7 - ------- %B7 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B7 - -------- %B7 - -------- %B7 - ------ %B7 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B7 - -------- %B7 - -------- %B7 - ------- %B7 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B7 - -------- %B7 - -------- %B7 - -------- %B7 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B7 - -------- %B7 - ------- %B7 + ------ + 26117 705159 705159 705159 + ] + , + [%B8, + 1184459 19 2335702 18 5460230 17 79900378 16 + ------- %B8 - ------- %B8 - ------- %B8 + -------- %B8 + 1645371 548457 182819 1645371 + + + 43953929 15 13420192 14 553986 13 193381378 12 + -------- %B8 + -------- %B8 + ------ %B8 + --------- %B8 + 548457 182819 3731 1645371 + + + 35978916 11 358660781 10 271667666 9 118784873 8 + -------- %B8 + --------- %B8 + --------- %B8 + --------- %B8 + 182819 1645371 1645371 548457 + + + 337505020 7 1389370 6 688291 5 3378002 4 + --------- %B8 + ------- %B8 + ------ %B8 + ------- %B8 + 1645371 11193 4459 42189 + + + 140671876 3 32325724 2 8270 9741532 + --------- %B8 + -------- %B8 - ---- %B8 - ------- + 1645371 548457 343 1645371 + , + 91729 19 487915 18 4114333 17 1276987 16 + - ------ %B8 + ------ %B8 + ------- %B8 - ------- %B8 + 705159 705159 705159 235053 + + + 13243117 15 16292173 14 26536060 13 722714 12 + - -------- %B8 - -------- %B8 - -------- %B8 - ------ %B8 + 705159 705159 705159 18081 + + + 5382578 11 15449995 10 14279770 9 6603890 8 + - ------- %B8 - -------- %B8 - -------- %B8 - ------- %B8 + 100737 235053 235053 100737 + + + 409930 7 37340389 6 34893715 5 26686318 4 + - ------ %B8 - -------- %B8 - -------- %B8 - -------- %B8 + 6027 705159 705159 705159 + + + 801511 3 17206178 2 4406102 377534 + - ------ %B8 - -------- %B8 - ------- %B8 + ------ + 26117 705159 705159 705159 + ] + ] + Type: List List RealClosure Fraction Integer + +The number of real solutions for the input system is: + + # lr + 8 + Type: PositiveInteger + +Each of these real solutions is given by a list of elements in +RealClosure(R). In these 8 lists, the first element is a value of z, +the second of y and the last of x. This is logical since by setting +the list of variables of the package to [x,y,z,t] we mean that the +elimination ordering on the variables is t < z < y < x. Note that +each system treated by the ZDSOLVE package constructor needs only to +be zero-dimensional w.r.t. the variables involved in the system it-self +and not necessarily w.r.t. all the variables used to define the package. + +We can approximate these real numbers as follows. This computation +takes between 30 sec. and 5 min, depending on your machine. + + [ [approximate(r,1/1000000) for r in point] for point in lr] + [ + 10048059 + [- --------, + 2097152 + + 4503057316985387943524397913838966414596731976211768219335881208385516_ + 314058924567176091423629695777403099833360761048898228916578137094309_ + 838597331137202584846939132376157019506760357601165917454986815382098_ + 789094851523420392811293126141329856546977145464661495487825919941188_ + 447041722440491921567263542158028061437758844364634410045253024786561_ + 923163288214175 + / + 4503057283025245488516511806985826635083100693757320465280554706865644_ + 949577509916867201889438090408354817931718593862797624551518983570793_ + 048774424291488708829840324189200301436123314860200821443733790755311_ + 243632919864895421704228949571290016119498807957023663865443069392027_ + 148979688266712323356043491523434068924275280417338574817381189277066_ + 143312396681216 + , + + 2106260768823475073894798680486016596249607148690685538763683715020639_ + 680858649650790055889505646893309447097099937802187329095325898785247_ + 249020717504983660482075156618738724514685333060011202964635166381351_ + 543255982200250305283981086837110614842307026091211297929876896285681_ + 830479054760056380762664905618462055306047816191782011588703789138988_ + 1895 + / + 2106260609498464192472113804816474175341962953296434102413903142368757_ + 967685273888585590975965211778862189872881953943640246297357061959812_ + 326103659799025126863258676567202342106877031710184247484181423288921_ + 837681237062708470295706218485928867400771937828499200923760593314168_ + 901000666373896347598118228556731037072026474496776228383762993923280_ + 0768 + ] + , + + 2563013 + [- -------, + 2097152 + + - + 2611346176791927789698617693237757719238259963063541781922752330440_ + 189899668072928338490768623593207442125925986733815932243504809294_ + 837523030237337236806668167446173001727271353311571242897 + / + 1165225400505222530583981916004589143757226610276858990008790134819_ + 914940922413753983971394019523433320408139928153188829495755455163_ + 963417619308395977544797140231469234269034921938055593984 + , + + 3572594550275917221096588729615788272998517054675603239578198141006034_ + 091735282826590621902304466963941971038923304526273329316373757450061_ + 9789892286110976997087250466235373 + / + 1039548269345598936877071244834026055800814551120170592200522366591759_ + 409659486442339141029452950265179989960104811875822530205346505131581_ + 2439017247289173865014702966308864 + ] + , + + 1715967 + [- -------, + 2097152 + + - + 4213093533784303521084839517977082390377261503969586224828998436606_ + 030656076359374564813773498376603121267822565801436206939519951465_ + 18222580524697287410022543952491 + / + 9441814144185374458649692034349224052436597470966253663930641960795_ + 805882585493199840191699917659443264824641135187383583888147867340_ + 19307857605820364195856822304768 + , + + 7635833347112644222515625424410831225347475669008589338834162172501904_ + 994376346730876809042845208919919925302105720971453918982731389072591_ + 4035 + / + 2624188764086097199784297610478066633934230467895851602278580978503784_ + 549205788499019640602266966026891580103543567625039018629887141284916_ + 75648 + ] + , + + 437701 + [- -------, + 2097152 + + 1683106908638349588322172332654225913562986313181951031452750161441497_ + 473455328150721364868355579646781603507777199075077835213366484533654_ + 91383623741304759 + / + 1683106868095213389001709982705913638963077668731226111167785188004907_ + 425226298680325887810962614140298597366984264887998908377068799998454_ + 23381649008099328 + , + + 4961550109835010186422681013422108735958714801003760639707968096646912_ + 82670847283444311723917219104249213450966312411133 + / + 4961549872757738315509192078210209029852897118611097126236384040829376_ + 59261914313170254867464792718363492160482442215424 + ] + , + + 222801 + [-------, + 2097152 + + - + 8994884880402428265107595121970691427136045692541978275573001865213_ + 759921588137716696126349101655220195142994932299137183241705867672_ + 383477 + / + 1167889998665026372177765100691888582708969960229934769690835752457_ + 077779416435209473767866507769405888942764587718542434255625992456_ + 372224 + , + + - + 2389704888133156878320801544373808395612771509208491019847452991885_ + 509546519525467839016613593999693886640036283570552321155037871291_ + 458703265 + / + 5355487273645096326090403286689931905988225444685411433221593833681_ + 192957562833671468654290340746993656285925599117602120446183443145_ + 479421952 + ] + , + + 765693 + [-------, + 2097152 + + 8558969219816716267873244761178198088724698958616670140213765754322002_ + 303251685786118678330840203328837654339523418704917749518340772512899_ + 000391009630373148561 + / + 2941442445533010790976428411376393499815580215945856917906452535495723_ + 013856818941702330228779890141296236721138154231997238917322156711965_ + 2444639331719460159488 + , + + - + 2057618230582572101247650324860242561111302581543588808843923662767_ + 549382241659362712290777612800192921420574408948085193743688582762_ + 2246433251878894899015 + / + 2671598203325735538097952353501450220576313759890835097091722520642_ + 710198771902667183948906289863714759678360292483949204616471537777_ + 775324180661095366656 + ] + , + + 5743879 + [-------, + 2097152 + + 1076288816968906847955546394773570208171456724942618614023663123574768_ + 960850434263971398072546592772662158833449797698617455397887562900072_ + 984768000608343553189801693408727205047612559889232757563830528688953_ + 535421809482771058917542602890060941949620874083007858366669453501766_ + 24841488732463225 + / + 3131768957080317946648461940023552044190376613458584986228549631916196_ + 601616219781765615532532294746529648276430583810894079374566460757823_ + 146888581195556029208515218838883200318658407469399426063260589828612_ + 309231596669129707986481319851571942927230340622934023923486703042068_ + 1530440845099008 + , + + - + 2113286699185750918364120475565458437870172489865485994389828135335_ + 264444665284557526492734931691731407872701432935503473348172076098_ + 720545849008780077564160534317894688366119529739980502944162668550_ + 098127961950496210221942878089359674925850594427768502251789758706_ + 752831632503615 + / + 1627615584937987580242906624347104580889144466168459718043153839408_ + 372525533309808070363699585502216011211087103263609551026027769414_ + 087391148126221168139781682587438075322591466131939975457200522349_ + 838568964285634448018562038272378787354460106106141518010935617205_ + 1706396253618176 + ] + , + + 19739877 + [--------, + 2097152 + + - + 2997249936832703303799015804861520949215040387500707177701285766720_ + 192530579422478953566024359860143101547801638082771611160372212874_ + 847778035809872843149225484238365858013629341705321702582333350918_ + 009601789937023985935304900460493389873837030853410347089908880814_ + 853981132018464582458800615394770741699487295875960210750215891948_ + 814476854871031530931295467332190133702671098200902282300510751860_ + 7185928457030277807397796525813862762239286996106809728023675 + / + 2308433274852278590728910081191811023906504141321432646123936794873_ + 933319270608960702138193417647898360620229519176632937631786851455_ + 014766027206259022252505551741823688896883806636602574431760472240_ + 292093196729475160247268834121141893318848728661844434927287285112_ + 897080767552864895056585864033178565910387065006112801516403522741_ + 037360990556054476949527059227070809593049491257519554708879259595_ + 52929920110858560812556635485429471554031675979542656381353984 + , + + - + 5128189263548228489096276397868940080600938410663080459407966335845_ + 009264109490520459825316250084723010047035024497436523038925818959_ + 289312931584701353927621435434398674263047293909122850133851990696_ + 490231566094371994333795070782624011727587749989296611277318372294_ + 624207116537910436554574146082884701305543912620419354885410735940_ + 157775896602822364575864611831512943973974715166920465061850603762_ + 87516256195847052412587282839139194642913955 + / + 2288281939778439330531208793181290471183631092455368990386390824243_ + 509463644236249773080647438987739144921607794682653851741189091711_ + 741868145114978337284191822497675868358729486644730856622552687209_ + 203724411800481405702837198310642291275676195774614443815996713502_ + 629391749783590041470860127752372996488627742672487622480063268808_ + 889324891850842494934347337603075939980268208482904859678177751444_ + 65749979827872616963053217673201717237252096 + ] + ] + Type: List List Fraction Integer + +We can also concentrate on the solutions with real (strictly) positive +coordinates: + + lpr := positiveSolve(lp)$pack + [] + Type: List List RealClosure Fraction Integer + +Thus we have checked that the input system has no solution with +strictly positive coordinates. + +Let us define another polynomial system (L-3). + + f0 := x**3 + y + z + t- 1 + 3 + z + y + x + t - 1 + Type: Polynomial Integer + + f1 := x + y**3 + z + t -1 + 3 + z + y + x + t - 1 + Type: Polynomial Integer + + f2 := x + y + z**3 + t-1 + 3 + z + y + x + t - 1 + Type: Polynomial Integer + + f3 := x + y + z + t**3 -1 + 3 + z + y + x + t - 1 + Type: Polynomial Integer + + lf := [f0, f1, f2, f3] + 3 3 3 3 + [z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1] + Type: List Polynomial Integer + +First compute a decomposition into regular chains (i.e. regular +triangular sets). + + lts := triangSolve(lf)$pack + [ + 2 3 3 + {t + t + 1, z - z - t + t, + 3 2 2 3 6 3 3 2 + (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z + + + 6 3 9 6 3 + (3t - 6t + 3)z + t - 3t + 5t - 3t + , + x + y + z} + , + 16 13 10 7 4 2 + {t - 6t + 9t + 4t + 15t - 54t + 27, + 15 14 13 12 11 + 4907232t + 40893984t - 115013088t + 22805712t + 36330336t + + + 10 9 8 7 + 162959040t - 159859440t - 156802608t + 117168768t + + + 6 5 4 3 + 126282384t - 129351600t + 306646992t + 475302816t + + + 2 + - 1006837776t - 237269088t + 480716208 + * + z + + + 54 51 48 46 45 43 42 + 48t - 912t + 8232t - 72t - 46848t + 1152t + 186324t + + + 40 39 38 37 36 35 + - 3780t - 543144t - 3168t - 21384t + 1175251t + 41184t + + + 34 33 32 31 30 + 278003t - 1843242t - 301815t - 1440726t + 1912012t + + + 29 28 27 26 25 + 1442826t + 4696262t - 922481t - 4816188t - 10583524t + + + 24 23 22 21 20 + - 208751t + 11472138t + 16762859t - 857663t - 19328175t + + + 19 18 17 16 15 + - 18270421t + 4914903t + 22483044t + 12926517t - 8605511t + + + 14 13 12 11 10 + - 17455518t - 5014597t + 8108814t + 8465535t + 190542t + + + 9 8 7 6 5 4 + - 4305624t - 2226123t + 661905t + 1169775t + 226260t - 209952t + + + 3 + - 141183t + 27216t + , + 3 2 2 3 6 3 3 2 + (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z + + + 6 3 9 6 3 + (3t - 6t + 3)z + t - 3t + 5t - 3t + , + 3 + x + y + z + t - 1} + , + 2 2 2 + {t,z - 1,y - 1,x + y}, {t - 1,z,y - 1,x + y}, {t - 1,z - 1,z y + 1,x}, + 16 13 10 7 4 2 + {t - 6t + 9t + 4t + 15t - 54t + 27, + 29 28 27 26 25 + 4907232t + 40893984t - 115013088t - 1730448t - 168139584t + + + 24 23 22 21 + 738024480t - 195372288t + 315849456t - 2567279232t + + + 20 19 18 17 + 937147968t + 1026357696t + 4780488240t - 2893767696t + + + 16 15 14 13 + - 5617160352t - 3427651728t + 5001100848t + 8720098416t + + + 12 11 10 9 + 2331732960t - 499046544t - 16243306272t - 9748123200t + + + 8 7 6 5 + 3927244320t + 25257280896t + 10348032096t - 17128672128t + + + 4 3 2 + - 14755488768t + 544086720t + 10848188736t + 1423614528t + + + - 2884297248 + * + z + + + 68 65 62 60 59 57 56 + - 48t + 1152t - 13560t + 360t + 103656t - 7560t - 572820t + + + 54 53 52 51 50 49 + 71316t + 2414556t + 2736t - 402876t - 7985131t - 49248t + + + 48 47 46 45 44 + 1431133t + 20977409t + 521487t - 2697635t - 43763654t + + + 43 42 41 40 39 + - 3756573t - 2093410t + 71546495t + 19699032t + 35025028t + + + 38 37 36 35 34 + - 89623786t - 77798760t - 138654191t + 87596128t + 235642497t + + + 33 32 31 30 29 + 349607642t - 93299834t - 551563167t - 630995176t + 186818962t + + + 28 27 26 25 + 995427468t + 828416204t - 393919231t - 1076617485t + + + 24 23 22 21 + - 1609479791t + 595738126t + 1198787136t + 4342832069t + + + 20 19 18 17 + - 2075938757t - 4390835799t - 4822843033t + 6932747678t + + + 16 15 14 13 + 6172196808t + 1141517740t - 4981677585t - 9819815280t + + + 12 11 10 9 + - 7404299976t - 157295760t + 29124027630t + 14856038208t + + + 8 7 6 5 + - 16184101410t - 26935440354t - 3574164258t + 10271338974t + + + 4 3 2 + 11191425264t + 6869861262t - 9780477840t - 3586674168t + 2884297248 + , + 3 3 2 6 3 9 6 3 + (3z + (6t - 6)z + (6t - 12t + 3)z + 2t - 6t + t + 3t)y + + + 3 3 6 3 2 9 6 3 12 9 + (3t - 3)z + (6t - 12t + 6)z + (4t - 12t + 11t - 3)z + t - 4t + + + 6 3 + 5t - 2t + , + 3 + x + y + z + t - 1} + , + 2 + {t - 1,z - 1,y,x + z}, + 8 7 6 5 4 3 2 + {t + t + t - 2t - 2t - 2t + 19t + 19t - 8, + 7 6 5 4 3 + 2395770t + 3934440t - 3902067t - 10084164t - 1010448t + + + 2 + 32386932t + 22413225t - 10432368 + * + z + + + 7 6 5 4 3 + - 463519t + 3586833t + 9494955t - 8539305t - 33283098t + + + 2 + 35479377t + 46263256t - 17419896 + , + 4 3 3 6 3 2 3 + 3z + (9t - 9)z + (12t - 24t + 9)z + (- 152t + 219t - 67)z + + + 6 4 3 + - 41t + 57t + 25t - 57t + 16 + * + y + + + 3 4 6 3 3 3 2 + (3t - 3)z + (9t - 18t + 9)z + (- 181t + 270t - 89)z + + + 6 4 3 7 6 4 3 + (- 92t + 135t + 49t - 135t + 43)z + 27t - 27t - 54t + 396t + + + - 486t + 144 + , + 3 + x + y + z + t - 1} + , + 3 + {t,z - t + 1,y - 1,x - 1}, {t - 1,z,y,x}, {t,z - 1,y,x}, {t,z,y - 1,x}, + {t,z,y,x - 1}] + Type: List RegularChain(Integer,[x,y,z,t]) + +Then we compute a univariate representation. + + univariateSolve(lf)$pack + [[complexRoots= ?,coordinates= [x - 1,y - 1,z + 1,t - %A]], + [complexRoots= ?,coordinates= [x,y - 1,z,t - %A]], + [complexRoots= ? - 1,coordinates= [x,y,z,t - %A]], + [complexRoots= ?,coordinates= [x - 1,y,z,t - %A]], + [complexRoots= ?,coordinates= [x,y,z - 1,t - %A]], + [complexRoots= ? - 2,coordinates= [x - 1,y + 1,z,t - 1]], + [complexRoots= ?,coordinates= [x + 1,y - 1,z,t - 1]], + [complexRoots= ? - 1,coordinates= [x - 1,y + 1,z - 1,t]], + [complexRoots= ? + 1,coordinates= [x + 1,y - 1,z - 1,t]], + + 6 3 2 + [complexRoots= ? - 2? + 3? - 3, + 3 3 + coordinates= [2x + %A + %A - 1,2y + %A + %A - 1,z - %A,t - %A]] + , + + 5 3 2 + [complexRoots= ? + 3? - 2? + 3? - 3, + 3 + coordinates= [x - %A,y - %A,z + %A + 2%A - 1,t - %A]] + , + + 4 3 2 + [complexRoots= ? - ? - 2? + 3, + 3 3 3 + coordinates= [x + %A - %A - 1,y + %A - %A - 1,z - %A + 2%A + 1,t - %A]] + , + [complexRoots= ? + 1,coordinates= [x - 1,y - 1,z,t - %A]], + + 6 3 2 + [complexRoots= ? + 2? + 3? - 3, + 3 3 + coordinates= [2x - %A - %A - 1,y + %A,2z - %A - %A - 1,t + %A]] + , + + 6 4 3 2 + [complexRoots= ? + 12? + 20? - 45? - 42? - 953, + + coordinates = + 5 4 3 2 + [12609x + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239, + 5 4 3 2 + 25218y + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, + 5 4 3 2 + 25218z + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, + 5 4 3 2 + 12609t + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239] + ] + , + + 5 3 2 + [complexRoots= ? + 12? - 16? + 48? - 96, + 3 + coordinates= [8x + %A + 8%A - 8,2y - %A,2z - %A,2t - %A]] + , + + 5 4 3 2 + [complexRoots= ? + ? - 5? - 3? + 9? + 3, + + coordinates = + 3 3 3 + [2x - %A + 2%A - 1, 2y + %A - 4%A + 1, 2z - %A + 2%A - 1, + 3 + 2t - %A + 2%A - 1] + ] + , + + 4 3 2 + [complexRoots= ? - 3? + 4? - 6? + 13, + + coordinates = + 3 2 3 2 + [9x - 2%A + 4%A - %A + 2, 9y + %A - 2%A + 5%A - 1, + 3 2 3 2 + 9z + %A - 2%A + 5%A - 1, 9t + %A - 2%A - 4%A - 1] + ] + , + + 4 2 + [complexRoots= ? - 11? + 37, + + coordinates = + 2 2 2 2 + [3x - %A + 7,6y + %A + 3%A - 7,3z - %A + 7,6t + %A - 3%A - 7] + ] + , + [complexRoots= ? + 1,coordinates= [x - 1,y,z - 1,t + 1]], + [complexRoots= ? + 2,coordinates= [x,y - 1,z - 1,t + 1]], + [complexRoots= ? - 2,coordinates= [x,y - 1,z + 1,t - 1]], + [complexRoots= ?,coordinates= [x,y + 1,z - 1,t - 1]], + [complexRoots= ? - 2,coordinates= [x - 1,y,z + 1,t - 1]], + [complexRoots= ?,coordinates= [x + 1,y,z - 1,t - 1]], + + 4 3 2 + [complexRoots= ? + 5? + 16? + 30? + 57, + + coordinates = + 3 2 3 2 + [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, + 3 2 3 2 + 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] + ] + , + + 4 3 2 + [complexRoots= ? - ? - 2? + 3, + 3 3 3 + coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] + , + + 4 3 2 + [complexRoots= ? + 2? - 8? + 48, + + coordinates = + 3 3 3 + [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] + ] + , + + 5 4 3 2 + [complexRoots= ? + ? - 2? - 4? + 5? + 8, + 3 3 3 + coordinates= [3x + %A - 1,3y + %A - 1,3z + %A - 1,t - %A]] + , + 3 + [complexRoots= ? + 3? - 1,coordinates= [x - %A,y - %A,z - %A,t - %A]]] + Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, + coordinates: List Polynomial Integer) + +Note that this computation is made from the input system lf. + +However it is possible to reuse a pre-computed regular chain as follows: + + ts := lts.1 + 2 3 3 + {t + t + 1, z - z - t + t, + + 3 2 2 3 6 3 3 2 + (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z + + + 6 3 9 6 3 + (3t - 6t + 3)z + t - 3t + 5t - 3t + , + x + y + z} + Type: RegularChain(Integer,[x,y,z,t]) + + univariateSolve(ts)$pack + [ + 4 3 2 + [complexRoots= ? + 5? + 16? + 30? + 57, + coordinates = + 3 2 3 2 + [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, + 3 2 3 2 + 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] + ] + , + 4 3 2 + [complexRoots= ? - ? - 2? + 3, + 3 3 3 + coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] + , + 4 3 2 + [complexRoots= ? + 2? - 8? + 48, + coordinates = + 3 3 3 + [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] + ] + ] + Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, + coordinates: List Polynomial Integer) + + realSolve(ts)$pack + [] + Type: List List RealClosure Fraction Integer + +We compute now the full set of points with real coordinates: + + lr2 := realSolve(lf)$pack + [[0,- 1,1,1], [0,0,1,0], [1,0,0,0], [0,0,0,1], [0,1,0,0], [1,0,%B37,- %B37], + [1,0,%B38,- %B38], [0,1,%B35,- %B35], [0,1,%B36,- %B36], [- 1,0,1,1], + [%B32, + 1 15 2 14 1 13 4 12 11 11 4 10 + -- %B32 + -- %B32 + -- %B32 - -- %B32 - -- %B32 - -- %B32 + 27 27 27 27 27 27 + + + 1 9 14 8 1 7 2 6 1 5 2 4 3 + -- %B32 + -- %B32 + -- %B32 + - %B32 + - %B32 + - %B32 + %B32 + 27 27 27 9 3 9 + + + 4 2 + - %B32 - %B32 - 2 + 3 + , + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B32 + - %B32 + - + 3 2 2 + , + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B32 + - %B32 + - + 3 2 2 + ] + , + [%B33, + 1 15 2 14 1 13 4 12 11 11 4 10 + -- %B33 + -- %B33 + -- %B33 - -- %B33 - -- %B33 - -- %B33 + 27 27 27 27 27 27 + + + 1 9 14 8 1 7 2 6 1 5 2 4 3 + -- %B33 + -- %B33 + -- %B33 + - %B33 + - %B33 + - %B33 + %B33 + 27 27 27 9 3 9 + + + 4 2 + - %B33 - %B33 - 2 + 3 + , + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B33 + - %B33 + - + 3 2 2 + , + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B33 + - %B33 + - + 3 2 2 + ] + , + [%B34, + 1 15 2 14 1 13 4 12 11 11 4 10 + -- %B34 + -- %B34 + -- %B34 - -- %B34 - -- %B34 - -- %B34 + 27 27 27 27 27 27 + + + 1 9 14 8 1 7 2 6 1 5 2 4 3 + -- %B34 + -- %B34 + -- %B34 + - %B34 + - %B34 + - %B34 + %B34 + 27 27 27 9 3 9 + + + 4 2 + - %B34 - %B34 - 2 + 3 + , + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B34 + - %B34 + - + 3 2 2 + , + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B34 + - %B34 + - + 3 2 2 + ] + , + [- 1,1,0,1], [- 1,1,1,0], + [%B23, + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B23 + - %B23 + - + 3 2 2 + , + %B30, + 1 15 1 14 1 13 2 12 11 11 + - %B30 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 + 54 27 54 27 54 + + + 2 10 1 9 7 8 1 7 1 6 1 5 + - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 + 27 54 27 54 9 6 + + + 1 4 2 2 1 1 + - %B23 + - %B23 - - %B23 - - + 9 3 2 2 + ] + , + [%B23, + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B23 + - %B23 + - + 3 2 2 + , + %B31, + 1 15 1 14 1 13 2 12 11 11 + - %B31 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 + 54 27 54 27 54 + + + 2 10 1 9 7 8 1 7 1 6 1 5 + - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 + 27 54 27 54 9 6 + + + 1 4 2 2 1 1 + - %B23 + - %B23 - - %B23 - - + 9 3 2 2 + ] + , + [%B24, + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B24 + - %B24 + - + 3 2 2 + , + %B28, + 1 15 1 14 1 13 2 12 11 11 + - %B28 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 + 54 27 54 27 54 + + + 2 10 1 9 7 8 1 7 1 6 1 5 + - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 + 27 54 27 54 9 6 + + + 1 4 2 2 1 1 + - %B24 + - %B24 - - %B24 - - + 9 3 2 2 + ] + , + [%B24, + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B24 + - %B24 + - + 3 2 2 + , + %B29, + 1 15 1 14 1 13 2 12 11 11 + - %B29 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 + 54 27 54 27 54 + + + 2 10 1 9 7 8 1 7 1 6 1 5 + - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 + 27 54 27 54 9 6 + + + 1 4 2 2 1 1 + - %B24 + - %B24 - - %B24 - - + 9 3 2 2 + ] + , + [%B25, + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B25 + - %B25 + - + 3 2 2 + , + %B26, + 1 15 1 14 1 13 2 12 11 11 + - %B26 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 + 54 27 54 27 54 + + + 2 10 1 9 7 8 1 7 1 6 1 5 + - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 + 27 54 27 54 9 6 + + + 1 4 2 2 1 1 + - %B25 + - %B25 - - %B25 - - + 9 3 2 2 + ] + , + [%B25, + 1 15 1 14 1 13 2 12 11 11 2 10 + - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 + 54 27 54 27 54 27 + + + 1 9 7 8 1 7 1 6 1 5 1 4 3 + - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 + 54 27 54 9 6 9 + + + 2 2 1 3 + - - %B25 + - %B25 + - + 3 2 2 + , + %B27, + 1 15 1 14 1 13 2 12 11 11 + - %B27 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 + 54 27 54 27 54 + + + 2 10 1 9 7 8 1 7 1 6 1 5 + - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 + 27 54 27 54 9 6 + + + 1 4 2 2 1 1 + - %B25 + - %B25 - - %B25 - - + 9 3 2 2 + ] + , + [1,%B21,- %B21,0], [1,%B22,- %B22,0], [1,%B19,0,- %B19], [1,%B20,0,- %B20], + 1 3 1 1 3 1 1 3 1 + [%B17,- - %B17 + -,- - %B17 + -,- - %B17 + -], + 3 3 3 3 3 3 + 1 3 1 1 3 1 1 3 1 + [%B18,- - %B18 + -,- - %B18 + -,- - %B18 + -]] + 3 3 3 3 3 3 + Type: List List RealClosure Fraction Integer + +The number of real solutions for the input system is: + + #lr2 + 27 + Type: PositiveInteger + +Another example of computation of real solutions illustrates the +LexTriangularPackage package constructor. + +We concentrate now on the solutions with real (strictly) positive +coordinates: + + lpr2 := positiveSolve(lf)$pack + 1 3 1 1 3 1 1 3 1 + [[%B40,- - %B40 + -,- - %B40 + -,- - %B40 + -]] + 3 3 3 3 3 3 + Type: List List RealClosure Fraction Integer + +Finally, we approximate the coordinates of this point with 20 exact digits: + + [approximate(r,1/10**21)::Float for r in lpr2.1] + [0.3221853546 2608559291, 0.3221853546 2608559291, 0.3221853546 2608559291, + 0.3221853546 2608559291] + Type: List Float + +See Also: +o )show ZeroDimensionalSolvePackage + +@ +\pagehead{ZeroDimensionalSolvePackage}{ZDSOLVE} +\pagepic{ps/v104zerodimensionalsolvepackage.ps}{ZDSOLVE}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ZDSOLVE ZeroDimensionalSolvePackage +++ Author: Marc Moreno Maza +++ Date Created: 23/01/1999 +++ Date Last Updated: 08/02/1999 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ A package for computing symbolically the complex and real roots of +++ zero-dimensional algebraic systems over the integer or rational +++ numbers. Complex roots are given by means of univariate representations +++ of irreducible regular chains. Real roots are given by means of tuples +++ of coordinates lying in the \spadtype{RealClosure} of the coefficient ring. +++ This constructor takes three arguments. The first one \spad{R} is the +++ coefficient ring. The second one \spad{ls} is the list of variables involved +++ in the systems to solve. The third one must be \spad{concat(ls,s)} where +++ \spad{s} is an additional symbol used for the univariate representations. +++ WARNING: The third argument is not checked. +++ All operations are based on triangular decompositions. +++ The default is to compute these decompositions directly from the input +++ system by using the \spadtype{RegularChain} domain constructor. +++ The lexTriangular algorithm can also be used for computing these decompositions +++ (see the \spadtype{LexTriangularPackage} package constructor). +++ For that purpose, the operations \axiomOpFrom{univariateSolve}{ZeroDimensionalSolvePackage}, +++ \axiomOpFrom{realSolve}{ZeroDimensionalSolvePackage} and +++ \axiomOpFrom{positiveSolve}{ZeroDimensionalSolvePackage} admit an optional +++ argument. \newline Author: Marc Moreno Maza. + +++ Version: 1. + +ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where + R : Join(OrderedRing,EuclideanDomain,CharacteristicZero,RealConstant) + ls: List Symbol + ls2: List Symbol + V ==> OrderedVariableList(ls) + N ==> NonNegativeInteger + Z ==> Integer + B ==> Boolean + P ==> Polynomial R + LP ==> List P + LS ==> List Symbol + Q ==> NewSparseMultivariatePolynomial(R,V) + U ==> SparseUnivariatePolynomial(R) + TS ==> RegularChain(R,ls) + RUR ==> Record(complexRoots: U, coordinates: LP) + K ==> Fraction R + RC ==> RealClosure(K) + PRC ==> Polynomial RC + REALSOL ==> List RC + URC ==> SparseUnivariatePolynomial RC + V2 ==> OrderedVariableList(ls2) + Q2 ==> NewSparseMultivariatePolynomial(R,V2) + E2 ==> IndexedExponents V2 + ST ==> SquareFreeRegularTriangularSet(R,E2,V2,Q2) + Q2WT ==> Record(val: Q2, tower: ST) + LQ2WT ==> Record(val: List(Q2), tower: ST) + WIP ==> Record(reals: List(RC), vars: List(Symbol), pols: List(Q2)) + polsetpack ==> PolynomialSetUtilitiesPackage(R,E2,V2,Q2) + normpack ==> NormalizationPackage(R,E2,V2,Q2,ST) + rurpack ==> InternalRationalUnivariateRepresentationPackage(R,E2,V2,Q2,ST) + quasicomppack ==> SquareFreeQuasiComponentPackage(R,E2,V2,Q2,ST) + lextripack ==> LexTriangularPackage(R,ls) + + Exports == with + triangSolve: (LP,B,B) -> List RegularChain(R,ls) + ++ \spad{triangSolve(lp,info?,lextri?)} decomposes the variety + ++ associated with \axiom{lp} into regular chains. + ++ Thus a point belongs to this variety iff it is a regular + ++ zero of a regular set in in the output. + ++ Note that \axiom{lp} needs to generate a zero-dimensional ideal. + ++ If \axiom{lp} is not zero-dimensional then the result is only + ++ a decomposition of its zero-set in the sense of the closure + ++ (w.r.t. Zarisky topology). + ++ Moreover, if \spad{info?} is \spad{true} then some information is + ++ displayed during the computations. + ++ See \axiomOpFrom{zeroSetSplit}{RegularTriangularSetCategory}(lp,true,info?). + ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called + ++ from the \spadtype{LexTriangularPackage} constructor + ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). + ++ Otherwise, the triangular decomposition is computed directly from the input + ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. + triangSolve: (LP,B) -> List RegularChain(R,ls) + ++ \spad{triangSolve(lp,info?)} returns the same as \spad{triangSolve(lp,false)} + triangSolve: LP -> List RegularChain(R,ls) + ++ \spad{triangSolve(lp)} returns the same as \spad{triangSolve(lp,false,false)} + univariateSolve: RegularChain(R,ls) -> List Record(complexRoots: U, coordinates: LP) + ++ \spad{univariateSolve(ts)} returns a univariate representation + ++ of \spad{ts}. + ++ See \axiomOpFrom{rur}{RationalUnivariateRepresentationPackage}(lp,true). + univariateSolve: (LP,B,B,B) -> List RUR + ++ \spad{univariateSolve(lp,info?,check?,lextri?)} returns a univariate + ++ representation of the variety associated with \spad{lp}. + ++ Moreover, if \spad{info?} is \spad{true} then some information is + ++ displayed during the decomposition into regular chains. + ++ If \spad{check?} is \spad{true} then the result is checked. + ++ See \axiomOpFrom{rur}{RationalUnivariateRepresentationPackage}(lp,true). + ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called + ++ from the \spadtype{LexTriangularPackage} constructor + ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). + ++ Otherwise, the triangular decomposition is computed directly from the input + ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. + univariateSolve: (LP,B,B) -> List RUR + ++ \spad{univariateSolve(lp,info?,check?)} returns the same as + ++ \spad{univariateSolve(lp,info?,check?,false)}. + univariateSolve: (LP,B) -> List RUR + ++ \spad{univariateSolve(lp,info?)} returns the same as + ++ \spad{univariateSolve(lp,info?,false,false)}. + univariateSolve: LP -> List RUR + ++ \spad{univariateSolve(lp)} returns the same as + ++ \spad{univariateSolve(lp,false,false,false)}. + realSolve: RegularChain(R,ls) -> List REALSOL + ++ \spad{realSolve(ts)} returns the set of the points in the regular + ++ zero set of \spad{ts} whose coordinates are all real. + ++ WARNING: For each set of coordinates given by \spad{realSolve(ts)} + ++ the ordering of the indeterminates is reversed w.r.t. \spad{ls}. + realSolve: (LP,B,B,B) -> List REALSOL + ++ \spad{realSolve(ts,info?,check?,lextri?)} returns the set of the points + ++ in the variety associated with \spad{lp} whose coordinates are all real. + ++ Moreover, if \spad{info?} is \spad{true} then some information is + ++ displayed during decomposition into regular chains. + ++ If \spad{check?} is \spad{true} then the result is checked. + ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called + ++ from the \spadtype{LexTriangularPackage} constructor + ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). + ++ Otherwise, the triangular decomposition is computed directly from the input + ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. + ++ WARNING: For each set of coordinates given by \spad{realSolve(ts,info?,check?,lextri?)} + ++ the ordering of the indeterminates is reversed w.r.t. \spad{ls}. + realSolve: (LP,B,B) -> List REALSOL + ++ \spad{realSolve(ts,info?,check?)} returns the same as \spad{realSolve(ts,info?,check?,false)}. + realSolve: (LP,B) -> List REALSOL + ++ \spad{realSolve(ts,info?)} returns the same as \spad{realSolve(ts,info?,false,false)}. + realSolve: LP -> List REALSOL + ++ \spad{realSolve(lp)} returns the same as \spad{realSolve(ts,false,false,false)} + positiveSolve: RegularChain(R,ls) -> List REALSOL + ++ \spad{positiveSolve(ts)} returns the points of the regular + ++ set of \spad{ts} with (real) strictly positive coordinates. + positiveSolve: (LP,B,B) -> List REALSOL + ++ \spad{positiveSolve(lp,info?,lextri?)} returns the set of the points + ++ in the variety associated with \spad{lp} whose coordinates are (real) strictly positive. + ++ Moreover, if \spad{info?} is \spad{true} then some information is + ++ displayed during decomposition into regular chains. + ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called + ++ from the \spadtype{LexTriangularPackage} constructor + ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). + ++ Otherwise, the triangular decomposition is computed directly from the input + ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. + ++ WARNING: For each set of coordinates given by \spad{positiveSolve(lp,info?,lextri?)} + ++ the ordering of the indeterminates is reversed w.r.t. \spad{ls}. + positiveSolve: (LP,B) -> List REALSOL + ++ \spad{positiveSolve(lp)} returns the same as \spad{positiveSolve(lp,info?,false)}. + positiveSolve: LP -> List REALSOL + ++ \spad{positiveSolve(lp)} returns the same as \spad{positiveSolve(lp,false,false)}. + squareFree: (TS) -> List ST + ++ \spad{squareFree(ts)} returns the square-free factorization of \spad{ts}. + ++ Moreover, each factor is a Lazard triangular set and the decomposition + ++ is a Kalkbrener split of \spad{ts}, which is enough here for + ++ the matter of solving zero-dimensional algebraic systems. + ++ WARNING: \spad{ts} is not checked to be zero-dimensional. + convert: Q -> Q2 + ++ \spad{convert(q)} converts \spad{q}. + convert: P -> PRC + ++ \spad{convert(p)} converts \spad{p}. + convert: Q2 -> PRC + ++ \spad{convert(q)} converts \spad{q}. + convert: U -> URC + ++ \spad{convert(u)} converts \spad{u}. + convert: ST -> List Q2 + ++ \spad{convert(st)} returns the members of \spad{st}. + + Implementation == add + news: Symbol := last(ls2)$(List Symbol) + newv: V2 := (variable(news)$V2)::V2 + newq: Q2 := newv :: Q2 + + convert(q:Q):Q2 == + ground? q => (ground(q))::Q2 + q2: Q2 := 0 + while not ground?(q) repeat + v: V := mvar(q) + d: N := mdeg(q) + v2: V2 := (variable(convert(v)@Symbol)$V2)::V2 + iq2: Q2 := convert(init(q))@Q2 + lq2: Q2 := (v2 :: Q2) + lq2 := lq2 ** d + q2 := iq2 * lq2 + q2 + q := tail(q) + q2 + (ground(q))::Q2 + + squareFree(ts:TS):List(ST) == + irred?: Boolean := false + st: ST := [[newq]$(List Q2)] + lq: List(Q2) := [convert(p)@Q2 for p in parts(ts)] + lq := sort(infRittWu?,lq) + toSee: List LQ2WT := [] + if irred? + then + lf := irreducibleFactors([first lq])$polsetpack + lq := rest lq + for f in lf repeat + toSee := cons([cons(f,lq),st]$LQ2WT, toSee) + else + toSee := [[lq,st]$LQ2WT] + toSave: List ST := [] + while not empty? toSee repeat + lqwt := first toSee; toSee := rest toSee + lq := lqwt.val; st := lqwt.tower + empty? lq => + toSave := cons(st,toSave) + q := first lq; lq := rest lq + lsfqwt: List Q2WT := squareFreePart(q,st)$ST + for sfqwt in lsfqwt repeat + q := sfqwt.val; st := sfqwt.tower + if not ground? init(q) + then + q := normalizedAssociate(q,st)$normpack + newts := internalAugment(q,st)$ST + newlq := [remainder(q,newts).polnum for q in lq] + toSee := cons([newlq,newts]$LQ2WT,toSee) + toSave + + + triangSolve(lp: LP, info?: B, lextri?: B): List TS == + lq: List(Q) := [convert(p)$Q for p in lp] + lextri? => zeroSetSplit(lq,false)$lextripack + zeroSetSplit(lq,true,info?)$TS + + triangSolve(lp: LP, info?: B): List TS == triangSolve(lp,info?,false) + + triangSolve(lp: LP): List TS == triangSolve(lp,false) + + convert(u: U): URC == + zero? u => 0 + ground? u => ((ground(u) :: K)::RC)::URC + uu: URC := 0 + while not ground? u repeat + uu := monomial((leadingCoefficient(u) :: K):: RC,degree(u)) + uu + u := reductum u + uu + ((ground(u) :: K)::RC)::URC + + coerceFromRtoRC(r:R): RC == + (r::K)::RC + + convert(p:P): PRC == + map(coerceFromRtoRC,p)$PolynomialFunctions2(R,RC) + + convert(q2:Q2): PRC == + p: P := coerce(q2)$Q2 + convert(p)@PRC + + convert(sts:ST): List Q2 == + lq2: List(Q2) := parts(sts)$ST + lq2 := sort(infRittWu?,lq2) + rest(lq2) + + realSolve(ts: TS): List REALSOL == + lsts: List ST := squareFree(ts) + lr: REALSOL := [] + lv: List Symbol := [] + toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] + toSave: List REALSOL := [] + while not empty? toSee repeat + wip := first toSee; toSee := rest toSee + lr := wip.reals; lv := wip.vars; lq2 := wip.pols + (empty? lq2) and (not empty? lr) => + toSave := cons(reverse(lr),toSave) + q2 := first lq2; lq2 := rest lq2 + qrc := convert(q2)@PRC + if not empty? lr + then + for r in reverse(lr) for v in reverse(lv) repeat + qrc := eval(qrc,v,r) + lv := cons((mainVariable(qrc) :: Symbol),lv) + urc: URC := univariate(qrc)@URC + urcRoots := allRootsOf(urc)$RC + for urcRoot in urcRoots repeat + toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) + toSave + + realSolve(lp: List(P), info?:Boolean, check?:Boolean, lextri?: Boolean): List REALSOL == + lts: List TS + lq: List(Q) := [convert(p)$Q for p in lp] + if lextri? + then + lts := zeroSetSplit(lq,false)$lextripack + else + lts := zeroSetSplit(lq,true,info?)$TS + lsts: List ST := [] + for ts in lts repeat + lsts := concat(squareFree(ts), lsts) + lsts := removeSuperfluousQuasiComponents(lsts)$quasicomppack + lr: REALSOL := [] + lv: List Symbol := [] + toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] + toSave: List REALSOL := [] + while not empty? toSee repeat + wip := first toSee; toSee := rest toSee + lr := wip.reals; lv := wip.vars; lq2 := wip.pols + (empty? lq2) and (not empty? lr) => + toSave := cons(reverse(lr),toSave) + q2 := first lq2; lq2 := rest lq2 + qrc := convert(q2)@PRC + if not empty? lr + then + for r in reverse(lr) for v in reverse(lv) repeat + qrc := eval(qrc,v,r) + lv := cons((mainVariable(qrc) :: Symbol),lv) + urc: URC := univariate(qrc)@URC + urcRoots := allRootsOf(urc)$RC + for urcRoot in urcRoots repeat + toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) + if check? + then + for p in lp repeat + for realsol in toSave repeat + prc: PRC := convert(p)@PRC + for rr in realsol for symb in reverse(ls) repeat + prc := eval(prc,symb,rr) + not zero? prc => + error "realSolve$ZDSOLVE: bad result" + toSave + + realSolve(lp: List(P), info?:Boolean, check?:Boolean): List REALSOL == + realSolve(lp,info?,check?,false) + + realSolve(lp: List(P), info?:Boolean): List REALSOL == + realSolve(lp,info?,false,false) + + realSolve(lp: List(P)): List REALSOL == + realSolve(lp,false,false,false) + + positiveSolve(ts: TS): List REALSOL == + lsts: List ST := squareFree(ts) + lr: REALSOL := [] + lv: List Symbol := [] + toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] + toSave: List REALSOL := [] + while not empty? toSee repeat + wip := first toSee; toSee := rest toSee + lr := wip.reals; lv := wip.vars; lq2 := wip.pols + (empty? lq2) and (not empty? lr) => + toSave := cons(reverse(lr),toSave) + q2 := first lq2; lq2 := rest lq2 + qrc := convert(q2)@PRC + if not empty? lr + then + for r in reverse(lr) for v in reverse(lv) repeat + qrc := eval(qrc,v,r) + lv := cons((mainVariable(qrc) :: Symbol),lv) + urc: URC := univariate(qrc)@URC + urcRoots := allRootsOf(urc)$RC + for urcRoot in urcRoots repeat + if positive? urcRoot + then + toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) + toSave + + positiveSolve(lp: List(P), info?:Boolean, lextri?: Boolean): List REALSOL == + lts: List TS + lq: List(Q) := [convert(p)$Q for p in lp] + if lextri? + then + lts := zeroSetSplit(lq,false)$lextripack + else + lts := zeroSetSplit(lq,true,info?)$TS + lsts: List ST := [] + for ts in lts repeat + lsts := concat(squareFree(ts), lsts) + lsts := removeSuperfluousQuasiComponents(lsts)$quasicomppack + lr: REALSOL := [] + lv: List Symbol := [] + toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] + toSave: List REALSOL := [] + while not empty? toSee repeat + wip := first toSee; toSee := rest toSee + lr := wip.reals; lv := wip.vars; lq2 := wip.pols + (empty? lq2) and (not empty? lr) => + toSave := cons(reverse(lr),toSave) + q2 := first lq2; lq2 := rest lq2 + qrc := convert(q2)@PRC + if not empty? lr + then + for r in reverse(lr) for v in reverse(lv) repeat + qrc := eval(qrc,v,r) + lv := cons((mainVariable(qrc) :: Symbol),lv) + urc: URC := univariate(qrc)@URC + urcRoots := allRootsOf(urc)$RC + for urcRoot in urcRoots repeat + if positive? urcRoot + then + toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) + toSave + + positiveSolve(lp: List(P), info?:Boolean): List REALSOL == + positiveSolve(lp, info?, false) + + positiveSolve(lp: List(P)): List REALSOL == + positiveSolve(lp, false, false) + + univariateSolve(ts: TS): List RUR == + toSee: List ST := squareFree(ts) + toSave: List RUR := [] + for st in toSee repeat + lus: List ST := rur(st,true)$rurpack + for us in lus repeat + g: U := univariate(select(us,newv)::Q2)$Q2 + lc: LP := [convert(q2)@P for q2 in parts(collectUpper(us,newv)$ST)$ST] + toSave := cons([g,lc]$RUR, toSave) + toSave + + univariateSolve(lp: List(P), info?:Boolean, check?:Boolean, lextri?: Boolean): List RUR == + lts: List TS + lq: List(Q) := [convert(p)$Q for p in lp] + if lextri? + then + lts := zeroSetSplit(lq,false)$lextripack + else + lts := zeroSetSplit(lq,true,info?)$TS + toSee: List ST := [] + for ts in lts repeat + toSee := concat(squareFree(ts), toSee) + toSee := removeSuperfluousQuasiComponents(toSee)$quasicomppack + toSave: List RUR := [] + if check? + then + lq2: List(Q2) := [convert(p)$Q2 for p in lp] + for st in toSee repeat + lus: List ST := rur(st,true)$rurpack + for us in lus repeat + if check? + then + rems: List(Q2) := [removeZero(q2,us)$ST for q2 in lq2] + not every?(zero?,rems) => + output(st::OutputForm)$OutputPackage + output("Has a bad RUR component:")$OutputPackage + output(us::OutputForm)$OutputPackage + error "univariateSolve$ZDSOLVE: bad RUR" + g: U := univariate(select(us,newv)::Q2)$Q2 + lc: LP := [convert(q2)@P for q2 in parts(collectUpper(us,newv)$ST)$ST] + toSave := cons([g,lc]$RUR, toSave) + toSave + + univariateSolve(lp: List(P), info?:Boolean, check?:Boolean): List RUR == + univariateSolve(lp,info?,check?,false) + + univariateSolve(lp: List(P), info?:Boolean): List RUR == + univariateSolve(lp,info?,false,false) + + univariateSolve(lp: List(P)): List RUR == + univariateSolve(lp,false,false,false) + +@ +<>= +"ZDSOLVE" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ZDSOLVE"] +"SFRTCAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=SFRTCAT"] +"ZDSOLVE" -> "SFRTCAT" + +@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chunk collections} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -89573,6 +101741,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89606,6 +101775,9 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> +<> +<> <> <> <> @@ -89613,12 +101785,14 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> <> <> +<> <> <> <> @@ -89723,6 +101897,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89733,6 +101908,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89804,6 +101980,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89814,6 +101991,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> @@ -89831,6 +102009,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89877,6 +102056,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89918,6 +102098,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> <> @@ -89933,6 +102114,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> <> <> @@ -89966,10 +102148,12 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> +<> <> <> <> <> +<> <> <> <> @@ -89981,26 +102165,43 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where <> <> <> +<> +<> <> <> +<> <> +<> +<> <> <> <> <> +<> +<> <> <> <> <> <> +<> +<> <> <> <> <> +<> +<> +<> + +<> <> +<> + +<> @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Index} diff --git a/books/ps/v104directproductfunctions2.ps b/books/ps/v104directproductfunctions2.ps new file mode 100644 index 0000000..2abfecf --- /dev/null +++ b/books/ps/v104directproductfunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 126 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 90 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% DIRPROD2 +gsave +[ /Rect [ 0 72 82 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=DIRPROD2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.96881e-14 108 lineto +8.62851e-15 72 lineto +82 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.96881e-14 108 lineto +8.62851e-15 72 lineto +82 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 67 (DIRPROD2) alignedtext +grestore +% VECTCAT +gsave +[ /Rect [ 1 0 81 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=VECTCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 81 36 moveto +1 36 lineto +1 1.06581e-14 lineto +81 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 81 36 moveto +1 36 lineto +1 1.06581e-14 lineto +81 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8.5 13.9 moveto 65 (VECTCAT) alignedtext +grestore +% DIRPROD2->VECTCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 41 72 moveto +41 64 41 55 41 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 126 152 +end +restore +%%EOF diff --git a/books/ps/v104expertsystemtoolspackage.ps b/books/ps/v104expertsystemtoolspackage.ps new file mode 100644 index 0000000..9604f8b --- /dev/null +++ b/books/ps/v104expertsystemtoolspackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 122 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 86 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ESTOOLS +gsave +[ /Rect [ 0 72 78 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ESTOOLS) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +78 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +78 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 62 (ESTOOLS) alignedtext +grestore +% FS +gsave +[ /Rect [ 12 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FS) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +12 36 lineto +12 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +12 36 lineto +12 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +31.5 13.9 moveto 15 (FS) alignedtext +grestore +% ESTOOLS->FS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 39 72 moveto +39 64 39 55 39 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 122 152 +end +restore +%%EOF diff --git a/books/ps/v104expertsystemtoolspackage1.ps b/books/ps/v104expertsystemtoolspackage1.ps new file mode 100644 index 0000000..a56117b --- /dev/null +++ b/books/ps/v104expertsystemtoolspackage1.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 128 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 92 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ESTOOLS1 +gsave +[ /Rect [ 0 72 84 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ESTOOLS1) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.63123e-14 108 lineto +5.2458e-15 72 lineto +84 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.63123e-14 108 lineto +5.2458e-15 72 lineto +84 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 69 (ESTOOLS1) alignedtext +grestore +% OAGROUP +gsave +[ /Rect [ 0 0 84 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=OAGROUP) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 84 36 moveto +2.84217e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +84 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 84 36 moveto +2.84217e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +84 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 13.9 moveto 68 (OAGROUP) alignedtext +grestore +% ESTOOLS1->OAGROUP +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 42 72 moveto +42 64 42 55 42 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 128 152 +end +restore +%%EOF diff --git a/books/ps/v104expertsystemtoolspackage2.ps b/books/ps/v104expertsystemtoolspackage2.ps new file mode 100644 index 0000000..286f03a --- /dev/null +++ b/books/ps/v104expertsystemtoolspackage2.ps @@ -0,0 +1,326 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 218 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 182 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ESTOOLS2 +gsave +[ /Rect [ 48 72 132 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ESTOOLS2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 132 108 moveto +48 108 lineto +48 72 lineto +132 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 132 108 moveto +48 108 lineto +48 72 lineto +132 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +55.5 85.9 moveto 69 (ESTOOLS2) alignedtext +grestore +% LMODULE +gsave +[ /Rect [ 0 0 84 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=LMODULE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 84 36 moveto +2.63123e-14 36 lineto +5.2458e-15 1.06581e-14 lineto +84 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 84 36 moveto +2.63123e-14 36 lineto +5.2458e-15 1.06581e-14 lineto +84 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 69 (LMODULE) alignedtext +grestore +% ESTOOLS2->LMODULE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 78 72 moveto +73 64 66 54 60 44 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 62.8 41.9 moveto +54 36 lineto +57.2 46.1 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 62.8 41.9 moveto +54 36 lineto +57.2 46.1 lineto +closepath stroke +grestore +% SGROUP +gsave +[ /Rect [ 102 0 174 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=SGROUP) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 174 36 moveto +102 36 lineto +102 1.06581e-14 lineto +174 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 174 36 moveto +102 36 lineto +102 1.06581e-14 lineto +174 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +110 13.9 moveto 56 (SGROUP) alignedtext +grestore +% ESTOOLS2->SGROUP +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 102 72 moveto +107 64 114 54 120 44 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 122.8 46.1 moveto +126 36 lineto +117.2 41.9 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 122.8 46.1 moveto +126 36 lineto +117.2 41.9 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 218 152 +end +restore +%%EOF diff --git a/books/ps/v104expressiontubeplot.ps b/books/ps/v104expressiontubeplot.ps new file mode 100644 index 0000000..c7cdb9b --- /dev/null +++ b/books/ps/v104expressiontubeplot.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 132 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 96 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% EXPRTUBE +gsave +[ /Rect [ 0 72 88 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=EXPRTUBE) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 88 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +88 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 88 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +88 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 72 (EXPRTUBE) alignedtext +grestore +% FS +gsave +[ /Rect [ 17 0 71 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FS) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 71 36 moveto +17 36 lineto +17 1.06581e-14 lineto +71 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 71 36 moveto +17 36 lineto +17 1.06581e-14 lineto +71 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +36.5 13.9 moveto 15 (FS) alignedtext +grestore +% EXPRTUBE->FS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 44 72 moveto +44 64 44 55 44 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 47.5001 46 moveto +44 36 lineto +40.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 47.5001 46 moveto +44 36 lineto +40.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 132 152 +end +restore +%%EOF diff --git a/books/ps/v104fglmifcanpackage.ps b/books/ps/v104fglmifcanpackage.ps new file mode 100644 index 0000000..f79f221 --- /dev/null +++ b/books/ps/v104fglmifcanpackage.ps @@ -0,0 +1,326 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 202 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 166 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% FGLMICPK +gsave +[ /Rect [ 38 72 124 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=FGLMICPK) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 124 108 moveto +38 108 lineto +38 72 lineto +124 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 124 108 moveto +38 108 lineto +38 72 lineto +124 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +45.5 85.9 moveto 71 (FGLMICPK) alignedtext +grestore +% DIRPCAT +gsave +[ /Rect [ 0 0 74 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=DIRPCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 74 36 moveto +2.13163e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +74 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 74 36 moveto +2.13163e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +74 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 13.9 moveto 58 (DIRPCAT) alignedtext +grestore +% FGLMICPK->DIRPCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 70 72 moveto +65 64 59 54 53 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 55.916 43.0418 moveto +48 36 lineto +49.7969 46.4414 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 55.916 43.0418 moveto +48 36 lineto +49.7969 46.4414 lineto +closepath stroke +grestore +% PFECAT +gsave +[ /Rect [ 92 0 158 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 158 36 moveto +92 36 lineto +92 1.06581e-14 lineto +158 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 158 36 moveto +92 36 lineto +92 1.06581e-14 lineto +158 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +99.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% FGLMICPK->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 92 72 moveto +97 64 103 54 109 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 112.203 46.4414 moveto +114 36 lineto +106.084 43.0418 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 112.203 46.4414 moveto +114 36 lineto +106.084 43.0418 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 202 152 +end +restore +%%EOF diff --git a/books/ps/v104internalrationalunivariaterepresentationpackage.ps b/books/ps/v104internalrationalunivariaterepresentationpackage.ps new file mode 100644 index 0000000..3244a7e --- /dev/null +++ b/books/ps/v104internalrationalunivariaterepresentationpackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 118 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 82 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% IRURPK +gsave +[ /Rect [ 4 72 70 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=IRURPK) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 70 108 moveto +4 108 lineto +4 72 lineto +70 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 70 108 moveto +4 108 lineto +4 72 lineto +70 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +12 85.9 moveto 50 (IRURPK) alignedtext +grestore +% SFRTCAT +gsave +[ /Rect [ 0 0 74 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=SFRTCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 74 36 moveto +2.00881e-14 36 lineto +6.06806e-15 1.06581e-14 lineto +74 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 74 36 moveto +2.00881e-14 36 lineto +6.06806e-15 1.06581e-14 lineto +74 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 59 (SFRTCAT) alignedtext +grestore +% IRURPK->SFRTCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 37 72 moveto +37 64 37 55 37 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 40.5001 46 moveto +37 36 lineto +33.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 40.5001 46 moveto +37 36 lineto +33.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 118 152 +end +restore +%%EOF diff --git a/books/ps/v104lextriangularpackage.ps b/books/ps/v104lextriangularpackage.ps new file mode 100644 index 0000000..f984b02 --- /dev/null +++ b/books/ps/v104lextriangularpackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 126 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 90 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% LEXTRIPK +gsave +[ /Rect [ 0 72 82 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=LEXTRIPK) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.96881e-14 108 lineto +8.62851e-15 72 lineto +82 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.96881e-14 108 lineto +8.62851e-15 72 lineto +82 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 67 (LEXTRIPK) alignedtext +grestore +% SFRTCAT +gsave +[ /Rect [ 4 0 78 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=SFRTCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 78 36 moveto +4 36 lineto +4 1.06581e-14 lineto +78 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 78 36 moveto +4 36 lineto +4 1.06581e-14 lineto +78 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +11.5 13.9 moveto 59 (SFRTCAT) alignedtext +grestore +% LEXTRIPK->SFRTCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 41 72 moveto +41 64 41 55 41 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 126 152 +end +restore +%%EOF diff --git a/books/ps/v104normretractpackage.ps b/books/ps/v104normretractpackage.ps new file mode 100644 index 0000000..b744be3 --- /dev/null +++ b/books/ps/v104normretractpackage.ps @@ -0,0 +1,326 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 182 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 146 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% NORMRETR +gsave +[ /Rect [ 19 72 113 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=NORMRETR) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 113 108 moveto +19 108 lineto +19 72 lineto +113 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 113 108 moveto +19 108 lineto +19 72 lineto +113 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +27 85.9 moveto 78 (NORMRETR) alignedtext +grestore +% FAXF +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FAXF) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +2.13163e-14 36 lineto +3.55271e-15 1.06581e-14 lineto +54 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +2.13163e-14 36 lineto +3.55271e-15 1.06581e-14 lineto +54 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +10 13.9 moveto 34 (FAXF) alignedtext +grestore +% NORMRETR->FAXF +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 56 72 moveto +52 64 47 54 42 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 44.916 43.0418 moveto +37 36 lineto +38.7969 46.4414 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 44.916 43.0418 moveto +37 36 lineto +38.7969 46.4414 lineto +closepath stroke +grestore +% PFECAT +gsave +[ /Rect [ 72 0 138 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 138 36 moveto +72 36 lineto +72 1.06581e-14 lineto +138 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 138 36 moveto +72 36 lineto +72 1.06581e-14 lineto +138 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +79.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% NORMRETR->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 76 72 moveto +80 64 85 54 90 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 93.2031 46.4414 moveto +95 36 lineto +87.084 43.0418 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 93.2031 46.4414 moveto +95 36 lineto +87.084 43.0418 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 182 152 +end +restore +%%EOF diff --git a/books/ps/v104numerictubeplot.ps b/books/ps/v104numerictubeplot.ps new file mode 100644 index 0000000..93a1063 --- /dev/null +++ b/books/ps/v104numerictubeplot.ps @@ -0,0 +1,416 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 354 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 318 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% NUMTUBE +gsave +[ /Rect [ 107 72 193 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=NUMTUBE) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 193 108 moveto +107 108 lineto +107 72 lineto +193 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 193 108 moveto +107 108 lineto +107 72 lineto +193 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +114.5 85.9 moveto 71 (NUMTUBE) alignedtext +grestore +% FIELD +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FIELD) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +1.41189e-14 36 lineto +3.65506e-15 1.06581e-14 lineto +54 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +1.41189e-14 36 lineto +3.65506e-15 1.06581e-14 lineto +54 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 39 (FIELD) alignedtext +grestore +% NUMTUBE->FIELD +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 119 72 moveto +102 62 81 49 63 39 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 64.4414 35.7969 moveto +54 34 lineto +61.0418 41.916 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 64.4414 35.7969 moveto +54 34 lineto +61.0418 41.916 lineto +closepath stroke +grestore +% RADCAT +gsave +[ /Rect [ 72 0 144 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=RADCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 144 36 moveto +72 36 lineto +72 1.06581e-14 lineto +144 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 144 36 moveto +72 36 lineto +72 1.06581e-14 lineto +144 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +80 13.9 moveto 56 (RADCAT) alignedtext +grestore +% NUMTUBE->RADCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 139 72 moveto +134 64 129 54 123 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 125.916 43.0418 moveto +118 36 lineto +119.797 46.4414 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 125.916 43.0418 moveto +118 36 lineto +119.797 46.4414 lineto +closepath stroke +grestore +% FLAGG +gsave +[ /Rect [ 162 0 224 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 224 36 moveto +162 36 lineto +162 1.06581e-14 lineto +224 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 224 36 moveto +162 36 lineto +162 1.06581e-14 lineto +224 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +169.5 13.9 moveto 47 (FLAGG) alignedtext +grestore +% NUMTUBE->FLAGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 161 72 moveto +166 64 172 54 177 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 180.203 46.4414 moveto +182 36 lineto +174.084 43.0418 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 180.203 46.4414 moveto +182 36 lineto +174.084 43.0418 lineto +closepath stroke +grestore +% FLAGG- +gsave +[ /Rect [ 242 0 310 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 310 36 moveto +242 36 lineto +242 1.06581e-14 lineto +310 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 310 36 moveto +242 36 lineto +242 1.06581e-14 lineto +310 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +250 13.9 moveto 52 (FLAGG-) alignedtext +grestore +% NUMTUBE->FLAGG- +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 182 72 moveto +198 63 218 51 236 41 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 237.958 43.916 moveto +245 36 lineto +234.559 37.7969 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 237.958 43.916 moveto +245 36 lineto +234.559 37.7969 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 354 152 +end +restore +%%EOF diff --git a/books/ps/v104paradoxicalcombinatorsforstreams.ps b/books/ps/v104paradoxicalcombinatorsforstreams.ps new file mode 100644 index 0000000..b9423ac --- /dev/null +++ b/books/ps/v104paradoxicalcombinatorsforstreams.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 126 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 90 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% YSTREAM +gsave +[ /Rect [ 0 72 82 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=YSTREAM) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.96881e-14 108 lineto +8.62851e-15 72 lineto +82 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.96881e-14 108 lineto +8.62851e-15 72 lineto +82 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 67 (YSTREAM) alignedtext +grestore +% TYPE +gsave +[ /Rect [ 14 0 68 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=TYPE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 68 36 moveto +14 36 lineto +14 1.06581e-14 lineto +68 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 68 36 moveto +14 36 lineto +14 1.06581e-14 lineto +68 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +23.5 13.9 moveto 35 (TYPE) alignedtext +grestore +% YSTREAM->TYPE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 41 72 moveto +41 64 41 55 41 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 126 152 +end +restore +%%EOF diff --git a/books/ps/v104polynomialsetutilitiespackage.ps b/books/ps/v104polynomialsetutilitiespackage.ps new file mode 100644 index 0000000..b628cdd --- /dev/null +++ b/books/ps/v104polynomialsetutilitiespackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 122 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 86 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% PSETPK +gsave +[ /Rect [ 6 72 72 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PSETPK) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +6 108 lineto +6 72 lineto +72 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +6 108 lineto +6 72 lineto +72 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +14 85.9 moveto 50 (PSETPK) alignedtext +grestore +% RPOLCAT +gsave +[ /Rect [ 0 0 78 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=RPOLCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 78 36 moveto +2.84217e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +78 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 78 36 moveto +2.84217e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +78 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 13.9 moveto 62 (RPOLCAT) alignedtext +grestore +% PSETPK->RPOLCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 39 72 moveto +39 64 39 55 39 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 122 152 +end +restore +%%EOF diff --git a/books/ps/v104rationalunivariaterepresentationpackage.ps b/books/ps/v104rationalunivariaterepresentationpackage.ps new file mode 100644 index 0000000..aad8a98 --- /dev/null +++ b/books/ps/v104rationalunivariaterepresentationpackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 118 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 82 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% RURPK +gsave +[ /Rect [ 6 72 68 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=RURPK) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 68 108 moveto +6 108 lineto +6 72 lineto +68 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 68 108 moveto +6 108 lineto +6 72 lineto +68 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +14 85.9 moveto 46 (RURPK) alignedtext +grestore +% SFRTCAT +gsave +[ /Rect [ 0 0 74 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=SFRTCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 74 36 moveto +2.00881e-14 36 lineto +6.06806e-15 1.06581e-14 lineto +74 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 74 36 moveto +2.00881e-14 36 lineto +6.06806e-15 1.06581e-14 lineto +74 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 59 (SFRTCAT) alignedtext +grestore +% RURPK->SFRTCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 37 72 moveto +37 64 37 55 37 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 40.5001 46 moveto +37 36 lineto +33.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 40.5001 46 moveto +37 36 lineto +33.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 118 152 +end +restore +%%EOF diff --git a/books/ps/v104resolvelatticecompletion.ps b/books/ps/v104resolvelatticecompletion.ps new file mode 100644 index 0000000..70a672e --- /dev/null +++ b/books/ps/v104resolvelatticecompletion.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 120 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 84 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% RESLATC +gsave +[ /Rect [ 0 72 76 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=RESLATC) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 76 108 moveto +2.82205e-14 108 lineto +7.17829e-15 72 lineto +76 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 76 108 moveto +2.82205e-14 108 lineto +7.17829e-15 72 lineto +76 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 61 (RESLATC) alignedtext +grestore +% TYPE +gsave +[ /Rect [ 11 0 65 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=TYPE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 65 36 moveto +11 36 lineto +11 1.06581e-14 lineto +65 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 65 36 moveto +11 36 lineto +11 1.06581e-14 lineto +65 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +20.5 13.9 moveto 35 (TYPE) alignedtext +grestore +% RESLATC->TYPE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 38 72 moveto +38 64 38 55 38 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 41.5001 46 moveto +38 36 lineto +34.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 41.5001 46 moveto +38 36 lineto +34.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 120 152 +end +restore +%%EOF diff --git a/books/ps/v104tableauxbumpers.ps b/books/ps/v104tableauxbumpers.ps new file mode 100644 index 0000000..46e50bf --- /dev/null +++ b/books/ps/v104tableauxbumpers.ps @@ -0,0 +1,326 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 192 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 156 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% TABLBUMP +gsave +[ /Rect [ 27 72 117 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=TABLBUMP) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 117 108 moveto +27 108 lineto +27 72 lineto +117 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 117 108 moveto +27 108 lineto +27 72 lineto +117 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +34.5 85.9 moveto 75 (TABLBUMP) alignedtext +grestore +% FLAGG +gsave +[ /Rect [ 0 0 62 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 62 36 moveto +2.26989e-14 36 lineto +5.21631e-15 1.06581e-14 lineto +62 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 62 36 moveto +2.26989e-14 36 lineto +5.21631e-15 1.06581e-14 lineto +62 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 47 (FLAGG) alignedtext +grestore +% TABLBUMP->FLAGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 62 72 moveto +57 64 52 54 46 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 48.916 43.0418 moveto +41 36 lineto +42.7969 46.4414 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 48.916 43.0418 moveto +41 36 lineto +42.7969 46.4414 lineto +closepath stroke +grestore +% FLAGG- +gsave +[ /Rect [ 80 0 148 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 148 36 moveto +80 36 lineto +80 1.06581e-14 lineto +148 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 148 36 moveto +80 36 lineto +80 1.06581e-14 lineto +148 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +88 13.9 moveto 52 (FLAGG-) alignedtext +grestore +% TABLBUMP->FLAGG- +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 83 72 moveto +88 64 93 54 99 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 102.203 46.4414 moveto +104 36 lineto +96.084 43.0418 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 102.203 46.4414 moveto +104 36 lineto +96.084 43.0418 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 192 152 +end +restore +%%EOF diff --git a/books/ps/v104texformat1.ps b/books/ps/v104texformat1.ps new file mode 100644 index 0000000..7060d30 --- /dev/null +++ b/books/ps/v104texformat1.ps @@ -0,0 +1,326 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 212 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 176 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% TEX1 +gsave +[ /Rect [ 58 72 112 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=TEX1) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 112 108 moveto +58 108 lineto +58 72 lineto +112 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 112 108 moveto +58 108 lineto +58 72 lineto +112 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +67.5 85.9 moveto 35 (TEX1) alignedtext +grestore +% BASTYPE +gsave +[ /Rect [ 0 0 78 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=BASTYPE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 78 36 moveto +2.84217e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +78 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 78 36 moveto +2.84217e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +78 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 13.9 moveto 62 (BASTYPE) alignedtext +grestore +% TEX1->BASTYPE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 73 72 moveto +68 64 61 54 55 44 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 58.268 42.625 moveto +50 36 lineto +52.332 46.335 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 58.268 42.625 moveto +50 36 lineto +52.332 46.335 lineto +closepath stroke +grestore +% KOERCE +gsave +[ /Rect [ 96 0 168 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=KOERCE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 168 36 moveto +96 36 lineto +96 1.06581e-14 lineto +168 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 168 36 moveto +96 36 lineto +96 1.06581e-14 lineto +168 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +103.5 13.9 moveto 57 (KOERCE) alignedtext +grestore +% TEX1->KOERCE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 97 72 moveto +102 64 109 54 115 44 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 117.668 46.335 moveto +120 36 lineto +111.732 42.625 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 117.668 46.335 moveto +120 36 lineto +111.732 42.625 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 212 152 +end +restore +%%EOF diff --git a/books/ps/v104transsolvepackage.ps b/books/ps/v104transsolvepackage.ps new file mode 100644 index 0000000..59c4c70 --- /dev/null +++ b/books/ps/v104transsolvepackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% SOLVETRA +gsave +[ /Rect [ 0 72 86 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=SOLVETRA) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 86 108 moveto +2.7485e-14 108 lineto +6.41154e-15 72 lineto +86 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 86 108 moveto +2.7485e-14 108 lineto +6.41154e-15 72 lineto +86 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 71 (SOLVETRA) alignedtext +grestore +% FS +gsave +[ /Rect [ 16 0 70 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FS) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 70 36 moveto +16 36 lineto +16 1.06581e-14 lineto +70 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 70 36 moveto +16 36 lineto +16 1.06581e-14 lineto +70 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +35.5 13.9 moveto 15 (FS) alignedtext +grestore +% SOLVETRA->FS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5001 46 moveto +43 36 lineto +39.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5001 46 moveto +43 36 lineto +39.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104transsolvepackageservice.ps b/books/ps/v104transsolvepackageservice.ps new file mode 100644 index 0000000..2787b16 --- /dev/null +++ b/books/ps/v104transsolvepackageservice.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 128 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 92 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% SOLVESER +gsave +[ /Rect [ 0 72 84 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=SOLVESER) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.63123e-14 108 lineto +5.2458e-15 72 lineto +84 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.63123e-14 108 lineto +5.2458e-15 72 lineto +84 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 69 (SOLVESER) alignedtext +grestore +% FS +gsave +[ /Rect [ 15 0 69 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FS) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 69 36 moveto +15 36 lineto +15 1.06581e-14 lineto +69 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 69 36 moveto +15 36 lineto +15 1.06581e-14 lineto +69 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +34.5 13.9 moveto 15 (FS) alignedtext +grestore +% SOLVESER->FS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 42 72 moveto +42 64 42 55 42 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 128 152 +end +restore +%%EOF diff --git a/books/ps/v104tubeplottools.ps b/books/ps/v104tubeplottools.ps new file mode 100644 index 0000000..36642a4 --- /dev/null +++ b/books/ps/v104tubeplottools.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 136 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 100 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% TUBETOOL +gsave +[ /Rect [ 0 72 92 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=TUBETOOL) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 92 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +92 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 92 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +92 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 76 (TUBETOOL) alignedtext +grestore +% FRAC +gsave +[ /Rect [ 19 0 73 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=FRAC) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 73 36 moveto +19 36 lineto +19 1.06581e-14 lineto +73 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 73 36 moveto +19 36 lineto +19 1.06581e-14 lineto +73 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +28 13.9 moveto 36 (FRAC) alignedtext +grestore +% TUBETOOL->FRAC +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 46 72 moveto +46 64 46 55 46 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 49.5001 46 moveto +46 36 lineto +42.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 49.5001 46 moveto +46 36 lineto +42.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 136 152 +end +restore +%%EOF diff --git a/books/ps/v104twofactorize.ps b/books/ps/v104twofactorize.ps new file mode 100644 index 0000000..d587d3c --- /dev/null +++ b/books/ps/v104twofactorize.ps @@ -0,0 +1,326 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 182 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 146 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% TWOFACT +gsave +[ /Rect [ 30 72 114 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=TWOFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 114 108 moveto +30 108 lineto +30 72 lineto +114 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 114 108 moveto +30 108 lineto +30 72 lineto +114 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +38 85.9 moveto 68 (TWOFACT) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% TWOFACT->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 62 72 moveto +58 64 53 54 48 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 50.916 43.0418 moveto +43 36 lineto +44.7969 46.4414 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 50.916 43.0418 moveto +43 36 lineto +44.7969 46.4414 lineto +closepath stroke +grestore +% FAXF +gsave +[ /Rect [ 84 0 138 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FAXF) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 138 36 moveto +84 36 lineto +84 1.06581e-14 lineto +138 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 138 36 moveto +84 36 lineto +84 1.06581e-14 lineto +138 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +94 13.9 moveto 34 (FAXF) alignedtext +grestore +% TWOFACT->FAXF +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 82 72 moveto +86 64 91 54 96 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 99.2031 46.4414 moveto +101 36 lineto +93.084 43.0418 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 99.2031 46.4414 moveto +101 36 lineto +93.084 43.0418 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 182 152 +end +restore +%%EOF diff --git a/books/ps/v104univariatefactorize.ps b/books/ps/v104univariatefactorize.ps new file mode 100644 index 0000000..fbc9292 --- /dev/null +++ b/books/ps/v104univariatefactorize.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 120 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 84 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% UNIFACT +gsave +[ /Rect [ 0 72 76 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=UNIFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 76 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +76 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 76 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +76 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 60 (UNIFACT) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 5 0 71 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 71 36 moveto +5 36 lineto +5 1.06581e-14 lineto +71 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 71 36 moveto +5 36 lineto +5 1.06581e-14 lineto +71 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +12.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% UNIFACT->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 38 72 moveto +38 64 38 55 38 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 41.5001 46 moveto +38 36 lineto +34.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 41.5001 46 moveto +38 36 lineto +34.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 120 152 +end +restore +%%EOF diff --git a/books/ps/v104univariatepolynomialdecompositionpackage.ps b/books/ps/v104univariatepolynomialdecompositionpackage.ps new file mode 100644 index 0000000..3bf378a --- /dev/null +++ b/books/ps/v104univariatepolynomialdecompositionpackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 136 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 100 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% UPDECOMP +gsave +[ /Rect [ 0 72 92 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=UPDECOMP) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 92 108 moveto +2.76723e-14 108 lineto +6.58501e-15 72 lineto +92 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 92 108 moveto +2.76723e-14 108 lineto +6.58501e-15 72 lineto +92 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 77 (UPDECOMP) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 13 0 79 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 79 36 moveto +13 36 lineto +13 1.06581e-14 lineto +79 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 79 36 moveto +13 36 lineto +13 1.06581e-14 lineto +79 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +20.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% UPDECOMP->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 46 72 moveto +46 64 46 55 46 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 49.5001 46 moveto +46 36 lineto +42.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 49.5001 46 moveto +46 36 lineto +42.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 136 152 +end +restore +%%EOF diff --git a/books/ps/v104univariatepolynomialdivisionpackage.ps b/books/ps/v104univariatepolynomialdivisionpackage.ps new file mode 100644 index 0000000..3cc8cbd --- /dev/null +++ b/books/ps/v104univariatepolynomialdivisionpackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% UPDIVP +gsave +[ /Rect [ 0 72 66 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=UPDIVP) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 66 108 moveto +2.13163e-14 108 lineto +0 72 lineto +66 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 66 108 moveto +2.13163e-14 108 lineto +0 72 lineto +66 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 50 (UPDIVP) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% UPDIVP->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104univariatetaylorseriesfunctions2.ps b/books/ps/v104univariatetaylorseriesfunctions2.ps new file mode 100644 index 0000000..59ac828 --- /dev/null +++ b/books/ps/v104univariatetaylorseriesfunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 114 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 78 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% UTS2 +gsave +[ /Rect [ 8 72 62 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=UTS2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 62 108 moveto +8 108 lineto +8 72 lineto +62 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 62 108 moveto +8 108 lineto +8 72 lineto +62 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +18 85.9 moveto 34 (UTS2) alignedtext +grestore +% UTSCAT +gsave +[ /Rect [ 0 0 70 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=UTSCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 70 36 moveto +2.13163e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +70 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 70 36 moveto +2.13163e-14 36 lineto +7.10543e-15 1.06581e-14 lineto +70 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 13.9 moveto 54 (UTSCAT) alignedtext +grestore +% UTS2->UTSCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 35 72 moveto +35 64 35 55 35 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 38.5001 46 moveto +35 36 lineto +31.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 38.5001 46 moveto +35 36 lineto +31.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 114 152 +end +restore +%%EOF diff --git a/books/ps/v104univariatetaylorseriesodesolver.ps b/books/ps/v104univariatetaylorseriesodesolver.ps new file mode 100644 index 0000000..28f57c5 --- /dev/null +++ b/books/ps/v104univariatetaylorseriesodesolver.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 116 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 80 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% UTSODE +gsave +[ /Rect [ 0 72 72 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=UTSODE) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +72 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +72 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 56 (UTSODE) alignedtext +grestore +% UTSCAT +gsave +[ /Rect [ 1 0 71 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=UTSCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 71 36 moveto +1 36 lineto +1 1.06581e-14 lineto +71 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 71 36 moveto +1 36 lineto +1 1.06581e-14 lineto +71 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +9 13.9 moveto 54 (UTSCAT) alignedtext +grestore +% UTSODE->UTSCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 36 72 moveto +36 64 36 55 36 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 39.5001 46 moveto +36 36 lineto +32.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 39.5001 46 moveto +36 36 lineto +32.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 116 152 +end +restore +%%EOF diff --git a/books/ps/v104vectorfunctions2.ps b/books/ps/v104vectorfunctions2.ps new file mode 100644 index 0000000..7eefe07 --- /dev/null +++ b/books/ps/v104vectorfunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 124 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 88 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% VECTOR2 +gsave +[ /Rect [ 0 72 80 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=VECTOR2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +2.13163e-14 108 lineto +7.10543e-15 72 lineto +80 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +2.13163e-14 108 lineto +7.10543e-15 72 lineto +80 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 64 (VECTOR2) alignedtext +grestore +% IVECTOR +gsave +[ /Rect [ 1 0 79 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=IVECTOR) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 79 36 moveto +1 36 lineto +1 1.06581e-14 lineto +79 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 79 36 moveto +1 36 lineto +1 1.06581e-14 lineto +79 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +9 13.9 moveto 62 (IVECTOR) alignedtext +grestore +% VECTOR2->IVECTOR +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 40 72 moveto +40 64 40 55 40 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 43.5001 46 moveto +40 36 lineto +36.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 43.5001 46 moveto +40 36 lineto +36.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 124 152 +end +restore +%%EOF diff --git a/books/ps/v104viewdefaultspackage.ps b/books/ps/v104viewdefaultspackage.ps new file mode 100644 index 0000000..273327d --- /dev/null +++ b/books/ps/v104viewdefaultspackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 122 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 86 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% VIEWDEF +gsave +[ /Rect [ 0 72 78 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=VIEWDEF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +2.634e-14 108 lineto +5.29438e-15 72 lineto +78 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +2.634e-14 108 lineto +5.29438e-15 72 lineto +78 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 63 (VIEWDEF) alignedtext +grestore +% STRING +gsave +[ /Rect [ 6 0 72 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=STRING) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 72 36 moveto +6 36 lineto +6 1.06581e-14 lineto +72 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 72 36 moveto +6 36 lineto +6 1.06581e-14 lineto +72 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +14 13.9 moveto 50 (STRING) alignedtext +grestore +% VIEWDEF->STRING +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 39 72 moveto +39 64 39 55 39 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 122 152 +end +restore +%%EOF diff --git a/books/ps/v104viewportpackage.ps b/books/ps/v104viewportpackage.ps new file mode 100644 index 0000000..5a12a70 --- /dev/null +++ b/books/ps/v104viewportpackage.ps @@ -0,0 +1,371 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 268 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 232 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% VIEW +gsave +[ /Rect [ 81 72 135 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=VIEW) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 135 108 moveto +81 108 lineto +81 72 lineto +135 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 135 108 moveto +81 108 lineto +81 72 lineto +135 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +89.5 85.9 moveto 37 (VIEW) alignedtext +grestore +% FIELD +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FIELD) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +1.41189e-14 36 lineto +3.65506e-15 1.06581e-14 lineto +54 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +1.41189e-14 36 lineto +3.65506e-15 1.06581e-14 lineto +54 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 39 (FIELD) alignedtext +grestore +% VIEW->FIELD +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 88 72 moveto +78 63 66 52 55 43 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 56.8306 39.9511 moveto +47 36 lineto +52.221 45.2191 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 56.8306 39.9511 moveto +47 36 lineto +52.221 45.2191 lineto +closepath stroke +grestore +% RADCAT +gsave +[ /Rect [ 72 0 144 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=RADCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 144 36 moveto +72 36 lineto +72 1.06581e-14 lineto +144 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 144 36 moveto +72 36 lineto +72 1.06581e-14 lineto +144 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +80 13.9 moveto 56 (RADCAT) alignedtext +grestore +% VIEW->RADCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 108 72 moveto +108 64 108 55 108 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 111.5 46 moveto +108 36 lineto +104.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 111.5 46 moveto +108 36 lineto +104.5 46 lineto +closepath stroke +grestore +% FLAGG +gsave +[ /Rect [ 162 0 224 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 224 36 moveto +162 36 lineto +162 1.06581e-14 lineto +224 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 224 36 moveto +162 36 lineto +162 1.06581e-14 lineto +224 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +169.5 13.9 moveto 47 (FLAGG) alignedtext +grestore +% VIEW->FLAGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 129 72 moveto +140 63 153 52 164 42 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 166.1 44.8 moveto +172 36 lineto +161.9 39.2 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 166.1 44.8 moveto +172 36 lineto +161.9 39.2 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 268 152 +end +restore +%%EOF diff --git a/books/ps/v104weierstrasspreparation.ps b/books/ps/v104weierstrasspreparation.ps new file mode 100644 index 0000000..2210403 --- /dev/null +++ b/books/ps/v104weierstrasspreparation.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% WEIER +gsave +[ /Rect [ 3 72 63 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=WEIER) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 63 108 moveto +3 108 lineto +3 72 lineto +63 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 63 108 moveto +3 108 lineto +3 72 lineto +63 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +10.5 85.9 moveto 45 (WEIER) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% WEIER->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104xexponentialpackage.ps b/books/ps/v104xexponentialpackage.ps new file mode 100644 index 0000000..1f4d84d --- /dev/null +++ b/books/ps/v104xexponentialpackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 124 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 88 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% XEXPPKG +gsave +[ /Rect [ 0 72 80 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=XEXPPKG) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +2.13163e-14 108 lineto +7.10543e-15 72 lineto +80 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +2.13163e-14 108 lineto +7.10543e-15 72 lineto +80 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 64 (XEXPPKG) alignedtext +grestore +% XPOLYC +gsave +[ /Rect [ 5 0 75 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=XPOLYC) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 75 36 moveto +5 36 lineto +5 1.06581e-14 lineto +75 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 75 36 moveto +5 36 lineto +5 1.06581e-14 lineto +75 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +13 13.9 moveto 54 (XPOLYC) alignedtext +grestore +% XEXPPKG->XPOLYC +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 40 72 moveto +40 64 40 55 40 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 43.5001 46 moveto +40 36 lineto +36.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 43.5001 46 moveto +40 36 lineto +36.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 124 152 +end +restore +%%EOF diff --git a/books/ps/v104zerodimensionalsolvepackage.ps b/books/ps/v104zerodimensionalsolvepackage.ps new file mode 100644 index 0000000..651c0e6 --- /dev/null +++ b/books/ps/v104zerodimensionalsolvepackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 122 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 86 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ZDSOLVE +gsave +[ /Rect [ 0 72 78 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ZDSOLVE) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +78 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +78 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 62 (ZDSOLVE) alignedtext +grestore +% SFRTCAT +gsave +[ /Rect [ 2 0 76 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=SFRTCAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +2 36 lineto +2 1.06581e-14 lineto +76 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +2 36 lineto +2 1.06581e-14 lineto +76 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +9.5 13.9 moveto 59 (SFRTCAT) alignedtext +grestore +% ZDSOLVE->SFRTCAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 39 72 moveto +39 64 39 55 39 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 42.5001 46 moveto +39 36 lineto +35.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 122 152 +end +restore +%%EOF diff --git a/changelog b/changelog index a94069c..0392eeb 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,57 @@ +20090209 tpd src/axiom-website/patches.html 20090209.02.tpd.patch +20090209 tpd books/bookvol10.4 add packages +20090209 tpd src/algebra/Makefile remove spad files +20090209 tpd src/algebra/zerodim.spad removed +20090209 tpd books/ps/v104zerodimensionalsolvepackage.ps added +20090209 tpd books/ps/v104rationalunivariaterepresentationpackage.ps added +20090209 tpd books/ps/v104internalrationalunivariaterepresentationpackage.ps +20090209 tpd books/ps/v104lextriangularpackage.ps added +20090209 tpd books/ps/v104fglmifcanpackage.ps added +20090209 tpd src/algebra/ystream.spad removed +20090209 tpd books/ps/v104paradoxicalcombinatorsforstreams.ps added +20090209 tpd src/algebra/xlpoly.spad removed +20090209 tpd books/ps/v104xexponentialpackage.ps added +20090209 tpd src/algebra/weier.spad removed +20090209 tpd books/ps/v104weierstrasspreparation.ps added +20090209 tpd src/algebra/void.spad removed +20090209 tpd books/ps/v104resolvelatticecompletion.ps added +20090209 tpd src/algebra/viewpack.spad removed +20090209 tpd books/ps/v104viewportpackage.ps added +20090209 tpd src/algebra/viewdef.spad removed +20090209 tpd books/ps/v104viewdefaultspackage.ps added +20090209 tpd src/algebra/vector.spad removed +20090209 tpd books/ps/v104directproductfunctions2.ps added +20090209 tpd books/ps/v104vectorfunctions2.ps added +20090209 tpd src/algebra/utsode.spad removed +20090209 tpd books/ps/v104univariatetaylorseriesodesolver.ps added +20090209 tpd src/algebra/updivp.spad removed +20090209 tpd books/ps/v104univariatepolynomialdivisionpackage.ps added +20090209 tpd src/algebra/updecomp.spad removed +20090209 tpd books/ps/v104univariatepolynomialdecompositionpackage.ps added +20090209 tpd src/algebra/unifact.spad removed +20090209 tpd books/ps/v104univariatefactorize.ps added +20090209 tpd src/algebra/twofact.spad removed +20090209 tpd books/ps/v104twofactorize.ps added +20090209 tpd books/ps/v104normretractpackage.ps added +20090209 tpd src/algebra/tube.spad removed +20090209 tpd books/ps/v104numerictubeplot.ps added +20090209 tpd books/ps/v104expressiontubeplot.ps added +20090209 tpd books/ps/v104tubeplottools.ps added +20090209 tpd src/algebra/triset.spad removed +20090209 tpd books/ps/v104polynomialsetutilitiespackage.ps removed +20090209 tpd src/algebra/transsolve.spad removed +20090209 tpd books/ps/v104transsolvepackageservice.ps added +20090209 tpd books/ps/v104transsolvepackage.ps added +20090209 tpd src/algebra/tools.spad removed +20090209 tpd books/ps/v104expertsystemtoolspackage2.ps added +20090209 tpd books/ps/v104expertsystemtoolspackage1.ps added +20090209 tpd books/ps/v104expertsystemtoolspackage.ps added +20090209 tpd src/algebra/tex.spad removed +20090209 tpd books/ps/v104texformat1.ps added +20090209 tpd src/algebra/taylor.spad removed +20090209 tpd books/ps/v104univariatetaylorseriesfunctions2.ps added +20090209 tpd src/algebra/tableau.spad removed +20090209 tpd books/ps/v104tableauxbumpers.ps added 20090209 tpd src/axiom-website/patches.html 20090209.01.tpd.patch 20090209 tpd books/bookvol10.4 add packages 20090209 tpd src/algebra/Makefile remove spad files diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 338558f..952fd83 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -15771,20 +15771,7 @@ We need to figure out which mlift.spad to keep. <>= SPADFILES= \ - ${OUTSRC}/quat.spad \ - ${OUTSRC}/tableau.spad ${OUTSRC}/taylor.spad \ - ${OUTSRC}/tex.spad ${OUTSRC}/tools.spad ${OUTSRC}/transsolve.spad \ - ${OUTSRC}/triset.spad \ - ${OUTSRC}/tube.spad ${OUTSRC}/twofact.spad \ - ${OUTSRC}/unifact.spad ${OUTSRC}/updecomp.spad ${OUTSRC}/updivp.spad \ - ${OUTSRC}/utsode.spad \ - ${OUTSRC}/vector.spad \ - ${OUTSRC}/viewdef.spad ${OUTSRC}/viewpack.spad \ - ${OUTSRC}/void.spad \ - ${OUTSRC}/weier.spad \ - ${OUTSRC}/xlpoly.spad \ - ${OUTSRC}/ystream.spad \ - ${OUTSRC}/zerodim.spad + ${OUTSRC}/quat.spad @ \subsection{The ALDORFILES list} @@ -15818,20 +15805,7 @@ DOCFILES= \ ${DOC}/nepip.as.dvi \ ${DOC}/noptip.as.dvi ${DOC}/nqip.as.dvi \ ${DOC}/nrc.as.dvi ${DOC}/nsfip.as.dvi \ - ${DOC}/quat.spad.dvi \ - ${DOC}/tableau.spad.dvi ${DOC}/taylor.spad.dvi \ - ${DOC}/tex.spad.dvi ${DOC}/tools.spad.dvi ${DOC}/transsolve.spad.dvi \ - ${DOC}/triset.spad.dvi \ - ${DOC}/tube.spad.dvi ${DOC}/twofact.spad.dvi \ - ${DOC}/unifact.spad.dvi ${DOC}/updecomp.spad.dvi ${DOC}/updivp.spad.dvi \ - ${DOC}/utsode.spad.dvi \ - ${DOC}/vector.spad.dvi \ - ${DOC}/viewdef.spad.dvi ${DOC}/viewpack.spad.dvi \ - ${DOC}/void.spad.dvi \ - ${DOC}/weier.spad.dvi \ - ${DOC}/xlpoly.spad.dvi \ - ${DOC}/ystream.spad.dvi \ - ${DOC}/zerodim.spad.dvi + ${DOC}/quat.spad.dvi @ \section{The Makefile Stanzas} @@ -17003,13 +16977,15 @@ ${HELP}/KeyedAccessFile.help: ${BOOKS}/bookvol10.3.pamphlet >${INPUT}/KeyedAccessFile.input @echo "KeyedAccessFile (KAFILE)" >>${HELPFILE} -${HELP}/LexTriangularPackage.help: ${IN}/zerodim.spad.pamphlet +${HELP}/LexTriangularPackage.help: ${BOOKS}/bookvol10.4.pamphlet @echo 7038 create LexTriangularPackage.help from \ - ${IN}/zerodim.spad.pamphlet - @${TANGLE} -R"LexTriangularPackage.help" ${IN}/zerodim.spad.pamphlet \ + ${BOOKS}/bookvol10.4.pamphlet + @${TANGLE} -R"LexTriangularPackage.help" \ + ${BOOKS}/bookvol10.4.pamphlet \ >${HELP}/LexTriangularPackage.help @cp ${HELP}/LexTriangularPackage.help ${HELP}/LEXTRIPK.help - @${TANGLE} -R"LexTriangularPackage.input" ${IN}/zerodim.spad.pamphlet \ + @${TANGLE} -R"LexTriangularPackage.input" \ + ${BOOKS}/bookvol10.4.pamphlet \ >${INPUT}/LexTriangularPackage.input @echo "LexTriangularPackage (LEXTRIPK)" >>${HELPFILE} @@ -17595,15 +17571,15 @@ ${HELP}/XPolynomialRing.help: ${BOOKS}/bookvol10.3.pamphlet >${INPUT}/XPolynomialRing.input @echo "XPolynomialRing (XPR)" >>${HELPFILE} -${HELP}/ZeroDimensionalSolvePackage.help: ${IN}/zerodim.spad.pamphlet +${HELP}/ZeroDimensionalSolvePackage.help: ${BOOKS}/bookvol10.4.pamphlet @echo 7094 create ZeroDimensionalSolvePackage.help from \ - ${IN}/zerodim.spad.pamphlet + ${BOOKS}/bookvol10.4.pamphlet @${TANGLE} -R"ZeroDimensionalSolvePackage.help" \ - ${IN}/zerodim.spad.pamphlet \ + ${BOOKS}/bookvol10.4.pamphlet \ >${HELP}/ZeroDimensionalSolvePackage.help @cp ${HELP}/ZeroDimensionalSolvePackage.help ${HELP}/ZDSOLVE.help @${TANGLE} -R"ZeroDimensionalSolvePackage.input" \ - ${IN}/zerodim.spad.pamphlet \ + ${BOOKS}/bookvol10.4.pamphlet \ >${INPUT}/ZeroDimensionalSolvePackage.input @ diff --git a/src/algebra/tableau.spad.pamphlet b/src/algebra/tableau.spad.pamphlet deleted file mode 100644 index 59497da..0000000 --- a/src/algebra/tableau.spad.pamphlet +++ /dev/null @@ -1,180 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra tableau.spad} -\author{William H. Burge} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package TABLBUMP TableauxBumpers} -<>= -)abbrev package TABLBUMP TableauxBumpers -++ Author: William H. Burge -++ Date Created: 1987 -++ Date Last Updated: 23 Sept 1991 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: Young tableau -++ References: -++ Description: -++ TableauBumpers implements the Schenstead-Knuth -++ correspondence between sequences and pairs of Young tableaux. -++ The 2 Young tableaux are represented as a single tableau with -++ pairs as components. -TableauxBumpers(S:OrderedSet):T==C where - L==>List - ST==>Stream - B==>Boolean - ROW==>Record(fs:B,sd:L S,td:L L S) - RC==>Record(f1:L S,f2:L L L S,f3:L L S,f4:L L L S) - PAIR==>L S - T== with - bumprow:((S,S)->B,PAIR,L PAIR)->ROW - ++ bumprow(cf,pr,r) is an auxiliary function which - ++ bumps a row r with a pair pr - ++ using comparison function cf, and returns a record - bumptab:((S,S)->B,PAIR,L L PAIR)->L L PAIR - ++ bumptab(cf,pr,t) bumps a tableau t with a pair pr - ++ using comparison function cf, returning a new tableau - bumptab1:(PAIR,L L PAIR)->L L PAIR - ++ bumptab1(pr,t) bumps a tableau t with a pair pr - ++ using comparison function \spadfun{<}, - ++ returning a new tableau - untab: (L PAIR,L L PAIR)->L PAIR - ++ untab(lp,llp) is an auxiliary function - ++ which unbumps a tableau llp, - ++ using lp to accumulate pairs - bat1:L L PAIR->L PAIR - ++ bat1(llp) unbumps a tableau llp. - ++ Operation bat1 is the inverse of tab1. - bat:Tableau(L S)->L L S - ++ bat(ls) unbumps a tableau ls - tab1:L PAIR->L L PAIR - ++ tab1(lp) creates a tableau from a list of pairs lp - tab:L S->Tableau(L S) - ++ tab(ls) creates a tableau from ls by first creating - ++ a list of pairs using \spadfunFrom{slex}{TableauBumpers}, - ++ then creating a tableau using \spadfunFrom{tab1}{TableauBumpers}. - lex:L PAIR->L PAIR - ++ lex(ls) sorts a list of pairs to lexicographic order - slex:L S->L PAIR - ++ slex(ls) sorts the argument sequence ls, then - ++ zips (see \spadfunFrom{map}{ListFunctions3}) the - ++ original argument sequence with the sorted result to - ++ a list of pairs - inverse:L S->L S - ++ inverse(ls) forms the inverse of a sequence ls - maxrow:(PAIR,L L PAIR,L PAIR,L L PAIR,L L PAIR,L L PAIR)->RC - ++ maxrow(a,b,c,d,e) is an auxiliary function for mr - mr:L L PAIR->RC - ++ mr(t) is an auxiliary function which - ++ finds the position of the maximum element of a tableau t - ++ which is in the lowest row, producing a record of results - C== add - cf:(S,S)->B - bumprow(cf,x:(PAIR),lls:(L PAIR))== - if null lls - then [false,x,[x]]$ROW - else (y:(PAIR):=first lls; - if cf(x.2,y.2) - then [true,[x.1,y.2],cons([y.1,x.2],rest lls)]$ROW - else (rw:ROW:=bumprow(cf,x,rest lls); - [rw.fs,rw.sd,cons(first lls,rw.td)]$ROW )) - - bumptab(cf,x:(PAIR),llls:(L L PAIR))== - if null llls - then [[x]] - else (rw:ROW:= bumprow(cf,x,first llls); - if rw.fs - then cons(rw.td, bumptab(cf,rw.sd,rest llls)) - else cons(rw.td,rest llls)) - - bumptab1(x,llls)==bumptab(#1<#2,x,llls) - - rd==> reduce$StreamFunctions2(PAIR,L L PAIR) - tab1(lls:(L PAIR))== rd([],bumptab1,lls::(ST PAIR)) - - srt==>sort$(PAIR) - lexorder:(PAIR,PAIR)->B - lexorder(p1,p2)==if p1.1=p2.1 then p1.2n.1 - then maxrow(fst,d,rst,rest llls,cons(first llls,d),rest llls) - else maxrow(n,a,b,c,cons(first llls,d),rest llls)) - - mr llls==maxrow(first first llls,[],rest first llls,rest llls, - [],llls) - - untab(lp, llls)== - if null llls - then lp - else (rc:RC:=mr llls; - rv:=reverse (bumptab(#2<#1,rc.f1,rc.f2)); - untab(cons(first first rv,lp) - ,append(rest rv, - if null rc.f3 - then [] - else cons(rc.f3,rc.f4)))) - - bat1 llls==untab([],[reverse lls for lls in llls]) - bat tb==bat1(listOfLists tb) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/taylor.spad.pamphlet b/src/algebra/taylor.spad.pamphlet deleted file mode 100644 index 7492f9b..0000000 --- a/src/algebra/taylor.spad.pamphlet +++ /dev/null @@ -1,88 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra taylor.spad} -\author{Clifton J. Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package UTS2 UnivariateTaylorSeriesFunctions2} -<>= -)abbrev package UTS2 UnivariateTaylorSeriesFunctions2 -++ Author: Clifton J. Williamson -++ Date Created: 9 February 1990 -++ Date Last Updated: 9 February 1990 -++ Basic Operations: -++ Related Domains: UnivariateTaylorSeries(Coef1,var,cen) -++ Also See: -++ AMS Classifications: -++ Keywords: Taylor series, map -++ Examples: -++ References: -++ Description: Mapping package for univariate Taylor series. -++ This package allows one to apply a function to the coefficients of -++ a univariate Taylor series. -UnivariateTaylorSeriesFunctions2(Coef1,Coef2,UTS1,UTS2):_ - Exports == Implementation where - Coef1 : Ring - Coef2 : Ring - UTS1 : UnivariateTaylorSeriesCategory Coef1 - UTS2 : UnivariateTaylorSeriesCategory Coef2 - ST2 ==> StreamFunctions2(Coef1,Coef2) - - Exports ==> with - map: (Coef1 -> Coef2,UTS1) -> UTS2 - ++\spad{map(f,g(x))} applies the map f to the coefficients of - ++ the Taylor series \spad{g(x)}. - - Implementation ==> add - - map(f,uts) == series map(f,coefficients uts)$ST2 - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/tex.spad.pamphlet b/src/algebra/tex.spad.pamphlet deleted file mode 100644 index b6383f4..0000000 --- a/src/algebra/tex.spad.pamphlet +++ /dev/null @@ -1,87 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra tex.spad} -\author{Robert S. Sutor} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package TEX1 TexFormat1} -<>= -)abbrev package TEX1 TexFormat1 -++ Author: Robert S. Sutor -++ Date Created: 1987 through 1990 -++ Change History: -++ Basic Operations: coerce -++ Related Constructors: TexFormat -++ Also See: ScriptFormulaFormat, ScriptFormulaFormat1 -++ AMS Classifications: -++ Keywords: TeX, output, format -++ References: \TeX{} is a trademark of the American Mathematical -++ Society. -++ Description: -++ \spadtype{TexFormat1} provides a utility coercion for changing -++ to TeX format anything that has a coercion to the standard output -++ format. - -TexFormat1(S : SetCategory): public == private where - public == with - coerce: S -> TexFormat() - ++ coerce(s) provides a direct coercion from a domain S to - ++ TeX format. This allows the user to skip the step of first - ++ manually coercing the object to standard output format before - ++ it is coerced to TeX format. - - private == add - import TexFormat() - - coerce(s : S): TexFormat == - coerce(s :: OutputForm)$TexFormat - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/tools.spad.pamphlet b/src/algebra/tools.spad.pamphlet deleted file mode 100644 index fb0ed1f..0000000 --- a/src/algebra/tools.spad.pamphlet +++ /dev/null @@ -1,470 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra tools.spad} -\author{Brian Dupee} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package ESTOOLS ExpertSystemToolsPackage} -<>= -)abbrev package ESTOOLS ExpertSystemToolsPackage -++ Author: Brian Dupee -++ Date Created: May 1994 -++ Date Last Updated: July 1996 -++ Basic Operations: -++ Description: -++ \axiom{ExpertSystemToolsPackage} contains some useful functions for use -++ by the computational agents of numerical solvers. -ExpertSystemToolsPackage():E == I where - LEDF ==> List Expression DoubleFloat - KEDF ==> Kernel Expression DoubleFloat - LKEDF ==> List Kernel Expression DoubleFloat - VEDF ==> Vector Expression DoubleFloat - VEF ==> Vector Expression Float - VMF ==> Vector MachineFloat - EF2 ==> ExpressionFunctions2 - EFI ==> Expression Fraction Integer - MDF ==> Matrix DoubleFloat - LDF ==> List DoubleFloat - PDF ==> Polynomial DoubleFloat - EDF ==> Expression DoubleFloat - EF ==> Expression Float - SDF ==> Stream DoubleFloat - DF ==> DoubleFloat - F ==> Float - MF ==> MachineFloat - INT ==> Integer - NNI ==> NonNegativeInteger - LS ==> List Symbol - ST ==> String - LST ==> List String - SS ==> Stream String - FI ==> Fraction Integer - R ==> Ring - OR ==> OrderedRing - ON ==> Record(additions:INT,multiplications:INT,exponentiations:INT,functionCalls:INT) - RVE ==> Record(val:EDF,exponent:INT) - BO ==> BasicOperator - OCF ==> OrderedCompletion Float - OCDF ==> OrderedCompletion DoubleFloat - SOCF ==> Segment OrderedCompletion Float - SOCDF ==> Segment OrderedCompletion DoubleFloat - Measure ==> Record(measure:F, name:String, explanations:List String) - Measure2 ==> Record(measure:F, name:String, explanations:List String, extra:Result) - CTYPE ==> Union(continuous: "Continuous at the end points", - lowerSingular: "There is a singularity at the lower end point", - upperSingular: "There is a singularity at the upper end point", - bothSingular: "There are singularities at both end points", - notEvaluated: "End point continuity not yet evaluated") - RTYPE ==> Union(finite: "The range is finite", - lowerInfinite: "The bottom of range is infinite", - upperInfinite: "The top of range is infinite", - bothInfinite: "Both top and bottom points are infinite", - notEvaluated: "Range not yet evaluated") - STYPE ==> Union(str:SDF, - notEvaluated:"Internal singularities not yet evaluated") - ATT ==> Record(endPointContinuity:CTYPE,singularitiesStream:STYPE,range:RTYPE) - IFV ==> Record(stiffness:F,stability:F,expense:F,accuracy:F,intermediateResults:F) - - E ==> with - - f2df:F -> DF - ++ f2df(f) is a function to convert a \axiomType{Float} to a - ++ \axiomType{DoubleFloat} - ef2edf:EF -> EDF - ++ ef2edf(f) is a function to convert an \axiomType{Expression Float} - ++ to an \axiomType{Expression DoubleFloat} - ocf2ocdf: OCF -> OCDF - ++ ocf2ocdf(a) is a function to convert an \axiomType{OrderedCompletion - ++ Float} to an \axiomType{OrderedCompletion DoubleFloat} - socf2socdf: SOCF -> SOCDF - ++ socf2socdf(a) is a function to convert a \axiomType{Segment OrderedCompletion Float} - ++ to a \axiomType{Segment OrderedCompletion DoubleFloat} - convert: List SOCF -> List SOCDF - ++ convert(l) is a function to convert a \axiomType{Segment OrderedCompletion Float} - ++ to a \axiomType{Segment OrderedCompletion DoubleFloat} - df2fi :DF -> FI - ++ df2fi(n) is a function to convert a \axiomType{DoubleFloat} to a - ++ \axiomType{Fraction Integer} - edf2fi :EDF -> FI - ++ edf2fi(n) maps \axiomType{Expression DoubleFloat} to - ++ \axiomType{Fraction Integer} - ++ It is an error if n is not coercible to Fraction Integer - edf2df :EDF -> DF - ++ edf2df(n) maps \axiomType{Expression DoubleFloat} to - ++ \axiomType{DoubleFloat} - ++ It is an error if \spad{n} is not coercible to DoubleFloat - isQuotient:EDF -> Union(EDF,"failed") - ++ isQuotient(expr) returns the quotient part of the input - ++ expression or \spad{"failed"} if the expression is not of that form. - expenseOfEvaluation:VEDF -> F - ++ expenseOfEvaluation(o) gives an approximation of the cost of - ++ evaluating a list of expressions in terms of the number of basic - ++ operations. - ++ < 0.3 inexpensive ; 0.5 neutral ; > 0.7 very expensive - ++ 400 `operation units' -> 0.75 - ++ 200 `operation units' -> 0.5 - ++ 83 `operation units' -> 0.25 - ++ ** = 4 units , function calls = 10 units. - numberOfOperations:VEDF -> ON - ++ numberOfOperations(ode) counts additions, multiplications, - ++ exponentiations and function calls in the input set of expressions. - edf2efi:EDF -> EFI - ++ edf2efi(e) coerces \axiomType{Expression DoubleFloat} into - ++ \axiomType{Expression Fraction Integer} - dfRange:SOCDF -> SOCDF - ++ dfRange(r) converts a range including - ++ \inputbitmap{\htbmdir{}/plusminus.bitmap} \infty - ++ to \axiomType{DoubleFloat} equavalents. - dflist:List(Record(left:FI,right:FI)) -> LDF - ++ dflist(l) returns a list of \axiomType{DoubleFloat} equivalents of list l - df2mf:DF -> MF - ++ df2mf(n) coerces a \axiomType{DoubleFloat} to \axiomType{MachineFloat} - ldf2vmf:LDF -> VMF - ++ ldf2vmf(l) coerces a \axiomType{List DoubleFloat} to - ++ \axiomType{List MachineFloat} - edf2ef:EDF -> EF - ++ edf2ef(e) maps \axiomType{Expression DoubleFloat} to - ++ \axiomType{Expression Float} - vedf2vef:VEDF -> VEF - ++ vedf2vef(v) maps \axiomType{Vector Expression DoubleFloat} to - ++ \axiomType{Vector Expression Float} - in?:(DF,SOCDF) -> Boolean - ++ in?(p,range) tests whether point p is internal to the - ++ range range - df2st:DF -> ST - ++ df2st(n) coerces a \axiomType{DoubleFloat} to \axiomType{String} - f2st:F -> ST - ++ f2st(n) coerces a \axiomType{Float} to \axiomType{String} - ldf2lst:LDF -> LST - ++ ldf2lst(ln) coerces a \axiomType{List DoubleFloat} to \axiomType{List String} - sdf2lst:SDF -> LST - ++ sdf2lst(ln) coerces a \axiomType{Stream DoubleFloat} to \axiomType{String} - getlo : SOCDF -> DF - ++ getlo(u) gets the \axiomType{DoubleFloat} equivalent of - ++ the first endpoint of the range \spad{u} - gethi : SOCDF -> DF - ++ gethi(u) gets the \axiomType{DoubleFloat} equivalent of - ++ the second endpoint of the range \spad{u} - concat:(Result,Result) -> Result - ++ concat(a,b) adds two aggregates of type \axiomType{Result}. - concat:(List Result) -> Result - ++ concat(l) concatenates a list of aggregates of type \axiomType{Result} - outputMeasure:F -> ST - ++ outputMeasure(n) rounds \spad{n} to 3 decimal places and outputs - ++ it as a string - measure2Result:Measure -> Result - ++ measure2Result(m) converts a measure record into a \axiomType{Result} - measure2Result:Measure2 -> Result - ++ measure2Result(m) converts a measure record into a \axiomType{Result} - att2Result:ATT -> Result - ++ att2Result(m) converts a attributes record into a \axiomType{Result} - iflist2Result:IFV -> Result - ++ iflist2Result(m) converts a attributes record into a \axiomType{Result} - pdf2ef:PDF -> EF - ++ pdf2ef(p) coerces a \axiomType{Polynomial DoubleFloat} to - ++ \axiomType{Expression Float} - pdf2df:PDF -> DF - ++ pdf2df(p) coerces a \axiomType{Polynomial DoubleFloat} to - ++ \axiomType{DoubleFloat}. It is an error if \axiom{p} is not - ++ retractable to DoubleFloat. - df2ef:DF -> EF - ++ df2ef(a) coerces a \axiomType{DoubleFloat} to \axiomType{Expression Float} - fi2df:FI -> DF - ++ fi2df(f) coerces a \axiomType{Fraction Integer} to \axiomType{DoubleFloat} - mat:(LDF,NNI) -> MDF - ++ mat(a,n) constructs a one-dimensional matrix of a. - - I ==> add - - mat(a:LDF,n:NNI):MDF == - empty?(a)$LDF => zero(1,n)$MDF - matrix(list([i for i in a for j in 1..n])$(List LDF))$MDF - - f2df(f:F):DF == (convert(f)@DF)$F - - ef2edf(f:EF):EDF == map(f2df,f)$EF2(F,DF) - - fi2df(f:FI):DF == coerce(f)$DF - - ocf2ocdf(a:OCF):OCDF == - finite? a => (f2df(retract(a)@F))::OCDF - a pretend OCDF - - socf2socdf(a:SOCF):SOCDF == - segment(ocf2ocdf(lo a),ocf2ocdf(hi a)) - - convert(l:List SOCF):List SOCDF == [socf2socdf a for a in l] - - pdf2df(p:PDF):DF == retract(p)@DF - - df2ef(a:DF):EF == - b := convert(a)@Float - coerce(b)$EF - - pdf2ef(p:PDF):EF == df2ef(pdf2df(p)) - - edf2fi(m:EDF):FI == retract(retract(m)@DF)@FI - - edf2df(m:EDF):DF == retract(m)@DF - - df2fi(r:DF):FI == (retract(r)@FI)$DF - - dfRange(r:SOCDF):SOCDF == - if infinite?(lo(r))$OCDF then r := -(max()$DF :: OCDF)..hi(r)$SOCDF - if infinite?(hi(r))$OCDF then r := lo(r)$SOCDF..(max()$DF :: OCDF) - r - - dflist(l:List(Record(left:FI,right:FI))):LDF == [u.left :: DF for u in l] - - edf2efi(f:EDF):EFI == map(df2fi,f)$EF2(DF,FI) - - df2st(n:DF):String == (convert((convert(n)@Float)$DF)@ST)$Float - - f2st(n:F):String == (convert(n)@ST)$Float - - ldf2lst(ln:LDF):LST == [df2st f for f in ln] - - sdf2lst(ln:SDF):LST == - explicitlyFinite? ln => - m := map(df2st,ln)$StreamFunctions2(DF,ST) - if index?(20,m)$SS then - split!(m,20) - m := concat(m,".......") - m := complete(m)$SS - entries(m)$SS - empty()$LST - - df2mf(n:DF):MF == (df2fi(n))::MF - - ldf2vmf(l:LDF):VMF == - m := [df2mf(n) for n in l] - vector(m)$VMF - - edf2ef(e:EDF):EF == map(convert$DF,e)$EF2(DF,Float) - - vedf2vef(vedf:VEDF):VEF == vector([edf2ef e for e in members(vedf)]) - - getlo(u:SOCDF):DF == retract(lo(u))@DF - - gethi(u:SOCDF):DF == retract(hi(u))@DF - - in?(p:DF,range:SOCDF):Boolean == - top := gethi(range) - bottom := getlo(range) - a:Boolean := (p < top)$DF - b:Boolean := (p > bottom)$DF - (a and b)@Boolean - - isQuotient(expr:EDF):Union(EDF,"failed") == - (k := mainKernel expr) case KEDF => - (expr = inv(f := k :: KEDF :: EDF)$EDF)$EDF => f --- one?(numerator expr) => denominator expr - (numerator expr) = 1 => denominator expr - "failed" - "failed" - - numberOfOperations1(fn:EDF,numbersSoFar:ON):ON == - (u := isQuotient(fn)) case EDF => - numbersSoFar := numberOfOperations1(u,numbersSoFar) - (p := isPlus(fn)) case LEDF => - p := coerce(p)@LEDF - np := #p - numbersSoFar.additions := (numbersSoFar.additions)+np-1 - for i in 1..np repeat - numbersSoFar := numberOfOperations1(p.i,numbersSoFar) - numbersSoFar - (t:=isTimes(fn)) case LEDF => - t := coerce(t)@LEDF - nt := #t - numbersSoFar.multiplications := (numbersSoFar.multiplications)+nt-1 - for i in 1..nt repeat - numbersSoFar := numberOfOperations1(t.i,numbersSoFar) - numbersSoFar - if (e:=isPower(fn)) case RVE then - e := coerce(e)@RVE - e.exponent>1 => - numbersSoFar.exponentiations := inc(numbersSoFar.exponentiations) - numbersSoFar := numberOfOperations1(e.val,numbersSoFar) - lk := kernels(fn) - #lk = 1 => -- #lk = 0 => constant found (no further action) - k := first(lk)$LKEDF - n := name(operator(k)$KEDF)$BO - entry?(n,variables(fn)$EDF)$LS => numbersSoFar -- solo variable found - a := first(argument(k)$KEDF)$LEDF - numbersSoFar.functionCalls := inc(numbersSoFar.functionCalls)$INT - numbersSoFar := numberOfOperations1(a,numbersSoFar) - numbersSoFar - - numberOfOperations(ode:VEDF):ON == - n:ON := [0,0,0,0] - for i in 1..#ode repeat - n:ON := numberOfOperations1(ode.i,n) - n - - expenseOfEvaluation(o:VEDF):F == - ln:ON := numberOfOperations(o) - a := ln.additions - m := ln.multiplications - e := ln.exponentiations - f := 10*ln.functionCalls - n := (a + m + 4*e + 10*e) - (1.0-exp((-n::F/288.0))$F) - - concat(a:Result,b:Result):Result == - membersOfa := (members(a)@List(Record(key:Symbol,entry:Any))) - membersOfb := (members(b)@List(Record(key:Symbol,entry:Any))) - allMembers:= - concat(membersOfa,membersOfb)$List(Record(key:Symbol,entry:Any)) - construct(allMembers) - - concat(l:List Result):Result == - import List Result - empty? l => empty()$Result - f := first l - if empty?(r := rest l) then - f - else - concat(f,concat r) - - outputMeasure(m:F):ST == - fl:Float := round(m*(f:= 1000.0))/f - convert(fl)@ST - - measure2Result(m:Measure):Result == - mm := coerce(m.measure)$AnyFunctions1(Float) - mmr:Record(key:Symbol,entry:Any) := [bestMeasure@Symbol,mm] - mn := coerce(m.name)$AnyFunctions1(ST) - mnr:Record(key:Symbol,entry:Any) := [nameOfRoutine@Symbol,mn] - me := coerce(m.explanations)$AnyFunctions1(List String) - mer:Record(key:Symbol,entry:Any) := [allMeasures@Symbol,me] - mr := construct([mmr,mnr,mer])$Result - met := coerce(mr)$AnyFunctions1(Result) - meth:Record(key:Symbol,entry:Any):=[method@Symbol,met] - construct([meth])$Result - - measure2Result(m:Measure2):Result == - mm := coerce(m.measure)$AnyFunctions1(Float) - mmr:Record(key:Symbol,entry:Any) := [bestMeasure@Symbol,mm] - mn := coerce(m.name)$AnyFunctions1(ST) - mnr:Record(key:Symbol,entry:Any) := [nameOfRoutine@Symbol,mn] - me := coerce(m.explanations)$AnyFunctions1(List String) - mer:Record(key:Symbol,entry:Any) := [allMeasures@Symbol,me] - mx := coerce(m.extra)$AnyFunctions1(Result) - mxr:Record(key:Symbol,entry:Any) := [other@Symbol,mx] - mr := construct([mmr,mnr,mer,mxr])$Result - met := coerce(mr)$AnyFunctions1(Result) - meth:Record(key:Symbol,entry:Any):=[method@Symbol,met] - construct([meth])$Result - - att2Result(att:ATT):Result == - aepc := coerce(att.endPointContinuity)$AnyFunctions1(CTYPE) - ar := coerce(att.range)$AnyFunctions1(RTYPE) - as := coerce(att.singularitiesStream)$AnyFunctions1(STYPE) - aa:List Any := [aepc,ar,as] - aaa := coerce(aa)$AnyFunctions1(List Any) - aar:Record(key:Symbol,entry:Any) := [attributes@Symbol,aaa] - construct([aar])$Result - - iflist2Result(ifv:IFV):Result == - ifvs:List String := - [concat(["stiffness: ",outputMeasure(ifv.stiffness)]), - concat(["stability: ",outputMeasure(ifv.stability)]), - concat(["expense: ",outputMeasure(ifv.expense)]), - concat(["accuracy: ",outputMeasure(ifv.accuracy)]), - concat(["intermediateResults: ",outputMeasure(ifv.intermediateResults)])] - ifa:= coerce(ifvs)$AnyFunctions1(List String) - ifr:Record(key:Symbol,entry:Any) := [intensityFunctions@Symbol,ifa] - construct([ifr])$Result - -@ -\section{package ESTOOLS1 ExpertSystemToolsPackage1} -<>= -)abbrev package ESTOOLS1 ExpertSystemToolsPackage1 -++ Author: Brian Dupee -++ Date Created: February 1995 -++ Date Last Updated: February 1995 -++ Basic Operations: neglist -++ Description: -++ \axiom{ExpertSystemToolsPackage1} contains some useful functions for use -++ by the computational agents of Ordinary Differential Equation solvers. -ExpertSystemToolsPackage1(R1:OR): E == I where - OR ==> OrderedRing - E ==> with - neglist:List R1 -> List R1 - ++ neglist(l) returns only the negative elements of the list \spad{l} - I ==> add - neglist(l:List R1):List R1 == [u for u in l | negative?(u)$R1] - -@ -\section{package ESTOOLS2 ExpertSystemToolsPackage2} -<>= -)abbrev package ESTOOLS2 ExpertSystemToolsPackage2 -++ Author: Brian Dupee -++ Date Created: February 1995 -++ Date Last Updated: July 1996 -++ Basic Operations: map -++ Related Constructors: Matrix -++ Description: -++ \axiom{ExpertSystemToolsPackage2} contains some useful functions for use -++ by the computational agents of Ordinary Differential Equation solvers. -ExpertSystemToolsPackage2(R1:R,R2:R): E == I where - R ==> Ring - E ==> with - map:(R1->R2,Matrix R1) -> Matrix R2 - ++ map(f,m) applies a mapping f:R1 -> R2 onto a matrix - ++ \spad{m} in R1 returning a matrix in R2 - I ==> add - map(f:R1->R2,m:Matrix R1):Matrix R2 == - matrix([[f u for u in v] for v in listOfLists(m)$(Matrix R1)])$(Matrix R2) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/transsolve.spad.pamphlet b/src/algebra/transsolve.spad.pamphlet deleted file mode 100644 index 168619f..0000000 --- a/src/algebra/transsolve.spad.pamphlet +++ /dev/null @@ -1,694 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra transsolve.spad} -\author{Waldemar Wiwianka, Martin Rubey} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package SOLVETRA TransSolvePackage} -<>= -)abbrev package SOLVETRA TransSolvePackage -++ Author: W. Wiwianka, Martin Rubey -++ Date Created: Summer 1991 -++ Change History: 9/91 -++ Basic Operations: solve -++ Related Constructors: RadicalSolvePackage, FloatingRealPackage -++ Keywords: -++ Description: -++ This package tries to find solutions of equations of type Expression(R). -++ This means expressions involving transcendental, exponential, logarithmic -++ and nthRoot functions. -++ After trying to transform different kernels to one kernel by applying -++ several rules, it calls zerosOf for the SparseUnivariatePolynomial in -++ the remaining kernel. -++ For example the expression \spad{sin(x)*cos(x)-2} will be transformed to -++ \spad{-2 tan(x/2)**4 -2 tan(x/2)**3 -4 tan(x/2)**2 +2 tan(x/2) -2} -++ by using the function normalize and then to -++ \spad{-2 tan(x)**2 + tan(x) -2} -++ with help of subsTan. This function tries to express the given function -++ in terms of \spad{tan(x/2)} to express in terms of \spad{tan(x)} . -++ Other examples are the expressions \spad{sqrt(x+1)+sqrt(x+7)+1} or -++ \spad{sqrt(sin(x))+1} . - - -TransSolvePackage(R) : Exports == Implementation where - R : Join(OrderedSet, EuclideanDomain, RetractableTo Integer, - LinearlyExplicitRingOver Integer, CharacteristicZero) - - I ==> Integer - NNI ==> NonNegativeInteger - RE ==> Expression R - EQ ==> Equation - S ==> Symbol - V ==> Variable - L ==> List - K ==> Kernel RE - SUP ==> SparseUnivariatePolynomial - C ==> Complex - F ==> Float - INT ==> Interval - SMP ==> SparseMultivariatePolynomial - - - Exports == with - - solve : RE -> L EQ RE - ++ solve(expr) finds the solutions of the equation expr = 0 - ++ where expr is a function of type Expression(R) - ++ with respect to the unique symbol x appearing in eq. - solve : EQ RE -> L EQ RE - ++ solve(eq) finds the solutions of the equation eq - ++ where eq is an equation of functions of type Expression(R) - ++ with respect to the unique symbol x appearing in eq. - solve : ( EQ RE , S ) -> L EQ RE - ++ solve(eq,x) finds the solutions of the equation eq - ++ where eq is an equation of functions of type Expression(R) - ++ with respect to the symbol x. - solve : ( RE , S) -> L EQ RE - ++ solve(expr,x) finds the solutions of the equation expr = 0 - ++ with respect to the symbol x where expr is a function - ++ of type Expression(R). - solve : (L EQ RE, L S) -> L L EQ RE - ++ solve(leqs, lvar) returns a list of solutions to the list of - ++ equations leqs with respect to the list of symbols lvar. --- solve : (L EQ RE, L Kernel RE) -> L L EQ RE --- ++ solve(leqs, lker) returns a list of solutions to the list --- ++ of equations leqs with respect to the list of kernels lker. - - Implementation == add - import ACF - import HomogeneousAggregate(R) - import AlgebraicManipulations(R, RE) - import TranscendentalManipulations(R, RE) - import TrigonometricManipulations(R, RE) - import ElementaryFunctionStructurePackage(R, RE) - import SparseUnivariatePolynomial(R) - import LinearSystemMatrixPackage(RE,Vector RE,Vector RE,Matrix RE) - import TransSolvePackageService(R) - import MultivariateFactorize(K, IndexedExponents K, R, SMP(R, K)) - - - - ---- Local Function Declarations ---- - - solveInner : (RE, S) -> L EQ RE - tryToTrans : ( RE , S) -> RE - - eliminateKernRoot: (RE , K) -> RE - eliminateRoot: (RE , S) -> RE - - combineLog : ( RE , S ) -> RE - testLog : ( RE , S ) -> Boolean - splitExpr : ( RE ) -> L RE - buildnexpr : ( RE , S ) -> L RE - logsumtolog : RE -> RE - logexpp : ( RE , RE ) -> RE - - testRootk : ( RE, S) -> Boolean - testkernel : ( RE , S ) -> Boolean - funcinv : ( RE , RE ) -> Union(RE,"failed") - testTrig : ( RE , S ) -> Boolean - testHTrig : ( RE , S ) -> Boolean - tableXkernels : ( RE , S ) -> L RE - subsTan : ( RE , S ) -> RE - - - -- exported functions - - - solve(oside: RE) : L EQ RE == - zero? oside => error "equation is always satisfied" - lv := variables oside - empty? lv => error "inconsistent equation" - #lv>1 => error "too many variables" - solve(oside,lv.first) - - solve(equ:EQ RE) : L EQ RE == - solve(lhs(equ)-rhs(equ)) - - solve(equ:EQ RE, x:S) : L EQ RE == - oneside:=lhs(equ)-rhs(equ) - solve(oneside,x) - - testZero?(lside:RE,sol:EQ RE):Boolean == - if R has QuotientFieldCategory(Integer) then - retractIfCan(rhs sol)@Union(Integer,"failed") case "failed" => true - else - retractIfCan(rhs sol)@Union(Fraction Integer,"failed") case "failed" => true - zero? eval(lside,sol) => true - false - - solve(lside: RE, x:S) : L EQ RE == - [sol for sol in solveInner(lside,x) | testZero?(lside,sol)] - - solveInner(lside: RE, x:S) : L EQ RE == - lside:=eliminateRoot(lside,x) - ausgabe1:=tableXkernels(lside,x) - - X:=new()@Symbol - Y:=new()@Symbol::RE - (#ausgabe1) = 1 => - bigX:= (first ausgabe1)::RE - eq1:=eval(lside,bigX=(X::RE)) - -- Type : Expression R - f:=univariate(eq1,first kernels (X::RE)) - -- Type : Fraction SparseUnivariatePolynomial Expression R - lfatt:= factors factorPolynomial numer f - lr:L RE := "append" /[zerosOf(fatt.factor,x) for fatt in lfatt] - -- Type : List Expression R - r1:=[]::L RE - for i in 1..#lr repeat - finv := funcinv(bigX,lr(i)) - if finv case RE then r1:=cons(finv::RE,r1) - bigX_back:=funcinv(bigX,bigX)::RE - if not testkernel(bigX_back,x) then - if bigX = bigX_back then return []::L EQ RE - return - "append"/[solve(bigX_back-ri, x) for ri in r1] - newlist:=[]::L EQ RE - - for i in 1..#r1 repeat - elR := eliminateRoot((numer(bigX_back - r1(i))::RE ),x) - f:=univariate(elR, kernel(x)) - -- Type : Fraction SparseUnivariatePolynomial Expression R - lfatt:= factors factorPolynomial numer f - secondsol:="append" /[zerosOf(ff.factor,x) for ff in lfatt] - for j in 1..#secondsol repeat - newlist:=cons((x::RE)=rootSimp( secondsol(j) ),newlist) - newlist - newlside:=tryToTrans(lside,x) ::RE - listofkernels:=tableXkernels(newlside,x) - (#listofkernels) = 1 => solve(newlside,x) - lfacts := factors factor(numer lside) - #lfacts > 1 => - sols : L EQ RE := [] - for frec in lfacts repeat - sols := append(solve(frec.factor :: RE, x), sols) - sols - return []::L EQ RE - - -- local functions - - -- This function was suggested by Manuel Bronstein as a simpler - -- alternative to normalize. - simplifyingLog(f:RE):RE == - (u:=isExpt(f,"exp"::Symbol)) case Record(var:Kernel RE,exponent:Integer) => - rec := u::Record(var:Kernel RE,exponent:Integer) - rec.exponent * first argument(rec.var) - log f - - - testkernel(var1:RE,y:S) : Boolean == - var1:=eliminateRoot(var1,y) - listvar1:=tableXkernels(var1,y) - if (#listvar1 = 1) and ((listvar1(1) = (y::RE))@Boolean ) then - true - else if #listvar1 = 0 then true - else false - - solveRetract(lexpr:L RE, lvar:L S):Union(L L EQ RE, "failed") == - nlexpr : L Fraction Polynomial R := [] - for expr in lexpr repeat - rf:Union(Fraction Polynomial R, "failed") := retractIfCan(expr)$RE - rf case "failed" => return "failed" - nlexpr := cons(rf, nlexpr) - radicalSolve(nlexpr, lvar)$RadicalSolvePackage(R) - - tryToTrans(lside: RE, x:S) : RE == - if testTrig(lside,x) or testHTrig(lside,x) then - convLside:=( simplify(lside) )::RE - resultLside:=convLside - listConvLside:=tableXkernels(convLside,x) - if (#listConvLside) > 1 then - NormConvLside:=normalize(convLside,x) - NormConvLside:=( NormConvLside ) :: RE - resultLside:=subsTan(NormConvLside , x) - - else if testLog(lside,x) then - numlside:=numer(lside)::RE - resultLside:=combineLog(numlside,x) - else - NormConvLside:=normalize(lside,x) - NormConvLside:=( NormConvLside ) :: RE - resultLside:=NormConvLside - listConvLside:=tableXkernels(NormConvLside,x) - if (#listConvLside) > 1 then - cnormConvLside:=complexNormalize(lside,x) - cnormConvLside:=cnormConvLside::RE - resultLside:=cnormConvLside - listcnorm:=tableXkernels(cnormConvLside,x) - if (#listcnorm) > 1 then - if testLog(cnormConvLside,x) then - numlside:=numer(cnormConvLside)::RE - resultLside:=combineLog(numlside,x) - resultLside - - - subsTan(exprvar:RE,y:S) : RE == - Z:=new()@Symbol - listofkern:=tableXkernels(exprvar,y) - varkern:=(first listofkern)::RE - Y:=(numer first argument first (kernels(varkern)))::RE - test : Boolean := varkern=tan(((Y::RE)/(2::RE))::RE) - if not( (#listofkern=1) and test) then - return exprvar - fZ:=eval(exprvar,varkern=(Z::RE)) - fN:=(numer fZ)::RE - f:=univariate(fN, first kernels(Z::RE)) - secondfun:=(-2*(Y::RE)/((Y::RE)**2-1) )::RE - g:=univariate(secondfun,first kernels(y::RE)) - H:=(new()@Symbol)::RE - newH:=univariate(H,first kernels(Z::RE)) - result:=decomposeFunc(f,g,newH) - if not ( result = f ) then - result1:=result( H::RE ) - resultnew:=eval(result1,H=(( tan((Y::RE))::RE ) )) - else return exprvar - - - eliminateKernRoot(var: RE, varkern: K) : RE == - X:=new()@Symbol - var1:=eval(var, (varkern::RE)=(X::RE) ) - var2:=numer univariate(var1, first kernels(X::RE)) - var3:= monomial(1, ( retract( second argument varkern)@I )::NNI)@SUP RE_ - - monomial(first argument varkern, 0::NNI)@SUP RE - resultvar:=resultant(var2, var3) - - eliminateRoot(var:RE, y:S) : RE == - var1:=var - while testRootk(var1,y) repeat - varlistk1:=tableXkernels(var1,y) - for i in varlistk1 repeat - if is?(i, "nthRoot"::S) then - var1:=eliminateKernRoot(var1,first kernels(i::RE)) - var1 - - - logsumtolog(var:RE) : RE == - (listofexpr:=isPlus(var)) case "failed" => var - listofexpr:= listofexpr ::L RE - listforgcd:=[]::L R - for i in listofexpr repeat - exprcoeff:=leadingCoefficient(numer(i)) - listforgcd:=cons(exprcoeff, listforgcd) - gcdcoeff:=gcd(listforgcd)::RE - newexpr:RE :=0 - for i in listofexpr repeat - exprlist:=splitExpr(i::RE) - newexpr:=newexpr + logexpp(exprlist.2, exprlist.1/gcdcoeff) - kernelofvar:=kernels(newexpr) - var2:=1::RE - for i in kernelofvar repeat - var2:=var2*(first argument i) - gcdcoeff * log(var2) - - - testLog(expr:RE,Z:S) : Boolean == - testList:=[log]::L S - kernelofexpr:=tableXkernels(expr,Z) - if #kernelofexpr = 0 then - return false - for i in kernelofexpr repeat - if not member?(name(first kernels(i)),testList) or _ - not testkernel( (first argument first kernels(i)) ,Z) then - return false - true - - splitExpr(expr:RE) : L RE == - lcoeff:=leadingCoefficient((numer expr)) - exprwcoeff:=expr - listexpr:=isTimes(exprwcoeff) - if listexpr case "failed" then - [1::RE , expr] - else - listexpr:=remove_!(lcoeff::RE , listexpr) - cons(lcoeff::RE , listexpr) - - buildnexpr(expr:RE, Z:S) : L RE == - nlist:=splitExpr(expr) - n2list:=remove_!(nlist.1, nlist) - anscoeff:RE:=1 - ansmant:RE:=0 - for i in n2list repeat - if freeOf?(i::RE,Z) then - anscoeff:=(i::RE)*anscoeff - else - ansmant:=(i::RE) - [anscoeff, ansmant * nlist.1 ] - - logexpp(expr1:RE, expr2:RE) : RE == - log( (first argument first kernels(expr1))**expr2 ) - - combineLog(expr:RE,Y:S) : RE == - exprtable:Table(RE,RE):=table() - (isPlus(expr)) case "failed" => expr - ans:RE:=0 - while expr ^= 0 repeat - loopexpr:RE:=leadingMonomial(numer(expr))::RE - if testLog(loopexpr,Y) and (#tableXkernels(loopexpr,Y)=1) then - exprr:=buildnexpr(loopexpr,Y) - if search(exprr.1,exprtable) case "failed" then - exprtable.(exprr.1):=0 - exprtable.(exprr.1):= exprtable.(exprr.1) + exprr.2 - else - ans:=ans+loopexpr - expr:=(reductum(numer expr))::RE - ansexpr:RE:=0 - for i in keys(exprtable) repeat - ansexpr:=ansexpr + logsumtolog(exprtable.i) * (i::RE) - ansexpr:=ansexpr + ans - - - testRootk(varlistk:RE,y:S) : Boolean == - testList:=[nthRoot]::L S - kernelofeqnvar:=tableXkernels(varlistk,y) - if #kernelofeqnvar = 0 then - return false - for i in kernelofeqnvar repeat - if member?(name(first kernels(i)),testList) then - return true - false - - tableXkernels(evar:RE,Z:S) : L RE == - kOfvar:=kernels(evar) - listkOfvar:=[]::L RE - for i in kOfvar repeat - if not freeOf?(i::RE,Z) then - listkOfvar:=cons(i::RE,listkOfvar) - listkOfvar - - testTrig(eqnvar:RE,Z:S) : Boolean == - testList:=[sin , cos , tan , cot , sec , csc]::L S - kernelofeqnvar:=tableXkernels(eqnvar,Z) - if #kernelofeqnvar = 0 then - return false - for i in kernelofeqnvar repeat - if not member?(name(first kernels(i)),testList) or _ - not testkernel( (first argument first kernels(i)) ,Z) then - return false - true - - - testHTrig(eqnvar:RE,Z:S) : Boolean == - testList:=[sinh , cosh , tanh , coth , sech , csch]::L S - kernelofeqnvar:=tableXkernels(eqnvar,Z) - if #kernelofeqnvar = 0 then - return false - for i in kernelofeqnvar repeat - if not member?(name(first kernels(i)),testList) or _ - not testkernel( (first argument first kernels(i)) ,Z) then - return false - true - - -- Auxiliary local function for use in funcinv. - makeInterval(l:R):C INT F == - if R has complex and R has ConvertibleTo(C F) then - map(interval$INT(F),convert(l)$R)$ComplexFunctions2(F,INT F) - else - error "This should never happen" - - funcinv(k:RE,l:RE) : Union(RE,"failed") == - is?(k, "sin"::Symbol) => asin(l) - is?(k, "cos"::Symbol) => acos(l) - is?(k, "tan"::Symbol) => atan(l) - is?(k, "cot"::Symbol) => acot(l) - is?(k, "sec"::Symbol) => - l = 0 => "failed" - asec(l) - is?(k, "csc"::Symbol) => - l = 0 => "failed" - acsc(l) - is?(k, "sinh"::Symbol) => asinh(l) - is?(k, "cosh"::Symbol) => acosh(l) - is?(k, "tanh"::Symbol) => atanh(l) - is?(k, "coth"::Symbol) => acoth(l) - is?(k, "sech"::Symbol) => asech(l) - is?(k, "csch"::Symbol) => acsch(l) - is?(k, "atan"::Symbol) => tan(l) - is?(k, "acot"::Symbol) => - l = 0 => "failed" - cot(l) - is?(k, "asin"::Symbol) => sin(l) - is?(k, "acos"::Symbol) => cos(l) - is?(k, "asec"::Symbol) => sec(l) - is?(k, "acsc"::Symbol) => - l = 0 => "failed" - csc(l) - is?(k, "asinh"::Symbol) => sinh(l) - is?(k, "acosh"::Symbol) => cosh(l) - is?(k, "atanh"::Symbol) => tanh(l) - is?(k, "acoth"::Symbol) => - l = 0 => "failed" - coth(l) - is?(k, "asech"::Symbol) => sech(l) - is?(k, "acsch"::Symbol) => - l = 0 => "failed" - csch(l) - is?(k, "exp"::Symbol) => - l = 0 => "failed" - simplifyingLog l - is?(k, "log"::Symbol) => - if R has complex and R has ConvertibleTo(C F) then - -- We will check to see if the imaginary part lies in [-Pi,Pi) - ze : Expression C INT F - ze := map(makeInterval,l)$ExpressionFunctions2(R,C INT F) - z : Union(C INT F,"failed") := retractIfCan ze - z case "failed" => exp l - im := imag z - fpi : Float := pi() - (-fpi < inf(im)) and (sup(im) <= fpi) => exp l - "failed" - else -- R not Complex or something which doesn't map to Complex Floats - exp l - is?(k, "%power"::Symbol) => - (t:=normalize(l)) = 0 => "failed" - log t - l - - import SystemSolvePackage(RE) - - ker2Poly(k:Kernel RE, lvar:L S):Polynomial RE == - member?(nm:=name k, lvar) => nm :: Polynomial RE - k :: RE :: Polynomial RE - - smp2Poly(pol:SMP(R,Kernel RE), lvar:L S):Polynomial RE == - map(ker2Poly(#1, lvar), - #1::RE::Polynomial RE, pol)$PolynomialCategoryLifting( - IndexedExponents Kernel RE, Kernel RE, R, SMP(R, Kernel RE), - Polynomial RE) - - makeFracPoly(expr:RE, lvar:L S):Fraction Polynomial RE == - smp2Poly(numer expr, lvar) / smp2Poly(denom expr, lvar) - - makeREpol(pol:Polynomial RE):RE == - lvar := variables pol - lval : List RE := [v::RE for v in lvar] - ground eval(pol,lvar,lval) - - makeRE(frac:Fraction Polynomial RE):RE == - makeREpol(numer frac)/makeREpol(denom frac) - - solve1Pol(pol:Polynomial RE, var: S, sol:L EQ RE):L L EQ RE == - repol := eval(makeREpol pol, sol) - vsols := solve(repol, var) - [cons(vsol, sol) for vsol in vsols] - - solve1Sys(plist:L Polynomial RE, lvar:L S):L L EQ RE == - rplist := reverse plist - rlvar := reverse lvar - sols : L L EQ RE := list(empty()) - for p in rplist for v in rlvar repeat - sols := "append"/[solve1Pol(p,v,sol) for sol in sols] - sols - -@ -The input -\begin{verbatim} - solve(sinh(z)=cosh(z),z) -\end{verbatim} -generates the error (reported as bug \# 102): -\begin{verbatim} - >> Error detected within library code: - No identity element for reduce of empty list using operation append -\end{verbatim} -<>= - - solveList(lexpr:L RE, lvar:L S):L L EQ RE == - ans1 := solveRetract(lexpr, lvar) - not(ans1 case "failed") => ans1 :: L L EQ RE - lfrac:L Fraction Polynomial RE := - [makeFracPoly(expr, lvar) for expr in lexpr] - trianglist := triangularSystems(lfrac, lvar) --- "append"/[solve1Sys(plist, lvar) for plist in trianglist] - l: L L L EQ RE := [solve1Sys(plist, lvar) for plist in trianglist] - reduce(append, l, []) - - solve(leqs:L EQ RE, lvar:L S):L L EQ RE == - lexpr:L RE := [lhs(eq)-rhs(eq) for eq in leqs] - solveList(lexpr, lvar) - --- solve(leqs:L EQ RE, lker:L Kernel RE):L L EQ RE == --- lexpr:L RE := [lhs(eq)-rhs(eq) for eq in leqs] --- lvar :L S := [new()$S for k in lker] --- lval :L RE := [kernel v for v in lvar] --- nlexpr := [eval(expr,lker,lval) for expr in lexpr] --- ans := solveList(nlexpr, lvar) --- lker2 :L Kernel RE := [v::Kernel(RE) for v in lvar] --- lval2 := [k::RE for k in lker] --- [[map(eval(#1,lker2,lval2), neq) for neq in sol] for sol in ans] - -@ -\section{package SOLVESER TransSolvePackageService} -<>= -)abbrev package SOLVESER TransSolvePackageService -++ Author: W. Wiwianka -++ Date Created: Summer 1991 -++ Change History: 9/91 -++ Basic Operations: decomposeFunc, unvectorise -++ Related Constructors: -++ Keywords: -++ Description: This package finds the function func3 where func1 and func2 -++ are given and func1 = func3(func2) . If there is no solution then -++ function func1 will be returned. -++ An example would be \spad{func1:= 8*X**3+32*X**2-14*X ::EXPR INT} and -++ \spad{func2:=2*X ::EXPR INT} convert them via univariate -++ to FRAC SUP EXPR INT and then the solution is \spad{func3:=X**3+X**2-X} -++ of type FRAC SUP EXPR INT -TransSolvePackageService(R) : Exports == Implementation where - R : Join(IntegralDomain, OrderedSet) - - RE ==> Expression R - EQ ==> Equation - S ==> Symbol - V ==> Variable - L ==> List - SUP ==> SparseUnivariatePolynomial - ACF ==> AlgebraicallyClosedField() - - - Exports == with - - decomposeFunc : ( Fraction SUP RE , Fraction SUP RE, Fraction SUP RE ) -> Fraction SUP RE - ++ decomposeFunc(func1, func2, newvar) returns a function func3 where - ++ func1 = func3(func2) and expresses it in the new variable newvar. - ++ If there is no solution then func1 will be returned. - unvectorise : ( Vector RE , Fraction SUP RE , Integer ) -> Fraction SUP RE - ++ unvectorise(vect, var, n) returns - ++ \spad{vect(1) + vect(2)*var + ... + vect(n+1)*var**(n)} where - ++ vect is the vector of the coefficients of the polynomail , var - ++ the new variable and n the degree. - - - Implementation == add - import ACF - import TranscendentalManipulations(R, RE) - import ElementaryFunctionStructurePackage(R, RE) - import SparseUnivariatePolynomial(R) - import LinearSystemMatrixPackage(RE,Vector RE,Vector RE,Matrix RE) - import HomogeneousAggregate(R) - - ---- Local Function Declarations ---- - - subsSolve : ( SUP RE, NonNegativeInteger, SUP RE, SUP RE, Integer, Fraction SUP RE) -> Union(SUP RE , "failed" ) - --++ subsSolve(f, degf, g1, g2, m, h) - - - -- exported functions - - - unvectorise(vect:Vector RE, var:Fraction SUP RE,n:Integer) : Fraction SUP RE == - Z:=new()@Symbol - polyvar: Fraction SUP RE :=0 - for i in 1..((n+1)::Integer) repeat - vecti:=univariate(vect( i ),first kernels(Z::RE)) - polyvar:=polyvar + ( vecti )*( var )**( (n-i+1)::NonNegativeInteger ) - polyvar - - - decomposeFunc(exprf:Fraction SUP RE , exprg:Fraction SUP RE, newH:Fraction SUP RE ) : Fraction SUP RE == - X:=new()@Symbol - f1:=numer(exprf) - f2:=denom(exprf) - g1:=numer(exprg) - g2:=denom(exprg) - degF:=max(degree(numer(exprf)),degree(denom(exprf))) - degG:=max(degree(g1),degree(g2)) - newF1,newF2 : Union(SUP RE, "failed") - N:= degF exquo degG - if not ( N case "failed" ) then - m:=N::Integer - newF1:=subsSolve(f1,degF,g1,g2,m,newH) - if f2 = 1 then - newF2:= 1 :: SUP RE - else newF2:=subsSolve(f2,degF,g1,g2,m,newH) - if ( not ( newF1 case "failed" ) ) and ( not ( newF2 case "failed" ) ) then - newF:=newF1/newF2 - else return exprf - else return exprf - - - -- local functions - - - subsSolve(F:SUP RE, DegF:NonNegativeInteger, G1:SUP RE, G2:SUP RE, M:Integer, HH: Fraction SUP RE) : Union(SUP RE , "failed" ) == - coeffmat:=new((DegF+1),1,0)@Matrix RE - for i in 0..M repeat - coeffmat:=horizConcat(coeffmat, (vectorise( ( ( G1**((M-i)::NonNegativeInteger) )*G2**i ), (DegF+1) )::Matrix RE) ) - vec:= vectorise(F,DegF+1) - coeffma:=subMatrix(coeffmat,1,(DegF+1),2,(M+2)) - solvar:=solve(coeffma,vec) - if not ( solvar.particular case "failed" ) then - solvevarlist:=(solvar.particular)::Vector RE - resul:= numer(unvectorise(solvevarlist,( HH ),M)) - resul - else return "failed" - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/triset.spad.pamphlet b/src/algebra/triset.spad.pamphlet deleted file mode 100644 index 6ec6e71..0000000 --- a/src/algebra/triset.spad.pamphlet +++ /dev/null @@ -1,874 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra triset.spad} -\author{Marc Moreno Maza} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package PSETPK PolynomialSetUtilitiesPackage} -<>= -)abbrev package PSETPK PolynomialSetUtilitiesPackage -++ Author: Marc Moreno Maza (marc@nag.co.uk) -++ Date Created: 12/01/1995 -++ Date Last Updated: 12/15/1998 -++ SPARC Version -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ Examples: -++ References: -++ Description: -++ This package provides modest routines for polynomial system solving. -++ The aim of many of the operations of this package is to remove certain -++ factors in some polynomials in order to avoid unnecessary computations -++ in algorithms involving splitting techniques by partial factorization. -++ Version: 3 - -PolynomialSetUtilitiesPackage (R,E,V,P) : Exports == Implementation where - - R : IntegralDomain - E : OrderedAbelianMonoidSup - V : OrderedSet - P : RecursivePolynomialCategory(R,E,V) - N ==> NonNegativeInteger - Z ==> Integer - B ==> Boolean - LP ==> List P - FP ==> Factored P - T ==> GeneralTriangularSet(R,E,V,P) - RRZ ==> Record(factor: P,exponent: Integer) - RBT ==> Record(bas:T,top:LP) - RUL ==> Record(chs:Union(T,"failed"),rfs:LP) - GPS ==> GeneralPolynomialSet(R,E,V,P) - pf ==> MultivariateFactorize(V, E, R, P) - - Exports == with - - removeRedundantFactors: LP -> LP - ++ \axiom{removeRedundantFactors(lp)} returns \axiom{lq} such that if - ++ \axiom{lp = [p1,...,pn]} and \axiom{lq = [q1,...,qm]} - ++ then the product \axiom{p1*p2*...*pn} vanishes iff the product \axiom{q1*q2*...*qm} vanishes, - ++ and the product of degrees of the \axiom{qi} is not greater than - ++ the one of the \axiom{pj}, and no polynomial in \axiom{lq} - ++ divides another polynomial in \axiom{lq}. In particular, - ++ polynomials lying in the base ring \axiom{R} are removed. - ++ Moreover, \axiom{lq} is sorted w.r.t \axiom{infRittWu?}. - ++ Furthermore, if R is gcd-domain, the polynomials in \axiom{lq} are - ++ pairwise without common non trivial factor. - removeRedundantFactors: (P,P) -> LP - ++ \axiom{removeRedundantFactors(p,q)} returns the same as - ++ \axiom{removeRedundantFactors([p,q])} - removeSquaresIfCan : LP -> LP - ++ \axiom{removeSquaresIfCan(lp)} returns - ++ \axiom{removeDuplicates [squareFreePart(p)$P for p in lp]} - ++ if \axiom{R} is gcd-domain else returns \axiom{lp}. - unprotectedRemoveRedundantFactors: (P,P) -> LP - ++ \axiom{unprotectedRemoveRedundantFactors(p,q)} returns the same as - ++ \axiom{removeRedundantFactors(p,q)} but does assume that neither - ++ \axiom{p} nor \axiom{q} lie in the base ring \axiom{R} and assumes that - ++ \axiom{infRittWu?(p,q)} holds. Moreover, if \axiom{R} is gcd-domain, - ++ then \axiom{p} and \axiom{q} are assumed to be square free. - removeRedundantFactors: (LP,P) -> LP - ++ \axiom{removeRedundantFactors(lp,q)} returns the same as - ++ \axiom{removeRedundantFactors(cons(q,lp))} assuming - ++ that \axiom{removeRedundantFactors(lp)} returns \axiom{lp} - ++ up to replacing some polynomial \axiom{pj} in \axiom{lp} - ++ by some some polynomial \axiom{qj} associated to \axiom{pj}. - removeRedundantFactors : (LP,LP) -> LP - ++ \axiom{removeRedundantFactors(lp,lq)} returns the same as - ++ \axiom{removeRedundantFactors(concat(lp,lq))} assuming - ++ that \axiom{removeRedundantFactors(lp)} returns \axiom{lp} - ++ up to replacing some polynomial \axiom{pj} in \axiom{lp} - ++ by some polynomial \axiom{qj} associated to \axiom{pj}. - removeRedundantFactors : (LP,LP,(LP -> LP)) -> LP - ++ \axiom{removeRedundantFactors(lp,lq,remOp)} returns the same as - ++ \axiom{concat(remOp(removeRoughlyRedundantFactorsInPols(lp,lq)),lq)} - ++ assuming that \axiom{remOp(lq)} returns \axiom{lq} up to similarity. - certainlySubVariety? : (LP,LP) -> B - ++ \axiom{certainlySubVariety?(newlp,lp)} returns true iff for every \axiom{p} - ++ in \axiom{lp} the remainder of \axiom{p} by \axiom{newlp} using the division algorithm - ++ of Groebner techniques is zero. - possiblyNewVariety? : (LP, List LP) -> B - ++ \axiom{possiblyNewVariety?(newlp,llp)} returns true iff for every \axiom{lp} - ++ in \axiom{llp} certainlySubVariety?(newlp,lp) does not hold. - probablyZeroDim?: LP -> B - ++ \axiom{probablyZeroDim?(lp)} returns true iff the number of polynomials - ++ in \axiom{lp} is not smaller than the number of variables occurring - ++ in these polynomials. - selectPolynomials : ((P -> B),LP) -> Record(goodPols:LP,badPols:LP) - ++ \axiom{selectPolynomials(pred?,ps)} returns \axiom{gps,bps} where - ++ \axiom{gps} is a list of the polynomial \axiom{p} in \axiom{ps} - ++ such that \axiom{pred?(p)} holds and \axiom{bps} are the other ones. - selectOrPolynomials : (List (P -> B),LP) -> Record(goodPols:LP,badPols:LP) - ++ \axiom{selectOrPolynomials(lpred?,ps)} returns \axiom{gps,bps} where - ++ \axiom{gps} is a list of the polynomial \axiom{p} in \axiom{ps} - ++ such that \axiom{pred?(p)} holds for some \axiom{pred?} in \axiom{lpred?} - ++ and \axiom{bps} are the other ones. - selectAndPolynomials : (List (P -> B),LP) -> Record(goodPols:LP,badPols:LP) - ++ \axiom{selectAndPolynomials(lpred?,ps)} returns \axiom{gps,bps} where - ++ \axiom{gps} is a list of the polynomial \axiom{p} in \axiom{ps} - ++ such that \axiom{pred?(p)} holds for every \axiom{pred?} in \axiom{lpred?} - ++ and \axiom{bps} are the other ones. - quasiMonicPolynomials : LP -> Record(goodPols:LP,badPols:LP) - ++ \axiom{quasiMonicPolynomials(lp)} returns \axiom{qmps,nqmps} where - ++ \axiom{qmps} is a list of the quasi-monic polynomials in \axiom{lp} - ++ and \axiom{nqmps} are the other ones. - univariate? : P -> B - ++ \axiom{univariate?(p)} returns true iff \axiom{p} involves one and - ++ only one variable. - univariatePolynomials : LP -> Record(goodPols:LP,badPols:LP) - ++ \axiom{univariatePolynomials(lp)} returns \axiom{ups,nups} where - ++ \axiom{ups} is a list of the univariate polynomials, - ++ and \axiom{nups} are the other ones. - linear? : P -> B - ++ \axiom{linear?(p)} returns true iff \axiom{p} does not lie - ++ in the base ring \axiom{R} and has main degree \axiom{1}. - linearPolynomials : LP -> Record(goodPols:LP,badPols:LP) - ++ \axiom{linearPolynomials(lp)} returns \axiom{lps,nlps} where - ++ \axiom{lps} is a list of the linear polynomials in lp, - ++ and \axiom{nlps} are the other ones. - bivariate? : P -> B - ++ \axiom{bivariate?(p)} returns true iff \axiom{p} involves two and - ++ only two variables. - bivariatePolynomials : LP -> Record(goodPols:LP,badPols:LP) - ++ \axiom{bivariatePolynomials(lp)} returns \axiom{bps,nbps} where - ++ \axiom{bps} is a list of the bivariate polynomials, - ++ and \axiom{nbps} are the other ones. - removeRoughlyRedundantFactorsInPols : (LP, LP) -> LP - ++ \axiom{removeRoughlyRedundantFactorsInPols(lp,lf)} returns - ++ \axiom{newlp}where \axiom{newlp} is obtained from \axiom{lp} - ++ by removing in every polynomial \axiom{p} of \axiom{lp} - ++ any occurence of a polynomial \axiom{f} in \axiom{lf}. - ++ This may involve a lot of exact-quotients computations. - removeRoughlyRedundantFactorsInPols : (LP, LP,B) -> LP - ++ \axiom{removeRoughlyRedundantFactorsInPols(lp,lf,opt)} returns - ++ the same as \axiom{removeRoughlyRedundantFactorsInPols(lp,lf)} - ++ if \axiom{opt} is \axiom{false} and if the previous operation - ++ does not return any non null and constant polynomial, - ++ else return \axiom{[1]}. - removeRoughlyRedundantFactorsInPol : (P,LP) -> P - ++ \axiom{removeRoughlyRedundantFactorsInPol(p,lf)} returns the same as - ++ removeRoughlyRedundantFactorsInPols([p],lf,true) - interReduce: LP -> LP - ++ \axiom{interReduce(lp)} returns \axiom{lq} such that \axiom{lp} - ++ and \axiom{lq} generate the same ideal and no polynomial - ++ in \axiom{lq} is reducuble by the others in the sense - ++ of Groebner bases. Since no assumptions are required - ++ the result may depend on the ordering the reductions are - ++ performed. - roughBasicSet: LP -> Union(Record(bas:T,top:LP),"failed") - ++ \axiom{roughBasicSet(lp)} returns the smallest (with Ritt-Wu - ++ ordering) triangular set contained in \axiom{lp}. - crushedSet: LP -> LP - ++ \axiom{crushedSet(lp)} returns \axiom{lq} such that \axiom{lp} and - ++ and \axiom{lq} generate the same ideal and no rough basic - ++ sets reduce (in the sense of Groebner bases) the other - ++ polynomials in \axiom{lq}. - rewriteSetByReducingWithParticularGenerators : (LP,(P->B),((P,P)->B),((P,P)->P)) -> LP - ++ \axiom{rewriteSetByReducingWithParticularGenerators(lp,pred?,redOp?,redOp)} - ++ returns \axiom{lq} where \axiom{lq} is computed by the following - ++ algorithm. Chose a basic set w.r.t. the reduction-test \axiom{redOp?} - ++ among the polynomials satisfying property \axiom{pred?}, - ++ if it is empty then leave, else reduce the other polynomials by - ++ this basic set w.r.t. the reduction-operation \axiom{redOp}. - ++ Repeat while another basic set with smaller rank can be computed. - ++ See code. If \axiom{pred?} is \axiom{quasiMonic?} the ideal is unchanged. - rewriteIdealWithQuasiMonicGenerators : (LP,((P,P)->B),((P,P)->P)) -> LP - ++ \axiom{rewriteIdealWithQuasiMonicGenerators(lp,redOp?,redOp)} returns - ++ \axiom{lq} where \axiom{lq} and \axiom{lp} generate - ++ the same ideal in \axiom{R^(-1) P} and \axiom{lq} - ++ has rank not higher than the one of \axiom{lp}. - ++ Moreover, \axiom{lq} is computed by reducing \axiom{lp} - ++ w.r.t. some basic set of the ideal generated by - ++ the quasi-monic polynomials in \axiom{lp}. - if R has GcdDomain - then - squareFreeFactors : P -> LP - ++ \axiom{squareFreeFactors(p)} returns the square-free factors of \axiom{p} - ++ over \axiom{R} - univariatePolynomialsGcds : LP -> LP - ++ \axiom{univariatePolynomialsGcds(lp)} returns \axiom{lg} where - ++ \axiom{lg} is a list of the gcds of every pair in \axiom{lp} - ++ of univariate polynomials in the same main variable. - univariatePolynomialsGcds : (LP,B) -> LP - ++ \axiom{univariatePolynomialsGcds(lp,opt)} returns the same as - ++ \axiom{univariatePolynomialsGcds(lp)} if \axiom{opt} is - ++ \axiom{false} and if the previous operation does not return - ++ any non null and constant polynomial, else return \axiom{[1]}. - removeRoughlyRedundantFactorsInContents : (LP, LP) -> LP - ++ \axiom{removeRoughlyRedundantFactorsInContents(lp,lf)} returns - ++ \axiom{newlp}where \axiom{newlp} is obtained from \axiom{lp} - ++ by removing in the content of every polynomial of \axiom{lp} - ++ any occurence of a polynomial \axiom{f} in \axiom{lf}. Moreover, - ++ squares over \axiom{R} are first removed in the content - ++ of every polynomial of \axiom{lp}. - removeRedundantFactorsInContents : (LP, LP) -> LP - ++ \axiom{removeRedundantFactorsInContents(lp,lf)} returns \axiom{newlp} - ++ where \axiom{newlp} is obtained from \axiom{lp} by removing - ++ in the content of every polynomial of \axiom{lp} any non trivial - ++ factor of any polynomial \axiom{f} in \axiom{lf}. Moreover, - ++ squares over \axiom{R} are first removed in the content - ++ of every polynomial of \axiom{lp}. - removeRedundantFactorsInPols : (LP, LP) -> LP - ++ \axiom{removeRedundantFactorsInPols(lp,lf)} returns \axiom{newlp} - ++ where \axiom{newlp} is obtained from \axiom{lp} by removing - ++ in every polynomial \axiom{p} of \axiom{lp} any non trivial - ++ factor of any polynomial \axiom{f} in \axiom{lf}. Moreover, - ++ squares over \axiom{R} are first removed in every - ++ polynomial \axiom{lp}. - if (R has EuclideanDomain) and (R has CharacteristicZero) - then - irreducibleFactors : LP -> LP - ++ \axiom{irreducibleFactors(lp)} returns \axiom{lf} such that if - ++ \axiom{lp = [p1,...,pn]} and \axiom{lf = [f1,...,fm]} then - ++ \axiom{p1*p2*...*pn=0} means \axiom{f1*f2*...*fm=0}, and the \axiom{fi} - ++ are irreducible over \axiom{R} and are pairwise distinct. - lazyIrreducibleFactors : LP -> LP - ++ \axiom{lazyIrreducibleFactors(lp)} returns \axiom{lf} such that if - ++ \axiom{lp = [p1,...,pn]} and \axiom{lf = [f1,...,fm]} then - ++ \axiom{p1*p2*...*pn=0} means \axiom{f1*f2*...*fm=0}, and the \axiom{fi} - ++ are irreducible over \axiom{R} and are pairwise distinct. - ++ The algorithm tries to avoid factorization into irreducible - ++ factors as far as possible and makes previously use of gcd - ++ techniques over \axiom{R}. - removeIrreducibleRedundantFactors : (LP, LP) -> LP - ++ \axiom{removeIrreducibleRedundantFactors(lp,lq)} returns the same - ++ as \axiom{irreducibleFactors(concat(lp,lq))} assuming - ++ that \axiom{irreducibleFactors(lp)} returns \axiom{lp} - ++ up to replacing some polynomial \axiom{pj} in \axiom{lp} - ++ by some polynomial \axiom{qj} associated to \axiom{pj}. - - Implementation == add - - autoRemainder: T -> List(P) - - removeAssociates (lp:LP):LP == - removeDuplicates [primPartElseUnitCanonical(p) for p in lp] - - selectPolynomials (pred?,ps) == - gps : LP := [] - bps : LP := [] - while not empty? ps repeat - p := first ps - ps := rest ps - if pred?(p) - then - gps := cons(p,gps) - else - bps := cons(p,bps) - gps := sort(infRittWu?,gps) - bps := sort(infRittWu?,bps) - [gps,bps] - - selectOrPolynomials (lpred?,ps) == - gps : LP := [] - bps : LP := [] - while not empty? ps repeat - p := first ps - ps := rest ps - clpred? := lpred? - while (not empty? clpred?) and (not (first clpred?)(p)) repeat - clpred? := rest clpred? - if not empty?(clpred?) - then - gps := cons(p,gps) - else - bps := cons(p,bps) - gps := sort(infRittWu?,gps) - bps := sort(infRittWu?,bps) - [gps,bps] - - selectAndPolynomials (lpred?,ps) == - gps : LP := [] - bps : LP := [] - while not empty? ps repeat - p := first ps - ps := rest ps - clpred? := lpred? - while (not empty? clpred?) and ((first clpred?)(p)) repeat - clpred? := rest clpred? - if empty?(clpred?) - then - gps := cons(p,gps) - else - bps := cons(p,bps) - gps := sort(infRittWu?,gps) - bps := sort(infRittWu?,bps) - [gps,bps] - - linear? p == - ground? p => false --- one?(mdeg(p)) - (mdeg(p) = 1) - - linearPolynomials ps == - selectPolynomials(linear?,ps) - - univariate? p == - ground? p => false - not(ground?(init(p))) => false - tp := tail(p) - ground?(tp) => true - not (mvar(p) = mvar(tp)) => false - univariate?(tp) - - univariatePolynomials ps == - selectPolynomials(univariate?,ps) - - bivariate? p == - ground? p => false - ground? tail(p) => univariate?(init(p)) - vp := mvar(p) - vtp := mvar(tail(p)) - ((ground? init(p)) and (vp = vtp)) => bivariate? tail(p) - ((ground? init(p)) and (vp > vtp)) => univariate? tail(p) - not univariate?(init(p)) => false - vip := mvar(init(p)) - vip > vtp => false - vip = vtp => univariate? tail(p) - vtp < vp => false - zero? degree(tail(p),vip) => univariate? tail(p) - bivariate? tail(p) - - bivariatePolynomials ps == - selectPolynomials(bivariate?,ps) - - quasiMonicPolynomials ps == - selectPolynomials(quasiMonic?,ps) - - removeRoughlyRedundantFactorsInPols (lp,lf,opt) == - empty? lp => lp - newlp : LP := [] - stop : B := false - lp := remove(zero?,lp) - lf := sort(infRittWu?,lf) - test : Union(P,"failed") - while (not empty? lp) and (not stop) repeat - p := first lp - lp := rest lp - copylf := lf - while (not empty? copylf) and (not ground? p) and (not (mvar(p) < mvar(first copylf))) repeat - f := first copylf - copylf := rest copylf - while (((test := p exquo$P f)) case P) repeat - p := test::P - stop := opt and ground?(p) - newlp := cons(unitCanonical(p),newlp) - stop => [1$P] - newlp - - removeRoughlyRedundantFactorsInPol(p,lf) == - zero? p => p - lp : LP := [p] - first removeRoughlyRedundantFactorsInPols (lp,lf,true()$B) - - removeRoughlyRedundantFactorsInPols (lp,lf) == - removeRoughlyRedundantFactorsInPols (lp,lf,false()$B) - - possiblyNewVariety?(newlp,llp) == - while (not empty? llp) and _ - (not certainlySubVariety?(newlp,first(llp))) repeat - llp := rest llp - empty? llp - - certainlySubVariety?(lp,lq) == - gs := construct(lp)$GPS - while (not empty? lq) and _ - (zero? (remainder(first(lq),gs)$GPS).polnum) repeat - lq := rest lq - empty? lq - - probablyZeroDim?(lp: List P) : Boolean == - m := #lp - lv : List V := variables(first lp) - while not empty? (lp := rest lp) repeat - lv := concat(variables(first lp),lv) - n := #(removeDuplicates lv) - not (n > m) - - interReduce(lp: LP): LP == - ps := lp - rs: List(P) := [] - repeat - empty? ps => return rs - ps := sort(supRittWu?, ps) - p := first ps - ps := rest ps - r := remainder(p,[ps]$GPS).polnum - zero? r => "leave" - ground? r => return [] - associates?(r,p) => rs := cons(r,rs) - ps := concat(ps,cons(r,rs)) - rs := [] - - roughRed?(p:P,q:P):B == - ground? p => false - ground? q => true - mvar(p) > mvar(q) - - roughBasicSet(lp) == basicSet(lp,roughRed?)$T - - autoRemainder(ts:T): List(P) == - empty? ts => members(ts) - lp := sort(infRittWu?, reverse members(ts)) - newlp : List(P) := [primPartElseUnitCanonical first(lp)] - lp := rest(lp) - while not empty? lp repeat - p := (remainder(first(lp),construct(newlp)$GPS)$GPS).polnum - if not zero? p - then - if ground? p - then - newlp := [1$P] - lp := [] - else - newlp := cons(p,newlp) - lp := rest(lp) - else - lp := rest(lp) - newlp - - crushedSet(lp) == - rec := roughBasicSet(lp) - contradiction := (rec case "failed")@B - finished : B := false - while (not finished) and (not contradiction) repeat - bs := (rec::RBT).bas - rs := (rec::RBT).top - rs := rewriteIdealWithRemainder(rs,bs)$T --- contradiction := ((not empty? rs) and (one? first(rs))) - contradiction := ((not empty? rs) and (first(rs) = 1)) - if not contradiction - then - rs := concat(rs,autoRemainder(bs)) - rec := roughBasicSet(rs) - contradiction := (rec case "failed")@B - not contradiction => finished := not infRittWu?((rec::RBT).bas,bs) - contradiction => [1$P] - rs - - rewriteSetByReducingWithParticularGenerators (ps,pred?,redOp?,redOp) == - rs : LP := remove(zero?,ps) - any?(ground?,rs) => [1$P] - contradiction : B := false - bs1 : T := empty()$T - rec : Union(RBT,"failed") - ar : Union(T,List(P)) - stop : B := false - while (not contradiction) and (not stop) repeat - rec := basicSet(rs,pred?,redOp?)$T - bs2 : T := (rec::RBT).bas - rs := (rec::RBT).top - -- ar := autoReduce(bs2,lazyPrem,reduced?)@Union(T,List(P)) - ar := bs2::Union(T,List(P)) - if (ar case T)@B - then - bs2 := ar::T - if infRittWu?(bs2,bs1) - then - rs := rewriteSetWithReduction(rs,bs2,redOp,redOp?)$T - bs1 := bs2 - else - stop := true - rs := concat(members(bs2),rs) - else - rs := concat(ar::LP,rs) - if any?(ground?,rs) - then - contradiction := true - rs := [1$P] - rs - - removeRedundantFactors (lp:LP,lq :LP, remOp : (LP -> LP)) == - -- ASSUME remOp(lp) returns lp up to similarity - lq := removeRoughlyRedundantFactorsInPols(lq,lp,false) - lq := remOp lq - sort(infRittWu?,concat(lp,lq)) - - removeRedundantFactors (lp:LP,lq :LP) == - lq := removeRoughlyRedundantFactorsInPols(lq,lp,false) - lq := removeRedundantFactors lq - sort(infRittWu?,concat(lp,lq)) - - if (R has EuclideanDomain) and (R has CharacteristicZero) - then - irreducibleFactors lp == - newlp : LP := [] - lrrz : List RRZ - rrz : RRZ - fp : FP - while not empty? lp repeat - p := first lp - lp := rest lp - fp := factor(p)$pf - lrrz := factors(fp)$FP - lf := remove(ground?,[rrz.factor for rrz in lrrz]) - newlp := concat(lf,newlp) - removeDuplicates newlp - - lazyIrreducibleFactors lp == - lp := removeRedundantFactors(lp) - newlp : LP := [] - lrrz : List RRZ - rrz : RRZ - fp : FP - while not empty? lp repeat - p := first lp - lp := rest lp - fp := factor(p)$pf - lrrz := factors(fp)$FP - lf := remove(ground?,[rrz.factor for rrz in lrrz]) - newlp := concat(lf,newlp) - newlp - - removeIrreducibleRedundantFactors (lp:LP,lq :LP) == - -- ASSUME lp only contains irreducible factors over R - lq := removeRoughlyRedundantFactorsInPols(lq,lp,false) - lq := irreducibleFactors lq - sort(infRittWu?,concat(lp,lq)) - - if R has GcdDomain - then - - squareFreeFactors(p:P) == - sfp: Factored P := squareFree(p)$P - lsf: List P := [foo.factor for foo in factors(sfp)] - lsf - - univariatePolynomialsGcds (ps,opt) == - lg : LP := [] - pInV : LP - stop : B := false - ps := sort(infRittWu?,ps) - p,g : P - v : V - while (not empty? ps) and (not stop) repeat - while (not empty? ps) and (not univariate?((p := first(ps)))) repeat - ps := rest ps - if not empty? ps - then - v := mvar(p)$P - pInV := [p] - while (not empty? ps) and (mvar((p := first(ps))) = v) repeat - if (univariate?(p)) - then - pInV := cons(p,pInV) - ps := rest ps - g := gcd(pInV)$P - stop := opt and (ground? g) - lg := cons(g,lg) - stop => [1$P] - lg - - univariatePolynomialsGcds ps == - univariatePolynomialsGcds (ps,false) - - removeSquaresIfCan lp == - empty? lp => lp - removeDuplicates [squareFreePart(p)$P for p in lp] - - rewriteIdealWithQuasiMonicGenerators (ps,redOp?,redOp) == - ups := removeSquaresIfCan(univariatePolynomialsGcds(ps,true)) - ps := removeDuplicates concat(ups,ps) - rewriteSetByReducingWithParticularGenerators(ps,quasiMonic?,redOp?,redOp) - - removeRoughlyRedundantFactorsInContents (ps,lf) == - empty? ps => ps - newps : LP := [] - p,newp,cp,newcp,f,g : P - test : Union(P,"failed") - copylf : LP - while not empty? ps repeat - p := first ps - ps := rest ps - cp := mainContent(p)$P - newcp := squareFreePart(cp)$P - newp := (p exquo$P cp)::P - if not ground? newcp - then - copylf := [f for f in lf | mvar(f) <= mvar(newcp)] - while (not empty? copylf) and (not ground? newcp) repeat - f := first copylf - copylf := rest copylf - test := (newcp exquo$P f) - if (test case P)@B - then - newcp := test::P - if ground? newcp - then - newp := unitCanonical(newp) - else - newp := unitCanonical(newp * newcp) - newps := cons(newp,newps) - newps - - removeRedundantFactorsInContents (ps,lf) == - empty? ps => ps - newps : LP := [] - p,newp,cp,newcp,f,g : P - while not empty? ps repeat - p := first ps - ps := rest ps - cp := mainContent(p)$P - newcp := squareFreePart(cp)$P - newp := (p exquo$P cp)::P - if not ground? newcp - then - copylf := lf - while (not empty? copylf) and (not ground? newcp) repeat - f := first copylf - copylf := rest copylf - g := gcd(newcp,f)$P - if not ground? g - then - newcp := (newcp exquo$P g)::P - if ground? newcp - then - newp := unitCanonical(newp) - else - newp := unitCanonical(newp * newcp) - newps := cons(newp,newps) - newps - - removeRedundantFactorsInPols (ps,lf) == - empty? ps => ps - newps : LP := [] - p,newp,cp,newcp,f,g : P - while not empty? ps repeat - p := first ps - ps := rest ps - cp := mainContent(p)$P - newcp := squareFreePart(cp)$P - newp := (p exquo$P cp)::P - newp := squareFreePart(newp)$P - copylf := lf - while not empty? copylf repeat - f := first copylf - copylf := rest copylf - if not ground? newcp - then - g := gcd(newcp,f)$P - if not ground? g - then - newcp := (newcp exquo$P g)::P - if not ground? newp - then - g := gcd(newp,f)$P - if not ground? g - then - newp := (newp exquo$P g)::P - if ground? newcp - then - newp := unitCanonical(newp) - else - newp := unitCanonical(newp * newcp) - newps := cons(newp,newps) - newps - - removeRedundantFactors (a:P,b:P) : LP == - a := primPartElseUnitCanonical(squareFreePart(a)) - b := primPartElseUnitCanonical(squareFreePart(b)) - if not infRittWu?(a,b) - then - (a,b) := (b,a) - if ground? a - then - if ground? b - then - return([]) - else - return([b]) - else - if ground? b - then - return([a]) - else - return(unprotectedRemoveRedundantFactors(a,b)) - - unprotectedRemoveRedundantFactors (a,b) == - c := b exquo$P a - if (c case P)@B - then - d : P := c::P - if ground? d - then - return([a]) - else - return([a,d]) - else - g : P := gcd(a,b)$P - if ground? g - then - return([a,b]) - else - return([g,(a exquo$P g)::P,(b exquo$P g)::P]) - - else - - removeSquaresIfCan lp == - lp - - rewriteIdealWithQuasiMonicGenerators (ps,redOp?,redOp) == - rewriteSetByReducingWithParticularGenerators(ps,quasiMonic?,redOp?,redOp) - - removeRedundantFactors (a:P,b:P) == - a := primPartElseUnitCanonical(a) - b := primPartElseUnitCanonical(b) - if not infRittWu?(a,b) - then - (a,b) := (b,a) - if ground? a - then - if ground? b - then - return([]) - else - return([b]) - else - if ground? b - then - return([a]) - else - return(unprotectedRemoveRedundantFactors(a,b)) - - unprotectedRemoveRedundantFactors (a,b) == - c := b exquo$P a - if (c case P)@B - then - d : P := c::P - if ground? d - then - return([a]) - else - if infRittWu?(d,a) then (a,d) := (d,a) - return(unprotectedRemoveRedundantFactors(a,d)) - else - return([a,b]) - - removeRedundantFactors (lp:LP) == - lp := remove(ground?, lp) - lp := removeDuplicates [primPartElseUnitCanonical(p) for p in lp] - lp := removeSquaresIfCan lp - lp := removeDuplicates [unitCanonical(p) for p in lp] - empty? lp => lp - size?(lp,1$N)$(List P) => lp - lp := sort(infRittWu?,lp) - p : P := first lp - lp := rest lp - base : LP := unprotectedRemoveRedundantFactors(p,first lp) - top : LP := rest lp - while not empty? top repeat - p := first top - base := removeRedundantFactors(base,p) - top := rest top - base - - removeRedundantFactors (lp:LP,a:P) == - lp := remove(ground?, lp) - lp := sort(infRittWu?, lp) - ground? a => lp - empty? lp => [a] - toSee : LP := lp - toSave : LP := [] - while not empty? toSee repeat - b := first toSee - toSee := rest toSee - if not infRittWu?(b,a) - then - (c,d) := (a,b) - else - (c,d) := (b,a) - rrf := unprotectedRemoveRedundantFactors(c,d) - empty? rrf => error"in removeRedundantFactors : (LP,P) -> LP from PSETPK" - c := first rrf - rrf := rest rrf - if empty? rrf - then - if associates?(c,b) - then - toSave := concat(toSave,toSee) - a := b - toSee := [] - else - a := c - toSee := concat(toSave,toSee) - toSave := [] - else - d := first rrf - rrf := rest rrf - if empty? rrf - then - if associates?(c,b) - then - toSave := concat(toSave,[b]) - a := d - else - if associates?(d,b) - then - toSave := concat(toSave,[b]) - a := c - else - toSave := removeRedundantFactors(toSave,c) - a := d - else - e := first rrf - not empty? rest(rrf) => error"in removeRedundantFactors:(LP,P)->LP from PSETPK" - -- ASSUME that neither c, nor d, nor e may be associated to b - toSave := removeRedundantFactors(toSave,c) - toSave := removeRedundantFactors(toSave,d) - a := e - if empty? toSee - then - toSave := sort(infRittWu?,cons(a,toSave)) - toSave - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/tube.spad.pamphlet b/src/algebra/tube.spad.pamphlet deleted file mode 100644 index 82fd5bd..0000000 --- a/src/algebra/tube.spad.pamphlet +++ /dev/null @@ -1,452 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra tube.spad} -\author{Clifton J. Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package TUBETOOL TubePlotTools} -<>= -)abbrev package TUBETOOL TubePlotTools -++ Author: Clifton J. Williamson -++ Date Created: Bastille Day 1989 -++ Date Last Updated: 5 June 1990 -++ Keywords: -++ Examples: -++ Description: -++ Tools for constructing tubes around 3-dimensional parametric curves. -TubePlotTools(): Exports == Implementation where - I ==> Integer - SF ==> DoubleFloat - L ==> List - Pt ==> Point SF - - Exports ==> with - point: (SF,SF,SF,SF) -> Pt - ++ point(x1,x2,x3,c) creates and returns a point from the three - ++ specified coordinates \spad{x1}, \spad{x2}, \spad{x3}, and also - ++ a fourth coordinate, c, which is generally used to specify the - ++ color of the point. - "*" : (SF,Pt) -> Pt - ++ s * p returns a point whose coordinates are the scalar multiple - ++ of the point p by the scalar s, preserving the color, or fourth - ++ coordinate, of p. - "+" : (Pt,Pt) -> Pt - ++ p + q computes and returns a point whose coordinates are the sums - ++ of the coordinates of the two points \spad{p} and \spad{q}, using - ++ the color, or fourth coordinate, of the first point \spad{p} - ++ as the color also of the point \spad{q}. - "-" : (Pt,Pt) -> Pt - ++ p - q computes and returns a point whose coordinates are the - ++ differences of the coordinates of two points \spad{p} and \spad{q}, - ++ using the color, or fourth coordinate, of the first point \spad{p} - ++ as the color also of the point \spad{q}. - dot : (Pt,Pt) -> SF - ++ dot(p,q) computes the dot product of the two points \spad{p} - ++ and \spad{q} using only the first three coordinates, and returns - ++ the resulting \spadtype{DoubleFloat}. - cross : (Pt,Pt) -> Pt - ++ cross(p,q) computes the cross product of the two points \spad{p} - ++ and \spad{q} using only the first three coordinates, and keeping - ++ the color of the first point p. The result is returned as a point. - unitVector: Pt -> Pt - ++ unitVector(p) creates the unit vector of the point p and returns - ++ the result as a point. Note: \spad{unitVector(p) = p/|p|}. - cosSinInfo: I -> L L SF - ++ cosSinInfo(n) returns the list of lists of values for n, in the - ++ form: \spad{[[cos(n - 1) a,sin(n - 1) a],...,[cos 2 a,sin 2 a],[cos a,sin a]]} - ++ where \spad{a = 2 pi/n}. Note: n should be greater than 2. - loopPoints: (Pt,Pt,Pt,SF,L L SF) -> L Pt - ++ loopPoints(p,n,b,r,lls) creates and returns a list of points - ++ which form the loop with radius r, around the center point - ++ indicated by the point p, with the principal normal vector of - ++ the space curve at point p given by the point(vector) n, and the - ++ binormal vector given by the point(vector) b, and a list of lists, - ++ lls, which is the \spadfun{cosSinInfo} of the number of points - ++ defining the loop. - - Implementation ==> add - import PointPackage(SF) - - point(x,y,z,c) == point(l : L SF := [x,y,z,c]) - - getColor: Pt -> SF - getColor pt == (maxIndex pt > 3 => color pt; 0) - - getColor2: (Pt,Pt) -> SF - getColor2(p0,p1) == - maxIndex p0 > 3 => color p0 - maxIndex p1 > 3 => color p1 - 0 - - a * p == - l : L SF := [a * xCoord p,a * yCoord p,a * zCoord p,getColor p] - point l - - p0 + p1 == - l : L SF := [xCoord p0 + xCoord p1,yCoord p0 + yCoord p1,_ - zCoord p0 + zCoord p1,getColor2(p0,p1)] - point l - - p0 - p1 == - l : L SF := [xCoord p0 - xCoord p1,yCoord p0 - yCoord p1,_ - zCoord p0 - zCoord p1,getColor2(p0,p1)] - point l - - dot(p0,p1) == - (xCoord p0 * xCoord p1) + (yCoord p0 * yCoord p1) +_ - (zCoord p0 * zCoord p1) - - cross(p0,p1) == - x0 := xCoord p0; y0 := yCoord p0; z0 := zCoord p0; - x1 := xCoord p1; y1 := yCoord p1; z1 := zCoord p1; - l : L SF := [y0 * z1 - y1 * z0,z0 * x1 - z1 * x0,_ - x0 * y1 - x1 * y0,getColor2(p0,p1)] - point l - - unitVector p == (inv sqrt dot(p,p)) * p - - cosSinInfo n == - ans : L L SF := nil() - theta : SF := 2 * pi()/n - for i in 1..(n-1) repeat --!! make more efficient - angle := i * theta - ans := concat([cos angle,sin angle],ans) - ans - - loopPoints(ctr,pNorm,bNorm,rad,cosSin) == - ans : L Pt := nil() - while not null cosSin repeat - cossin := first cosSin; cos := first cossin; sin := second cossin - ans := cons(ctr + rad * (cos * pNorm + sin * bNorm),ans) - cosSin := rest cosSin - pt := ctr + rad * pNorm - concat(pt,concat(ans,pt)) - -@ -\section{package EXPRTUBE ExpressionTubePlot} -<>= -)abbrev package EXPRTUBE ExpressionTubePlot -++ Author: Clifton J. Williamson -++ Date Created: Bastille Day 1989 -++ Date Last Updated: 5 June 1990 -++ Keywords: -++ Examples: -++ Package for constructing tubes around 3-dimensional parametric curves. -ExpressionTubePlot(): Exports == Implementation where - B ==> Boolean - I ==> Integer - FE ==> Expression Integer - SY ==> Symbol - SF ==> DoubleFloat - L ==> List - S ==> String - SEG ==> Segment - F2F ==> MakeFloatCompiledFunction(FE) - Pt ==> Point SF - PLOT3 ==> Plot3D - TUBE ==> TubePlot Plot3D - - Exports ==> with - constantToUnaryFunction: SF -> (SF -> SF) - ++ constantToUnaryFunction(s) is a local function which takes the - ++ value of s, which may be a function of a constant, and returns - ++ a function which always returns the value \spadtype{DoubleFloat} s. - tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF -> SF,I) -> TUBE - ++ tubePlot(f,g,h,colorFcn,a..b,r,n) puts a tube of radius r(t) with - ++ n points on each circle about the curve \spad{x = f(t)}, - ++ \spad{y = g(t)}, \spad{z = h(t)} for t in \spad{[a,b]}. - ++ The tube is considered to be open. - tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF -> SF,I,S) -> TUBE - ++ tubePlot(f,g,h,colorFcn,a..b,r,n,s) puts a tube of radius \spad{r(t)} - ++ with n points on each circle about the curve \spad{x = f(t)}, - ++ \spad{y = g(t)}, - ++ \spad{z = h(t)} for t in \spad{[a,b]}. If s = "closed", the tube is - ++ considered to be closed; if s = "open", the tube is considered - ++ to be open. - tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF,I) -> TUBE - ++ tubePlot(f,g,h,colorFcn,a..b,r,n) puts a tube of radius r with - ++ n points on each circle about the curve \spad{x = f(t)}, - ++ \spad{y = g(t)}, \spad{z = h(t)} for t in \spad{[a,b]}. - ++ The tube is considered to be open. - tubePlot: (FE,FE,FE,SF -> SF,SEG SF,SF,I,S) -> TUBE - ++ tubePlot(f,g,h,colorFcn,a..b,r,n,s) puts a tube of radius r with - ++ n points on each circle about the curve \spad{x = f(t)}, - ++ \spad{y = g(t)}, \spad{z = h(t)} for t in \spad{[a,b]}. - ++ If s = "closed", the tube is - ++ considered to be closed; if s = "open", the tube is considered - ++ to be open. - - Implementation ==> add - import Plot3D - import F2F - import TubePlotTools - ---% variables - - getVariable: (FE,FE,FE) -> SY - getVariable(x,y,z) == - varList1 := variables x - varList2 := variables y - varList3 := variables z - (not (# varList1 <= 1)) or (not (# varList2 <= 1)) or _ - (not (# varList3 <= 1)) => - error "tubePlot: only one variable may be used" - null varList1 => - null varList2 => - null varList3 => - error "tubePlot: a variable must appear in functions" - first varList3 - t2 := first varList2 - null varList3 => t2 - not (first varList3 = t2) => - error "tubePlot: only one variable may be used" - t1 := first varList1 - null varList2 => - null varList3 => t1 - not (first varList3 = t1) => - error "tubePlot: only one variable may be used" - t1 - t2 := first varList2 - null varList3 => - not (t1 = t2) => - error "tubePlot: only one variable may be used" - t1 - not (first varList3 = t1) or not (t2 = t1) => - error "tubePlot: only one variable may be used" - t1 - ---% tubes: variable radius - - tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ - tRange:SEG SF,radFcn:SF -> SF,n:I,string:S) == - -- check value of n - n < 3 => error "tubePlot: n should be at least 3" - -- check string - flag : B := - string = "closed" => true - string = "open" => false - error "tubePlot: last argument should be open or closed" - -- check variables - t := getVariable(x,y,z) - -- coordinate functions - xFunc := makeFloatFunction(x,t) - yFunc := makeFloatFunction(y,t) - zFunc := makeFloatFunction(z,t) - -- derivatives of coordinate functions - xp := differentiate(x,t) - yp := differentiate(y,t) - zp := differentiate(z,t) - -- derivative of arc length - sp := sqrt(xp ** 2 + yp ** 2 + zp ** 2) - -- coordinates of unit tangent vector - Tx := xp/sp; Ty := yp/sp; Tz := zp/sp - -- derivatives of coordinates of unit tangent vector - Txp := differentiate(Tx,t) - Typ := differentiate(Ty,t) - Tzp := differentiate(Tz,t) - -- K = curvature = length of curvature vector - K := sqrt(Txp ** 2 + Typ ** 2 + Tzp ** 2) - -- coordinates of principal normal vector - Nx := Txp / K; Ny := Typ / K; Nz := Tzp / K - -- functions SF->SF giving coordinates of principal normal vector - NxFunc := makeFloatFunction(Nx,t); - NyFunc := makeFloatFunction(Ny,t); - NzFunc := makeFloatFunction(Nz,t); - -- coordinates of binormal vector - Bx := Ty * Nz - Tz * Ny - By := Tz * Nx - Tx * Nz - Bz := Tx * Ny - Ty * Nx - -- functions SF -> SF giving coordinates of binormal vector - BxFunc := makeFloatFunction(Bx,t); - ByFunc := makeFloatFunction(By,t); - BzFunc := makeFloatFunction(Bz,t); - -- create Plot3D - parPlot := plot(xFunc,yFunc,zFunc,colorFcn,tRange) - tvals := first tValues parPlot - curvePts := first listBranches parPlot - cosSin := cosSinInfo n - loopList : L L Pt := nil() - while not null tvals repeat - -- note: tvals and curvePts have the same number of elements - tval := first tvals; tvals := rest tvals - ctr := first curvePts; curvePts := rest curvePts - pNormList : L SF := - [NxFunc tval,NyFunc tval,NzFunc tval,colorFcn tval] - pNorm : Pt := point pNormList - bNormList : L SF := - [BxFunc tval,ByFunc tval,BzFunc tval,colorFcn tval] - bNorm : Pt := point bNormList - lps := loopPoints(ctr,pNorm,bNorm,radFcn tval,cosSin) - loopList := cons(lps,loopList) - tube(parPlot,reverse_! loopList,flag) - - tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ - tRange:SEG SF,radFcn:SF -> SF,n:I) == - tubePlot(x,y,z,colorFcn,tRange,radFcn,n,"open") - ---% tubes: constant radius - - project: (SF,SF) -> SF - project(x,y) == x - - constantToUnaryFunction x == project(x,#1) - - tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ - tRange:SEG SF,rad:SF,n:I,s:S) == - tubePlot(x,y,z,colorFcn,tRange,constantToUnaryFunction rad,n,s) - - tubePlot(x:FE,y:FE,z:FE,colorFcn:SF -> SF,_ - tRange:SEG SF,rad:SF,n:I) == - tubePlot(x,y,z,colorFcn,tRange,rad,n,"open") - -@ -\section{package NUMTUBE NumericTubePlot} -<>= -)abbrev package NUMTUBE NumericTubePlot -++ Author: Clifton J. Williamson -++ Date Created: Bastille Day 1989 -++ Date Last Updated: 5 June 1990 -++ Keywords: -++ Examples: -++ Package for constructing tubes around 3-dimensional parametric curves. -NumericTubePlot(Curve): Exports == Implementation where - Curve : PlottableSpaceCurveCategory - B ==> Boolean - I ==> Integer - SF ==> DoubleFloat - L ==> List - S ==> String - SEG ==> Segment - Pt ==> Point SF - TUBE ==> TubePlot Curve - Triad ==> Record(tang:Pt,norm:Pt,bin:Pt) - - Exports ==> with - tube: (Curve,SF,I) -> TUBE - ++ tube(c,r,n) creates a tube of radius r around the curve c. - - Implementation ==> add - import TubePlotTools - - LINMAX := convert(0.995)@SF - XHAT := point(1,0,0,0) - YHAT := point(0,1,0,0) - PREV0 := point(1,1,0,0) - PREV := PREV0 - - colinearity: (Pt,Pt) -> SF - colinearity(x,y) == dot(x,y)**2/(dot(x,x) * dot(y,y)) - - orthog: (Pt,Pt) -> Pt - orthog(x,y) == - if colinearity(x,y) > LINMAX then y := PREV - if colinearity(x,y) > LINMAX then - y := (colinearity(x,XHAT) < LINMAX => XHAT; YHAT) - a := -dot(x,y)/dot(x,x) - PREV := a*x + y - - poTriad:(Pt,Pt,Pt) -> Triad - poTriad(pl,po,pr) == - -- use divided difference for t. - t := unitVector(pr - pl) - -- compute n as orthogonal to t in plane containing po. - pol := pl - po - n := unitVector orthog(t,pol) - [t,n,cross(t,n)] - - curveTriads: L Pt -> L Triad - curveTriads l == - (k := #l) < 2 => error "Need at least 2 points to specify a curve" - PREV := PREV0 - k = 2 => - t := unitVector(second l - first l) - n := unitVector(t - XHAT) - b := cross(t,n) - triad : Triad := [t,n,b] - [triad,triad] - -- compute interior triads using divided differences - midtriads : L Triad := - [poTriad(pl,po,pr) for pl in l for po in rest l _ - for pr in rest rest l] - -- compute first triad using a forward difference - x := first midtriads - t := unitVector(second l - first l) - n := unitVector orthog(t,x.norm) - begtriad : Triad := [t,n,cross(t,n)] - -- compute last triad using a backward difference - x := last midtriads - -- efficiency!! - t := unitVector(l.k - l.(k-1)) - n := unitVector orthog(t,x.norm) - endtriad : Triad := [t,n,cross(t,n)] - concat(begtriad,concat(midtriads,endtriad)) - - curveLoops: (L Pt,SF,I) -> L L Pt - curveLoops(pts,r,nn) == - triads := curveTriads pts - cosSin := cosSinInfo nn - loops : L L Pt := nil() - for pt in pts for triad in triads repeat - n := triad.norm; b := triad.bin - loops := concat(loopPoints(pt,n,b,r,cosSin),loops) - reverse_! loops - - tube(curve,r,n) == - n < 3 => error "tube: n should be at least 3" - brans := listBranches curve - loops : L L Pt := nil() - for bran in brans repeat - loops := concat(loops,curveLoops(bran,r,n)) - tube(curve,loops,false) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/twofact.spad.pamphlet b/src/algebra/twofact.spad.pamphlet deleted file mode 100644 index f3e99f5..0000000 --- a/src/algebra/twofact.spad.pamphlet +++ /dev/null @@ -1,330 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra twofact.spad} -\author{Patrizia Gianni, James Davenport} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package NORMRETR NormRetractPackage} -<>= -)abbrev package NORMRETR NormRetractPackage -++ Description: -++ This package \undocumented -NormRetractPackage(F, ExtF, SUEx, ExtP, n):C == T where - F : FiniteFieldCategory - ExtF : FiniteAlgebraicExtensionField(F) - SUEx : UnivariatePolynomialCategory ExtF - ExtP : UnivariatePolynomialCategory SUEx - n : PositiveInteger - SUP ==> SparseUnivariatePolynomial - R ==> SUP F - P ==> SUP R - - C ==> with - normFactors : ExtP -> List ExtP - ++ normFactors(x) \undocumented - retractIfCan : ExtP -> Union(P, "failed") - ++ retractIfCan(x) \undocumented - Frobenius : ExtP -> ExtP - ++ Frobenius(x) \undocumented - - T ==> add - - normFactors(p:ExtP):List ExtP == - facs : List ExtP := [p] - for i in 1..n-1 repeat - member?((p := Frobenius p), facs) => return facs - facs := cons(p, facs) - facs - - Frobenius(ff:ExtP):ExtP == - fft:ExtP:=0 - while ff^=0 repeat - fft:=fft + monomial(map(Frobenius, leadingCoefficient ff), - degree ff) - ff:=reductum ff - fft - - retractIfCan(ff:ExtP):Union(P, "failed") == - fft:P:=0 - while ff ^= 0 repeat - lc : SUEx := leadingCoefficient ff - plc: SUP F := 0 - while lc ^= 0 repeat - lclc:ExtF := leadingCoefficient lc - (retlc := retractIfCan lclc) case "failed" => return "failed" - plc := plc + monomial(retlc::F, degree lc) - lc := reductum lc - fft:=fft+monomial(plc, degree ff) - ff:=reductum ff - fft - -@ -\section{package TWOFACT TwoFactorize} -<>= -)abbrev package TWOFACT TwoFactorize -++ Authors : P.Gianni, J.H.Davenport -++ Date Created : May 1990 -++ Date Last Updated: March 1992 -++ Description: -++ A basic package for the factorization of bivariate polynomials -++ over a finite field. -++ The functions here represent the base step for the multivariate factorizer. - -TwoFactorize(F) : C == T - where - F : FiniteFieldCategory - SUP ==> SparseUnivariatePolynomial - R ==> SUP F - P ==> SUP R - UPCF2 ==> UnivariatePolynomialCategoryFunctions2 - - C == with - generalTwoFactor : (P) -> Factored P - ++ generalTwoFactor(p) returns the factorisation of polynomial p, - ++ a sparse univariate polynomial (sup) over a - ++ sup over F. - generalSqFr : (P) -> Factored P - ++ generalSqFr(p) returns the square-free factorisation of polynomial p, - ++ a sparse univariate polynomial (sup) over a - ++ sup over F. - twoFactor : (P,Integer) -> Factored P - ++ twoFactor(p,n) returns the factorisation of polynomial p, - ++ a sparse univariate polynomial (sup) over a - ++ sup over F. - ++ Also, p is assumed primitive and square-free and n is the - ++ degree of the inner variable of p (maximum of the degrees - ++ of the coefficients of p). - - T == add - PI ==> PositiveInteger - NNI ==> NonNegativeInteger - import CommuteUnivariatePolynomialCategory(F,R,P) - - ---- Local Functions ---- - computeDegree : (P,Integer,Integer) -> PI - exchangeVars : P -> P - exchangeVarTerm: (R, NNI) -> P - pthRoot : (R, NNI, NNI) -> R - - -- compute the degree of the extension to reduce the polynomial to a - -- univariate one - computeDegree(m : P,mx:Integer,q:Integer): PI == - my:=degree m - n1:Integer:=length(10*mx*my) - n2:Integer:=length(q)-1 - n:=(n1 quo n2)+1 - n::PI --- n=1 => 1$PositiveInteger --- (nextPrime(max(n,min(mx,my)))$IntegerPrimesPackage(Integer))::PI - - exchangeVars(p : P) : P == - p = 0 => 0 - exchangeVarTerm(leadingCoefficient p, degree p) + - exchangeVars(reductum p) - - exchangeVarTerm(c:R, e:NNI) : P == - c = 0 => 0 - monomial(monomial(leadingCoefficient c, e)$R, degree c)$P + - exchangeVarTerm(reductum c, e) - - pthRoot(poly:R,p:NonNegativeInteger,PthRootPow:NonNegativeInteger):R == - tmp:=divideExponents(map((#1::F)**PthRootPow,poly),p) - tmp case "failed" => error "consistency error in TwoFactor" - tmp - - fUnion ==> Union("nil", "sqfr", "irred", "prime") - FF ==> Record(flg:fUnion, fctr:P, xpnt:Integer) - - generalSqFr(m:P): Factored P == - m = 0 => 0 - degree m = 0 => - l:=squareFree(leadingCoefficient m) - makeFR(unit(l)::P,[[u.flg,u.fctr::P,u.xpnt] for u in factorList l]) - cont := content m - m := (m exquo cont)::P - sqfrm := squareFree m - pfaclist : List FF := empty() - unitPart := unit sqfrm - for u in factorList sqfrm repeat - u.flg = "nil" => - uexp:NNI:=(u.xpnt):NNI - nfacs:=squareFree(exchangeVars u.fctr) - for v in factorList nfacs repeat - pfaclist:=cons([v.flg, exchangeVars v.fctr, v.xpnt*uexp], - pfaclist) - unitPart := unit(nfacs)**uexp * unitPart - pfaclist := cons(u,pfaclist) - cont ^= 1 => - sqp := squareFree cont - contlist:=[[w.flg,(w.fctr)::P,w.xpnt] for w in factorList sqp] - pfaclist:= append(contlist, pfaclist) - makeFR(unit(sqp)*unitPart,pfaclist) - makeFR(unitPart,pfaclist) - - - generalTwoFactor(m:P): Factored P == - m = 0 => 0 - degree m = 0 => - l:=factor(leadingCoefficient m)$DistinctDegreeFactorize(F,R) - makeFR(unit(l)::P,[[u.flg,u.fctr::P,u.xpnt] for u in factorList l]) - ll:List FF - ll:=[] - unitPart:P - cont:=content m - if degree(cont)>0 then - m1:=m exquo cont - m1 case "failed" => error "content doesn't divide" - m:=m1 - contfact:=factor(cont)$DistinctDegreeFactorize(F,R) - unitPart:=(unit contfact)::P - ll:=[[w.flg,(w.fctr)::P,w.xpnt] for w in factorList contfact] - else - unitPart:=cont::P - sqfrm:=squareFree m - for u in factors sqfrm repeat - expo:=u.exponent - if expo < 0 then error "negative exponent in a factorisation" - expon:NonNegativeInteger:=expo::NonNegativeInteger - fac:=u.factor - degree fac = 1 => ll:=[["irred",fac,expon],:ll] - differentiate fac = 0 => - -- the polynomial is inseparable w.r.t. its main variable - map(differentiate,fac) = 0 => - p:=characteristic$F - PthRootPow:=(size$F exquo p)::NonNegativeInteger - m1:=divideExponents(map(pthRoot(#1,p,PthRootPow),fac),p) - m1 case "failed" => error "consistency error in TwoFactor" - res:=generalTwoFactor m1 - unitPart:=unitPart*unit(res)**((p*expon)::NNI) - ll:=[:[[v.flg,v.fctr,expon *p*v.xpnt] for v in factorList res],:ll] - m2:=generalTwoFactor swap fac - unitPart:=unitPart*unit(m2)**(expon::NNI) - ll:=[:[[v.flg,swap v.fctr,expon*v.xpnt] for v in factorList m2],:ll] - ydeg:="max"/[degree w for w in coefficients fac] - twoF:=twoFactor(fac,ydeg) - unitPart:=unitPart*unit(twoF)**expon - ll:=[:[[v.flg,v.fctr,expon*v.xpnt] for v in factorList twoF], - :ll] - makeFR(unitPart,ll) - - -- factorization of a primitive square-free bivariate polynomial -- - twoFactor(m:P,dx:Integer):Factored P == - -- choose the degree for the extension - n:PI:=computeDegree(m,dx,size()$F) - -- extend the field - -- find the substitution for x - look:Boolean:=true - dm:=degree m - try:Integer:=min(5,size()$F) - i:Integer:=0 - lcm := leadingCoefficient m - umv : R - while look and i < try repeat - vval := random()$F - i:=i+1 - zero? elt(lcm, vval) => "next value" - umv := map(elt(#1,vval), m)$UPCF2(R, P, F, R) - degree(gcd(umv,differentiate umv))^=0 => "next val" - n := 1 - look := false - extField:=FiniteFieldExtension(F,n) - SUEx:=SUP extField - TP:=SparseUnivariatePolynomial SUEx - mm:TP:=0 - m1:=m - while m1^=0 repeat - mm:=mm+monomial(map(coerce,leadingCoefficient m1)$UPCF2(F,R, - extField,SUEx),degree m1) - m1:=reductum m1 - lcmm := leadingCoefficient mm - val : extField - umex : SUEx - if not look then - val := vval :: extField - umex := map(coerce, umv)$UPCF2(F, R, extField, SUEx) - while look repeat - val:=random()$extField - i:=i+1 - elt(lcmm,val)=0 => "next value" - umex := map(elt(#1,val), mm)$UPCF2(SUEx, TP, extField, SUEx) - degree(gcd(umex,differentiate umex))^=0 => "next val" - look:=false - prime:SUEx:=monomial(1,1)-monomial(val,0) - fumex:=factor(umex)$DistinctDegreeFactorize(extField,SUEx) - lfact1:=factors fumex - - #lfact1=1 => primeFactor(m,1) - lfact : List TP := - [map(coerce,lf.factor)$UPCF2(extField,SUEx,SUEx,TP) - for lf in lfact1] - lfact:=cons(map(coerce,unit fumex)$UPCF2(extField,SUEx,SUEx,TP), - lfact) - import GeneralHenselPackage(SUEx,TP) - dx1:PI:=(dx+1)::PI - lfacth:=completeHensel(mm,lfact,prime,dx1) - lfactk: List P :=[] - Normp := NormRetractPackage(F, extField, SUEx, TP, n) - - while not empty? lfacth repeat - ff := first lfacth - lfacth := rest lfacth - if (c:=leadingCoefficient leadingCoefficient ff) ^=1 then - ff:=((inv c)::SUEx)* ff - not ((ffu:= retractIfCan(ff)$Normp) case "failed") => - lfactk := cons(ffu::P, lfactk) - normfacs := normFactors(ff)$Normp - lfacth := [g for g in lfacth | not member?(g, normfacs)] - ffn := */normfacs - lfactk:=cons(retractIfCan(ffn)$Normp :: P, lfactk) - */[primeFactor(ff1,1) for ff1 in lfactk] - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/unifact.spad.pamphlet b/src/algebra/unifact.spad.pamphlet deleted file mode 100644 index 672a3c6..0000000 --- a/src/algebra/unifact.spad.pamphlet +++ /dev/null @@ -1,368 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra unifact.spad} -\author{Patrizia Gianni} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package UNIFACT UnivariateFactorize} -<>= -)abbrev package UNIFACT UnivariateFactorize -++ Factorisation of univariate polynomials with integer coefficients -++ Author: Patrizia Gianni -++ Date Created: ??? -++ Date Last Updated: December 1993 -++ Description: -++ Package for the factorization of univariate polynomials with integer -++ coefficients. The factorization is done by "lifting" (HENSEL) the -++ factorization over a finite field. -UnivariateFactorize(ZP) : public == private where - Z ==> Integer - PI ==> PositiveInteger - NNI ==> NonNegativeInteger - SUPZ ==> SparseUnivariatePolynomial Z - - ZP : UnivariatePolynomialCategory Z - - FR ==> Factored ZP - fUnion ==> Union("nil", "sqfr", "irred", "prime") - FFE ==> Record(flg:fUnion, fctr:ZP, xpnt:Z) - ParFact ==> Record(irr: ZP,pow: Z) - FinalFact ==> Record(contp: Z,factors:List(ParFact)) - - - public == with - factor : ZP -> FR - ++ factor(m) returns the factorization of m - factorSquareFree : ZP -> FR - ++ factorSquareFree(m) returns the factorization of m square free - ++ polynomial - henselFact : (ZP,Boolean) -> FinalFact - ++ henselFact(m,flag) returns the factorization of m, - ++ FinalFact is a Record s.t. FinalFact.contp=content m, - ++ FinalFact.factors=List of irreducible factors - ++ of m with exponent , if flag =true the polynomial is - ++ assumed square free. - - private == add - --- local functions --- - - henselfact : ZP -> List(ZP) - quadratic : ZP -> List(ZP) - remp : (Z, PI) -> Z - negShiftz : (Z, PI) -> Z - negShiftp : (ZP,PI) -> ZP - bound : ZP -> PI - choose : ZP -> FirstStep - eisenstein : ZP -> Boolean - isPowerOf2 : Z -> Boolean - subMinusX : SUPZ -> ZP - sqroot : Z -> Z - - --- declarations --- - CYC ==> CyclotomicPolynomialPackage() - DDRecord ==> Record(factor: ZP,degree: Z) - DDList ==> List DDRecord - FirstStep ==> Record(prime:PI,factors:DDList) - ContPrim ==> Record(cont: Z,prim: ZP) - - import GeneralHenselPackage(Z,ZP) - import ModularDistinctDegreeFactorizer ZP - - - factor(m: ZP) == - flist := henselFact(m,false) - ctp:=unitNormal flist.contp - makeFR((ctp.unit)::ZP,cons(["nil",ctp.canonical::ZP,1$Z]$FFE, - [["prime",u.irr,u.pow]$FFE for u in flist.factors])) - - factorSquareFree(m: ZP) == - flist := henselFact(m,true) - ctp:=unitNormal flist.contp - makeFR((ctp.unit)::ZP,cons(["nil",ctp.canonical::ZP,1$Z]$FFE, - [["prime",u.irr,u.pow]$FFE for u in flist.factors])) - - - -- Integer square root: returns 0 if t is non-positive - sqroot(t: Z): Z == - t <= 0 => 0 - s:Integer:=t::Integer - s:=approxSqrt(s)$IntegerRoots(Integer) - t:=s::Z - t - - -- Eisenstein criterion: returns true if polynomial is - -- irreducible. Result of false in inconclusive. - eisenstein(m : ZP): Boolean == - -- calculate the content of the terms after the first - c := content reductum m - c = 0 => false - c = 1 => false - -- factor the content - -- if there is a prime in the factorization that does not divide - -- the leading term and appears to multiplicity 1, and the square - -- of this does not divide the last coef, return true. - -- Otherwise reurn false. - lead := leadingCoefficient m - trail := lead - m := reductum m - while m ^= 0 repeat - trail := leadingCoefficient m - m:= reductum m - fc := factor(c) :: Factored(Z) - for r in factors fc repeat - if (r.exponent = 1) and (0 ^= (lead rem r.factor)) and - (0 ^= (trail rem (r.factor ** 2))) then return true - false - - negShiftz(n: Z,Modulus:PI): Z == - if n < 0 then n := n+Modulus - n > (Modulus quo 2) => n-Modulus - n - - negShiftp(pp: ZP,Modulus:PI): ZP == - map(negShiftz(#1,Modulus),pp) - - -- Choose the bound for the coefficients of factors - bound(m: ZP):PI == - nm,nmq2,lcm,bin0,bin1:NNI - cbound,j : PI - k:NNI - lcm := abs(leadingCoefficient m)::NNI - nm := (degree m)::NNI - nmq2:NNI := nm quo 2 - norm: Z := sqroot(+/[coefficient(m,k)**2 for k in 0..nm]) - if nmq2^=1 then nm := (nmq2-1):NNI - else nm := nmq2 - bin0 := nm - cbound := (bin0*norm+lcm)::PI - for i in 2..(nm-1)::NNI repeat - bin1 := bin0 - bin0 := (bin0*(nm+1-i):NNI) quo i - j := (bin0*norm+bin1*lcm)::PI - if cbound t+q ;t) - - numFactors(ddlist:DDList): Z == - ans: Z := 0 - for dd in ddlist repeat - (d := degree(dd.factor)) = 0 => nil - ans := ans + ((d pretend Z) exquo dd.degree):: Z - ans - - -- select the prime,try up to 4 primes, - -- choose the one yielding the fewest factors, but stopping if - -- fewer than 9 factors - choose(m: ZP):FirstStep == - qSave:PI := 1 - ddSave:DDList := [] - numberOfFactors: Z := 0 - lcm := leadingCoefficient m - k: Z := 1 - ddRep := 5 - disc:ZP:=0 - q:PI:=2 - while k "next prime" - disc:=gcd(m,differentiate m,q) - (degree disc)^=0 => "next prime" - k := k+1 - newdd := ddFact(m,q) - ((n := numFactors(newdd)) < 9) => - ddSave := newdd - qSave := q - k := 5 - (numberOfFactors = 0) or (n < numberOfFactors) => - ddSave := newdd - qSave := q - numberOfFactors := n - [qSave,ddSave]$FirstStep - - -- Find the factors of m,primitive, square-free, with lc positive - -- and mindeg m = 0 - henselfact1(m: ZP):List(ZP) == - zero? degree m => --- one? m => [] - (m = 1) => [] - [m] - selected := choose(m) - (numFactors(selected.factors) = 1$Z) => [m] - q := selected.prime - fl := separateFactors(selected.factors,q) - --choose the bound - cbound := bound(m) - completeHensel(m,fl,q,cbound) - - -- check for possible degree reduction - -- could use polynomial decomposition ? - henselfact(m: ZP):List ZP == - deggcd:=degree m - mm:= m - while not zero? mm repeat (deggcd:=gcd(deggcd, degree mm); mm:=reductum mm) - deggcd>1 and deggcd - faclist := henselfact1(divideExponents(m, deggcd)::ZP) - "append"/[henselfact1 multiplyExponents(mm, deggcd) for mm in faclist] - henselfact1 m - - quadratic(m: ZP):List(ZP) == - d,d2: Z - d := coefficient(m,1)**2-4*coefficient(m,0)*coefficient(m,2) - d2 := sqroot(d) - (d-d2**2)^=0 => [m] - alpha: Z := coefficient(m,1)+d2 - beta: Z := 2*coefficient(m,2) - d := gcd(alpha,beta) - if d ^=1 then - alpha := alpha quo d - beta := beta quo d - m0: ZP := monomial(beta,1)+monomial(alpha,0) - cons(m0,[(m exquo m0):: ZP]) - - isPowerOf2(n : Z): Boolean == - n = 1 => true - qr : Record(quotient: Z, remainder: Z) := divide(n,2) - qr.remainder = 1 => false - isPowerOf2 qr.quotient - - subMinusX(supPol : SUPZ): ZP == - minusX : SUPZ := monomial(-1,1)$SUPZ - (elt(supPol,minusX)$SUPZ) : ZP - --- Factorize the polynomial m, test=true if m is known to be --- square-free, false otherwise. --- FinalFact.contp=content m, FinalFact.factors=List of irreducible --- factors with exponent . - henselFact(m: ZP,test:Boolean):FinalFact == - factorlist : List(ParFact) := [] - c : Z - - -- make m primitive - c := content m - m := (m exquo c)::ZP - - -- make the lc m positive - if leadingCoefficient m < 0 then - c := -c - m := -m - - -- is x**d factor of m? - if (d := minimumDegree m) >0 then - m := (monicDivide(m,monomial(1,d))).quotient - factorlist := [[monomial(1,1),d]$ParFact] - - d := degree m - - -- is m constant? - d=0 => [c,factorlist]$FinalFact - - -- is m linear? - d=1 => [c,cons([m,1]$ParFact,factorlist)]$FinalFact - - -- does m satisfy Eisenstein's criterion? - eisenstein m => [c,cons([m,1]$ParFact,factorlist)]$FinalFact - - lcPol : ZP := leadingCoefficient(m) :: ZP - - -- is m cyclotomic (x**n - 1)? - -lcPol = reductum(m) => -- if true, both will = 1 - for fac in - (cyclotomicDecomposition(degree m)$CYC : List ZP) repeat - factorlist := cons([fac,1]$ParFact,factorlist) - [c,factorlist]$FinalFact - - -- is m odd cyclotomic (x**(2*n+1) + 1)? - odd?(d) and (lcPol = reductum(m)) => - for sfac in cyclotomicDecomposition(degree m)$CYC repeat - fac:=subMinusX sfac - if leadingCoefficient fac < 0 then fac := -fac - factorlist := cons([fac,1]$ParFact,factorlist) - [c,factorlist]$FinalFact - - -- is the poly of the form x**n + 1 with n a power of 2? - -- if so, then irreducible - isPowerOf2(d) and (lcPol = reductum(m)) => - factorlist := cons([m,1]$ParFact,factorlist) - [c,factorlist]$FinalFact - - -- is m quadratic? - d=2 => - lfq:List(ZP) := quadratic m - #lfq=1 => [c,cons([lfq.first,1]$ParFact,factorlist)]$FinalFact - (lf0,lf1) := (lfq.first,second lfq) - if lf0=lf1 then factorlist := cons([lf0,2]$ParFact,factorlist) - else factorlist := append([[v,1]$ParFact for v in lfq],factorlist) - [c,factorlist]$FinalFact - - -- m is square-free - test => - fln := henselfact(m) - [c,append(factorlist,[[pf,1]$ParFact for pf in fln])]$FinalFact - - -- find the square-free decomposition of m - irrFact := squareFree(m) - llf := factors irrFact - - -- factorize the square-free primitive terms - for l1 in llf repeat - d1 := l1.exponent - pol := l1.factor - degree pol=1 => factorlist := cons([pol,d1]$ParFact,factorlist) - degree pol=2 => - fln := quadratic(pol) - factorlist := append([[pf,d1]$ParFact for pf in fln],factorlist) - fln := henselfact(pol) - factorlist := append([[pf,d1]$ParFact for pf in fln],factorlist) - [c,factorlist]$FinalFact - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/updecomp.spad.pamphlet b/src/algebra/updecomp.spad.pamphlet deleted file mode 100644 index c300db6..0000000 --- a/src/algebra/updecomp.spad.pamphlet +++ /dev/null @@ -1,178 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra updecomp.spad} -\author{Frederic Lehobey} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package UPDECOMP UnivariatePolynomialDecompositionPackage} -<>= -)abbrev package UPDECOMP UnivariatePolynomialDecompositionPackage -++ Author: Frederic Lehobey -++ Date Created: 17 June 1996 -++ Date Last Updated: 4 June 1997 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keyword: -++ Exemples: -++ References: -++ [1] Peter Henrici, Automatic Computations with Power Series, -++ Journal of the Association for Computing Machinery, Volume 3, No. 1, -++ January 1956, 10-15 -++ [2] Dexter Kozen and Susan Landau, Polynomial Decomposition -++ Algorithms, Journal of Symbolic Computation (1989) 7, 445-456 --- Decomposition would be speeded up (O(n log n) instead of O(n^2)) by --- implementing the algorithm described in [3] based on [4] and [5]. -++ [3] Joachim von zur Gathen, Functional Decomposition Polynomials: -++ the Tame Case, Journal of Symbolic Computation (1990) 9, 281-299 -++ [4] R. P. Brent and H. T. Kung, Fast Algorithms for Manipulating -++ Formal Power Series, Journal of the Association for Computing -++ Machinery, Vol. 25, No. 4, October 1978, 581-595 -++ [5] R. P. Brent, Multiple-Precision Zero-Finding Methods and the -++ Complexity of Elementary Function Evaluation, Analytic -++ Computational Complexity, J. F. Traub, Ed., Academic Press, -++ New York 1975, 151-176 -++ Description: UnivariatePolynomialDecompositionPackage implements -++ functional decomposition of univariate polynomial with coefficients -++ in an \spad{IntegralDomain} of \spad{CharacteristicZero}. -UnivariatePolynomialDecompositionPackage(R,UP): Exports == Implementation where - R : Join(IntegralDomain,CharacteristicZero) - UP : UnivariatePolynomialCategory(R) - N ==> NonNegativeInteger - LR ==> Record(left: UP, right: UP) - QR ==> Record(quotient: UP, remainder: UP) - - - Exports ==> with - - monicRightFactorIfCan: (UP,N) -> Union(UP,"failed") - ++ monicRightFactorIfCan(f,d) returns a candidate to be the - ++ monic right factor (h in f = g o h) of degree d of a - ++ functional decomposition of the polynomial f or - ++ \spad{"failed"} if no such candidate. - rightFactorIfCan: (UP,N,R) -> Union(UP,"failed") - ++ rightFactorIfCan(f,d,c) returns a candidate to be the - ++ right factor (h in f = g o h) of degree d with leading - ++ coefficient c of a functional decomposition of the - ++ polynomial f or \spad{"failed"} if no such candidate. - leftFactorIfCan: (UP,UP) -> Union(UP,"failed") - ++ leftFactorIfCan(f,h) returns the left factor (g in f = g o h) - ++ of the functional decomposition of the polynomial f with - ++ given h or \spad{"failed"} if g does not exist. - monicDecomposeIfCan: UP -> Union(LR,"failed") - ++ monicDecomposeIfCan(f) returns a functional decomposition - ++ of the monic polynomial f of "failed" if it has not found any. - monicCompleteDecompose: UP -> List UP - ++ monicCompleteDecompose(f) returns a list of factors of f for - ++ the functional decomposition ([ f1, ..., fn ] means - ++ f = f1 o ... o fn). - - Implementation ==> add - - rightFactorIfCan(p,dq,lcq) == - dp := degree p - zero? lcq => - error "rightFactorIfCan: leading coefficient may not be zero" - (zero? dp) or (zero? dq) => "failed" - nc := dp exquo dq - nc case "failed" => "failed" - n := nc::N - s := subtractIfCan(dq,1)::N - lcp := leadingCoefficient p - q: UP := monomial(lcq,dq) - k: N - for k in 1..s repeat - c: R := 0 - i: N - for i in 0..subtractIfCan(k,1)::N repeat - c := c+(k::R-(n::R+1)*(i::R))* - coefficient(q,subtractIfCan(dq,i)::N)* - coefficient(p,subtractIfCan(dp+i,k)::N) - cquo := c exquo ((k*n)::R*lcp) - cquo case "failed" => return "failed" - q := q+monomial(cquo::R,subtractIfCan(dq,k)::N) - q - - monicRightFactorIfCan(p,dq) == rightFactorIfCan(p,dq,1$R) - - import UnivariatePolynomialDivisionPackage(R,UP) - - leftFactorIfCan(f,h) == - g: UP := 0 - zero? degree h => "failed" - for i in 0.. while not zero? f repeat - qrf := divideIfCan(f,h) - qrf case "failed" => return "failed" - qr := qrf :: QR - r := qr.remainder - not ground? r => return "failed" - g := g+monomial(ground(r),i) - f := qr.quotient - g - - monicDecomposeIfCan f == - df := degree f - zero? df => "failed" - for dh in 2..subtractIfCan(df,1)::N | zero?(df rem dh) repeat - h := monicRightFactorIfCan(f,dh) - h case UP => - g := leftFactorIfCan(f,h::UP) - g case UP => return [g::UP,h::UP] - "failed" - - monicCompleteDecompose f == - cf := monicDecomposeIfCan f - cf case "failed" => [ f ] - lr := cf :: LR - append(monicCompleteDecompose lr.left,[lr.right]) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/updivp.spad.pamphlet b/src/algebra/updivp.spad.pamphlet deleted file mode 100644 index 67934a5..0000000 --- a/src/algebra/updivp.spad.pamphlet +++ /dev/null @@ -1,99 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra updivp.spad} -\author{Frederic Lehobey} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package UPDIVP UnivariatePolynomialDivisionPackage} -<>= -)abbrev package UPDIVP UnivariatePolynomialDivisionPackage -++ Author: Frederic Lehobey -++ Date Created: 3 June 1997 -++ Date Last Updated: 3 June 1997 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keyword: -++ Exemples: -++ References: -++ Description: UnivariatePolynomialDivisionPackage provides a -++ division for non monic univarite polynomials with coefficients in -++ an \spad{IntegralDomain}. -UnivariatePolynomialDivisionPackage(R,UP): Exports == Implementation where - R : IntegralDomain - UP : UnivariatePolynomialCategory(R) - N ==> NonNegativeInteger - QR ==> Record(quotient: UP, remainder: UP) - - Exports ==> with - - divideIfCan: (UP,UP) -> Union(QR,"failed") - ++ divideIfCan(f,g) returns quotient and remainder of the - ++ division of f by g or "failed" if it has not succeeded. - - Implementation ==> add - - divideIfCan(p1:UP,p2:UP):Union(QR,"failed") == - zero? p2 => error "divideIfCan: division by zero" --- one? (lc := leadingCoefficient p2) => monicDivide(p1,p2) - ((lc := leadingCoefficient p2) = 1) => monicDivide(p1,p2) - q: UP := 0 - while not ((e := subtractIfCan(degree(p1),degree(p2))) case "failed") - repeat - c := leadingCoefficient(p1) exquo lc - c case "failed" => return "failed" - ee := e::N - q := q+monomial(c::R,ee) - p1 := p1-c*mapExponents(#1+ee,p2) - [q,p1] - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/utsode.spad.pamphlet b/src/algebra/utsode.spad.pamphlet deleted file mode 100644 index 26d0314..0000000 --- a/src/algebra/utsode.spad.pamphlet +++ /dev/null @@ -1,181 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra utsode.spad} -\author{Stephen M. Watt, Clifton J. Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package UTSODE UnivariateTaylorSeriesODESolver} -<>= -)abbrev package UTSODE UnivariateTaylorSeriesODESolver -++ Taylor series solutions of explicit ODE's. -++ Author: Stephen Watt (revised by Clifton J. Williamson) -++ Date Created: February 1988 -++ Date Last Updated: 30 September 1993 -++ Keywords: differential equation, ODE, Taylor series -++ Examples: -++ References: -UnivariateTaylorSeriesODESolver(Coef,UTS):_ - Exports == Implementation where - ++ This package provides Taylor series solutions to regular - ++ linear or non-linear ordinary differential equations of - ++ arbitrary order. - Coef : Algebra Fraction Integer - UTS : UnivariateTaylorSeriesCategory Coef - L ==> List - L2 ==> ListFunctions2 - FN ==> (L UTS) -> UTS - ST ==> Stream Coef - YS ==> Y$ParadoxicalCombinatorsForStreams(Coef) - STT ==> StreamTaylorSeriesOperations(Coef) - - Exports ==> with - stFunc1: (UTS -> UTS) -> (ST -> ST) - ++ stFunc1(f) is a local function exported due to compiler problem. - ++ This function is of no interest to the top-level user. - stFunc2: ((UTS,UTS) -> UTS) -> ((ST,ST) -> ST) - ++ stFunc2(f) is a local function exported due to compiler problem. - ++ This function is of no interest to the top-level user. - stFuncN: FN -> ((L ST) -> ST) - ++ stFuncN(f) is a local function xported due to compiler problem. - ++ This function is of no interest to the top-level user. - fixedPointExquo: (UTS,UTS) -> UTS - ++ fixedPointExquo(f,g) computes the exact quotient of \spad{f} and - ++ \spad{g} using a fixed point computation. - ode1: ((UTS -> UTS),Coef) -> UTS - ++ ode1(f,c) is the solution to \spad{y' = f(y)} - ++ such that \spad{y(a) = c}. - ode2: ((UTS, UTS) -> UTS,Coef,Coef) -> UTS - ++ ode2(f,c0,c1) is the solution to \spad{y'' = f(y,y')} such that - ++ \spad{y(a) = c0} and \spad{y'(a) = c1}. - ode: (FN,List Coef) -> UTS - ++ ode(f,cl) is the solution to \spad{y=f(y,y',..,y)} such that - ++ \spad{y(a) = cl.i} for i in 1..n. - mpsode:(L Coef,L FN) -> L UTS - ++ mpsode(r,f) solves the system of differential equations - ++ \spad{dy[i]/dx =f[i] [x,y[1],y[2],...,y[n]]}, - ++ \spad{y[i](a) = r[i]} for i in 1..n. - - Implementation ==> add - - stFunc1 f == coefficients f series(#1) - stFunc2 f == coefficients f(series(#1),series(#2)) - stFuncN f == coefficients f map(series,#1)$ListFunctions2(ST,UTS) - - import StreamTaylorSeriesOperations(Coef) - divloopre:(Coef,ST,Coef,ST,ST) -> ST - divloopre(hx,tx,hy,ty,c) == delay(concat(hx*hy,hy*(tx-(ty*c)))) - divloop: (Coef,ST,Coef,ST) -> ST - divloop(hx,tx,hy,ty) == YS(divloopre(hx,tx,hy,ty,#1)) - - sdiv:(ST,ST) -> ST - sdiv(x,y) == delay - empty? x => empty() - empty? y => error "stream division by zero" - hx := frst x; tx := rst x - hy := frst y; ty := rst y - zero? hy => - zero? hx => sdiv(tx,ty) - error "stream division by zero" - rhy := recip hy - rhy case "failed" => error "stream division:no reciprocal" - divloop(hx,tx,rhy::Coef,ty) - - fixedPointExquo(f,g) == series sdiv(coefficients f,coefficients g) - --- first order - - ode1re: (ST -> ST,Coef,ST) -> ST - ode1re(f,c,y) == lazyIntegrate(c,f y)$STT - - iOde1: ((ST -> ST),Coef) -> ST - iOde1(f,c) == YS ode1re(f,c,#1) - - ode1(f,c) == series iOde1(stFunc1 f,c) - --- second order - - ode2re: ((ST,ST)-> ST,Coef,Coef,ST) -> ST - ode2re(f,c0,c1,y)== - yi := lazyIntegrate(c1,f(y,deriv(y)$STT))$STT - lazyIntegrate(c0,yi)$STT - - iOde2: ((ST,ST) -> ST,Coef,Coef) -> ST - iOde2(f,c0,c1) == YS ode2re(f,c0,c1,#1) - - ode2(f,c0,c1) == series iOde2(stFunc2 f,c0,c1) - --- nth order - - odeNre: (List ST -> ST,List Coef,List ST) -> List ST - odeNre(f,cl,yl) == - -- yl is [y, y', ..., y] - -- integrate [y',..,y] to get [y,..,y] - yil := [lazyIntegrate(c,y)$STT for c in cl for y in rest yl] - -- use y = f(y,..,y) - concat(yil,[f yil]) - - iOde: ((L ST) -> ST,List Coef) -> ST - iOde(f,cl) == first YS(odeNre(f,cl,#1),#cl + 1) - - ode(f,cl) == series iOde(stFuncN f,cl) - - simulre:(L Coef,L ((L ST) -> ST),L ST) -> L ST - simulre(cst,lsf,c) == - [lazyIntegrate(csti,lsfi concat(monom(1,1)$STT,c))_ - for csti in cst for lsfi in lsf] - iMpsode:(L Coef,L ((L ST) -> ST)) -> L ST - iMpsode(cs,lsts) == YS(simulre(cs,lsts,#1),# cs) - mpsode(cs,lsts) == --- stSol := iMpsode(cs,map(stFuncN,lsts)$L2(FN,(L ST) -> ST)) - stSol := iMpsode(cs,[stFuncN(lst) for lst in lsts]) - map(series,stSol)$L2(ST,UTS) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/vector.spad.pamphlet b/src/algebra/vector.spad.pamphlet deleted file mode 100644 index 1837bd4..0000000 --- a/src/algebra/vector.spad.pamphlet +++ /dev/null @@ -1,161 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra vector.spad} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package VECTOR2 VectorFunctions2} -<>= -)abbrev package VECTOR2 VectorFunctions2 -++ Author: -++ Date Created: -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This package provides operations which all take as arguments -++ vectors of elements of some type \spad{A} and functions from \spad{A} to -++ another of type B. The operations all iterate over their vector argument -++ and either return a value of type B or a vector over B. - -VectorFunctions2(A, B): Exports == Implementation where - A, B: Type - - VA ==> Vector A - VB ==> Vector B - O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) - UB ==> Union(B,"failed") - - Exports ==> with - scan : ((A, B) -> B, VA, B) -> VB - ++ scan(func,vec,ident) creates a new vector whose elements are - ++ the result of applying reduce to the binary function func, - ++ increasing initial subsequences of the vector vec, - ++ and the element ident. - reduce : ((A, B) -> B, VA, B) -> B - ++ reduce(func,vec,ident) combines the elements in vec using the - ++ binary function func. Argument ident is returned if vec is empty. - map : (A -> B, VA) -> VB - ++ map(f, v) applies the function f to every element of the vector v - ++ producing a new vector containing the values. - map : (A -> UB, VA) -> Union(VB,"failed") - ++ map(f, v) applies the function f to every element of the vector v - ++ producing a new vector containing the values or \spad{"failed"}. - - Implementation ==> add - scan(f, v, b) == scan(f, v, b)$O2 - reduce(f, v, b) == reduce(f, v, b)$O2 - map(f:(A->B), v:VA):VB == map(f, v)$O2 - - map(f:(A -> UB), a:VA):Union(VB,"failed") == - res : List B := [] - for u in entries(a) repeat - r := f u - r = "failed" => return "failed" - res := [r::B,:res] - vector reverse! res - -@ -\section{package DIRPROD2 DirectProductFunctions2} -<>= -)abbrev package DIRPROD2 DirectProductFunctions2 -++ Author: -++ Date Created: -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This package provides operations which all take as arguments -++ direct products of elements of some type \spad{A} and functions from \spad{A} to another -++ type B. The operations all iterate over their vector argument -++ and either return a value of type B or a direct product over B. - -DirectProductFunctions2(dim, A, B): Exports == Implementation where - dim : NonNegativeInteger - A, B: Type - - DA ==> DirectProduct(dim, A) - DB ==> DirectProduct(dim, B) - VA ==> Vector A - VB ==> Vector B - O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) - - Exports ==> with - scan : ((A, B) -> B, DA, B) -> DB - ++ scan(func,vec,ident) creates a new vector whose elements are - ++ the result of applying reduce to the binary function func, - ++ increasing initial subsequences of the vector vec, - ++ and the element ident. - reduce : ((A, B) -> B, DA, B) -> B - ++ reduce(func,vec,ident) combines the elements in vec using the - ++ binary function func. Argument ident is returned if the vector is empty. - map : (A -> B, DA) -> DB - ++ map(f, v) applies the function f to every element of the vector v - ++ producing a new vector containing the values. - - Implementation ==> add - import FiniteLinearAggregateFunctions2(A, VA, B, VB) - - map(f, v) == directProduct map(f, v::VA) - scan(f, v, b) == directProduct scan(f, v::VA, b) - reduce(f, v, b) == reduce(f, v::VA, b) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> - -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/viewdef.spad.pamphlet b/src/algebra/viewdef.spad.pamphlet deleted file mode 100644 index 0ea6f5c..0000000 --- a/src/algebra/viewdef.spad.pamphlet +++ /dev/null @@ -1,264 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra viewDef.spad} -\author{James Wen} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package VIEWDEF ViewDefaultsPackage} -<>= -)abbrev package VIEWDEF ViewDefaultsPackage -++ Author: Jim Wen -++ Date Created: 15 January 1990 -++ Date Last Updated: -++ Basic Operations: pointColorDefault, lineColorDefault, axesColorDefault, -++ unitsColorDefault, pointSizeDefault, viewPosDefault, viewSizeDefault, -++ viewDefaults, viewWriteDefault, viewWriteAvailable, var1StepsDefault, -++ var2StepsDefault, tubePointsDefault, tubeRadiusDefault -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: ViewportDefaultsPackage describes default and user definable -++ values for graphics - -ViewDefaultsPackage():Exports == Implementation where - I ==> Integer - C ==> Color - PAL ==> Palette - L ==> List - S ==> String - E ==> Expression - PI ==> PositiveInteger - NNI ==> NonNegativeInteger - SF ==> DoubleFloat - B ==> Boolean - - writeAvailable ==> (["PIXMAP","BITMAP","POSTSCRIPT","IMAGE"]::L S) - -- need not worry about case of letters - - Exports ==> with - pointColorDefault : () -> PAL - ++ pointColorDefault() returns the default color of points in a 2D - ++ viewport. - pointColorDefault : PAL -> PAL - ++ pointColorDefault(p) sets the default color of points in a 2D viewport - ++ to the palette p. - lineColorDefault : () -> PAL - ++ lineColorDefault() returns the default color of lines connecting - ++ points in a 2D viewport. - lineColorDefault : PAL -> PAL - ++ lineColorDefault(p) sets the default color of lines connecting points - ++ in a 2D viewport to the palette p. - axesColorDefault : () -> PAL - ++ axesColorDefault() returns the default color of the axes in a - ++ 2D viewport. - axesColorDefault : PAL -> PAL - ++ axesColorDefault(p) sets the default color of the axes in a 2D - ++ viewport to the palette p. - unitsColorDefault : () -> PAL - ++ unitsColorDefault() returns the default color of the unit ticks in - ++ a 2D viewport. - unitsColorDefault : PAL -> PAL - ++ unitsColorDefault(p) sets the default color of the unit ticks in - ++ a 2D viewport to the palette p. - pointSizeDefault : () -> PI - ++ pointSizeDefault() returns the default size of the points in - ++ a 2D viewport. - pointSizeDefault : PI -> PI - ++ pointSizeDefault(i) sets the default size of the points in a 2D - ++ viewport to i. - viewPosDefault : () -> L NNI - ++ viewPosDefault() returns the default X and Y position of a - ++ viewport window unless overriden explicityly, newly created - ++ viewports will have this X and Y coordinate. - viewPosDefault : L NNI -> L NNI - ++ viewPosDefault([x,y]) sets the default X and Y position of a - ++ viewport window unless overriden explicityly, newly created - ++ viewports will have th X and Y coordinates x, y. - viewSizeDefault : () -> L PI - ++ viewSizeDefault() returns the default viewport width and height. - viewSizeDefault : L PI -> L PI - ++ viewSizeDefault([w,h]) sets the default viewport width to w and height - ++ to h. - viewDefaults : () -> Void - ++ viewDefaults() resets all the default graphics settings. - viewWriteDefault : () -> L S - ++ viewWriteDefault() returns the list of things to write in a viewport - ++ data file; a viewalone file is always generated. - viewWriteDefault : L S -> L S - ++ viewWriteDefault(l) sets the default list of things to write in a - ++ viewport data file to the strings in l; a viewalone file is always - ++ genereated. - viewWriteAvailable : () -> L S - ++ viewWriteAvailable() returns a list of available methods for writing, - ++ such as BITMAP, POSTSCRIPT, etc. - var1StepsDefault : () -> PI - ++ var1StepsDefault() is the current setting for the number of steps to - ++ take when creating a 3D mesh in the direction of the first defined - ++ free variable (a free variable is considered defined when its - ++ range is specified (e.g. x=0..10)). - var2StepsDefault : () -> PI - ++ var2StepsDefault() is the current setting for the number of steps to - ++ take when creating a 3D mesh in the direction of the first defined - ++ free variable (a free variable is considered defined when its - ++ range is specified (e.g. x=0..10)). - var1StepsDefault : PI -> PI - ++ var1StepsDefault(i) sets the number of steps to take when creating a - ++ 3D mesh in the direction of the first defined free variable to i - ++ (a free variable is considered defined when its range is specified - ++ (e.g. x=0..10)). - var2StepsDefault : PI -> PI - ++ var2StepsDefault(i) sets the number of steps to take when creating a - ++ 3D mesh in the direction of the first defined free variable to i - ++ (a free variable is considered defined when its range is specified - ++ (e.g. x=0..10)). - tubePointsDefault : PI -> PI - ++ tubePointsDefault(i) sets the number of points to use when creating - ++ the circle to be used in creating a 3D tube plot to i. - tubePointsDefault : () -> PI - ++ tubePointsDefault() returns the number of points to be used when - ++ creating the circle to be used in creating a 3D tube plot. - tubeRadiusDefault : Float -> SF -- current tube.spad asks for SF - ++ tubeRadiusDefault(r) sets the default radius for a 3D tube plot to r. - tubeRadiusDefault : () -> SF - ++ tubeRadiusDefault() returns the radius used for a 3D tube plot. - - Implementation ==> add - - import Color() - import Palette() - --import StringManipulations() - - defaultPointColor : Reference(PAL) := ref bright red() - defaultLineColor : Reference(PAL) := ref pastel green() --bright blue() - defaultAxesColor : Reference(PAL) := ref dim red() - defaultUnitsColor : Reference(PAL) := ref dim yellow() - defaultPointSize : Reference(PI) := ref(3::PI) - defaultXPos : Reference(NNI) := ref(0::NNI) - defaultYPos : Reference(NNI) := ref(0::NNI) - defaultWidth : Reference(PI) := ref(400::PI) - defaultHeight : Reference(PI) := ref(400::PI) - defaultThingsToWrite : Reference(L S) := ref([]::L S) - defaultVar1Steps : Reference(PI) := ref(27::PI) - defaultVar2Steps : Reference(PI) := ref(27::PI) - defaultTubePoints : Reference(PI) := ref(6::PI) - defaultTubeRadius : Reference(SF) := ref(convert(0.5)@SF) - defaultClosed : Reference(B) := ref(false) - ---%Viewport window dimensions specifications - viewPosDefault == [defaultXPos(),defaultYPos()] - viewPosDefault l == - #l < 2 => error "viewPosDefault expects a list with two elements" - [defaultXPos() := first l,defaultYPos() := last l] - - viewSizeDefault == [defaultWidth(),defaultHeight()] - viewSizeDefault l == - #l < 2 => error "viewSizeDefault expects a list with two elements" - [defaultWidth() := first l,defaultHeight() := last l] - - viewDefaults == - defaultPointColor : Reference(PAL) := ref bright red() - defaultLineColor : Reference(PAL) := ref pastel green() --bright blue() - defaultAxesColor : Reference(PAL) := ref dim red() - defaultUnitsColor : Reference(PAL) := ref dim yellow() - defaultPointSize : Reference(PI) := ref(3::PI) - defaultXPos : Reference(NNI) := ref(0::NNI) - defaultYPos : Reference(NNI) := ref(0::NNI) - defaultWidth : Reference(PI) := ref(400::PI) - defaultHeight : Reference(PI) := ref(427::PI) - ---%2D graphical output specifications - pointColorDefault == defaultPointColor() - pointColorDefault p == defaultPointColor() := p - - lineColorDefault == defaultLineColor() - lineColorDefault p == defaultLineColor() := p - - axesColorDefault == defaultAxesColor() - axesColorDefault p == defaultAxesColor() := p - - unitsColorDefault == defaultUnitsColor() - unitsColorDefault p == defaultUnitsColor() := p - - pointSizeDefault == defaultPointSize() - pointSizeDefault x == defaultPointSize() := x - - ---%3D specific stuff - var1StepsDefault == defaultVar1Steps() - var1StepsDefault i == defaultVar1Steps() := i - - var2StepsDefault == defaultVar2Steps() - var2StepsDefault i == defaultVar2Steps() := i - - tubePointsDefault == defaultTubePoints() - tubePointsDefault i == defaultTubePoints() := i - - tubeRadiusDefault == defaultTubeRadius() - tubeRadiusDefault f == defaultTubeRadius() := convert(f)@SF - ---%File output stuff - viewWriteAvailable == writeAvailable - - viewWriteDefault == defaultThingsToWrite() - - viewWriteDefault listOfThings == - thingsToWrite : L S := [] - for aTypeOfFile in listOfThings repeat - if (writeTypeInt := position(upperCase aTypeOfFile,viewWriteAvailable())) < 0 then - sayBrightly([" > ",concat(aTypeOfFile, - " is not a valid file type for writing a viewport")])$Lisp - else - thingsToWrite := append(thingsToWrite,[aTypeOfFile]) - defaultThingsToWrite() := thingsToWrite - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/viewpack.spad.pamphlet b/src/algebra/viewpack.spad.pamphlet deleted file mode 100644 index 5655f96..0000000 --- a/src/algebra/viewpack.spad.pamphlet +++ /dev/null @@ -1,156 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra viewpack.spad} -\author{James Wen} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package VIEW ViewportPackage} -<>= -)abbrev package VIEW ViewportPackage -++ Author: Jim Wen -++ Date Created: 30 April 1989 -++ Date Last Updated: 15 June 1990 -++ Basic Operations: graphCurves, drawCurves, coerce -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: ViewportPackage provides functions for creating GraphImages -++ and TwoDimensionalViewports from lists of lists of points. - -ViewportPackage():Exports == Implementation where - DROP ==> DrawOption - GRIMAGE ==> GraphImage - L ==> List - P ==> Point DoubleFloat - PAL ==> Palette - PI ==> PositiveInteger - VIEW2D ==> TwoDimensionalViewport - - Exports ==> with - - graphCurves : (L L P,PAL,PAL,PI,L DROP) -> GRIMAGE - ++ graphCurves([[p0],[p1],...,[pn]],ptColor,lineColor,ptSize,[options]) - ++ creates a \spadtype{GraphImage} from the list of lists of points, p0 - ++ throught pn, using the options specified in the list \spad{options}. - ++ The graph point color is specified by \spad{ptColor}, the graph line - ++ color is specified by \spad{lineColor}, and the size of the points is - ++ specified by \spad{ptSize}. - graphCurves : L L P -> GRIMAGE - ++ graphCurves([[p0],[p1],...,[pn]]) creates a \spadtype{GraphImage} from - ++ the list of lists of points indicated by p0 through pn. - graphCurves : (L L P,L DROP) -> GRIMAGE - ++ graphCurves([[p0],[p1],...,[pn]],[options]) creates a - ++ \spadtype{GraphImage} from the list of lists of points, p0 throught pn, - ++ using the options specified in the list \spad{options}. - drawCurves : (L L P,PAL,PAL,PI,L DROP) -> VIEW2D - ++ drawCurves([[p0],[p1],...,[pn]],ptColor,lineColor,ptSize,[options]) - ++ creates a \spadtype{TwoDimensionalViewport} from the list of lists of - ++ points, p0 throught pn, using the options specified in the list - ++ \spad{options}. The point color is specified by \spad{ptColor}, the - ++ line color is specified by \spad{lineColor}, and the point size is - ++ specified by \spad{ptSize}. - drawCurves : (L L P,L DROP) -> VIEW2D - ++ drawCurves([[p0],[p1],...,[pn]],[options]) creates a - ++ \spadtype{TwoDimensionalViewport} from the list of lists of points, - ++ p0 throught pn, using the options specified in the list \spad{options}; - coerce : GRIMAGE -> VIEW2D - ++ coerce(gi) converts the indicated \spadtype{GraphImage}, gi, into the - ++ \spadtype{TwoDimensionalViewport} form. - - Implementation ==> add - - import ViewDefaultsPackage - import DrawOptionFunctions0 - ---% Functions that return GraphImages - - graphCurves(listOfListsOfPoints) == - graphCurves(listOfListsOfPoints, pointColorDefault(),_ - lineColorDefault(), pointSizeDefault(),nil()) - - graphCurves(listOfListsOfPoints,optionsList) == - graphCurves(listOfListsOfPoints, pointColorDefault(),_ - lineColorDefault(), pointSizeDefault(),optionsList) - - graphCurves(listOfListsOfPoints,ptColor,lineColor,ptSize,optionsList) == - len := #listOfListsOfPoints - listOfPointColors : L PAL := [ptColor for i in 1..len] - listOfLineColors : L PAL := [lineColor for i in 1..len] - listOfPointSizes : L PI := [ptSize for i in 1..len] - makeGraphImage(listOfListsOfPoints,listOfPointColors, _ - listOfLineColors,listOfPointSizes,optionsList) - ---% Functions that return Two Dimensional Viewports - - drawCurves(listOfListsOfPoints,optionsList) == - drawCurves(listOfListsOfPoints,pointColorDefault(),_ - lineColorDefault(),pointSizeDefault(),optionsList) - - drawCurves(ptLists:L L P,ptColor:PAL,lColor:PAL,ptSize:PI,optList:L DROP) == - v := viewport2D() - options(v,optList) - g := graphCurves(ptLists,ptColor,lColor,ptSize,optList) - putGraph(v,g,1) - makeViewport2D v - ---% Coercions - - coerce(graf:GRIMAGE):VIEW2D == - if (key graf = 0) then makeGraphImage graf - v := viewport2D() - title(v,"VIEW2D") --- dimensions(v,viewPosDefault().1,viewPosDefault().2,viewSizeDefault().1,viewSizeDefault().2) - putGraph(v,graf,1::PI) - makeViewport2D v - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/void.spad.pamphlet b/src/algebra/void.spad.pamphlet deleted file mode 100644 index 9187366..0000000 --- a/src/algebra/void.spad.pamphlet +++ /dev/null @@ -1,88 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra void.spad} -\author{Stephen M. Watt} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package RESLATC ResolveLatticeCompletion} -<>= -)abbrev package RESLATC ResolveLatticeCompletion -++ Author: Stephen M. Watt -++ Date Created: 1986 -++ Date Last Updated: May 30, 1991 -++ Basic Operations: -++ Related Domains: ErrorFunctions, Exit, Void -++ Also See: -++ AMS Classifications: -++ Keywords: mode, resolve, type lattice -++ Examples: -++ References: -++ Description: -++ This package provides coercions for the special types \spadtype{Exit} -++ and \spadtype{Void}. -ResolveLatticeCompletion(S: Type): with - coerce: S -> Void - ++ coerce(s) throws all information about s away. - ++ This coercion allows values of any type to appear - ++ in contexts where they will not be used. - ++ For example, it allows the resolution of different types in - ++ the \spad{then} and \spad{else} branches when an \spad{if} - ++ is in a context where the resulting value is not used. - coerce: Exit -> S - ++ coerce(e) is never really evaluated. This coercion is - ++ used for formal type correctness when a function will not - ++ return directly to its caller. - == add - coerce(s: S): Void == void() - coerce(e: Exit): S == - error "Bug: Should not be able to obtain value of type Exit" - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/weier.spad.pamphlet b/src/algebra/weier.spad.pamphlet deleted file mode 100644 index 47da09a..0000000 --- a/src/algebra/weier.spad.pamphlet +++ /dev/null @@ -1,202 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra weier.spad} -\author{William H. Burge} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package WEIER WeierstrassPreparation} -<>= -)abbrev package WEIER WeierstrassPreparation -++ Author:William H. Burge -++ Date Created:Sept 1988 -++ Date Last Updated:Feb 15 1992 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ Examples: -++ References: -++ Description: This package implements the Weierstrass preparation -++ theorem f or multivariate power series. -++ weierstrass(v,p) where v is a variable, and p is a -++ TaylorSeries(R) in which the terms -++ of lowest degree s must include c*v**s where c is a constant,s>0, -++ is a list of TaylorSeries coefficients A[i] of the -++ equivalent polynomial -++ A = A[0] + A[1]*v + A[2]*v**2 + ... + A[s-1]*v**(s-1) + v**s -++ such that p=A*B , B being a TaylorSeries of minimum degree 0 -WeierstrassPreparation(R): Defn == Impl where - R : Field - VarSet==>Symbol - SMP ==> Polynomial R - PS ==> InnerTaylorSeries SMP - NNI ==> NonNegativeInteger - ST ==> Stream - StS ==> Stream SMP - STPS==>StreamTaylorSeriesOperations - STTAYLOR==>StreamTaylorSeriesOperations - SUP==> SparseUnivariatePolynomial(SMP) - ST2==>StreamFunctions2 - SMPS==> TaylorSeries(R) - L==>List - null ==> empty? - likeUniv ==> univariate - coef ==> coefficient$SUP - nil ==> empty - - - Defn ==> with - - crest:(NNI->( StS-> StS)) - ++\spad{crest n} is used internally. - cfirst:(NNI->( StS-> StS)) - ++\spad{cfirst n} is used internally. - sts2stst:(VarSet,StS)->ST StS - ++\spad{sts2stst(v,s)} is used internally. - clikeUniv:VarSet->(SMP->SUP) - ++\spad{clikeUniv(v)} is used internally. - weierstrass:(VarSet,SMPS)->L SMPS - ++\spad{weierstrass(v,ts)} where v is a variable and ts is - ++ a TaylorSeries, impements the Weierstrass Preparation - ++ Theorem. The result is a list of TaylorSeries that - ++ are the coefficients of the equivalent series. - qqq:(NNI,SMPS,ST SMPS)->((ST SMPS)->ST SMPS) - ++\spad{qqq(n,s,st)} is used internally. - - Impl ==> add - import TaylorSeries(R) - import StreamTaylorSeriesOperations SMP - import StreamTaylorSeriesOperations SMPS - - - map1==>map$(ST2(SMP,SUP)) - map2==>map$(ST2(StS,SMP)) - map3==>map$(ST2(StS,StS)) - transback:ST SMPS->L SMPS - transback smps== - if null smps - then nil()$(L SMPS) - else - if null first (smps:(ST StS)) - then nil()$(L SMPS) - else - cons(map2(first,smps:ST StS):SMPS, - transback(map3(rest,smps:ST StS):(ST SMPS)))$(L SMPS) - - - clikeUniv(var)==likeUniv(#1,var) - mind:(NNI,StS)->NNI - mind(n, sts)== - if null sts - then error "no mindegree" - else if first sts=0 - then mind(n+1,rest sts) - else n - mindegree (sts:StS):NNI== mind(0,sts) - - - streamlikeUniv:(SUP,NNI)->StS - streamlikeUniv(p:SUP,n:NNI): StS == - if n=0 - then cons(coef (p,0),nil()$StS) - else cons(coef (p,n),streamlikeUniv(p,(n-1):NNI)) - - transpose:ST StS->ST StS - transpose(s:ST StS)==delay( - if null s - then nil()$(ST StS) - else cons(map2(first,s),transpose(map3(rest,rst s)))) - - zp==>map$StreamFunctions3(SUP,NNI,StS) - - sts2stst(var, sts)== - zp(streamlikeUniv(#1,#2), - map1(clikeUniv var, sts),(integers 0):(ST NNI)) - - tp:(VarSet,StS)->ST StS - tp(v,sts)==transpose sts2stst(v,sts) - map4==>map$(ST2 (StS,StS)) - maptake:(NNI,ST StS)->ST SMPS - maptake(n,p)== map4(cfirst n,p) pretend ST SMPS - mapdrop:(NNI,ST StS)->ST SMPS - mapdrop(n,p)== map4(crest n,p) pretend ST SMPS - YSS==>Y$ParadoxicalCombinatorsForStreams(SMPS) - weier:(VarSet,StS)->ST SMPS - weier(v,sts)== - a:=mindegree sts - if a=0 - then error "has constant term" - else - p:=tp(v,sts) pretend (ST SMPS) - b:StS:=rest(((first p pretend StS)),a::NNI) - c:=retractIfCan first b - c case "failed"=>_ - error "the coefficient of the lowest degree of the variable should _ - be a constant" - e:=recip b - f:= if e case "failed" - then error "no reciprocal" - else e::StS - q:=(YSS qqq(a,f:SMPS,rest p)) - maptake(a,(p*q) pretend ST StS) - - cfirst n== first(#1,n)$StS - crest n== rest(#1,n)$StS - qq:(NNI,SMPS,ST SMPS,ST SMPS)->ST SMPS - qq(a,e,p,c)== - cons(e,(-e)*mapdrop(a,(p*c)pretend(ST StS))) - qqq(a,e,p)== qq(a,e,p,#1) - wei:(VarSet,SMPS)->ST SMPS - wei(v:VarSet,s:SMPS)==weier(v,s:StS) - weierstrass(v,smps)== transback wei (v,smps) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/xlpoly.spad.pamphlet b/src/algebra/xlpoly.spad.pamphlet deleted file mode 100644 index ac27d5a..0000000 --- a/src/algebra/xlpoly.spad.pamphlet +++ /dev/null @@ -1,127 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra xlpoly.spad} -\author{Michel Petitot} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package XEXPPKG XExponentialPackage} -<>= -)abbrev package XEXPPKG XExponentialPackage -++ Author: Michel Petitot (petitot@lifl.fr). -++ Date Created: 91 -++ Date Last Updated: 7 Juillet 92 -++ Fix History: compilation v 2.1 le 13 dec 98 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This package provides computations of logarithms and exponentials -++ for polynomials in non-commutative -++ variables. \newline Author: Michel Petitot (petitot@lifl.fr). - -XExponentialPackage(R, VarSet, XPOLY): Public == Private where - RN ==> Fraction Integer - NNI ==> NonNegativeInteger - I ==> Integer - R : Join(Ring, Module RN) - -- R : Field - VarSet : OrderedSet - XPOLY : XPolynomialsCat(VarSet, R) - - Public == with - exp: (XPOLY, NNI) -> XPOLY - ++ \axiom{exp(p, n)} returns the exponential of \axiom{p} - ++ truncated at order \axiom{n}. - log: (XPOLY, NNI) -> XPOLY - ++ \axiom{log(p, n)} returns the logarithm of \axiom{p} - ++ truncated at order \axiom{n}. - Hausdorff: (XPOLY, XPOLY, NNI) -> XPOLY - ++ \axiom{Hausdorff(a,b,n)} returns log(exp(a)*exp(b)) - ++ truncated at order \axiom{n}. - - Private == add - - log (p,n) == - p1 : XPOLY := p - 1 - not quasiRegular? p1 => - error "constant term <> 1, impossible log" - s : XPOLY := 0 -- resultat - k : I := n :: I - for i in 1 .. n repeat - k1 :RN := 1/k - k2 : R := k1 * 1$R - s := trunc( trunc(p1,i) * (k2 :: XPOLY - s) , i) - k := k - 1 - s - - exp (p,n) == - not quasiRegular? p => - error "constant term <> 0, exp impossible" - p = 0 => 1 - s : XPOLY := 1$XPOLY -- resultat - k : I := n :: I - for i in 1 .. n repeat - k1 :RN := 1/k - k2 : R := k1 * 1$R - s := trunc( 1 +$XPOLY k2 * trunc(p,i) * s , i) - k := k - 1 - s - - Hausdorff(p,q,n) == - p1: XPOLY := exp(p,n) - q1: XPOLY := exp(q,n) - log(p1*q1, n) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} -{\bf http://www.mathe2.uni-bayreuth.de/frib/html/canonsgif/canons.html} -\end{thebibliography} -\end{document} diff --git a/src/algebra/ystream.spad.pamphlet b/src/algebra/ystream.spad.pamphlet deleted file mode 100644 index 0a44316..0000000 --- a/src/algebra/ystream.spad.pamphlet +++ /dev/null @@ -1,96 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra ystream.spad} -\author{William Burge, Stephen M. Watt, Clifton J. Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package YSTREAM ParadoxicalCombinatorsForStreams} -<>= -)abbrev package YSTREAM ParadoxicalCombinatorsForStreams -++ Computation of fixed points of mappings on streams -++ Author: Burge, Watt (revised by Williamson) -++ Date Created: 1986 -++ Date Last Updated: 21 October 1989 -++ Keywords: stream, fixed point -++ Examples: -++ References: -ParadoxicalCombinatorsForStreams(A):Exports == Implementation where - ++ This package implements fixed-point computations on streams. - A : Type - ST ==> Stream - L ==> List - I ==> Integer - - Exports ==> with - Y: (ST A -> ST A) -> ST A - ++ Y(f) computes a fixed point of the function f. - Y: (L ST A -> L ST A,I) -> L ST A - ++ Y(g,n) computes a fixed point of the function g, where g takes - ++ a list of n streams and returns a list of n streams. - - Implementation ==> add - - Y f == - y : ST A := CONS(0$I,0$I)$Lisp - j := f y - RPLACA(y,frst j)$Lisp - RPLACD(y,rst j)$Lisp - y - - Y(g,n) == - x : L ST A := [CONS(0$I,0$I)$Lisp for i in 1..n] - j := g x - for xi in x for ji in j repeat - RPLACA(xi,frst ji)$Lisp - RPLACD(xi,rst ji)$Lisp - x - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/zerodim.spad.pamphlet b/src/algebra/zerodim.spad.pamphlet deleted file mode 100644 index ed12706..0000000 --- a/src/algebra/zerodim.spad.pamphlet +++ /dev/null @@ -1,7711 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra zerodim.spad} -\author{Marc Moreno Maza} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package FGLMICPK FGLMIfCanPackage} -<>= -)abbrev package FGLMICPK FGLMIfCanPackage -++ Author: Marc Moreno Maza -++ Date Created: 08/02/1999 -++ Date Last Updated: 08/02/1999 -++ Description: -++ This is just an interface between several packages and domains. -++ The goal is to compute lexicographical Groebner bases -++ of sets of polynomial with type \spadtype{Polynomial R} -++ by the {\em FGLM} algorithm if this is possible (i.e. -++ if the input system generates a zero-dimensional ideal). -++ Version: 1. -FGLMIfCanPackage(R,ls): Exports == Implementation where - R: GcdDomain - ls: List Symbol - V ==> OrderedVariableList ls - N ==> NonNegativeInteger - Z ==> Integer - B ==> Boolean - Q1 ==> Polynomial R - Q2 ==> HomogeneousDistributedMultivariatePolynomial(ls,R) - Q3 ==> DistributedMultivariatePolynomial(ls,R) - E2 ==> HomogeneousDirectProduct(#ls,NonNegativeInteger) - E3 ==> DirectProduct(#ls,NonNegativeInteger) - poltopol ==> PolToPol(ls, R) - lingrobpack ==> LinGroebnerPackage(ls,R) - groebnerpack2 ==> GroebnerPackage(R,E2,V,Q2) - groebnerpack3 ==> GroebnerPackage(R,E3,V,Q3) - Exports == with - - zeroDimensional?: List(Q1) -> B - ++ \axiom{zeroDimensional?(lq1)} returns true iff - ++ \axiom{lq1} generates a zero-dimensional ideal - ++ w.r.t. the variables of \axiom{ls}. - fglmIfCan: List(Q1) -> Union(List(Q1), "failed") - ++ \axiom{fglmIfCan(lq1)} returns the lexicographical Groebner - ++ basis of \axiom{lq1} by using the {\em FGLM} strategy, - ++ if \axiom{zeroDimensional?(lq1)} holds. - groebner: List(Q1) -> List(Q1) - ++ \axiom{groebner(lq1)} returns the lexicographical Groebner - ++ basis of \axiom{lq1}. If \axiom{lq1} generates a zero-dimensional - ++ ideal then the {\em FGLM} strategy is used, otherwise - ++ the {\em Sugar} strategy is used. - - Implementation == add - - zeroDim?(lq2: List Q2): Boolean == - lq2 := groebner(lq2)$groebnerpack2 - empty? lq2 => false - #lq2 < #ls => false - lv: List(V) := [(variable(s)$V)::V for s in ls] - for q2 in lq2 while not empty?(lv) repeat - m := leadingMonomial(q2) - x := mainVariable(m)::V - if ground?(leadingCoefficient(univariate(m,x))) then - lv := remove(x, lv) - empty? lv - - zeroDimensional?(lq1: List(Q1)): Boolean == - lq2: List(Q2) := [pToHdmp(q1)$poltopol for q1 in lq1] - zeroDim?(lq2) - - fglmIfCan(lq1:List(Q1)): Union(List(Q1),"failed") == - lq2: List(Q2) := [pToHdmp(q1)$poltopol for q1 in lq1] - lq2 := groebner(lq2)$groebnerpack2 - not zeroDim?(lq2) => "failed"::Union(List(Q1),"failed") - lq3: List(Q3) := totolex(lq2)$lingrobpack - lq1 := [dmpToP(q3)$poltopol for q3 in lq3] - lq1::Union(List(Q1),"failed") - - groebner(lq1:List(Q1)): List(Q1) == - lq2: List(Q2) := [pToHdmp(q1)$poltopol for q1 in lq1] - lq2 := groebner(lq2)$groebnerpack2 - not zeroDim?(lq2) => - lq3: List(Q3) := [pToDmp(q1)$poltopol for q1 in lq1] - lq3 := groebner(lq3)$groebnerpack3 - [dmpToP(q3)$poltopol for q3 in lq3] - lq3: List(Q3) := totolex(lq2)$lingrobpack - [dmpToP(q3)$poltopol for q3 in lq3] - -@ -\section{package LEXTRIPK LexTriangularPackage} -<>= --- zerodim.spad.pamphlet LexTriangularPackage.input -)spool LexTriangularPackage.output -)set message test on -)set message auto off -)clear all ---S 1 of 22 -R := Integer ---R ---R ---R (1) Integer ---R Type: Domain ---E 1 - ---S 2 of 22 -ls : List Symbol := [a,b,c,d,e,f] ---R ---R ---R (2) [a,b,c,d,e,f] ---R Type: List Symbol ---E 2 - ---S 3 of 22 -V := OVAR(ls) ---R ---R ---R (3) OrderedVariableList [a,b,c,d,e,f] ---R Type: Domain ---E 3 - ---S 4 of 22 -P := NSMP(R, V) ---R ---R ---R (4) ---R NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---R Type: Domain ---E 4 - ---S 5 of 22 -p1: P := a*b*c*d*e*f - 1 ---R ---R ---R (5) f e d c b a - 1 ---RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 5 - ---S 6 of 22 -p2: P := a*b*c*d*e +a*b*c*d*f +a*b*c*e*f +a*b*d*e*f +a*c*d*e*f +b*c*d*e*f ---R ---R ---R (6) ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b ---RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 6 - ---S 7 of 22 -p3: P := a*b*c*d + a*b*c*f + a*b*e*f + a*d*e*f + b*c*d*e + c*d*e*f ---R ---R ---R (7) (((d + f)c + f e)b + f e d)a + e d c b + f e d c ---RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 7 - ---S 8 of 22 -p4: P := a*b*c + a*b*f + a*e*f + b*c*d + c*d*e + d*e*f ---R ---R ---R (8) ((c + f)b + f e)a + d c b + e d c + f e d ---RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 8 - ---S 9 of 22 -p5: P := a*b + a*f + b*c + c*d + d*e + e*f ---R ---R ---R (9) (b + f)a + c b + d c + e d + f e ---RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 9 - ---S 10 of 22 -p6: P := a + b + c + d + e + f ---R ---R ---R (10) a + b + c + d + e + f ---RType: NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 10 - ---S 11 of 22 -lp := [p1, p2, p3, p4, p5, p6] ---R ---R ---R (11) ---R [f e d c b a - 1, ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b, ---R (((d + f)c + f e)b + f e d)a + e d c b + f e d c, ---R ((c + f)b + f e)a + d c b + e d c + f e d, ---R (b + f)a + c b + d c + e d + f e, a + b + c + d + e + f] ---RType: List NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 11 - ---S 12 of 22 -lextripack := LEXTRIPK(R,ls) ---R ---R ---R (12) LexTriangularPackage(Integer,[a,b,c,d,e,f]) ---R Type: Domain ---E 12 - ---S 13 of 22 -lg := groebner(lp)$lextripack ---R ---R ---R (13) ---R [a + b + c + d + e + f, ---R ---R 2 2 ---R 3968379498283200b + 15873517993132800f b + 3968379498283200d ---R + ---R 3 5 4 4 ---R 15873517993132800f d + 3968379498283200f e - 15873517993132800f e ---R + ---R 5 3 6 2 ---R 23810276989699200f e + (206355733910726400f + 230166010900425600)e ---R + ---R 43 37 ---R - 729705987316687f + 1863667496867205421f ---R + ---R 31 25 ---R 291674853771731104461f + 365285994691106921745f ---R + ---R 19 13 ---R 549961185828911895f - 365048404038768439269f ---R + ---R 7 ---R - 292382820431504027669f - 2271898467631865497f ---R * ---R e ---R + ---R 44 38 ---R - 3988812642545399f + 10187423878429609997f ---R + ---R 32 26 ---R 1594377523424314053637f + 1994739308439916238065f ---R + ---R 20 14 ---R 1596840088052642815f - 1993494118301162145413f ---R + ---R 8 2 ---R - 1596049742289689815053f - 11488171330159667449f ---R , ---R ---R 2 ---R (23810276989699200c - 23810276989699200f)b + 23810276989699200c ---R + ---R 2 ---R 71430830969097600f c - 23810276989699200d - 95241107958796800f d ---R + ---R 3 5 4 4 5 3 ---R - 55557312975964800f e + 174608697924460800f e - 174608697924460800f e ---R + ---R 6 2 ---R (- 2428648252949318400f - 2611193709870345600)e ---R + ---R 43 37 ---R 8305444561289527f - 21212087151945459641f ---R + ---R 31 25 ---R - 3319815883093451385381f - 4157691646261657136445f ---R + ---R 19 13 ---R - 6072721607510764095f + 4154986709036460221649f ---R + ---R 7 ---R 3327761311138587096749f + 25885340608290841637f ---R * ---R e ---R + ---R 44 38 ---R 45815897629010329f - 117013765582151891207f ---R + ---R 32 26 ---R - 18313166848970865074187f - 22909971239649297438915f ---R + ---R 20 14 ---R - 16133250761305157265f + 22897305857636178256623f ---R + ---R 8 2 ---R 18329944781867242497923f + 130258531002020420699f ---R , ---R ---R (7936758996566400d - 7936758996566400f)b - 7936758996566400f d ---R + ---R 3 5 4 4 5 3 ---R - 7936758996566400f e + 23810276989699200f e - 23810276989699200f e ---R + ---R 6 2 ---R (- 337312257354072000f - 369059293340337600)e ---R + ---R 43 37 ---R 1176345388640471f - 3004383582891473073f ---R + ---R 31 25 ---R - 470203502707246105653f - 588858183402644348085f ---R + ---R 19 13 ---R - 856939308623513535f + 588472674242340526377f ---R + ---R 7 ---R 471313241958371103517f + 3659742549078552381f ---R * ---R e ---R + ---R 44 38 32 ---R 6423170513956901f - 16404772137036480803f - 2567419165227528774463f ---R + ---R 26 20 ---R - 3211938090825682172335f - 2330490332697587485f ---R + ---R 14 8 ---R 3210100109444754864587f + 2569858315395162617847f ---R + ---R 2 ---R 18326089487427735751f ---R , ---R ---R 3 5 ---R (11905138494849600e - 11905138494849600f)b - 3968379498283200f e ---R + ---R 4 4 5 3 ---R 15873517993132800f e - 27778656487982400f e ---R + ---R 6 2 ---R (- 208339923659868000f - 240086959646133600)e ---R + ---R 43 37 ---R 786029984751110f - 2007519008182245250f ---R + ---R 31 25 ---R - 314188062908073807090f - 393423667537929575250f ---R + ---R 19 13 ---R - 550329120654394950f + 393196408728889612770f ---R + ---R 7 ---R 314892372799176495730f + 2409386515146668530f ---R * ---R e ---R + ---R 44 38 32 ---R 4177638546747827f - 10669685294602576381f - 1669852980419949524601f ---R + ---R 26 20 ---R - 2089077057287904170745f - 1569899763580278795f ---R + ---R 14 8 ---R 2087864026859015573349f + 1671496085945199577969f ---R + ---R 2 ---R 11940257226216280177f ---R , ---R ---R 6 2 5 ---R (11905138494849600f - 11905138494849600)b - 15873517993132800f e ---R + ---R 3 4 4 3 ---R 39683794982832000f e - 39683794982832000f e ---R + ---R 11 5 2 ---R (- 686529653202993600f - 607162063237329600f )e ---R + ---R 42 36 30 ---R 65144531306704f - 166381280901088652f - 26033434502470283472f ---R + ---R 24 18 ---R - 31696259583860650140f + 971492093167581360f ---R + ---R 12 6 ---R 32220085033691389548f + 25526177666070529808f + 138603268355749244 ---R * ---R e ---R + ---R 43 37 31 ---R 167620036074811f - 428102417974791473f - 66997243801231679313f ---R + ---R 25 19 ---R - 83426716722148750485f + 203673895369980765f ---R + ---R 13 7 ---R 83523056326010432457f + 66995789640238066937f + 478592855549587901f ---R , ---R ---R 3 2 2 45 ---R 801692827936c + 2405078483808f c - 2405078483808f c - 13752945467f ---R + ---R 39 33 27 ---R 35125117815561f + 5496946957826433f + 6834659447749117f ---R + ---R 21 15 9 ---R - 44484880462461f - 6873406230093057f - 5450844938762633f ---R + ---R 3 ---R 1216586044571f ---R , ---R ---R 2 ---R (23810276989699200d - 23810276989699200f)c + 23810276989699200d ---R + ---R 3 5 4 4 ---R 71430830969097600f d + 7936758996566400f e - 31747035986265600f e ---R + ---R 5 3 6 2 ---R 31747035986265600f e + (404774708824886400f + 396837949828320000)e ---R + ---R 43 37 ---R - 1247372229446701f + 3185785654596621203f ---R + ---R 31 25 ---R 498594866849974751463f + 624542545845791047935f ---R + ---R 19 13 ---R 931085755769682885f - 624150663582417063387f ---R + ---R 7 ---R - 499881859388360475647f - 3926885313819527351f ---R * ---R e ---R + ---R 44 38 ---R - 7026011547118141f + 17944427051950691243f ---R + ---R 32 26 ---R 2808383522593986603543f + 3513624142354807530135f ---R + ---R 20 14 ---R 2860757006705537685f - 3511356735642190737267f ---R + ---R 8 2 ---R - 2811332494697103819887f - 20315011631522847311f ---R , ---R ---R (7936758996566400e - 7936758996566400f)c ---R + ---R 43 37 31 ---R - 4418748183673f + 11285568707456559f + 1765998617294451019f ---R + ---R 25 19 ---R 2173749283622606155f - 55788292195402895f ---R + ---R 13 7 ---R - 2215291421788292951f - 1718142665347430851f + 30256569458230237f ---R * ---R e ---R + ---R 44 38 32 ---R 4418748183673f - 11285568707456559f - 1765998617294451019f ---R + ---R 26 20 14 ---R - 2173749283622606155f + 55788292195402895f + 2215291421788292951f ---R + ---R 8 2 ---R 1718142665347430851f - 30256569458230237f ---R , ---R ---R 6 43 ---R (72152354514240f - 72152354514240)c + 40950859449f ---R + ---R 37 31 25 ---R - 104588980990367f - 16367227395575307f - 20268523416527355f ---R + ---R 19 13 7 ---R 442205002259535f + 20576059935789063f + 15997133796970563f ---R + ---R - 275099892785581f ---R , ---R ---R 3 2 2 ---R 1984189749141600d + 5952569247424800f d - 5952569247424800f d ---R + ---R 4 5 5 4 3 ---R - 3968379498283200f e + 15873517993132800f e + 17857707742274400e ---R + ---R 7 2 ---R (- 148814231185620000f - 162703559429611200f)e ---R + ---R 44 38 ---R - 390000914678878f + 996062704593756434f ---R + ---R 32 26 ---R 155886323972034823914f + 194745956143985421330f ---R + ---R 20 14 ---R 6205077595574430f - 194596512653299068786f ---R + ---R 8 2 ---R - 155796897940756922666f - 1036375759077320978f ---R * ---R e ---R + ---R 45 39 33 ---R - 374998630035991f + 957747106595453993f + 149889155566764891693f ---R + ---R 27 21 ---R 187154171443494641685f - 127129015426348065f ---R + ---R 15 9 3 ---R - 187241533243115040417f - 149719983567976534037f - 836654081239648061f ---R , ---R ---R 3 5 ---R (5952569247424800e - 5952569247424800f)d - 3968379498283200f e ---R + ---R 4 4 5 3 ---R 9920948745708000f e - 3968379498283200f e ---R + ---R 6 2 ---R (- 148814231185620000f - 150798420934761600)e ---R + ---R 43 37 ---R 492558110242553f - 1257992359608074599f ---R + ---R 31 25 ---R - 196883094539368513959f - 246562115745735428055f ---R + ---R 19 13 ---R - 325698701993885505f + 246417769883651808111f ---R + ---R 7 ---R 197327352068200652911f + 1523373796389332143f ---R * ---R e ---R + ---R 44 38 32 ---R 2679481081803026f - 6843392695421906608f - 1071020459642646913578f ---R + ---R 26 20 ---R - 1339789169692041240060f - 852746750910750210f ---R + ---R 14 8 ---R 1339105101971878401312f + 1071900289758712984762f ---R + ---R 2 ---R 7555239072072727756f ---R , ---R ---R 6 2 5 ---R (11905138494849600f - 11905138494849600)d - 7936758996566400f e ---R + ---R 3 4 4 3 ---R 31747035986265600f e - 31747035986265600f e ---R + ---R 11 5 2 ---R (- 420648226818019200f - 404774708824886400f )e ---R + ---R 42 36 30 ---R 15336187600889f - 39169739565161107f - 6127176127489690827f ---R + ---R 24 18 ---R - 7217708742310509615f + 538628483890722735f ---R + ---R 12 6 ---R 7506804353843507643f + 5886160769782607203f + 63576108396535879 ---R * ---R e ---R + ---R 43 37 31 ---R 71737781777066f - 183218856207557938f - 28672874271132276078f ---R + ---R 25 19 ---R - 35625223686939812010f + 164831339634084390f ---R + ---R 13 7 ---R 35724160423073052642f + 28627022578664910622f + 187459987029680506f ---R , ---R ---R 6 5 2 4 ---R 1322793166094400e - 3968379498283200f e + 3968379498283200f e ---R + ---R 3 3 ---R - 5291172664377600f e ---R + ---R 10 4 2 ---R (- 230166010900425600f - 226197631402142400f )e ---R + ---R 47 41 ---R - 152375364610443885f + 389166626064854890415f ---R + ---R 35 29 ---R 60906097841360558987335f + 76167367934608798697275f ---R + ---R 23 17 ---R 27855066785995181125f - 76144952817052723145495f ---R + ---R 11 5 ---R - 60933629892463517546975f - 411415071682002547795f ---R * ---R e ---R + ---R 42 36 30 ---R - 209493533143822f + 535045979490560586f + 83737947964973553146f ---R + ---R 24 18 ---R 104889507084213371570f + 167117997269207870f ---R + ---R 12 6 ---R - 104793725781390615514f - 83842685189903180394f - 569978796672974242 ---R , ---R ---R 6 3 ---R (25438330117200f + 25438330117200)e ---R + ---R 7 2 ---R (76314990351600f + 76314990351600f)e ---R + ---R 44 38 32 ---R - 1594966552735f + 4073543370415745f + 637527159231148925f ---R + ---R 26 20 14 ---R 797521176113606525f + 530440941097175f - 797160527306433145f ---R + ---R 8 2 ---R - 638132320196044965f - 4510507167940725f ---R * ---R e ---R + ---R 45 39 33 ---R - 6036376800443f + 15416903421476909f + 2412807646192304449f ---R + ---R 27 21 15 ---R 3017679923028013705f + 1422320037411955f - 3016560402417843941f ---R + ---R 9 3 ---R - 2414249368183033161f - 16561862361763873f ---R , ---R ---R 12 2 ---R (1387545279120f - 1387545279120)e ---R + ---R 43 37 31 ---R 4321823003f - 11037922310209f - 1727510711947989f ---R + ---R 25 19 13 ---R - 2165150991154425f - 5114342560755f + 2162682824948601f ---R + ---R 7 ---R 1732620732685741f + 13506088516033f ---R * ---R e ---R + ---R 44 38 32 ---R 24177661775f - 61749727185325f - 9664106795754225f ---R + ---R 26 20 14 ---R - 12090487758628245f - 8787672733575f + 12083693383005045f ---R + ---R 8 2 ---R 9672870290826025f + 68544102808525f ---R , ---R 48 42 36 30 18 12 6 ---R f - 2554f - 399710f - 499722f + 499722f + 399710f + 2554f - 1] ---RType: List NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 13 - ---S 14 of 22 -lexTriangular(lg,false)$lextripack ---R ---R ---R (14) ---R [ ---R 6 6 5 2 4 3 3 4 2 5 ---R {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, ---R 2 5 3 4 4 3 5 2 ---R 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, ---R 2 5 3 4 4 3 5 2 ---R 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, ---R 2 5 3 4 4 3 5 2 ---R a - f e + 3f e - 3f e + 4f e + 3e - 3f} ---R , ---R 6 2 2 2 ---R {f - 1,e - f,d - f,c + 4f c + f ,(c - f)b - f c - 5f ,a + b + c + 3f}, ---R 6 2 2 ---R {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, ---R 6 2 2 2 ---R {f - 1,e - f,d + 4f d + f ,(d - f)c - f d - 5f ,b - f,a + c + d + 3f}, ---R ---R 36 30 24 18 12 6 ---R {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, ---R ---R 12 2 ---R (161718564f - 161718564)e ---R + ---R 31 25 19 13 ---R - 504205f + 1287737951f + 201539391380f + 253982817368f ---R + ---R 7 ---R 201940704665f + 1574134601f ---R * ---R e ---R + ---R 32 26 20 14 ---R - 2818405f + 7198203911f + 1126548149060f + 1416530563364f ---R + ---R 8 2 ---R 1127377589345f + 7988820725f ---R , ---R ---R 6 2 5 3 4 ---R (693772639560f - 693772639560)d - 462515093040f e + 1850060372160f e ---R + ---R 4 3 11 5 2 ---R - 1850060372160f e + (- 24513299931120f - 23588269745040f )e ---R + ---R 30 24 18 ---R - 890810428f + 2275181044754f + 355937263869776f ---R + ---R 12 6 ---R 413736880104344f + 342849304487996f + 3704966481878 ---R * ---R e ---R + ---R 31 25 19 ---R - 4163798003f + 10634395752169f + 1664161760192806f ---R + ---R 13 7 ---R 2079424391370694f + 1668153650635921f + 10924274392693f ---R , ---R ---R 6 31 25 ---R (12614047992f - 12614047992)c - 7246825f + 18508536599f ---R + ---R 19 13 7 ---R 2896249516034f + 3581539649666f + 2796477571739f - 48094301893f ---R , ---R ---R 6 2 5 3 4 ---R (693772639560f - 693772639560)b - 925030186080f e + 2312575465200f e ---R + ---R 4 3 11 5 2 ---R - 2312575465200f e + (- 40007555547960f - 35382404617560f )e ---R + ---R 30 24 18 ---R - 3781280823f + 9657492291789f + 1511158913397906f ---R + ---R 12 6 ---R 1837290892286154f + 1487216006594361f + 8077238712093 ---R * ---R e ---R + ---R 31 25 19 ---R - 9736390478f + 24866827916734f + 3891495681905296f ---R + ---R 13 7 ---R 4872556418871424f + 3904047887269606f + 27890075838538f ---R , ---R a + b + c + d + e + f} ---R , ---R 6 2 2 2 ---R {f - 1,e + 4f e + f ,(e - f)d - f e - 5f ,c - f,b - f,a + d + e + 3f}] ---R Type: List RegularChain(Integer,[a,b,c,d,e,f]) ---E 14 - ---S 15 of 22 -lts := lexTriangular(lg,true)$lextripack ---R ---R ---R (15) ---R [ ---R 6 6 5 2 4 3 3 4 2 5 ---R {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, ---R 2 5 3 4 4 3 5 2 ---R 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, ---R 2 5 3 4 4 3 5 2 ---R 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, ---R 2 5 3 4 4 3 5 2 ---R a - f e + 3f e - 3f e + 4f e + 3e - 3f} ---R , ---R 6 2 2 ---R {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, ---R 6 2 2 ---R {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, ---R 6 2 2 ---R {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, ---R ---R 36 30 24 18 12 6 ---R {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, ---R ---R 2 ---R 1387545279120e ---R + ---R 31 25 19 ---R 4321823003f - 11037922310209f - 1727506390124986f ---R + ---R 13 7 ---R - 2176188913464634f - 1732620732685741f - 13506088516033f ---R * ---R e ---R + ---R 32 26 20 ---R 24177661775f - 61749727185325f - 9664082618092450f ---R + ---R 14 8 2 ---R - 12152237485813570f - 9672870290826025f - 68544102808525f ---R , ---R ---R 1387545279120d ---R + ---R 30 24 18 ---R - 1128983050f + 2883434331830f + 451234998755840f ---R + ---R 12 6 ---R 562426491685760f + 447129055314890f - 165557857270 ---R * ---R e ---R + ---R 31 25 19 ---R - 1816935351f + 4640452214013f + 726247129626942f ---R + ---R 13 7 ---R 912871801716798f + 726583262666877f + 4909358645961f ---R , ---R ---R 31 25 19 ---R 1387545279120c + 778171189f - 1987468196267f - 310993556954378f ---R + ---R 13 7 ---R - 383262822316802f - 300335488637543f + 5289595037041f ---R , ---R ---R 1387545279120b ---R + ---R 30 24 18 ---R 1128983050f - 2883434331830f - 451234998755840f ---R + ---R 12 6 ---R - 562426491685760f - 447129055314890f + 165557857270 ---R * ---R e ---R + ---R 31 25 19 ---R - 3283058841f + 8384938292463f + 1312252817452422f ---R + ---R 13 7 ---R 1646579934064638f + 1306372958656407f + 4694680112151f ---R , ---R ---R 31 25 ---R 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f ---R + ---R 19 13 7 ---R - 1727506390124986f - 2176188913464634f - 1732620732685741f ---R + ---R - 13506088516033f ---R } ---R , ---R 6 2 2 ---R {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] ---R Type: List RegularChain(Integer,[a,b,c,d,e,f]) ---E 15 - ---S 16 of 22 -[ [init(p) for p in (ts :: List(P))] for ts in lts] ---R ---R ---R (16) ---R [[1,3,1,3,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], ---R [1387545279120,1387545279120,1387545279120,1387545279120,1387545279120,1], ---R [1,1,1,1,1,1]] ---RType: List List NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) ---E 16 - ---S 17 of 22 -squareFreeLexTriangular(lg,true)$lextripack ---R ---R ---R (17) ---R [ ---R 6 6 5 2 4 3 3 4 2 5 ---R {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, ---R 2 5 3 4 4 3 5 2 ---R 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, ---R 2 5 3 4 4 3 5 2 ---R 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, ---R 2 5 3 4 4 3 5 2 ---R a - f e + 3f e - 3f e + 4f e + 3e - 3f} ---R , ---R 6 2 2 ---R {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, ---R 6 2 2 ---R {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, ---R 6 2 2 ---R {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, ---R ---R 36 30 24 18 12 6 ---R {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, ---R ---R 2 ---R 1387545279120e ---R + ---R 31 25 19 ---R 4321823003f - 11037922310209f - 1727506390124986f ---R + ---R 13 7 ---R - 2176188913464634f - 1732620732685741f - 13506088516033f ---R * ---R e ---R + ---R 32 26 20 ---R 24177661775f - 61749727185325f - 9664082618092450f ---R + ---R 14 8 2 ---R - 12152237485813570f - 9672870290826025f - 68544102808525f ---R , ---R ---R 1387545279120d ---R + ---R 30 24 18 ---R - 1128983050f + 2883434331830f + 451234998755840f ---R + ---R 12 6 ---R 562426491685760f + 447129055314890f - 165557857270 ---R * ---R e ---R + ---R 31 25 19 ---R - 1816935351f + 4640452214013f + 726247129626942f ---R + ---R 13 7 ---R 912871801716798f + 726583262666877f + 4909358645961f ---R , ---R ---R 31 25 19 ---R 1387545279120c + 778171189f - 1987468196267f - 310993556954378f ---R + ---R 13 7 ---R - 383262822316802f - 300335488637543f + 5289595037041f ---R , ---R ---R 1387545279120b ---R + ---R 30 24 18 ---R 1128983050f - 2883434331830f - 451234998755840f ---R + ---R 12 6 ---R - 562426491685760f - 447129055314890f + 165557857270 ---R * ---R e ---R + ---R 31 25 19 ---R - 3283058841f + 8384938292463f + 1312252817452422f ---R + ---R 13 7 ---R 1646579934064638f + 1306372958656407f + 4694680112151f ---R , ---R ---R 31 25 ---R 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f ---R + ---R 19 13 7 ---R - 1727506390124986f - 2176188913464634f - 1732620732685741f ---R + ---R - 13506088516033f ---R } ---R , ---R 6 2 2 ---R {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] ---RType: List SquareFreeRegularTriangularSet(Integer,IndexedExponents OrderedVariableList [a,b,c,d,e,f],OrderedVariableList [a,b,c,d,e,f],NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f])) ---E 17 - ---S 18 of 22 -reduce(+,[degree(ts) for ts in lts]) ---R ---R ---R (18) 156 ---R Type: PositiveInteger ---E 18 - ---S 19 of 22 -ls2 : List Symbol := concat(ls,new()$Symbol) ---R ---R ---R (19) [a,b,c,d,e,f,%A] ---R Type: List Symbol ---E 19 - ---S 20 of 22 -zdpack := ZDSOLVE(R,ls,ls2) ---R ---R ---R (20) ZeroDimensionalSolvePackage(Integer,[a,b,c,d,e,f],[a,b,c,d,e,f,%A]) ---R Type: Domain ---E 20 - ---S 21 of 22 -concat [univariateSolve(ts)$zdpack for ts in lts] ---R ---R ---R (21) ---R [ ---R 4 2 ---R [complexRoots= ? - 13? + 49, ---R ---R coordinates = ---R 3 3 3 3 ---R [7a + %A - 6%A, 21b + %A + %A, 21c - 2%A + 19%A, 7d - %A + 6%A, ---R 3 3 ---R 21e - %A - %A, 21f + 2%A - 19%A] ---R ] ---R , ---R ---R 4 2 ---R [complexRoots= ? + 11? + 49, ---R ---R coordinates = ---R 3 3 3 ---R [35a + 3%A + 19%A, 35b + %A + 18%A, 35c - 2%A - %A, ---R 3 3 3 ---R 35d - 3%A - 19%A, 35e - %A - 18%A, 35f + 2%A + %A] ---R ] ---R , ---R ---R [ ---R complexRoots = ---R 8 7 6 5 4 3 2 ---R ? - 12? + 58? - 120? + 207? - 360? + 802? - 1332? + 1369 ---R , ---R ---R coordinates = ---R [ ---R 7 6 5 4 ---R 43054532a + 33782%A - 546673%A + 3127348%A - 6927123%A ---R + ---R 3 2 ---R 4365212%A - 25086957%A + 39582814%A - 107313172 ---R , ---R ---R 7 6 5 4 ---R 43054532b - 33782%A + 546673%A - 3127348%A + 6927123%A ---R + ---R 3 2 ---R - 4365212%A + 25086957%A - 39582814%A + 107313172 ---R , ---R ---R 7 6 5 4 ---R 21527266c - 22306%A + 263139%A - 1166076%A + 1821805%A ---R + ---R 3 2 ---R - 2892788%A + 10322663%A - 9026596%A + 12950740 ---R , ---R ---R 7 6 5 4 ---R 43054532d + 22306%A - 263139%A + 1166076%A - 1821805%A ---R + ---R 3 2 ---R 2892788%A - 10322663%A + 30553862%A - 12950740 ---R , ---R ---R 7 6 5 4 ---R 43054532e - 22306%A + 263139%A - 1166076%A + 1821805%A ---R + ---R 3 2 ---R - 2892788%A + 10322663%A - 30553862%A + 12950740 ---R , ---R ---R 7 6 5 4 ---R 21527266f + 22306%A - 263139%A + 1166076%A - 1821805%A ---R + ---R 3 2 ---R 2892788%A - 10322663%A + 9026596%A - 12950740 ---R ] ---R ] ---R , ---R ---R [ ---R complexRoots = ---R 8 7 6 5 4 3 2 ---R ? + 12? + 58? + 120? + 207? + 360? + 802? + 1332? + 1369 ---R , ---R ---R coordinates = ---R [ ---R 7 6 5 4 ---R 43054532a + 33782%A + 546673%A + 3127348%A + 6927123%A ---R + ---R 3 2 ---R 4365212%A + 25086957%A + 39582814%A + 107313172 ---R , ---R ---R 7 6 5 4 ---R 43054532b - 33782%A - 546673%A - 3127348%A - 6927123%A ---R + ---R 3 2 ---R - 4365212%A - 25086957%A - 39582814%A - 107313172 ---R , ---R ---R 7 6 5 4 ---R 21527266c - 22306%A - 263139%A - 1166076%A - 1821805%A ---R + ---R 3 2 ---R - 2892788%A - 10322663%A - 9026596%A - 12950740 ---R , ---R ---R 7 6 5 4 ---R 43054532d + 22306%A + 263139%A + 1166076%A + 1821805%A ---R + ---R 3 2 ---R 2892788%A + 10322663%A + 30553862%A + 12950740 ---R , ---R ---R 7 6 5 4 ---R 43054532e - 22306%A - 263139%A - 1166076%A - 1821805%A ---R + ---R 3 2 ---R - 2892788%A - 10322663%A - 30553862%A - 12950740 ---R , ---R ---R 7 6 5 4 ---R 21527266f + 22306%A + 263139%A + 1166076%A + 1821805%A ---R + ---R 3 2 ---R 2892788%A + 10322663%A + 9026596%A + 12950740 ---R ] ---R ] ---R , ---R ---R 4 2 ---R [complexRoots= ? - ? + 1, ---R 3 3 3 3 ---R coordinates= [a - %A,b + %A - %A,c + %A ,d + %A,e - %A + %A,f - %A ]] ---R , ---R ---R 8 6 4 2 ---R [complexRoots= ? + 4? + 12? + 16? + 4, ---R ---R coordinates = ---R 7 5 3 7 5 3 ---R [4a - 2%A - 7%A - 20%A - 22%A, 4b + 2%A + 7%A + 20%A + 22%A, ---R 7 5 3 7 5 3 ---R 4c + %A + 3%A + 10%A + 10%A, 4d + %A + 3%A + 10%A + 6%A, ---R 7 5 3 7 5 3 ---R 4e - %A - 3%A - 10%A - 6%A, 4f - %A - 3%A - 10%A - 10%A] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 6? + 30? + 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [30a - %A - 5%A - 30%A - 6, 6b + %A + 5%A + 24%A + 6, ---R 3 2 3 2 ---R 30c - %A - 5%A - 6, 30d - %A - 5%A - 30%A - 6, ---R 3 2 3 2 ---R 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - 6? + 30? - 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [30a - %A + 5%A - 30%A + 6, 6b + %A - 5%A + 24%A - 6, ---R 3 2 3 2 ---R 30c - %A + 5%A + 6, 30d - %A + 5%A - 30%A + 6, ---R 3 2 3 2 ---R 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] ---R ] ---R , ---R ---R 2 ---R [complexRoots= ? + 6? + 6, ---R coordinates= [a + 1,b - %A - 5,c + %A + 1,d + 1,e + 1,f + 1]] ---R , ---R ---R 2 ---R [complexRoots= ? - 6? + 6, ---R coordinates= [a - 1,b - %A + 5,c + %A - 1,d - 1,e - 1,f - 1]] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 6? + 30? + 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [6a + %A + 5%A + 24%A + 6, 30b - %A - 5%A - 6, ---R 3 2 3 2 ---R 30c - %A - 5%A - 30%A - 6, 30d - %A - 5%A - 30%A - 6, ---R 3 2 3 2 ---R 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - 6? + 30? - 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [6a + %A - 5%A + 24%A - 6, 30b - %A + 5%A + 6, ---R 3 2 3 2 ---R 30c - %A + 5%A - 30%A + 6, 30d - %A + 5%A - 30%A + 6, ---R 3 2 3 2 ---R 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] ---R ] ---R , ---R ---R 2 ---R [complexRoots= ? + 6? + 6, ---R coordinates= [a - %A - 5,b + %A + 1,c + 1,d + 1,e + 1,f + 1]] ---R , ---R ---R 2 ---R [complexRoots= ? - 6? + 6, ---R coordinates= [a - %A + 5,b + %A - 1,c - 1,d - 1,e - 1,f - 1]] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 6? + 30? + 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, ---R 3 2 3 2 ---R 6c + %A + 5%A + 24%A + 6, 30d - %A - 5%A - 6, ---R 3 2 3 2 ---R 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - 6? + 30? - 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, ---R 3 2 3 2 ---R 6c + %A - 5%A + 24%A - 6, 30d - %A + 5%A + 6, ---R 3 2 3 2 ---R 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] ---R ] ---R , ---R ---R 2 ---R [complexRoots= ? + 6? + 6, ---R coordinates= [a + 1,b + 1,c - %A - 5,d + %A + 1,e + 1,f + 1]] ---R , ---R ---R 2 ---R [complexRoots= ? - 6? + 6, ---R coordinates= [a - 1,b - 1,c - %A + 5,d + %A - 1,e - 1,f - 1]] ---R , ---R ---R 8 7 6 5 4 2 ---R [complexRoots= ? + 6? + 16? + 24? + 18? - 8? + 4, ---R ---R coordinates = ---R 7 6 5 4 3 2 ---R [2a + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 2%A + 4, ---R 7 6 5 4 3 2 ---R 2b + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 4%A + 4, ---R 7 6 5 4 3 ---R 2c - %A - 4%A - 8%A - 9%A - 4%A - 2%A - 4, ---R 7 6 5 4 3 ---R 2d + %A + 4%A + 8%A + 9%A + 4%A + 2%A + 4, ---R 7 6 5 4 3 2 ---R 2e - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 4%A - 4, ---R 7 6 5 4 3 2 ---R 2f - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 2%A - 4] ---R ] ---R , ---R ---R [ ---R complexRoots = ---R 8 7 6 5 4 3 2 ---R ? + 12? + 64? + 192? + 432? + 768? + 1024? + 768? + 256 ---R , ---R ---R coordinates = ---R [ ---R 7 6 5 4 3 2 ---R 1408a - 19%A - 200%A - 912%A - 2216%A - 4544%A - 6784%A ---R + ---R - 6976%A - 1792 ---R , ---R ---R 7 6 5 4 3 2 ---R 1408b - 37%A - 408%A - 1952%A - 5024%A - 10368%A - 16768%A ---R + ---R - 17920%A - 5120 ---R , ---R ---R 7 6 5 4 3 2 ---R 1408c + 37%A + 408%A + 1952%A + 5024%A + 10368%A + 16768%A ---R + ---R 17920%A + 5120 ---R , ---R ---R 7 6 5 4 3 2 ---R 1408d + 19%A + 200%A + 912%A + 2216%A + 4544%A + 6784%A ---R + ---R 6976%A + 1792 ---R , ---R 2e + %A, 2f - %A] ---R ] ---R , ---R ---R 8 6 4 2 ---R [complexRoots= ? + 4? + 12? + 16? + 4, ---R ---R coordinates = ---R 7 5 3 7 5 3 ---R [4a - %A - 3%A - 10%A - 6%A, 4b - %A - 3%A - 10%A - 10%A, ---R 7 5 3 7 5 3 ---R 4c - 2%A - 7%A - 20%A - 22%A, 4d + 2%A + 7%A + 20%A + 22%A, ---R 7 5 3 7 5 3 ---R 4e + %A + 3%A + 10%A + 10%A, 4f + %A + 3%A + 10%A + 6%A] ---R ] ---R , ---R ---R 8 6 4 2 ---R [complexRoots= ? + 16? - 96? + 256? + 256, ---R ---R coordinates = ---R 7 5 3 ---R [512a - %A - 12%A + 176%A - 448%A, ---R 7 5 3 ---R 128b - %A - 16%A + 96%A - 256%A, ---R 7 5 3 ---R 128c + %A + 16%A - 96%A + 256%A, ---R 7 5 3 ---R 512d + %A + 12%A - 176%A + 448%A, 2e + %A, 2f - %A] ---R ] ---R , ---R ---R [ ---R complexRoots = ---R 8 7 6 5 4 3 2 ---R ? - 12? + 64? - 192? + 432? - 768? + 1024? - 768? + 256 ---R , ---R ---R coordinates = ---R [ ---R 7 6 5 4 3 2 ---R 1408a - 19%A + 200%A - 912%A + 2216%A - 4544%A + 6784%A ---R + ---R - 6976%A + 1792 ---R , ---R ---R 7 6 5 4 3 2 ---R 1408b - 37%A + 408%A - 1952%A + 5024%A - 10368%A + 16768%A ---R + ---R - 17920%A + 5120 ---R , ---R ---R 7 6 5 4 3 2 ---R 1408c + 37%A - 408%A + 1952%A - 5024%A + 10368%A - 16768%A ---R + ---R 17920%A - 5120 ---R , ---R ---R 7 6 5 4 3 2 ---R 1408d + 19%A - 200%A + 912%A - 2216%A + 4544%A - 6784%A ---R + ---R 6976%A - 1792 ---R , ---R 2e + %A, 2f - %A] ---R ] ---R , ---R ---R 8 7 6 5 4 2 ---R [complexRoots= ? - 6? + 16? - 24? + 18? - 8? + 4, ---R ---R coordinates = ---R 7 6 5 4 3 2 ---R [2a + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 2%A - 4, ---R 7 6 5 4 3 2 ---R 2b + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 4%A - 4, ---R 7 6 5 4 3 ---R 2c - %A + 4%A - 8%A + 9%A - 4%A - 2%A + 4, ---R 7 6 5 4 3 ---R 2d + %A - 4%A + 8%A - 9%A + 4%A + 2%A - 4, ---R 7 6 5 4 3 2 ---R 2e - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 4%A + 4, ---R 7 6 5 4 3 2 ---R 2f - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 2%A + 4] ---R ] ---R , ---R ---R 4 2 ---R [complexRoots= ? + 12? + 144, ---R ---R coordinates = ---R 2 2 2 2 ---R [12a - %A - 12, 12b - %A - 12, 12c - %A - 12, 12d - %A - 12, ---R 2 2 ---R 6e + %A + 3%A + 12, 6f + %A - 3%A + 12] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 6? + 30? + 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [6a - %A - 5%A - 24%A - 6, 30b + %A + 5%A + 30%A + 6, ---R 3 2 3 2 ---R 30c + %A + 5%A + 30%A + 6, 30d + %A + 5%A + 30%A + 6, ---R 3 2 3 2 ---R 30e + %A + 5%A + 30%A + 6, 30f + %A + 5%A + 6] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - 6? + 30? - 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [6a - %A + 5%A - 24%A + 6, 30b + %A - 5%A + 30%A - 6, ---R 3 2 3 2 ---R 30c + %A - 5%A + 30%A - 6, 30d + %A - 5%A + 30%A - 6, ---R 3 2 3 2 ---R 30e + %A - 5%A + 30%A - 6, 30f + %A - 5%A - 6] ---R ] ---R , ---R ---R 4 2 ---R [complexRoots= ? + 12? + 144, ---R ---R coordinates = ---R 2 2 2 2 ---R [12a + %A + 12, 12b + %A + 12, 12c + %A + 12, 12d + %A + 12, ---R 2 2 ---R 6e - %A + 3%A - 12, 6f - %A - 3%A - 12] ---R ] ---R , ---R ---R 2 ---R [complexRoots= ? - 12, ---R coordinates= [a - 1,b - 1,c - 1,d - 1,2e + %A + 4,2f - %A + 4]] ---R , ---R ---R 2 ---R [complexRoots= ? + 6? + 6, ---R coordinates= [a + %A + 5,b - 1,c - 1,d - 1,e - 1,f - %A - 1]] ---R , ---R ---R 2 ---R [complexRoots= ? - 6? + 6, ---R coordinates= [a + %A - 5,b + 1,c + 1,d + 1,e + 1,f - %A + 1]] ---R , ---R ---R 2 ---R [complexRoots= ? - 12, ---R coordinates= [a + 1,b + 1,c + 1,d + 1,2e + %A - 4,2f - %A - 4]] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 6? + 30? + 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, ---R 3 2 3 2 ---R 30c - %A - 5%A - 30%A - 6, 6d + %A + 5%A + 24%A + 6, ---R 3 2 3 2 ---R 30e - %A - 5%A - 6, 30f - %A - 5%A - 30%A - 6] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - 6? + 30? - 36? + 36, ---R ---R coordinates = ---R 3 2 3 2 ---R [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, ---R 3 2 3 2 ---R 30c - %A + 5%A - 30%A + 6, 6d + %A - 5%A + 24%A - 6, ---R 3 2 3 2 ---R 30e - %A + 5%A + 6, 30f - %A + 5%A - 30%A + 6] ---R ] ---R , ---R ---R 2 ---R [complexRoots= ? + 6? + 6, ---R coordinates= [a + 1,b + 1,c + 1,d - %A - 5,e + %A + 1,f + 1]] ---R , ---R ---R 2 ---R [complexRoots= ? - 6? + 6, ---R coordinates= [a - 1,b - 1,c - 1,d - %A + 5,e + %A - 1,f - 1]] ---R ] ---RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) ---E 21 - ---S 22 of 22 -concat [realSolve(ts)$zdpack for ts in lts] ---R ---R ---R (22) ---R [[%B1,%B1,%B1,%B5,- %B5 - 4%B1,%B1], [%B1,%B1,%B1,%B6,- %B6 - 4%B1,%B1], ---R [%B2,%B2,%B2,%B3,- %B3 - 4%B2,%B2], [%B2,%B2,%B2,%B4,- %B4 - 4%B2,%B2], ---R [%B7,%B7,%B7,%B7,%B11,- %B11 - 4%B7], [%B7,%B7,%B7,%B7,%B12,- %B12 - 4%B7], ---R [%B8,%B8,%B8,%B8,%B9,- %B9 - 4%B8], [%B8,%B8,%B8,%B8,%B10,- %B10 - 4%B8], ---R [%B13,%B13,%B17,- %B17 - 4%B13,%B13,%B13], ---R [%B13,%B13,%B18,- %B18 - 4%B13,%B13,%B13], ---R [%B14,%B14,%B15,- %B15 - 4%B14,%B14,%B14], ---R [%B14,%B14,%B16,- %B16 - 4%B14,%B14,%B14], ---R ---R [%B19, %B29, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B19 - ---------- %B19 - ----------- %B19 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B19 - ------------- %B19 - ----------- %B19 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B19 + ------------- %B19 + --------------- %B19 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B19 + --------------- %B19 - ------------ %B19 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B19 - ------------- %B19 - --------------- %B19 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B19 - --------------- %B19 - ------------- %B19 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B29 - ------------- %B19 + ------------ %B19 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B19 + ---------------- %B19 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B19 + -------------- %B19 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B19, %B30, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B19 - ---------- %B19 - ----------- %B19 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B19 - ------------- %B19 - ----------- %B19 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B19 + ------------- %B19 + --------------- %B19 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B19 + --------------- %B19 - ------------ %B19 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B19 - ------------- %B19 - --------------- %B19 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B19 - --------------- %B19 - ------------- %B19 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B30 - ------------- %B19 + ------------ %B19 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B19 + ---------------- %B19 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B19 + -------------- %B19 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B20, %B27, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B20 - ---------- %B20 - ----------- %B20 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B20 - ------------- %B20 - ----------- %B20 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B20 + ------------- %B20 + --------------- %B20 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B20 + --------------- %B20 - ------------ %B20 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B20 - ------------- %B20 - --------------- %B20 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B20 - --------------- %B20 - ------------- %B20 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B27 - ------------- %B20 + ------------ %B20 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B20 + ---------------- %B20 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B20 + -------------- %B20 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B20, %B28, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B20 - ---------- %B20 - ----------- %B20 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B20 - ------------- %B20 - ----------- %B20 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B20 + ------------- %B20 + --------------- %B20 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B20 + --------------- %B20 - ------------ %B20 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B20 - ------------- %B20 - --------------- %B20 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B20 - --------------- %B20 - ------------- %B20 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B28 - ------------- %B20 + ------------ %B20 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B20 + ---------------- %B20 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B20 + -------------- %B20 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B21, %B25, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B21 - ---------- %B21 - ----------- %B21 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B21 - ------------- %B21 - ----------- %B21 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B21 + ------------- %B21 + --------------- %B21 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B21 + --------------- %B21 - ------------ %B21 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B21 - ------------- %B21 - --------------- %B21 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B21 - --------------- %B21 - ------------- %B21 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B25 - ------------- %B21 + ------------ %B21 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B21 + ---------------- %B21 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B21 + -------------- %B21 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B21, %B26, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B21 - ---------- %B21 - ----------- %B21 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B21 - ------------- %B21 - ----------- %B21 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B21 + ------------- %B21 + --------------- %B21 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B21 + --------------- %B21 - ------------ %B21 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B21 - ------------- %B21 - --------------- %B21 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B21 - --------------- %B21 - ------------- %B21 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B26 - ------------- %B21 + ------------ %B21 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B21 + ---------------- %B21 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B21 + -------------- %B21 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B22, %B23, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B22 - ---------- %B22 - ----------- %B22 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B22 - ------------- %B22 - ----------- %B22 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B22 + ------------- %B22 + --------------- %B22 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B22 + --------------- %B22 - ------------ %B22 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B22 - ------------- %B22 - --------------- %B22 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B22 - --------------- %B22 - ------------- %B22 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B23 - ------------- %B22 + ------------ %B22 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B22 + ---------------- %B22 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B22 + -------------- %B22 ---R 1387545279120 1387545279120 ---R ] ---R , ---R ---R [%B22, %B24, ---R ---R 7865521 31 6696179241 25 25769893181 19 ---R ---------- %B22 - ---------- %B22 - ----------- %B22 ---R 6006689520 2002229840 49235160 ---R + ---R 1975912990729 13 1048460696489 7 21252634831 ---R - ------------- %B22 - ------------- %B22 - ----------- %B22 ---R 3003344760 2002229840 6006689520 ---R , ---R ---R 778171189 31 1987468196267 25 155496778477189 19 ---R - ------------- %B22 + ------------- %B22 + --------------- %B22 ---R 1387545279120 1387545279120 693772639560 ---R + ---R 191631411158401 13 300335488637543 7 755656433863 ---R --------------- %B22 + --------------- %B22 - ------------ %B22 ---R 693772639560 1387545279120 198220754160 ---R , ---R ---R 1094352947 31 2794979430821 25 218708802908737 19 ---R ------------ %B22 - ------------- %B22 - --------------- %B22 ---R 462515093040 462515093040 231257546520 ---R + ---R 91476663003591 13 145152550961823 7 1564893370717 ---R - -------------- %B22 - --------------- %B22 - ------------- %B22 ---R 77085848840 154171697680 462515093040 ---R , ---R ---R 4321823003 31 180949546069 25 ---R - %B24 - ------------- %B22 + ------------ %B22 ---R 1387545279120 22746643920 ---R + ---R 863753195062493 19 1088094456732317 13 ---R --------------- %B22 + ---------------- %B22 ---R 693772639560 693772639560 ---R + ---R 1732620732685741 7 13506088516033 ---R ---------------- %B22 + -------------- %B22 ---R 1387545279120 1387545279120 ---R ] ---R , ---R [%B31,%B35,- %B35 - 4%B31,%B31,%B31,%B31], ---R [%B31,%B36,- %B36 - 4%B31,%B31,%B31,%B31], ---R [%B32,%B33,- %B33 - 4%B32,%B32,%B32,%B32], ---R [%B32,%B34,- %B34 - 4%B32,%B32,%B32,%B32]] ---R Type: List List RealClosure Fraction Integer ---E 22 -)spool -)lisp (bye) -@ -<>= -==================================================================== -LexTriangularPackage examples -==================================================================== - -The LexTriangularPackage package constructor provides an -implementation of the lexTriangular algorithm (D. Lazard "Solving -Zero-dimensional Algebraic Systems", J. of Symbol. Comput., 1992). -This algorithm decomposes a zero-dimensional variety into zero-sets of -regular triangular sets. Thus the input system must have a finite -number of complex solutions. Moreover, this system needs to be a -lexicographical Groebner basis. - -This package takes two arguments: the coefficient-ring R of the -polynomials, which must be a GcdDomain and their set of variables -given by ls a List Symbol. The type of the input polynomials must be -NewSparseMultivariatePolynomial(R,V) where V is OrderedVariableList(ls). -The abbreviation for LexTriangularPackage is LEXTRIPK. The main operations -are lexTriangular and squareFreeLexTriangular. The later provide -decompositions by means of square-free regular triangular sets, built -with the SquareFreeRegularTriangularSet constructor, whereas the former -uses the RegularTriangularSet constructor. Note that these constructors -also implement another algorithm for solving algebraic systems by -means of regular triangular sets; in that case no computations of -Groebner bases are needed and the input system may have any dimension -(i.e. it may have an infinite number of solutions). - -The implementation of the lexTriangular algorithm provided in the -LexTriangularPackage constructor differs from that reported in -"Computations of gcd over algebraic towers of simple extensions" by -M. Moreno Maza and R. Rioboo (in proceedings of AAECC11, Paris, 1995). -Indeed, the squareFreeLexTriangular operation removes all multiplicities -of the solutions (i.e. the computed solutions are pairwise different) -and the lexTriangular operation may keep some multiplicities; this -later operation runs generally faster than the former. - -The interest of the lexTriangular algorithm is due to the -following experimental remark. For some examples, a triangular -decomposition of a zero-dimensional variety can be computed faster via -a lexicographical Groebner basis computation than by using a direct method -(like that of SquareFreeRegularTriangularSet and RegularTriangularSet). -This happens typically when the total degree of the system relies -essentially on its smallest variable (like in the Katsura systems). -When this is not the case, the direct method may give better timings -(like in the Rose system). - -Of course, the direct method can also be applied to a lexicographical -Groebner basis. However, the lexTriangular algorithm takes advantage -of the structure of this basis and avoids many unnecessary computations -which are performed by the direct method. - -For this purpose of solving algebraic systems with a finite number of -solutions, see also the ZeroDimensionalSolvePackage. It allows -to use both strategies (the lexTriangular algorithm and the direct -method) for computing either the complex or real roots of a system. - -Note that the way of understanding triangular decompositions is -detailed in the example of the RegularTriangularSet constructor. - -Since the LexTriangularPackage package constructor is limited to -zero-dimensional systems, it provides a zeroDimensional? operation to -check whether this requirement holds. There is also a groebner operation -to compute the lexicographical Groebner basis of a set of polynomials -with type NewSparseMultivariatePolynomial(R,V). The elimination ordering -is that given by ls (the greatest variable being the first element -of ls). This basis is computed by the FLGM algorithm (Faugere et al. -"Efficient Computation of Zero-Dimensional Groebner Bases by Change -of Ordering" , J. of Symbol. Comput., 1993) implemented in the -LinGroebnerPackage package constructor. - -Once a lexicographical Groebner basis is computed, then one can call -the operations lexTriangular and squareFreeLexTriangular. Note that -these operations admit an optional argument to produce normalized -triangular sets. There is also a zeroSetSplit operation which does -all the job from the input system; an error is produced if this system -is not zero-dimensional. - -Let us illustrate the facilities of the LexTriangularPackage constructor -by a famous example, the cyclic-6 root system. - -Define the coefficient ring. - - R := Integer - Integer - Type: Domain - -Define the list of variables, - - ls : List Symbol := [a,b,c,d,e,f] - [a,b,c,d,e,f] - Type: List Symbol - -and make it an ordered set. - - V := OVAR(ls) - OrderedVariableList [a,b,c,d,e,f] - Type: Domain - -Define the polynomial ring. - - P := NSMP(R, V) - NewSparseMultivariatePolynomial(Integer,OrderedVariableList [a,b,c,d,e,f]) - Type: Domain - -Define the polynomials. - - p1: P := a*b*c*d*e*f - 1 - f e d c b a - 1 - Type: NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - - p2: P := a*b*c*d*e +a*b*c*d*f +a*b*c*e*f +a*b*d*e*f +a*c*d*e*f +b*c*d*e*f - ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b - Type: NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - - p3: P := a*b*c*d + a*b*c*f + a*b*e*f + a*d*e*f + b*c*d*e + c*d*e*f - (((d + f)c + f e)b + f e d)a + e d c b + f e d c - Type: NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - - p4: P := a*b*c + a*b*f + a*e*f + b*c*d + c*d*e + d*e*f - ((c + f)b + f e)a + d c b + e d c + f e d - Type: NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - - p5: P := a*b + a*f + b*c + c*d + d*e + e*f - (b + f)a + c b + d c + e d + f e - Type: NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - - p6: P := a + b + c + d + e + f - a + b + c + d + e + f - Type: NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - - lp := [p1, p2, p3, p4, p5, p6] - [f e d c b a - 1, ((((e + f)d + f e)c + f e d)b + f e d c)a + f e d c b, - (((d + f)c + f e)b + f e d)a + e d c b + f e d c, - ((c + f)b + f e)a + d c b + e d c + f e d, - (b + f)a + c b + d c + e d + f e, a + b + c + d + e + f] - Type: List NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - -Now call LEXTRIPK. - - lextripack := LEXTRIPK(R,ls) - LexTriangularPackage(Integer,[a,b,c,d,e,f]) - Type: Domain - -Compute the lexicographical Groebner basis of the system. This may -take between 5 minutes and one hour, depending on your machine. - - lg := groebner(lp)$lextripack - [a + b + c + d + e + f, - 2 2 - 3968379498283200b + 15873517993132800f b + 3968379498283200d - + - 3 5 4 4 - 15873517993132800f d + 3968379498283200f e - 15873517993132800f e - + - 5 3 6 2 - 23810276989699200f e + (206355733910726400f + 230166010900425600)e - + - 43 37 - - 729705987316687f + 1863667496867205421f - + - 31 25 - 291674853771731104461f + 365285994691106921745f - + - 19 13 - 549961185828911895f - 365048404038768439269f - + - 7 - - 292382820431504027669f - 2271898467631865497f - * - e - + - 44 38 - - 3988812642545399f + 10187423878429609997f - + - 32 26 - 1594377523424314053637f + 1994739308439916238065f - + - 20 14 - 1596840088052642815f - 1993494118301162145413f - + - 8 2 - - 1596049742289689815053f - 11488171330159667449f - , - 2 - (23810276989699200c - 23810276989699200f)b + 23810276989699200c - + - 2 - 71430830969097600f c - 23810276989699200d - 95241107958796800f d - + - 3 5 4 4 5 3 - - 55557312975964800f e + 174608697924460800f e - 174608697924460800f e - + - 6 2 - (- 2428648252949318400f - 2611193709870345600)e - + - 43 37 - 8305444561289527f - 21212087151945459641f - + - 31 25 - - 3319815883093451385381f - 4157691646261657136445f - + - 19 13 - - 6072721607510764095f + 4154986709036460221649f - + - 7 - 3327761311138587096749f + 25885340608290841637f - * - e - + - 44 38 - 45815897629010329f - 117013765582151891207f - + - 32 26 - - 18313166848970865074187f - 22909971239649297438915f - + - 20 14 - - 16133250761305157265f + 22897305857636178256623f - + - 8 2 - 18329944781867242497923f + 130258531002020420699f - , - (7936758996566400d - 7936758996566400f)b - 7936758996566400f d - + - 3 5 4 4 5 3 - - 7936758996566400f e + 23810276989699200f e - 23810276989699200f e - + - 6 2 - (- 337312257354072000f - 369059293340337600)e - + - 43 37 - 1176345388640471f - 3004383582891473073f - + - 31 25 - - 470203502707246105653f - 588858183402644348085f - + - 19 13 - - 856939308623513535f + 588472674242340526377f - + - 7 - 471313241958371103517f + 3659742549078552381f - * - e - + - 44 38 32 - 6423170513956901f - 16404772137036480803f - 2567419165227528774463f - + - 26 20 - - 3211938090825682172335f - 2330490332697587485f - + - 14 8 - 3210100109444754864587f + 2569858315395162617847f - + - 2 - 18326089487427735751f - , - 3 5 - (11905138494849600e - 11905138494849600f)b - 3968379498283200f e - + - 4 4 5 3 - 15873517993132800f e - 27778656487982400f e - + - 6 2 - (- 208339923659868000f - 240086959646133600)e - + - 43 37 - 786029984751110f - 2007519008182245250f - + - 31 25 - - 314188062908073807090f - 393423667537929575250f - + - 19 13 - - 550329120654394950f + 393196408728889612770f - + - 7 - 314892372799176495730f + 2409386515146668530f - * - e - + - 44 38 32 - 4177638546747827f - 10669685294602576381f - 1669852980419949524601f - + - 26 20 - - 2089077057287904170745f - 1569899763580278795f - + - 14 8 - 2087864026859015573349f + 1671496085945199577969f - + - 2 - 11940257226216280177f - , - 6 2 5 - (11905138494849600f - 11905138494849600)b - 15873517993132800f e - + - 3 4 4 3 - 39683794982832000f e - 39683794982832000f e - + - 11 5 2 - (- 686529653202993600f - 607162063237329600f )e - + - 42 36 30 - 65144531306704f - 166381280901088652f - 26033434502470283472f - + - 24 18 - - 31696259583860650140f + 971492093167581360f - + - 12 6 - 32220085033691389548f + 25526177666070529808f + 138603268355749244 - * - e - + - 43 37 31 - 167620036074811f - 428102417974791473f - 66997243801231679313f - + - 25 19 - - 83426716722148750485f + 203673895369980765f - + - 13 7 - 83523056326010432457f + 66995789640238066937f + 478592855549587901f - , - 3 2 2 45 - 801692827936c + 2405078483808f c - 2405078483808f c - 13752945467f - + - 39 33 27 - 35125117815561f + 5496946957826433f + 6834659447749117f - + - 21 15 9 - - 44484880462461f - 6873406230093057f - 5450844938762633f - + - 3 - 1216586044571f - , - 2 - (23810276989699200d - 23810276989699200f)c + 23810276989699200d - + - 3 5 4 4 - 71430830969097600f d + 7936758996566400f e - 31747035986265600f e - + - 5 3 6 2 - 31747035986265600f e + (404774708824886400f + 396837949828320000)e - + - 43 37 - - 1247372229446701f + 3185785654596621203f - + - 31 25 - 498594866849974751463f + 624542545845791047935f - + - 19 13 - 931085755769682885f - 624150663582417063387f - + - 7 - - 499881859388360475647f - 3926885313819527351f - * - e - + - 44 38 - - 7026011547118141f + 17944427051950691243f - + - 32 26 - 2808383522593986603543f + 3513624142354807530135f - + - 20 14 - 2860757006705537685f - 3511356735642190737267f - + - 8 2 - - 2811332494697103819887f - 20315011631522847311f - , - (7936758996566400e - 7936758996566400f)c - + - 43 37 31 - - 4418748183673f + 11285568707456559f + 1765998617294451019f - + - 25 19 - 2173749283622606155f - 55788292195402895f - + - 13 7 - - 2215291421788292951f - 1718142665347430851f + 30256569458230237f - * - e - + - 44 38 32 - 4418748183673f - 11285568707456559f - 1765998617294451019f - + - 26 20 14 - - 2173749283622606155f + 55788292195402895f + 2215291421788292951f - + - 8 2 - 1718142665347430851f - 30256569458230237f - , - 6 43 - (72152354514240f - 72152354514240)c + 40950859449f - + - 37 31 25 - - 104588980990367f - 16367227395575307f - 20268523416527355f - + - 19 13 7 - 442205002259535f + 20576059935789063f + 15997133796970563f - + - - 275099892785581f - , - 3 2 2 - 1984189749141600d + 5952569247424800f d - 5952569247424800f d - + - 4 5 5 4 3 - - 3968379498283200f e + 15873517993132800f e + 17857707742274400e - + - 7 2 - (- 148814231185620000f - 162703559429611200f)e - + - 44 38 - - 390000914678878f + 996062704593756434f - + - 32 26 - 155886323972034823914f + 194745956143985421330f - + - 20 14 - 6205077595574430f - 194596512653299068786f - + - 8 2 - - 155796897940756922666f - 1036375759077320978f - * - e - + - 45 39 33 - - 374998630035991f + 957747106595453993f + 149889155566764891693f - + - 27 21 - 187154171443494641685f - 127129015426348065f - + - 15 9 3 - - 187241533243115040417f - 149719983567976534037f - 836654081239648061f - , - 3 5 - (5952569247424800e - 5952569247424800f)d - 3968379498283200f e - + - 4 4 5 3 - 9920948745708000f e - 3968379498283200f e - + - 6 2 - (- 148814231185620000f - 150798420934761600)e - + - 43 37 - 492558110242553f - 1257992359608074599f - + - 31 25 - - 196883094539368513959f - 246562115745735428055f - + - 19 13 - - 325698701993885505f + 246417769883651808111f - + - 7 - 197327352068200652911f + 1523373796389332143f - * - e - + - 44 38 32 - 2679481081803026f - 6843392695421906608f - 1071020459642646913578f - + - 26 20 - - 1339789169692041240060f - 852746750910750210f - + - 14 8 - 1339105101971878401312f + 1071900289758712984762f - + - 2 - 7555239072072727756f - , - 6 2 5 - (11905138494849600f - 11905138494849600)d - 7936758996566400f e - + - 3 4 4 3 - 31747035986265600f e - 31747035986265600f e - + - 11 5 2 - (- 420648226818019200f - 404774708824886400f )e - + - 42 36 30 - 15336187600889f - 39169739565161107f - 6127176127489690827f - + - 24 18 - - 7217708742310509615f + 538628483890722735f - + - 12 6 - 7506804353843507643f + 5886160769782607203f + 63576108396535879 - * - e - + - 43 37 31 - 71737781777066f - 183218856207557938f - 28672874271132276078f - + - 25 19 - - 35625223686939812010f + 164831339634084390f - + - 13 7 - 35724160423073052642f + 28627022578664910622f + 187459987029680506f - , - 6 5 2 4 - 1322793166094400e - 3968379498283200f e + 3968379498283200f e - + - 3 3 - - 5291172664377600f e - + - 10 4 2 - (- 230166010900425600f - 226197631402142400f )e - + - 47 41 - - 152375364610443885f + 389166626064854890415f - + - 35 29 - 60906097841360558987335f + 76167367934608798697275f - + - 23 17 - 27855066785995181125f - 76144952817052723145495f - + - 11 5 - - 60933629892463517546975f - 411415071682002547795f - * - e - + - 42 36 30 - - 209493533143822f + 535045979490560586f + 83737947964973553146f - + - 24 18 - 104889507084213371570f + 167117997269207870f - + - 12 6 - - 104793725781390615514f - 83842685189903180394f - 569978796672974242 - , - 6 3 - (25438330117200f + 25438330117200)e - + - 7 2 - (76314990351600f + 76314990351600f)e - + - 44 38 32 - - 1594966552735f + 4073543370415745f + 637527159231148925f - + - 26 20 14 - 797521176113606525f + 530440941097175f - 797160527306433145f - + - 8 2 - - 638132320196044965f - 4510507167940725f - * - e - + - 45 39 33 - - 6036376800443f + 15416903421476909f + 2412807646192304449f - + - 27 21 15 - 3017679923028013705f + 1422320037411955f - 3016560402417843941f - + - 9 3 - - 2414249368183033161f - 16561862361763873f - , - 12 2 - (1387545279120f - 1387545279120)e - + - 43 37 31 - 4321823003f - 11037922310209f - 1727510711947989f - + - 25 19 13 - - 2165150991154425f - 5114342560755f + 2162682824948601f - + - 7 - 1732620732685741f + 13506088516033f - * - e - + - 44 38 32 - 24177661775f - 61749727185325f - 9664106795754225f - + - 26 20 14 - - 12090487758628245f - 8787672733575f + 12083693383005045f - + - 8 2 - 9672870290826025f + 68544102808525f - , - 48 42 36 30 18 12 6 - f - 2554f - 399710f - 499722f + 499722f + 399710f + 2554f - 1] - Type: List NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - -Apply lexTriangular to compute a decomposition into regular triangular sets. -This should not take more than 5 seconds. - - lexTriangular(lg,false)$lextripack - [ - 6 6 5 2 4 3 3 4 2 5 - {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, - 2 5 3 4 4 3 5 2 - 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, - 2 5 3 4 4 3 5 2 - 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, - 2 5 3 4 4 3 5 2 - a - f e + 3f e - 3f e + 4f e + 3e - 3f} - , - 6 2 2 2 - {f - 1,e - f,d - f,c + 4f c + f ,(c - f)b - f c - 5f ,a + b + c + 3f}, - 6 2 2 - {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, - 6 2 2 2 - {f - 1,e - f,d + 4f d + f ,(d - f)c - f d - 5f ,b - f,a + c + d + 3f}, - 36 30 24 18 12 6 - {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, - 12 2 - (161718564f - 161718564)e - + - 31 25 19 13 - - 504205f + 1287737951f + 201539391380f + 253982817368f - + - 7 - 201940704665f + 1574134601f - * - e - + - 32 26 20 14 - - 2818405f + 7198203911f + 1126548149060f + 1416530563364f - + - 8 2 - 1127377589345f + 7988820725f - , - 6 2 5 3 4 - (693772639560f - 693772639560)d - 462515093040f e + 1850060372160f e - + - 4 3 11 5 2 - - 1850060372160f e + (- 24513299931120f - 23588269745040f )e - + - 30 24 18 - - 890810428f + 2275181044754f + 355937263869776f - + - 12 6 - 413736880104344f + 342849304487996f + 3704966481878 - * - e - + - 31 25 19 - - 4163798003f + 10634395752169f + 1664161760192806f - + - 13 7 - 2079424391370694f + 1668153650635921f + 10924274392693f - , - 6 31 25 - (12614047992f - 12614047992)c - 7246825f + 18508536599f - + - 19 13 7 - 2896249516034f + 3581539649666f + 2796477571739f - 48094301893f - , - 6 2 5 3 4 - (693772639560f - 693772639560)b - 925030186080f e + 2312575465200f e - + - 4 3 11 5 2 - - 2312575465200f e + (- 40007555547960f - 35382404617560f )e - + - 30 24 18 - - 3781280823f + 9657492291789f + 1511158913397906f - + - 12 6 - 1837290892286154f + 1487216006594361f + 8077238712093 - * - e - + - 31 25 19 - - 9736390478f + 24866827916734f + 3891495681905296f - + - 13 7 - 4872556418871424f + 3904047887269606f + 27890075838538f - , - a + b + c + d + e + f} - , - 6 2 2 2 - {f - 1,e + 4f e + f ,(e - f)d - f e - 5f ,c - f,b - f,a + d + e + 3f}] - Type: List RegularChain(Integer,[a,b,c,d,e,f]) - -Note that the first set of the decomposition is normalized (all -initials are integer numbers) but not the second one (normalized -triangular sets are defined in the description of the -NormalizedTriangularSetCategory constructor). - -So apply now lexTriangular to produce normalized triangular sets. - - lts := lexTriangular(lg,true)$lextripack - [ - 6 6 5 2 4 3 3 4 2 5 - {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, - 2 5 3 4 4 3 5 2 - 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, - 2 5 3 4 4 3 5 2 - 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, - 2 5 3 4 4 3 5 2 - a - f e + 3f e - 3f e + 4f e + 3e - 3f} - , - 6 2 2 - {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, - 6 2 2 - {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, - 6 2 2 - {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, - 36 30 24 18 12 6 - {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, - 2 - 1387545279120e - + - 31 25 19 - 4321823003f - 11037922310209f - 1727506390124986f - + - 13 7 - - 2176188913464634f - 1732620732685741f - 13506088516033f - * - e - + - 32 26 20 - 24177661775f - 61749727185325f - 9664082618092450f - + - 14 8 2 - - 12152237485813570f - 9672870290826025f - 68544102808525f - , - 1387545279120d - + - 30 24 18 - - 1128983050f + 2883434331830f + 451234998755840f - + - 12 6 - 562426491685760f + 447129055314890f - 165557857270 - * - e - + - 31 25 19 - - 1816935351f + 4640452214013f + 726247129626942f - + - 13 7 - 912871801716798f + 726583262666877f + 4909358645961f - , - 31 25 19 - 1387545279120c + 778171189f - 1987468196267f - 310993556954378f - + - 13 7 - - 383262822316802f - 300335488637543f + 5289595037041f - , - 1387545279120b - + - 30 24 18 - 1128983050f - 2883434331830f - 451234998755840f - + - 12 6 - - 562426491685760f - 447129055314890f + 165557857270 - * - e - + - 31 25 19 - - 3283058841f + 8384938292463f + 1312252817452422f - + - 13 7 - 1646579934064638f + 1306372958656407f + 4694680112151f - , - 31 25 - 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f - + - 19 13 7 - - 1727506390124986f - 2176188913464634f - 1732620732685741f - + - - 13506088516033f - } - , - 6 2 2 - {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] - Type: List RegularChain(Integer,[a,b,c,d,e,f]) - -We check that all initials are constant. - - [ [init(p) for p in (ts :: List(P))] for ts in lts] - [[1,3,1,3,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], [1,1,1,1,1,1], - [1387545279120,1387545279120,1387545279120,1387545279120,1387545279120,1], - [1,1,1,1,1,1]] - Type: List List NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f]) - -Note that each triangular set in lts is a lexicographical Groebner -basis. Recall that a point belongs to the variety associated with lp -if and only if it belongs to that associated with one triangular set -ts in lts. - -By running the squareFreeLexTriangular operation, we retrieve the -above decomposition. - - squareFreeLexTriangular(lg,true)$lextripack - [ - 6 6 5 2 4 3 3 4 2 5 - {f + 1, e - 3f e + 3f e - 4f e + 3f e - 3f e - 1, - 2 5 3 4 4 3 5 2 - 3d + f e - 4f e + 4f e - 2f e - 2e + 2f, c + f, - 2 5 3 4 4 3 5 2 - 3b + 2f e - 5f e + 5f e - 10f e - 4e + 7f, - 2 5 3 4 4 3 5 2 - a - f e + 3f e - 3f e + 4f e + 3e - 3f} - , - 6 2 2 - {f - 1,e - f,d - f,c + 4f c + f ,b + c + 4f,a - f}, - 6 2 2 - {f - 1,e - f,d - f,c - f,b + 4f b + f ,a + b + 4f}, - 6 2 2 - {f - 1,e - f,d + 4f d + f ,c + d + 4f,b - f,a - f}, - 36 30 24 18 12 6 - {f - 2554f - 399709f - 502276f - 399709f - 2554f + 1, - 2 - 1387545279120e - + - 31 25 19 - 4321823003f - 11037922310209f - 1727506390124986f - + - 13 7 - - 2176188913464634f - 1732620732685741f - 13506088516033f - * - e - + - 32 26 20 - 24177661775f - 61749727185325f - 9664082618092450f - + - 14 8 2 - - 12152237485813570f - 9672870290826025f - 68544102808525f - , - 1387545279120d - + - 30 24 18 - - 1128983050f + 2883434331830f + 451234998755840f - + - 12 6 - 562426491685760f + 447129055314890f - 165557857270 - * - e - + - 31 25 19 - - 1816935351f + 4640452214013f + 726247129626942f - + - 13 7 - 912871801716798f + 726583262666877f + 4909358645961f - , - 31 25 19 - 1387545279120c + 778171189f - 1987468196267f - 310993556954378f - + - 13 7 - - 383262822316802f - 300335488637543f + 5289595037041f - , - 1387545279120b - + - 30 24 18 - 1128983050f - 2883434331830f - 451234998755840f - + - 12 6 - - 562426491685760f - 447129055314890f + 165557857270 - * - e - + - 31 25 19 - - 3283058841f + 8384938292463f + 1312252817452422f - + - 13 7 - 1646579934064638f + 1306372958656407f + 4694680112151f - , - 31 25 - 1387545279120a + 1387545279120e + 4321823003f - 11037922310209f - + - 19 13 7 - - 1727506390124986f - 2176188913464634f - 1732620732685741f - + - - 13506088516033f - } - , - 6 2 2 - {f - 1,e + 4f e + f ,d + e + 4f,c - f,b - f,a - f}] - Type: List SquareFreeRegularTriangularSet(Integer, - IndexedExponents OrderedVariableList [a,b,c,d,e,f], - OrderedVariableList [a,b,c,d,e,f], - NewSparseMultivariatePolynomial(Integer, - OrderedVariableList [a,b,c,d,e,f])) - -Thus the solutions given by lts are pairwise different. - -We count them as follows. - - reduce(+,[degree(ts) for ts in lts]) - 156 - Type: PositiveInteger - -We can investigate the triangular decomposition lts by using the -ZeroDimensionalSolvePackage. - -This requires to add an extra variable (smaller than the others) as follows. - - ls2 : List Symbol := concat(ls,new()$Symbol) - [a,b,c,d,e,f,%A] - Type: List Symbol - -Then we call the package. - - zdpack := ZDSOLVE(R,ls,ls2) - (20) ZeroDimensionalSolvePackage(Integer,[a,b,c,d,e,f],[a,b,c,d,e,f,%A]) - Type: Domain - -We compute a univariate representation of the variety associated with -the input system as follows. - - concat [univariateSolve(ts)$zdpack for ts in lts] - [ - 4 2 - [complexRoots= ? - 13? + 49, - coordinates = - 3 3 3 3 - [7a + %A - 6%A, 21b + %A + %A, 21c - 2%A + 19%A, 7d - %A + 6%A, - 3 3 - 21e - %A - %A, 21f + 2%A - 19%A] - ] - , - 4 2 - [complexRoots= ? + 11? + 49, - coordinates = - 3 3 3 - [35a + 3%A + 19%A, 35b + %A + 18%A, 35c - 2%A - %A, - 3 3 3 - 35d - 3%A - 19%A, 35e - %A - 18%A, 35f + 2%A + %A] - ] - , - [ - complexRoots = - 8 7 6 5 4 3 2 - ? - 12? + 58? - 120? + 207? - 360? + 802? - 1332? + 1369 - , - coordinates = - [ - 7 6 5 4 - 43054532a + 33782%A - 546673%A + 3127348%A - 6927123%A - + - 3 2 - 4365212%A - 25086957%A + 39582814%A - 107313172 - , - 7 6 5 4 - 43054532b - 33782%A + 546673%A - 3127348%A + 6927123%A - + - 3 2 - - 4365212%A + 25086957%A - 39582814%A + 107313172 - , - 7 6 5 4 - 21527266c - 22306%A + 263139%A - 1166076%A + 1821805%A - + - 3 2 - - 2892788%A + 10322663%A - 9026596%A + 12950740 - , - 7 6 5 4 - 43054532d + 22306%A - 263139%A + 1166076%A - 1821805%A - + - 3 2 - 2892788%A - 10322663%A + 30553862%A - 12950740 - , - 7 6 5 4 - 43054532e - 22306%A + 263139%A - 1166076%A + 1821805%A - + - 3 2 - - 2892788%A + 10322663%A - 30553862%A + 12950740 - , - 7 6 5 4 - 21527266f + 22306%A - 263139%A + 1166076%A - 1821805%A - + - 3 2 - 2892788%A - 10322663%A + 9026596%A - 12950740 - ] - ] - , - [ - complexRoots = - 8 7 6 5 4 3 2 - ? + 12? + 58? + 120? + 207? + 360? + 802? + 1332? + 1369 - , - coordinates = - [ - 7 6 5 4 - 43054532a + 33782%A + 546673%A + 3127348%A + 6927123%A - + - 3 2 - 4365212%A + 25086957%A + 39582814%A + 107313172 - , - 7 6 5 4 - 43054532b - 33782%A - 546673%A - 3127348%A - 6927123%A - + - 3 2 - - 4365212%A - 25086957%A - 39582814%A - 107313172 - , - 7 6 5 4 - 21527266c - 22306%A - 263139%A - 1166076%A - 1821805%A - + - 3 2 - - 2892788%A - 10322663%A - 9026596%A - 12950740 - , - 7 6 5 4 - 43054532d + 22306%A + 263139%A + 1166076%A + 1821805%A - + - 3 2 - 2892788%A + 10322663%A + 30553862%A + 12950740 - , - 7 6 5 4 - 43054532e - 22306%A - 263139%A - 1166076%A - 1821805%A - + - 3 2 - - 2892788%A - 10322663%A - 30553862%A - 12950740 - , - 7 6 5 4 - 21527266f + 22306%A + 263139%A + 1166076%A + 1821805%A - + - 3 2 - 2892788%A + 10322663%A + 9026596%A + 12950740 - ] - ] - , - 4 2 - [complexRoots= ? - ? + 1, - 3 3 3 3 - coordinates= [a - %A,b + %A - %A,c + %A ,d + %A,e - %A + %A,f - %A ]] - , - 8 6 4 2 - [complexRoots= ? + 4? + 12? + 16? + 4, - coordinates = - 7 5 3 7 5 3 - [4a - 2%A - 7%A - 20%A - 22%A, 4b + 2%A + 7%A + 20%A + 22%A, - 7 5 3 7 5 3 - 4c + %A + 3%A + 10%A + 10%A, 4d + %A + 3%A + 10%A + 6%A, - 7 5 3 7 5 3 - 4e - %A - 3%A - 10%A - 6%A, 4f - %A - 3%A - 10%A - 10%A] - ] - , - 4 3 2 - [complexRoots= ? + 6? + 30? + 36? + 36, - coordinates = - 3 2 3 2 - [30a - %A - 5%A - 30%A - 6, 6b + %A + 5%A + 24%A + 6, - 3 2 3 2 - 30c - %A - 5%A - 6, 30d - %A - 5%A - 30%A - 6, - 3 2 3 2 - 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] - ] - , - 4 3 2 - [complexRoots= ? - 6? + 30? - 36? + 36, - coordinates = - 3 2 3 2 - [30a - %A + 5%A - 30%A + 6, 6b + %A - 5%A + 24%A - 6, - 3 2 3 2 - 30c - %A + 5%A + 6, 30d - %A + 5%A - 30%A + 6, - 3 2 3 2 - 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] - ] - , - 2 - [complexRoots= ? + 6? + 6, - coordinates= [a + 1,b - %A - 5,c + %A + 1,d + 1,e + 1,f + 1]] - , - 2 - [complexRoots= ? - 6? + 6, - coordinates= [a - 1,b - %A + 5,c + %A - 1,d - 1,e - 1,f - 1]] - , - 4 3 2 - [complexRoots= ? + 6? + 30? + 36? + 36, - coordinates = - 3 2 3 2 - [6a + %A + 5%A + 24%A + 6, 30b - %A - 5%A - 6, - 3 2 3 2 - 30c - %A - 5%A - 30%A - 6, 30d - %A - 5%A - 30%A - 6, - 3 2 3 2 - 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] - ] - , - 4 3 2 - [complexRoots= ? - 6? + 30? - 36? + 36, - coordinates = - 3 2 3 2 - [6a + %A - 5%A + 24%A - 6, 30b - %A + 5%A + 6, - 3 2 3 2 - 30c - %A + 5%A - 30%A + 6, 30d - %A + 5%A - 30%A + 6, - 3 2 3 2 - 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] - ] - , - 2 - [complexRoots= ? + 6? + 6, - coordinates= [a - %A - 5,b + %A + 1,c + 1,d + 1,e + 1,f + 1]] - , - 2 - [complexRoots= ? - 6? + 6, - coordinates= [a - %A + 5,b + %A - 1,c - 1,d - 1,e - 1,f - 1]] - , - 4 3 2 - [complexRoots= ? + 6? + 30? + 36? + 36, - coordinates = - 3 2 3 2 - [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, - 3 2 3 2 - 6c + %A + 5%A + 24%A + 6, 30d - %A - 5%A - 6, - 3 2 3 2 - 30e - %A - 5%A - 30%A - 6, 30f - %A - 5%A - 30%A - 6] - ] - , - 4 3 2 - [complexRoots= ? - 6? + 30? - 36? + 36, - coordinates = - 3 2 3 2 - [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, - 3 2 3 2 - 6c + %A - 5%A + 24%A - 6, 30d - %A + 5%A + 6, - 3 2 3 2 - 30e - %A + 5%A - 30%A + 6, 30f - %A + 5%A - 30%A + 6] - ] - , - 2 - [complexRoots= ? + 6? + 6, - coordinates= [a + 1,b + 1,c - %A - 5,d + %A + 1,e + 1,f + 1]] - , - 2 - [complexRoots= ? - 6? + 6, - coordinates= [a - 1,b - 1,c - %A + 5,d + %A - 1,e - 1,f - 1]] - , - 8 7 6 5 4 2 - [complexRoots= ? + 6? + 16? + 24? + 18? - 8? + 4, - coordinates = - 7 6 5 4 3 2 - [2a + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 2%A + 4, - 7 6 5 4 3 2 - 2b + 2%A + 9%A + 18%A + 19%A + 4%A - 10%A - 4%A + 4, - 7 6 5 4 3 - 2c - %A - 4%A - 8%A - 9%A - 4%A - 2%A - 4, - 7 6 5 4 3 - 2d + %A + 4%A + 8%A + 9%A + 4%A + 2%A + 4, - 7 6 5 4 3 2 - 2e - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 4%A - 4, - 7 6 5 4 3 2 - 2f - 2%A - 9%A - 18%A - 19%A - 4%A + 10%A + 2%A - 4] - ] - , - [ - complexRoots = - 8 7 6 5 4 3 2 - ? + 12? + 64? + 192? + 432? + 768? + 1024? + 768? + 256 - , - coordinates = - [ - 7 6 5 4 3 2 - 1408a - 19%A - 200%A - 912%A - 2216%A - 4544%A - 6784%A - + - - 6976%A - 1792 - , - 7 6 5 4 3 2 - 1408b - 37%A - 408%A - 1952%A - 5024%A - 10368%A - 16768%A - + - - 17920%A - 5120 - , - 7 6 5 4 3 2 - 1408c + 37%A + 408%A + 1952%A + 5024%A + 10368%A + 16768%A - + - 17920%A + 5120 - , - 7 6 5 4 3 2 - 1408d + 19%A + 200%A + 912%A + 2216%A + 4544%A + 6784%A - + - 6976%A + 1792 - , - 2e + %A, 2f - %A] - ] - , - 8 6 4 2 - [complexRoots= ? + 4? + 12? + 16? + 4, - coordinates = - 7 5 3 7 5 3 - [4a - %A - 3%A - 10%A - 6%A, 4b - %A - 3%A - 10%A - 10%A, - 7 5 3 7 5 3 - 4c - 2%A - 7%A - 20%A - 22%A, 4d + 2%A + 7%A + 20%A + 22%A, - 7 5 3 7 5 3 - 4e + %A + 3%A + 10%A + 10%A, 4f + %A + 3%A + 10%A + 6%A] - ] - , - 8 6 4 2 - [complexRoots= ? + 16? - 96? + 256? + 256, - coordinates = - 7 5 3 - [512a - %A - 12%A + 176%A - 448%A, - 7 5 3 - 128b - %A - 16%A + 96%A - 256%A, - 7 5 3 - 128c + %A + 16%A - 96%A + 256%A, - 7 5 3 - 512d + %A + 12%A - 176%A + 448%A, 2e + %A, 2f - %A] - ] - , - [ - complexRoots = - 8 7 6 5 4 3 2 - ? - 12? + 64? - 192? + 432? - 768? + 1024? - 768? + 256 - , - coordinates = - [ - 7 6 5 4 3 2 - 1408a - 19%A + 200%A - 912%A + 2216%A - 4544%A + 6784%A - + - - 6976%A + 1792 - , - 7 6 5 4 3 2 - 1408b - 37%A + 408%A - 1952%A + 5024%A - 10368%A + 16768%A - + - - 17920%A + 5120 - , - 7 6 5 4 3 2 - 1408c + 37%A - 408%A + 1952%A - 5024%A + 10368%A - 16768%A - + - 17920%A - 5120 - , - 7 6 5 4 3 2 - 1408d + 19%A - 200%A + 912%A - 2216%A + 4544%A - 6784%A - + - 6976%A - 1792 - , - 2e + %A, 2f - %A] - ] - , - 8 7 6 5 4 2 - [complexRoots= ? - 6? + 16? - 24? + 18? - 8? + 4, - coordinates = - 7 6 5 4 3 2 - [2a + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 2%A - 4, - 7 6 5 4 3 2 - 2b + 2%A - 9%A + 18%A - 19%A + 4%A + 10%A - 4%A - 4, - 7 6 5 4 3 - 2c - %A + 4%A - 8%A + 9%A - 4%A - 2%A + 4, - 7 6 5 4 3 - 2d + %A - 4%A + 8%A - 9%A + 4%A + 2%A - 4, - 7 6 5 4 3 2 - 2e - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 4%A + 4, - 7 6 5 4 3 2 - 2f - 2%A + 9%A - 18%A + 19%A - 4%A - 10%A + 2%A + 4] - ] - , - 4 2 - [complexRoots= ? + 12? + 144, - coordinates = - 2 2 2 2 - [12a - %A - 12, 12b - %A - 12, 12c - %A - 12, 12d - %A - 12, - 2 2 - 6e + %A + 3%A + 12, 6f + %A - 3%A + 12] - ] - , - 4 3 2 - [complexRoots= ? + 6? + 30? + 36? + 36, - coordinates = - 3 2 3 2 - [6a - %A - 5%A - 24%A - 6, 30b + %A + 5%A + 30%A + 6, - 3 2 3 2 - 30c + %A + 5%A + 30%A + 6, 30d + %A + 5%A + 30%A + 6, - 3 2 3 2 - 30e + %A + 5%A + 30%A + 6, 30f + %A + 5%A + 6] - ] - , - 4 3 2 - [complexRoots= ? - 6? + 30? - 36? + 36, - coordinates = - 3 2 3 2 - [6a - %A + 5%A - 24%A + 6, 30b + %A - 5%A + 30%A - 6, - 3 2 3 2 - 30c + %A - 5%A + 30%A - 6, 30d + %A - 5%A + 30%A - 6, - 3 2 3 2 - 30e + %A - 5%A + 30%A - 6, 30f + %A - 5%A - 6] - ] - , - 4 2 - [complexRoots= ? + 12? + 144, - coordinates = - 2 2 2 2 - [12a + %A + 12, 12b + %A + 12, 12c + %A + 12, 12d + %A + 12, - 2 2 - 6e - %A + 3%A - 12, 6f - %A - 3%A - 12] - ] - , - 2 - [complexRoots= ? - 12, - coordinates= [a - 1,b - 1,c - 1,d - 1,2e + %A + 4,2f - %A + 4]] - , - 2 - [complexRoots= ? + 6? + 6, - coordinates= [a + %A + 5,b - 1,c - 1,d - 1,e - 1,f - %A - 1]] - , - 2 - [complexRoots= ? - 6? + 6, - coordinates= [a + %A - 5,b + 1,c + 1,d + 1,e + 1,f - %A + 1]] - , - 2 - [complexRoots= ? - 12, - coordinates= [a + 1,b + 1,c + 1,d + 1,2e + %A - 4,2f - %A - 4]] - , - 4 3 2 - [complexRoots= ? + 6? + 30? + 36? + 36, - coordinates = - 3 2 3 2 - [30a - %A - 5%A - 30%A - 6, 30b - %A - 5%A - 30%A - 6, - 3 2 3 2 - 30c - %A - 5%A - 30%A - 6, 6d + %A + 5%A + 24%A + 6, - 3 2 3 2 - 30e - %A - 5%A - 6, 30f - %A - 5%A - 30%A - 6] - ] - , - 4 3 2 - [complexRoots= ? - 6? + 30? - 36? + 36, - coordinates = - 3 2 3 2 - [30a - %A + 5%A - 30%A + 6, 30b - %A + 5%A - 30%A + 6, - 3 2 3 2 - 30c - %A + 5%A - 30%A + 6, 6d + %A - 5%A + 24%A - 6, - 3 2 3 2 - 30e - %A + 5%A + 6, 30f - %A + 5%A - 30%A + 6] - ] - , - 2 - [complexRoots= ? + 6? + 6, - coordinates= [a + 1,b + 1,c + 1,d - %A - 5,e + %A + 1,f + 1]] - , - 2 - [complexRoots= ? - 6? + 6, - coordinates= [a - 1,b - 1,c - 1,d - %A + 5,e + %A - 1,f - 1]] - ] - Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, - coordinates: List Polynomial Integer) - -Since the univariateSolve operation may split a regular set, it -returns a list. This explains the use of concat. - -Look at the last item of the result. It consists of two parts. For -any complex root ? of the univariate polynomial in the first part, we -get a tuple of univariate polynomials (in a, ...,f respectively) by -replacing %A by ? in the second part. Each of these tuples t -describes a point of the variety associated with lp by equaling to -zero the polynomials in t. - -Note that the way of reading these univariate representations is -explained also in the example illustrating the ZeroDimensionalSolvePackage -constructor. - -Now, we compute the points of the variety with real coordinates. - - concat [realSolve(ts)$zdpack for ts in lts] - [[%B1,%B1,%B1,%B5,- %B5 - 4%B1,%B1], [%B1,%B1,%B1,%B6,- %B6 - 4%B1,%B1], - [%B2,%B2,%B2,%B3,- %B3 - 4%B2,%B2], [%B2,%B2,%B2,%B4,- %B4 - 4%B2,%B2], - [%B7,%B7,%B7,%B7,%B11,- %B11 - 4%B7], [%B7,%B7,%B7,%B7,%B12,- %B12 - 4%B7], - [%B8,%B8,%B8,%B8,%B9,- %B9 - 4%B8], [%B8,%B8,%B8,%B8,%B10,- %B10 - 4%B8], - [%B13,%B13,%B17,- %B17 - 4%B13,%B13,%B13], - [%B13,%B13,%B18,- %B18 - 4%B13,%B13,%B13], - [%B14,%B14,%B15,- %B15 - 4%B14,%B14,%B14], - [%B14,%B14,%B16,- %B16 - 4%B14,%B14,%B14], - [%B19, %B29, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B19 - ---------- %B19 - ----------- %B19 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B19 - ------------- %B19 - ----------- %B19 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B19 + ------------- %B19 + --------------- %B19 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B19 + --------------- %B19 - ------------ %B19 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B19 - ------------- %B19 - --------------- %B19 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B19 - --------------- %B19 - ------------- %B19 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B29 - ------------- %B19 + ------------ %B19 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B19 + ---------------- %B19 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B19 + -------------- %B19 - 1387545279120 1387545279120 - ] - , - [%B19, %B30, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B19 - ---------- %B19 - ----------- %B19 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B19 - ------------- %B19 - ----------- %B19 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B19 + ------------- %B19 + --------------- %B19 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B19 + --------------- %B19 - ------------ %B19 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B19 - ------------- %B19 - --------------- %B19 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B19 - --------------- %B19 - ------------- %B19 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B30 - ------------- %B19 + ------------ %B19 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B19 + ---------------- %B19 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B19 + -------------- %B19 - 1387545279120 1387545279120 - ] - , - [%B20, %B27, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B20 - ---------- %B20 - ----------- %B20 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B20 - ------------- %B20 - ----------- %B20 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B20 + ------------- %B20 + --------------- %B20 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B20 + --------------- %B20 - ------------ %B20 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B20 - ------------- %B20 - --------------- %B20 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B20 - --------------- %B20 - ------------- %B20 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B27 - ------------- %B20 + ------------ %B20 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B20 + ---------------- %B20 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B20 + -------------- %B20 - 1387545279120 1387545279120 - ] - , - [%B20, %B28, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B20 - ---------- %B20 - ----------- %B20 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B20 - ------------- %B20 - ----------- %B20 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B20 + ------------- %B20 + --------------- %B20 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B20 + --------------- %B20 - ------------ %B20 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B20 - ------------- %B20 - --------------- %B20 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B20 - --------------- %B20 - ------------- %B20 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B28 - ------------- %B20 + ------------ %B20 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B20 + ---------------- %B20 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B20 + -------------- %B20 - 1387545279120 1387545279120 - ] - , - [%B21, %B25, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B21 - ---------- %B21 - ----------- %B21 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B21 - ------------- %B21 - ----------- %B21 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B21 + ------------- %B21 + --------------- %B21 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B21 + --------------- %B21 - ------------ %B21 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B21 - ------------- %B21 - --------------- %B21 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B21 - --------------- %B21 - ------------- %B21 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B25 - ------------- %B21 + ------------ %B21 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B21 + ---------------- %B21 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B21 + -------------- %B21 - 1387545279120 1387545279120 - ] - , - [%B21, %B26, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B21 - ---------- %B21 - ----------- %B21 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B21 - ------------- %B21 - ----------- %B21 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B21 + ------------- %B21 + --------------- %B21 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B21 + --------------- %B21 - ------------ %B21 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B21 - ------------- %B21 - --------------- %B21 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B21 - --------------- %B21 - ------------- %B21 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B26 - ------------- %B21 + ------------ %B21 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B21 + ---------------- %B21 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B21 + -------------- %B21 - 1387545279120 1387545279120 - ] - , - [%B22, %B23, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B22 - ---------- %B22 - ----------- %B22 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B22 - ------------- %B22 - ----------- %B22 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B22 + ------------- %B22 + --------------- %B22 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B22 + --------------- %B22 - ------------ %B22 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B22 - ------------- %B22 - --------------- %B22 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B22 - --------------- %B22 - ------------- %B22 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B23 - ------------- %B22 + ------------ %B22 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B22 + ---------------- %B22 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B22 + -------------- %B22 - 1387545279120 1387545279120 - ] - , - [%B22, %B24, - 7865521 31 6696179241 25 25769893181 19 - ---------- %B22 - ---------- %B22 - ----------- %B22 - 6006689520 2002229840 49235160 - + - 1975912990729 13 1048460696489 7 21252634831 - - ------------- %B22 - ------------- %B22 - ----------- %B22 - 3003344760 2002229840 6006689520 - , - 778171189 31 1987468196267 25 155496778477189 19 - - ------------- %B22 + ------------- %B22 + --------------- %B22 - 1387545279120 1387545279120 693772639560 - + - 191631411158401 13 300335488637543 7 755656433863 - --------------- %B22 + --------------- %B22 - ------------ %B22 - 693772639560 1387545279120 198220754160 - , - 1094352947 31 2794979430821 25 218708802908737 19 - ------------ %B22 - ------------- %B22 - --------------- %B22 - 462515093040 462515093040 231257546520 - + - 91476663003591 13 145152550961823 7 1564893370717 - - -------------- %B22 - --------------- %B22 - ------------- %B22 - 77085848840 154171697680 462515093040 - , - 4321823003 31 180949546069 25 - - %B24 - ------------- %B22 + ------------ %B22 - 1387545279120 22746643920 - + - 863753195062493 19 1088094456732317 13 - --------------- %B22 + ---------------- %B22 - 693772639560 693772639560 - + - 1732620732685741 7 13506088516033 - ---------------- %B22 + -------------- %B22 - 1387545279120 1387545279120 - ] - , - [%B31,%B35,- %B35 - 4%B31,%B31,%B31,%B31], - [%B31,%B36,- %B36 - 4%B31,%B31,%B31,%B31], - [%B32,%B33,- %B33 - 4%B32,%B32,%B32,%B32], - [%B32,%B34,- %B34 - 4%B32,%B32,%B32,%B32]] - Type: List List RealClosure Fraction Integer - -We obtain 24 points given by lists of elements in the RealClosure -of Fraction of R. In each list, the first value corresponds -to the indeterminate f, the second to e and so on. - -See Also: -o )help RegularChain -o )help RegularTriangularSet -o )help SquareFreeRegularTriangularSet -o )help ZeroDimensionalSolvePackage -o )help NewSparseMultivariatePolynomial -o )help LinGroebnerPackage -o )help NormalizedTriangularSetCategory -o )help RealClosure -o )help Fraction -o )show LexTriangularPackage -o $AXIOM/doc/src/algebra/zerodim.spad.dvi - -@ -<>= -)abbrev package LEXTRIPK LexTriangularPackage -++ Author: Marc Moreno Maza -++ Date Created: 08/02/1999 -++ Date Last Updated: 08/02/1999 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ Description: -++ A package for solving polynomial systems with finitely many solutions. -++ The decompositions are given by means of regular triangular sets. -++ The computations use lexicographical Groebner bases. -++ The main operations are \axiomOpFrom{lexTriangular}{LexTriangularPackage} -++ and \axiomOpFrom{squareFreeLexTriangular}{LexTriangularPackage}. -++ The second one provide decompositions by means of square-free regular triangular sets. -++ Both are based on the {\em lexTriangular} method described in [1]. -++ They differ from the algorithm described in [2] by the fact that -++ multiciplities of the roots are not kept. -++ With the \axiomOpFrom{squareFreeLexTriangular}{LexTriangularPackage} operation -++ all multiciplities are removed. With the other operation some multiciplities may remain. -++ Both operations admit an optional argument to produce normalized triangular sets. \newline -++ References: \newline -++ [1] D. LAZARD "Solving Zero-dimensional Algebraic Systems" -++ published in the J. of Symbol. Comput. (1992) 13, 117-131.\newline -++ [2] M. MORENO MAZA and R. RIOBOO "Computations of gcd over -++ algebraic towers of simple extensions" In proceedings of AAECC11, Paris, 1995.\newline -++ Version: 2. - -LexTriangularPackage(R,ls): Exports == Implementation where - - R: GcdDomain - ls: List Symbol - V ==> OrderedVariableList ls - E ==> IndexedExponents V - P ==> NewSparseMultivariatePolynomial(R,V) - TS ==> RegularChain(R,ls) - ST ==> SquareFreeRegularTriangularSet(R,E,V,P) - Q1 ==> Polynomial R - PS ==> GeneralPolynomialSet(R,E,V,P) - N ==> NonNegativeInteger - Z ==> Integer - B ==> Boolean - S ==> String - K ==> Fraction R - LP ==> List P - BWTS ==> Record(val : Boolean, tower : TS) - LpWTS ==> Record(val : (List P), tower : TS) - BWST ==> Record(val : Boolean, tower : ST) - LpWST ==> Record(val : (List P), tower : ST) - polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,P) - quasicomppackTS ==> QuasiComponentPackage(R,E,V,P,TS) - regsetgcdpackTS ==> SquareFreeRegularTriangularSetGcdPackage(R,E,V,P,TS) - normalizpackTS ==> NormalizationPackage(R,E,V,P,TS) - quasicomppackST ==> QuasiComponentPackage(R,E,V,P,ST) - regsetgcdpackST ==> SquareFreeRegularTriangularSetGcdPackage(R,E,V,P,ST) - normalizpackST ==> NormalizationPackage(R,E,V,P,ST) - - Exports == with - - zeroDimensional?: LP -> B - ++ \axiom{zeroDimensional?(lp)} returns true iff - ++ \axiom{lp} generates a zero-dimensional ideal - ++ w.r.t. the variables involved in \axiom{lp}. - fglmIfCan: LP -> Union(LP, "failed") - ++ \axiom{fglmIfCan(lp)} returns the lexicographical Groebner - ++ basis of \axiom{lp} by using the {\em FGLM} strategy, - ++ if \axiom{zeroDimensional?(lp)} holds . - groebner: LP -> LP - ++ \axiom{groebner(lp)} returns the lexicographical Groebner - ++ basis of \axiom{lp}. If \axiom{lp} generates a zero-dimensional - ++ ideal then the {\em FGLM} strategy is used, otherwise - ++ the {\em Sugar} strategy is used. - lexTriangular: (LP, B) -> List TS - ++ \axiom{lexTriangular(base, norm?)} decomposes the variety - ++ associated with \axiom{base} into regular chains. - ++ Thus a point belongs to this variety iff it is a regular - ++ zero of a regular set in in the output. - ++ Note that \axiom{base} needs to be a lexicographical Groebner basis - ++ of a zero-dimensional ideal. If \axiom{norm?} is \axiom{true} - ++ then the regular sets are normalized. - squareFreeLexTriangular: (LP, B) -> List ST - ++ \axiom{squareFreeLexTriangular(base, norm?)} decomposes the variety - ++ associated with \axiom{base} into square-free regular chains. - ++ Thus a point belongs to this variety iff it is a regular - ++ zero of a regular set in in the output. - ++ Note that \axiom{base} needs to be a lexicographical Groebner basis - ++ of a zero-dimensional ideal. If \axiom{norm?} is \axiom{true} - ++ then the regular sets are normalized. - zeroSetSplit: (LP, B) -> List TS - ++ \axiom{zeroSetSplit(lp, norm?)} decomposes the variety - ++ associated with \axiom{lp} into regular chains. - ++ Thus a point belongs to this variety iff it is a regular - ++ zero of a regular set in in the output. - ++ Note that \axiom{lp} needs to generate a zero-dimensional ideal. - ++ If \axiom{norm?} is \axiom{true} then the regular sets are normalized. - zeroSetSplit: (LP, B) -> List ST - ++ \axiom{zeroSetSplit(lp, norm?)} decomposes the variety - ++ associated with \axiom{lp} into square-free regular chains. - ++ Thus a point belongs to this variety iff it is a regular - ++ zero of a regular set in in the output. - ++ Note that \axiom{lp} needs to generate a zero-dimensional ideal. - ++ If \axiom{norm?} is \axiom{true} then the regular sets are normalized. - - Implementation == add - - trueVariables(lp: List(P)): List Symbol == - lv: List V := variables([lp]$PS) - truels: List Symbol := [] - for s in ls repeat - if member?(variable(s)::V, lv) then truels := cons(s,truels) - reverse truels - - zeroDimensional?(lp:List(P)): Boolean == - truels: List Symbol := trueVariables(lp) - fglmpack := FGLMIfCanPackage(R,truels) - lq1: List(Q1) := [p::Q1 for p in lp] - zeroDimensional?(lq1)$fglmpack - - fglmIfCan(lp:List(P)): Union(List(P), "failed") == - truels: List Symbol := trueVariables(lp) - fglmpack := FGLMIfCanPackage(R,truels) - lq1: List(Q1) := [p::Q1 for p in lp] - foo := fglmIfCan(lq1)$fglmpack - foo case "failed" => return("failed" :: Union(List(P), "failed")) - lp := [retract(q1)$P for q1 in (foo :: List(Q1))] - lp::Union(List(P), "failed") - - groebner(lp:List(P)): List(P) == - truels: List Symbol := trueVariables(lp) - fglmpack := FGLMIfCanPackage(R,truels) - lq1: List(Q1) := [p::Q1 for p in lp] - lq1 := groebner(lq1)$fglmpack - lp := [retract(q1)$P for q1 in lq1] - - lexTriangular(base: List(P), norm?: Boolean): List(TS) == - base := sort(infRittWu?,base) - base := remove(zero?, base) - any?(ground?, base) => [] - ts: TS := empty() - toSee: List LpWTS := [[base,ts]$LpWTS] - toSave: List TS := [] - while not empty? toSee repeat - lpwt := first toSee; toSee := rest toSee - lp := lpwt.val; ts := lpwt.tower - empty? lp => toSave := cons(ts, toSave) - p := first lp; lp := rest lp; v := mvar(p) - algebraic?(v,ts) => - error "lexTriangular$LEXTRIPK: should never happen !" - norm? and zero? remainder(init(p),ts).polnum => - toSee := cons([lp, ts]$LpWTS, toSee) - (not norm?) and zero? (initiallyReduce(init(p),ts)) => - toSee := cons([lp, ts]$LpWTS, toSee) - lbwt: List BWTS := invertible?(init(p),ts)$TS - while (not empty? lbwt) repeat - bwt := first lbwt; lbwt := rest lbwt - b := bwt.val; us := bwt.tower - (not b) => toSee := cons([lp, us], toSee) - lus: List TS - if norm? - then - newp := normalizedAssociate(p,us)$normalizpackTS - lus := [internalAugment(newp,us)$TS] - else - newp := p - lus := augment(newp,us)$TS - newlp := lp - while (not empty? newlp) and (mvar(first newlp) = v) repeat - newlp := rest newlp - for us in lus repeat - toSee := cons([newlp, us]$LpWTS, toSee) - algebraicSort(toSave)$quasicomppackTS - - zeroSetSplit(lp:List(P), norm?:B): List TS == - bar := fglmIfCan(lp) - bar case "failed" => - error "zeroSetSplit$LEXTRIPK: #1 not zero-dimensional" - lexTriangular(bar::(List P),norm?) - - squareFreeLexTriangular(base: List(P), norm?: Boolean): List(ST) == - base := sort(infRittWu?,base) - base := remove(zero?, base) - any?(ground?, base) => [] - ts: ST := empty() - toSee: List LpWST := [[base,ts]$LpWST] - toSave: List ST := [] - while not empty? toSee repeat - lpwt := first toSee; toSee := rest toSee - lp := lpwt.val; ts := lpwt.tower - empty? lp => toSave := cons(ts, toSave) - p := first lp; lp := rest lp; v := mvar(p) - algebraic?(v,ts) => - error "lexTriangular$LEXTRIPK: should never happen !" - norm? and zero? remainder(init(p),ts).polnum => - toSee := cons([lp, ts]$LpWST, toSee) - (not norm?) and zero? (initiallyReduce(init(p),ts)) => - toSee := cons([lp, ts]$LpWST, toSee) - lbwt: List BWST := invertible?(init(p),ts)$ST - while (not empty? lbwt) repeat - bwt := first lbwt; lbwt := rest lbwt - b := bwt.val; us := bwt.tower - (not b) => toSee := cons([lp, us], toSee) - lus: List ST - if norm? - then - newp := normalizedAssociate(p,us)$normalizpackST - lus := augment(newp,us)$ST - else - lus := augment(p,us)$ST - newlp := lp - while (not empty? newlp) and (mvar(first newlp) = v) repeat - newlp := rest newlp - for us in lus repeat - toSee := cons([newlp, us]$LpWST, toSee) - algebraicSort(toSave)$quasicomppackST - - zeroSetSplit(lp:List(P), norm?:B): List ST == - bar := fglmIfCan(lp) - bar case "failed" => - error "zeroSetSplit$LEXTRIPK: #1 not zero-dimensional" - squareFreeLexTriangular(bar::(List P),norm?) - -@ -\section{package IRURPK InternalRationalUnivariateRepresentationPackage} -<>= -)abbrev package IRURPK InternalRationalUnivariateRepresentationPackage -++ Author: Marc Moreno Maza -++ Date Created: 01/1999 -++ Date Last Updated: 23/01/1999 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ Description: -++ An internal package for computing the rational univariate representation -++ of a zero-dimensional algebraic variety given by a square-free -++ triangular set. -++ The main operation is \axiomOpFrom{rur}{InternalRationalUnivariateRepresentationPackage}. -++ It is based on the {\em generic} algorithm description in [1]. \newline References: -++ [1] D. LAZARD "Solving Zero-dimensional Algebraic Systems" -++ Journal of Symbolic Computation, 1992, 13, 117-131 -++ Version: 1. - -InternalRationalUnivariateRepresentationPackage(R,E,V,P,TS): Exports == Implementation where - R : Join(EuclideanDomain,CharacteristicZero) - E : OrderedAbelianMonoidSup - V : OrderedSet - P : RecursivePolynomialCategory(R,E,V) - TS : SquareFreeRegularTriangularSetCategory(R,E,V,P) - N ==> NonNegativeInteger - Z ==> Integer - B ==> Boolean - LV ==> List V - LP ==> List P - PWT ==> Record(val: P, tower: TS) - LPWT ==> Record(val: LP, tower: TS) - WIP ==> Record(pol: P, gap: Z, tower: TS) - BWT ==> Record(val:Boolean, tower: TS) - polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,P) - normpack ==> NormalizationPackage(R,E,V,P,TS) - - Exports == with - - rur: (TS,B) -> List TS - ++ \spad{rur(ts,univ?)} returns a rational univariate representation - ++ of \spad{ts}. This assumes that the lowest polynomial in \spad{ts} - ++ is a variable \spad{v} which does not occur in the other polynomials - ++ of \spad{ts}. This variable will be used to define the simple - ++ algebraic extension over which these other polynomials will be - ++ rewritten as univariate polynomials with degree one. - ++ If \spad{univ?} is \spad{true} then these polynomials will have - ++ a constant initial. - checkRur: (TS, List TS) -> Boolean - ++ \spad{checkRur(ts,lus)} returns \spad{true} if \spad{lus} - ++ is a rational univariate representation of \spad{ts}. - - Implementation == add - - checkRur(ts: TS, lts: List TS): Boolean == - f0 := last(ts)::P - z := mvar(f0) - ts := collectUpper(ts,z) - dts: N := degree(ts) - lp := parts(ts) - dlts: N := 0 - for us in lts repeat - dlts := dlts + degree(us) - rems := [removeZero(p,us) for p in lp] - not every?(zero?,rems) => - output(us::OutputForm)$OutputPackage - return false - (dts =$N dlts)@Boolean - - convert(p:P,sqfr?:B):TS == - -- if sqfr? ASSUME p is square-free - newts: TS := empty() - sqfr? => internalAugment(p,newts) - p := squareFreePart(p) - internalAugment(p,newts) - - prepareRur(ts: TS): List LPWT == - not purelyAlgebraic?(ts)$TS => - error "rur$IRURPK: #1 is not zero-dimensional" - lp: LP := parts(ts)$TS - lp := sort(infRittWu?,lp) - empty? lp => - error "rur$IRURPK: #1 is empty" - f0 := first lp; lp := rest lp --- not (one?(init(f0)) and one?(mdeg(f0)) and zero?(tail(f0))) => - not ((init(f0) = 1) and (mdeg(f0) = 1) and zero?(tail(f0))) => - error "rur$IRURPK: #1 has no generating root." - empty? lp => - error "rur$IRURPK: #1 has a generating root but no indeterminates" - z: V := mvar(f0) - f1 := first lp; lp := rest lp - x1: V := mvar(f1) - newf1 := x1::P - z::P - toSave: List LPWT := [] - for ff1 in irreducibleFactors([f1])$polsetpack repeat - newf0 := eval(ff1,mvar(f1),f0) - ts := internalAugment(newf1,convert(newf0,true)@TS) - toSave := cons([lp,ts],toSave) - toSave - - makeMonic(z:V,c:P,r:P,ts:TS,s:P,univ?:B): TS == - --ASSUME r is a irreducible univariate polynomial in z - --ASSUME c and s only depends on z and mvar(s) - --ASSUME c and a have main degree 1 - --ASSUME c and s have a constant initial - --ASSUME mvar(ts) < mvar(s) - lp: LP := parts(ts) - lp := sort(infRittWu?,lp) - newts: TS := convert(r,true)@TS - s := remainder(s,newts).polnum - if univ? - then - s := normalizedAssociate(s,newts)$normpack - for p in lp repeat - p := lazyPrem(eval(p,z,c),s) - p := remainder(p,newts).polnum - newts := internalAugment(p,newts) - internalAugment(s,newts) - - next(lambda:Z):Z == - if lambda < 0 then lambda := - lambda + 1 else lambda := - lambda - - makeLinearAndMonic(p: P, xi: V, ts: TS, univ?:B, check?: B, info?: B): List TS == - -- if check? THEN some VERIFICATIONS are performed - -- if info? THEN some INFORMATION is displayed - f0 := last(ts)::P - z: V := mvar(f0) - lambda: Z := 1 - ts := collectUpper(ts,z) - toSee: List WIP := [[f0,lambda,ts]$WIP] - toSave: List TS := [] - while not empty? toSee repeat - wip := first toSee; toSee := rest toSee - (f0, lambda, ts) := (wip.pol, wip.gap, wip.tower) - if check? and ((not univariate?(f0)$polsetpack) or (mvar(f0) ~= z)) - then - output("Bad f0: ")$OutputPackage - output(f0::OutputForm)$OutputPackage - c: P := lambda * xi::P + z::P - f := eval(f0,z,c); q := eval(p,z,c) - prs := subResultantChain(q,f) - r := first prs; prs := rest prs - check? and ((not zero? degree(r,xi)) or (empty? prs)) => - error "rur$IRURPK: should never happen !" - s := first prs; prs := rest prs - check? and (zero? degree(s,xi)) and (empty? prs) => - error "rur$IRURPK: should never happen !!" - if zero? degree(s,xi) then s := first prs --- not one? degree(s,xi) => - not (degree(s,xi) = 1) => - toSee := cons([f0,next(lambda),ts]$WIP,toSee) - h := init(s) - r := squareFreePart(r) - ground?(h) or ground?(gcd(h,r)) => - for fr in irreducibleFactors([r])$polsetpack repeat - ground? fr => "leave" - toSave := cons(makeMonic(z,c,fr,ts,s,univ?),toSave) - if info? - then - output("Unlucky lambda")$OutputPackage - output(h::OutputForm)$OutputPackage - output(r::OutputForm)$OutputPackage - toSee := cons([f0,next(lambda),ts]$WIP,toSee) - toSave - - rur (ts: TS,univ?:Boolean): List TS == - toSee: List LPWT := prepareRur(ts) - toSave: List TS := [] - while not empty? toSee repeat - wip := first toSee; toSee := rest toSee - ts: TS := wip.tower - lp: LP := wip.val - empty? lp => toSave := cons(ts,toSave) - p := first lp; lp := rest lp - xi: V := mvar(p) - p := remainder(p,ts).polnum - if not univ? - then - p := primitivePart stronglyReduce(p,ts) - ground?(p) or (mvar(p) < xi) => - error "rur$IRUROK: should never happen" --- (one? mdeg(p)) and (ground? init(p)) => - (mdeg(p) = 1) and (ground? init(p)) => - ts := internalAugment(p,ts) - wip := [lp,ts] - toSee := cons(wip,toSee) - lts := makeLinearAndMonic(p,xi,ts,univ?,false,false) - for ts in lts repeat - wip := [lp,ts] - toSee := cons(wip,toSee) - toSave - -@ -\section{package RURPK RationalUnivariateRepresentationPackage} -<>= -)abbrev package RURPK RationalUnivariateRepresentationPackage -++ Author: Marc Moreno Maza -++ Date Created: 01/1999 -++ Date Last Updated: 23/01/1999 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Description: -++ A package for computing the rational univariate representation -++ of a zero-dimensional algebraic variety given by a regular -++ triangular set. This package is essentially an interface for the -++ \spadtype{InternalRationalUnivariateRepresentationPackage} constructor. -++ It is used in the \spadtype{ZeroDimensionalSolvePackage} -++ for solving polynomial systems with finitely many solutions. -++ Version: 1. - -RationalUnivariateRepresentationPackage(R,ls): Exports == Implementation where - R : Join(EuclideanDomain,CharacteristicZero) - ls: List Symbol - N ==> NonNegativeInteger - Z ==> Integer - P ==> Polynomial R - LP ==> List P - U ==> SparseUnivariatePolynomial(R) - RUR ==> Record(complexRoots: U, coordinates: LP) - - Exports == with - - rur: (LP,Boolean) -> List RUR - ++ \spad{rur(lp,univ?)} returns a rational univariate representation - ++ of \spad{lp}. This assumes that \spad{lp} defines a regular - ++ triangular \spad{ts} whose associated variety is zero-dimensional - ++ over \spad{R}. \spad{rur(lp,univ?)} returns a list of items - ++ \spad{[u,lc]} where \spad{u} is an irreducible univariate polynomial - ++ and each \spad{c} in \spad{lc} involves two variables: one from \spad{ls}, - ++ called the coordinate of \spad{c}, and an extra variable which - ++ represents any root of \spad{u}. Every root of \spad{u} leads to - ++ a tuple of values for the coordinates of \spad{lc}. Moreover, - ++ a point \spad{x} belongs to the variety associated with \spad{lp} iff - ++ there exists an item \spad{[u,lc]} in \spad{rur(lp,univ?)} and - ++ a root \spad{r} of \spad{u} such that \spad{x} is given by the - ++ tuple of values for the coordinates of \spad{lc} evaluated at \spad{r}. - ++ If \spad{univ?} is \spad{true} then each polynomial \spad{c} - ++ will have a constant leading coefficient w.r.t. its coordinate. - ++ See the example which illustrates the \spadtype{ZeroDimensionalSolvePackage} - ++ package constructor. - rur: (LP) -> List RUR - ++ \spad{rur(lp)} returns the same as \spad{rur(lp,true)} - rur: (LP,Boolean,Boolean) -> List RUR - ++ \spad{rur(lp,univ?,check?)} returns the same as \spad{rur(lp,true)}. - ++ Moreover, if \spad{check?} is \spad{true} then the result is checked. - - Implementation == add - news: Symbol := new()$Symbol - lv: List Symbol := concat(ls,news) - V ==> OrderedVariableList(lv) - Q ==> NewSparseMultivariatePolynomial(R,V) - E ==> IndexedExponents V - TS ==> SquareFreeRegularTriangularSet(R,E,V,Q) - QWT ==> Record(val: Q, tower: TS) - LQWT ==> Record(val: List Q, tower: TS) - polsetpack ==> PolynomialSetUtilitiesPackage(R,E,V,Q) - normpack ==> NormalizationPackage(R,E,V,Q,TS) - rurpack ==> InternalRationalUnivariateRepresentationPackage(R,E,V,Q,TS) - newv: V := variable(news)::V - newq : Q := newv :: Q - - rur(lp: List P, univ?: Boolean, check?: Boolean): List RUR == - lp := remove(zero?,lp) - empty? lp => - error "rur$RURPACK: #1 is empty" - any?(ground?,lp) => - error "rur$RURPACK: #1 is not a triangular set" - ts: TS := [[newq]$(List Q)] - lq: List Q := [] - for p in lp repeat - rif: Union(Q,"failed") := retractIfCan(p)$Q - rif case "failed" => - error "rur$RURPACK: #1 is not a subset of R[ls]" - q: Q := rif::Q - lq := cons(q,lq) - lq := sort(infRittWu?,lq) - toSee: List LQWT := [[lq,ts]$LQWT] - toSave: List TS := [] - while not empty? toSee repeat - lqwt := first toSee; toSee := rest toSee - lq := lqwt.val; ts := lqwt.tower - empty? lq => - -- output(ts::OutputForm)$OutputPackage - toSave := cons(ts,toSave) - q := first lq; lq := rest lq - not (mvar(q) > mvar(ts)) => - error "rur$RURPACK: #1 is not a triangular set" - empty? (rest(ts)::TS) => - lfq := irreducibleFactors([q])$polsetpack - for fq in lfq repeat - newts := internalAugment(fq,ts) - newlq := [remainder(q,newts).polnum for q in lq] - toSee := cons([newlq,newts]$LQWT,toSee) - lsfqwt: List QWT := squareFreePart(q,ts) - for qwt in lsfqwt repeat - q := qwt.val; ts := qwt.tower - if not ground? init(q) - then - q := normalizedAssociate(q,ts)$normpack - newts := internalAugment(q,ts) - newlq := [remainder(q,newts).polnum for q in lq] - toSee := cons([newlq,newts]$LQWT,toSee) - toReturn: List RUR := [] - for ts in toSave repeat - lus := rur(ts,univ?)$rurpack - check? and (not checkRur(ts,lus)$rurpack) => - output("RUR for: ")$OutputPackage - output(ts::OutputForm)$OutputPackage - output("Is: ")$OutputPackage - for us in lus repeat output(us::OutputForm)$OutputPackage - error "rur$RURPACK: bad result with function rur$IRURPK" - for us in lus repeat - g: U := univariate(select(us,newv)::Q)$Q - lc: LP := [convert(q)@P for q in parts(collectUpper(us,newv))] - toReturn := cons([g,lc]$RUR, toReturn) - toReturn - - rur(lp: List P, univ?: Boolean): List RUR == - rur(lp,univ?,false) - - rur(lp: List P): List RUR == rur(lp,true) - -@ -\section{package ZDSOLVE ZeroDimensionalSolvePackage} -Based on triangular decompositions and the {\bf RealClosure} constructor, -the pacakge {\bf ZeroDimensionalSolvePackage} provides operations for -computing symbolically the real or complex roots of polynomial systems -with finitely many solutions. -<>= --- zerodim.spad.pamphlet ZeroDimensionalSolvePackage.input -)spool ZeroDimensionalSolvePackage.output -)set message test on -)set message auto off -)clear all ---S 1 of 28 -R := Integer ---R ---R ---R (1) Integer ---R Type: Domain ---E 1 - ---S 2 of 28 -ls : List Symbol := [x,y,z,t] ---R ---R ---R (2) [x,y,z,t] ---R Type: List Symbol ---E 2 - ---S 3 of 28 -ls2 : List Symbol := [x,y,z,t,new()$Symbol] ---R ---R ---R (3) [x,y,z,t,%A] ---R Type: List Symbol ---E 3 - ---S 4 of 28 -pack := ZDSOLVE(R,ls,ls2) ---R ---R ---R (4) ZeroDimensionalSolvePackage(Integer,[x,y,z,t],[x,y,z,t,%A]) ---R Type: Domain ---E 4 - ---S 5 of 28 -p1 := x**2*y*z + x*y**2*z + x*y*z**2 + x*y*z + x*y + x*z + y*z ---R ---R ---R 2 2 2 ---R (5) x y z + (x y + (x + x + 1)y + x)z + x y ---R Type: Polynomial Integer ---E 5 - ---S 6 of 28 -p2 := x**2*y**2*z + x*y**2*z**2 + x**2*y*z + x*y*z + y*z + x + z ---R ---R ---R 2 2 2 2 2 ---R (6) x y z + (x y + (x + x + 1)y + 1)z + x ---R Type: Polynomial Integer ---E 6 - ---S 7 of 28 -p3 := x**2*y**2*z**2 + x**2*y**2*z + x*y**2*z + x*y*z + x*z + z + 1 ---R ---R ---R 2 2 2 2 2 ---R (7) x y z + ((x + x)y + x y + x + 1)z + 1 ---R Type: Polynomial Integer ---E 7 - ---S 8 of 28 -lp := [p1, p2, p3] ---R ---R ---R (8) ---R 2 2 2 ---R [x y z + (x y + (x + x + 1)y + x)z + x y, ---R 2 2 2 2 2 ---R x y z + (x y + (x + x + 1)y + 1)z + x, ---R 2 2 2 2 2 ---R x y z + ((x + x)y + x y + x + 1)z + 1] ---R Type: List Polynomial Integer ---E 8 - ---S 9 of 28 -triangSolve(lp)$pack ---R ---R ---R (9) ---R [ ---R { ---R 20 19 18 17 16 15 14 13 12 ---R z - 6z - 41z + 71z + 106z + 92z + 197z + 145z + 257z ---R + ---R 11 10 9 8 7 6 5 4 3 ---R 278z + 201z + 278z + 257z + 145z + 197z + 92z + 106z + 71z ---R + ---R 2 ---R - 41z - 6z + 1 ---R , ---R ---R 19 18 17 16 ---R 14745844z + 50357474z - 130948857z - 185261586z ---R + ---R 15 14 13 12 ---R - 180077775z - 338007307z - 275379623z - 453190404z ---R + ---R 11 10 9 8 ---R - 474597456z - 366147695z - 481433567z - 430613166z ---R + ---R 7 6 5 4 ---R - 261878358z - 326073537z - 163008796z - 177213227z ---R + ---R 3 2 ---R - 104356755z + 65241699z + 9237732z - 1567348 ---R * ---R y ---R + ---R 19 18 17 16 15 ---R 1917314z + 6508991z - 16973165z - 24000259z - 23349192z ---R + ---R 14 13 12 11 10 ---R - 43786426z - 35696474z - 58724172z - 61480792z - 47452440z ---R + ---R 9 8 7 6 5 ---R - 62378085z - 55776527z - 33940618z - 42233406z - 21122875z ---R + ---R 4 3 2 ---R - 22958177z - 13504569z + 8448317z + 1195888z - 202934 ---R , ---R 3 2 3 2 2 2 ---R ((z - 2z)y + (- z - z - 2z - 1)y - z - z + 1)x + z - 1} ---R ] ---R Type: List RegularChain(Integer,[x,y,z,t]) ---E 9 - ---S 10 of 28 -univariateSolve(lp)$pack ---R ---R ---R (10) ---R [ ---R [ ---R complexRoots = ---R 12 11 10 9 8 7 6 5 4 3 ---R ? - 12? + 24? + 4? - 9? + 27? - 21? + 27? - 9? + 4? ---R + ---R 2 ---R 24? - 12? + 1 ---R , ---R ---R coordinates = ---R [ ---R 11 10 9 8 7 6 ---R 63x + 62%A - 721%A + 1220%A + 705%A - 285%A + 1512%A ---R + ---R 5 4 3 2 ---R - 735%A + 1401%A - 21%A + 215%A + 1577%A - 142 ---R , ---R ---R 11 10 9 8 7 6 ---R 63y - 75%A + 890%A - 1682%A - 516%A + 588%A - 1953%A ---R + ---R 5 4 3 2 ---R 1323%A - 1815%A + 426%A - 243%A - 1801%A + 679 ---R , ---R z - %A] ---R ] ---R , ---R ---R 6 5 4 3 2 ---R [complexRoots= ? + ? + ? + ? + ? + ? + 1, ---R 5 3 ---R coordinates= [x - %A ,y - %A ,z - %A]] ---R , ---R 2 ---R [complexRoots= ? + 5? + 1,coordinates= [x - 1,y - 1,z - %A]]] ---RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) ---E 10 - ---S 11 of 28 -lr := realSolve(lp)$pack ---R ---R ---R (11) ---R [ ---R [%B1, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B1 - ------- %B1 - ------- %B1 + -------- %B1 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B1 + -------- %B1 + ------ %B1 + --------- %B1 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B1 + --------- %B1 + --------- %B1 + --------- %B1 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B1 + ------- %B1 + ------ %B1 + ------- %B1 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B1 + -------- %B1 - ---- %B1 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B1 + ------ %B1 + ------- %B1 - ------- %B1 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B1 - -------- %B1 - -------- %B1 - ------ %B1 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B1 - -------- %B1 - -------- %B1 - ------- %B1 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B1 - -------- %B1 - -------- %B1 - -------- %B1 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B1 - -------- %B1 - ------- %B1 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B2, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B2 - ------- %B2 - ------- %B2 + -------- %B2 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B2 + -------- %B2 + ------ %B2 + --------- %B2 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B2 + --------- %B2 + --------- %B2 + --------- %B2 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B2 + ------- %B2 + ------ %B2 + ------- %B2 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B2 + -------- %B2 - ---- %B2 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B2 + ------ %B2 + ------- %B2 - ------- %B2 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B2 - -------- %B2 - -------- %B2 - ------ %B2 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B2 - -------- %B2 - -------- %B2 - ------- %B2 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B2 - -------- %B2 - -------- %B2 - -------- %B2 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B2 - -------- %B2 - ------- %B2 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B3, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B3 - ------- %B3 - ------- %B3 + -------- %B3 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B3 + -------- %B3 + ------ %B3 + --------- %B3 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B3 + --------- %B3 + --------- %B3 + --------- %B3 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B3 + ------- %B3 + ------ %B3 + ------- %B3 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B3 + -------- %B3 - ---- %B3 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B3 + ------ %B3 + ------- %B3 - ------- %B3 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B3 - -------- %B3 - -------- %B3 - ------ %B3 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B3 - -------- %B3 - -------- %B3 - ------- %B3 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B3 - -------- %B3 - -------- %B3 - -------- %B3 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B3 - -------- %B3 - ------- %B3 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B4, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B4 - ------- %B4 - ------- %B4 + -------- %B4 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B4 + -------- %B4 + ------ %B4 + --------- %B4 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B4 + --------- %B4 + --------- %B4 + --------- %B4 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B4 + ------- %B4 + ------ %B4 + ------- %B4 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B4 + -------- %B4 - ---- %B4 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B4 + ------ %B4 + ------- %B4 - ------- %B4 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B4 - -------- %B4 - -------- %B4 - ------ %B4 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B4 - -------- %B4 - -------- %B4 - ------- %B4 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B4 - -------- %B4 - -------- %B4 - -------- %B4 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B4 - -------- %B4 - ------- %B4 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B5, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B5 - ------- %B5 - ------- %B5 + -------- %B5 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B5 + -------- %B5 + ------ %B5 + --------- %B5 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B5 + --------- %B5 + --------- %B5 + --------- %B5 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B5 + ------- %B5 + ------ %B5 + ------- %B5 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B5 + -------- %B5 - ---- %B5 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B5 + ------ %B5 + ------- %B5 - ------- %B5 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B5 - -------- %B5 - -------- %B5 - ------ %B5 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B5 - -------- %B5 - -------- %B5 - ------- %B5 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B5 - -------- %B5 - -------- %B5 - -------- %B5 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B5 - -------- %B5 - ------- %B5 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B6, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B6 - ------- %B6 - ------- %B6 + -------- %B6 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B6 + -------- %B6 + ------ %B6 + --------- %B6 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B6 + --------- %B6 + --------- %B6 + --------- %B6 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B6 + ------- %B6 + ------ %B6 + ------- %B6 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B6 + -------- %B6 - ---- %B6 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B6 + ------ %B6 + ------- %B6 - ------- %B6 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B6 - -------- %B6 - -------- %B6 - ------ %B6 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B6 - -------- %B6 - -------- %B6 - ------- %B6 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B6 - -------- %B6 - -------- %B6 - -------- %B6 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B6 - -------- %B6 - ------- %B6 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B7, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B7 - ------- %B7 - ------- %B7 + -------- %B7 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B7 + -------- %B7 + ------ %B7 + --------- %B7 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B7 + --------- %B7 + --------- %B7 + --------- %B7 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B7 + ------- %B7 + ------ %B7 + ------- %B7 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B7 + -------- %B7 - ---- %B7 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B7 + ------ %B7 + ------- %B7 - ------- %B7 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B7 - -------- %B7 - -------- %B7 - ------ %B7 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B7 - -------- %B7 - -------- %B7 - ------- %B7 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B7 - -------- %B7 - -------- %B7 - -------- %B7 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B7 - -------- %B7 - ------- %B7 + ------ ---R 26117 705159 705159 705159 ---R ] ---R , ---R ---R [%B8, ---R ---R 1184459 19 2335702 18 5460230 17 79900378 16 ---R ------- %B8 - ------- %B8 - ------- %B8 + -------- %B8 ---R 1645371 548457 182819 1645371 ---R + ---R 43953929 15 13420192 14 553986 13 193381378 12 ---R -------- %B8 + -------- %B8 + ------ %B8 + --------- %B8 ---R 548457 182819 3731 1645371 ---R + ---R 35978916 11 358660781 10 271667666 9 118784873 8 ---R -------- %B8 + --------- %B8 + --------- %B8 + --------- %B8 ---R 182819 1645371 1645371 548457 ---R + ---R 337505020 7 1389370 6 688291 5 3378002 4 ---R --------- %B8 + ------- %B8 + ------ %B8 + ------- %B8 ---R 1645371 11193 4459 42189 ---R + ---R 140671876 3 32325724 2 8270 9741532 ---R --------- %B8 + -------- %B8 - ---- %B8 - ------- ---R 1645371 548457 343 1645371 ---R , ---R ---R 91729 19 487915 18 4114333 17 1276987 16 ---R - ------ %B8 + ------ %B8 + ------- %B8 - ------- %B8 ---R 705159 705159 705159 235053 ---R + ---R 13243117 15 16292173 14 26536060 13 722714 12 ---R - -------- %B8 - -------- %B8 - -------- %B8 - ------ %B8 ---R 705159 705159 705159 18081 ---R + ---R 5382578 11 15449995 10 14279770 9 6603890 8 ---R - ------- %B8 - -------- %B8 - -------- %B8 - ------- %B8 ---R 100737 235053 235053 100737 ---R + ---R 409930 7 37340389 6 34893715 5 26686318 4 ---R - ------ %B8 - -------- %B8 - -------- %B8 - -------- %B8 ---R 6027 705159 705159 705159 ---R + ---R 801511 3 17206178 2 4406102 377534 ---R - ------ %B8 - -------- %B8 - ------- %B8 + ------ ---R 26117 705159 705159 705159 ---R ] ---R ] ---R Type: List List RealClosure Fraction Integer ---E 11 - ---S 12 of 28 -# lr ---R ---R ---R (12) 8 ---R Type: PositiveInteger ---E 12 - ---S 13 of 28 -[ [approximate(r,1/1000000) for r in point] for point in lr] ---R ---R ---R (13) ---R [ ---R 10048059 ---R [- --------, ---R 2097152 ---R ---R 4503057316985387943524397913838966414596731976211768219335881208385516_ ---R 314058924567176091423629695777403099833360761048898228916578137094309_ ---R 838597331137202584846939132376157019506760357601165917454986815382098_ ---R 789094851523420392811293126141329856546977145464661495487825919941188_ ---R 447041722440491921567263542158028061437758844364634410045253024786561_ ---R 923163288214175 ---R / ---R 4503057283025245488516511806985826635083100693757320465280554706865644_ ---R 949577509916867201889438090408354817931718593862797624551518983570793_ ---R 048774424291488708829840324189200301436123314860200821443733790755311_ ---R 243632919864895421704228949571290016119498807957023663865443069392027_ ---R 148979688266712323356043491523434068924275280417338574817381189277066_ ---R 143312396681216 ---R , ---R ---R 2106260768823475073894798680486016596249607148690685538763683715020639_ ---R 680858649650790055889505646893309447097099937802187329095325898785247_ ---R 249020717504983660482075156618738724514685333060011202964635166381351_ ---R 543255982200250305283981086837110614842307026091211297929876896285681_ ---R 830479054760056380762664905618462055306047816191782011588703789138988_ ---R 1895 ---R / ---R 2106260609498464192472113804816474175341962953296434102413903142368757_ ---R 967685273888585590975965211778862189872881953943640246297357061959812_ ---R 326103659799025126863258676567202342106877031710184247484181423288921_ ---R 837681237062708470295706218485928867400771937828499200923760593314168_ ---R 901000666373896347598118228556731037072026474496776228383762993923280_ ---R 0768 ---R ] ---R , ---R ---R 2563013 ---R [- -------, ---R 2097152 ---R ---R - ---R 2611346176791927789698617693237757719238259963063541781922752330440_ ---R 189899668072928338490768623593207442125925986733815932243504809294_ ---R 837523030237337236806668167446173001727271353311571242897 ---R / ---R 1165225400505222530583981916004589143757226610276858990008790134819_ ---R 914940922413753983971394019523433320408139928153188829495755455163_ ---R 963417619308395977544797140231469234269034921938055593984 ---R , ---R ---R 3572594550275917221096588729615788272998517054675603239578198141006034_ ---R 091735282826590621902304466963941971038923304526273329316373757450061_ ---R 9789892286110976997087250466235373 ---R / ---R 1039548269345598936877071244834026055800814551120170592200522366591759_ ---R 409659486442339141029452950265179989960104811875822530205346505131581_ ---R 2439017247289173865014702966308864 ---R ] ---R , ---R ---R 1715967 ---R [- -------, ---R 2097152 ---R ---R - ---R 4213093533784303521084839517977082390377261503969586224828998436606_ ---R 030656076359374564813773498376603121267822565801436206939519951465_ ---R 18222580524697287410022543952491 ---R / ---R 9441814144185374458649692034349224052436597470966253663930641960795_ ---R 805882585493199840191699917659443264824641135187383583888147867340_ ---R 19307857605820364195856822304768 ---R , ---R ---R 7635833347112644222515625424410831225347475669008589338834162172501904_ ---R 994376346730876809042845208919919925302105720971453918982731389072591_ ---R 4035 ---R / ---R 2624188764086097199784297610478066633934230467895851602278580978503784_ ---R 549205788499019640602266966026891580103543567625039018629887141284916_ ---R 75648 ---R ] ---R , ---R ---R 437701 ---R [- -------, ---R 2097152 ---R ---R 1683106908638349588322172332654225913562986313181951031452750161441497_ ---R 473455328150721364868355579646781603507777199075077835213366484533654_ ---R 91383623741304759 ---R / ---R 1683106868095213389001709982705913638963077668731226111167785188004907_ ---R 425226298680325887810962614140298597366984264887998908377068799998454_ ---R 23381649008099328 ---R , ---R ---R 4961550109835010186422681013422108735958714801003760639707968096646912_ ---R 82670847283444311723917219104249213450966312411133 ---R / ---R 4961549872757738315509192078210209029852897118611097126236384040829376_ ---R 59261914313170254867464792718363492160482442215424 ---R ] ---R , ---R ---R 222801 ---R [-------, ---R 2097152 ---R ---R - ---R 8994884880402428265107595121970691427136045692541978275573001865213_ ---R 759921588137716696126349101655220195142994932299137183241705867672_ ---R 383477 ---R / ---R 1167889998665026372177765100691888582708969960229934769690835752457_ ---R 077779416435209473767866507769405888942764587718542434255625992456_ ---R 372224 ---R , ---R ---R - ---R 2389704888133156878320801544373808395612771509208491019847452991885_ ---R 509546519525467839016613593999693886640036283570552321155037871291_ ---R 458703265 ---R / ---R 5355487273645096326090403286689931905988225444685411433221593833681_ ---R 192957562833671468654290340746993656285925599117602120446183443145_ ---R 479421952 ---R ] ---R , ---R ---R 765693 ---R [-------, ---R 2097152 ---R ---R 8558969219816716267873244761178198088724698958616670140213765754322002_ ---R 303251685786118678330840203328837654339523418704917749518340772512899_ ---R 000391009630373148561 ---R / ---R 2941442445533010790976428411376393499815580215945856917906452535495723_ ---R 013856818941702330228779890141296236721138154231997238917322156711965_ ---R 2444639331719460159488 ---R , ---R ---R - ---R 2057618230582572101247650324860242561111302581543588808843923662767_ ---R 549382241659362712290777612800192921420574408948085193743688582762_ ---R 2246433251878894899015 ---R / ---R 2671598203325735538097952353501450220576313759890835097091722520642_ ---R 710198771902667183948906289863714759678360292483949204616471537777_ ---R 775324180661095366656 ---R ] ---R , ---R ---R 5743879 ---R [-------, ---R 2097152 ---R ---R 1076288816968906847955546394773570208171456724942618614023663123574768_ ---R 960850434263971398072546592772662158833449797698617455397887562900072_ ---R 984768000608343553189801693408727205047612559889232757563830528688953_ ---R 535421809482771058917542602890060941949620874083007858366669453501766_ ---R 24841488732463225 ---R / ---R 3131768957080317946648461940023552044190376613458584986228549631916196_ ---R 601616219781765615532532294746529648276430583810894079374566460757823_ ---R 146888581195556029208515218838883200318658407469399426063260589828612_ ---R 309231596669129707986481319851571942927230340622934023923486703042068_ ---R 1530440845099008 ---R , ---R ---R - ---R 2113286699185750918364120475565458437870172489865485994389828135335_ ---R 264444665284557526492734931691731407872701432935503473348172076098_ ---R 720545849008780077564160534317894688366119529739980502944162668550_ ---R 098127961950496210221942878089359674925850594427768502251789758706_ ---R 752831632503615 ---R / ---R 1627615584937987580242906624347104580889144466168459718043153839408_ ---R 372525533309808070363699585502216011211087103263609551026027769414_ ---R 087391148126221168139781682587438075322591466131939975457200522349_ ---R 838568964285634448018562038272378787354460106106141518010935617205_ ---R 1706396253618176 ---R ] ---R , ---R ---R 19739877 ---R [--------, ---R 2097152 ---R ---R - ---R 2997249936832703303799015804861520949215040387500707177701285766720_ ---R 192530579422478953566024359860143101547801638082771611160372212874_ ---R 847778035809872843149225484238365858013629341705321702582333350918_ ---R 009601789937023985935304900460493389873837030853410347089908880814_ ---R 853981132018464582458800615394770741699487295875960210750215891948_ ---R 814476854871031530931295467332190133702671098200902282300510751860_ ---R 7185928457030277807397796525813862762239286996106809728023675 ---R / ---R 2308433274852278590728910081191811023906504141321432646123936794873_ ---R 933319270608960702138193417647898360620229519176632937631786851455_ ---R 014766027206259022252505551741823688896883806636602574431760472240_ ---R 292093196729475160247268834121141893318848728661844434927287285112_ ---R 897080767552864895056585864033178565910387065006112801516403522741_ ---R 037360990556054476949527059227070809593049491257519554708879259595_ ---R 52929920110858560812556635485429471554031675979542656381353984 ---R , ---R ---R - ---R 5128189263548228489096276397868940080600938410663080459407966335845_ ---R 009264109490520459825316250084723010047035024497436523038925818959_ ---R 289312931584701353927621435434398674263047293909122850133851990696_ ---R 490231566094371994333795070782624011727587749989296611277318372294_ ---R 624207116537910436554574146082884701305543912620419354885410735940_ ---R 157775896602822364575864611831512943973974715166920465061850603762_ ---R 87516256195847052412587282839139194642913955 ---R / ---R 2288281939778439330531208793181290471183631092455368990386390824243_ ---R 509463644236249773080647438987739144921607794682653851741189091711_ ---R 741868145114978337284191822497675868358729486644730856622552687209_ ---R 203724411800481405702837198310642291275676195774614443815996713502_ ---R 629391749783590041470860127752372996488627742672487622480063268808_ ---R 889324891850842494934347337603075939980268208482904859678177751444_ ---R 65749979827872616963053217673201717237252096 ---R ] ---R ] ---R Type: List List Fraction Integer ---E 13 - ---S 14 of 28 -lpr := positiveSolve(lp)$pack ---R ---R ---R (14) [] ---R Type: List List RealClosure Fraction Integer ---E 14 - ---S 15 of 28 -f0 := x**3 + y + z + t- 1 ---R ---R ---R 3 ---R (15) z + y + x + t - 1 ---R Type: Polynomial Integer ---E 15 - ---S 16 of 28 -f1 := x + y**3 + z + t -1 ---R ---R ---R 3 ---R (16) z + y + x + t - 1 ---R Type: Polynomial Integer ---E 16 - ---S 17 of 28 -f2 := x + y + z**3 + t-1 ---R ---R ---R 3 ---R (17) z + y + x + t - 1 ---R Type: Polynomial Integer ---E 17 - ---S 18 of 28 -f3 := x + y + z + t**3 -1 ---R ---R ---R 3 ---R (18) z + y + x + t - 1 ---R Type: Polynomial Integer ---E 18 - ---S 19 of 28 -lf := [f0, f1, f2, f3] ---R ---R ---R (19) ---R 3 3 3 3 ---R [z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1] ---R Type: List Polynomial Integer ---E 19 - ---S 20 of 28 -lts := triangSolve(lf)$pack ---R ---R ---R (20) ---R [ ---R 2 3 3 ---R {t + t + 1, z - z - t + t, ---R ---R 3 2 2 3 6 3 3 2 ---R (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z ---R + ---R 6 3 9 6 3 ---R (3t - 6t + 3)z + t - 3t + 5t - 3t ---R , ---R x + y + z} ---R , ---R ---R 16 13 10 7 4 2 ---R {t - 6t + 9t + 4t + 15t - 54t + 27, ---R ---R 15 14 13 12 11 ---R 4907232t + 40893984t - 115013088t + 22805712t + 36330336t ---R + ---R 10 9 8 7 ---R 162959040t - 159859440t - 156802608t + 117168768t ---R + ---R 6 5 4 3 ---R 126282384t - 129351600t + 306646992t + 475302816t ---R + ---R 2 ---R - 1006837776t - 237269088t + 480716208 ---R * ---R z ---R + ---R 54 51 48 46 45 43 42 ---R 48t - 912t + 8232t - 72t - 46848t + 1152t + 186324t ---R + ---R 40 39 38 37 36 35 ---R - 3780t - 543144t - 3168t - 21384t + 1175251t + 41184t ---R + ---R 34 33 32 31 30 ---R 278003t - 1843242t - 301815t - 1440726t + 1912012t ---R + ---R 29 28 27 26 25 ---R 1442826t + 4696262t - 922481t - 4816188t - 10583524t ---R + ---R 24 23 22 21 20 ---R - 208751t + 11472138t + 16762859t - 857663t - 19328175t ---R + ---R 19 18 17 16 15 ---R - 18270421t + 4914903t + 22483044t + 12926517t - 8605511t ---R + ---R 14 13 12 11 10 ---R - 17455518t - 5014597t + 8108814t + 8465535t + 190542t ---R + ---R 9 8 7 6 5 4 ---R - 4305624t - 2226123t + 661905t + 1169775t + 226260t - 209952t ---R + ---R 3 ---R - 141183t + 27216t ---R , ---R ---R 3 2 2 3 6 3 3 2 ---R (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z ---R + ---R 6 3 9 6 3 ---R (3t - 6t + 3)z + t - 3t + 5t - 3t ---R , ---R 3 ---R x + y + z + t - 1} ---R , ---R 2 2 2 ---R {t,z - 1,y - 1,x + y}, {t - 1,z,y - 1,x + y}, {t - 1,z - 1,z y + 1,x}, ---R ---R 16 13 10 7 4 2 ---R {t - 6t + 9t + 4t + 15t - 54t + 27, ---R ---R 29 28 27 26 25 ---R 4907232t + 40893984t - 115013088t - 1730448t - 168139584t ---R + ---R 24 23 22 21 ---R 738024480t - 195372288t + 315849456t - 2567279232t ---R + ---R 20 19 18 17 ---R 937147968t + 1026357696t + 4780488240t - 2893767696t ---R + ---R 16 15 14 13 ---R - 5617160352t - 3427651728t + 5001100848t + 8720098416t ---R + ---R 12 11 10 9 ---R 2331732960t - 499046544t - 16243306272t - 9748123200t ---R + ---R 8 7 6 5 ---R 3927244320t + 25257280896t + 10348032096t - 17128672128t ---R + ---R 4 3 2 ---R - 14755488768t + 544086720t + 10848188736t + 1423614528t ---R + ---R - 2884297248 ---R * ---R z ---R + ---R 68 65 62 60 59 57 56 ---R - 48t + 1152t - 13560t + 360t + 103656t - 7560t - 572820t ---R + ---R 54 53 52 51 50 49 ---R 71316t + 2414556t + 2736t - 402876t - 7985131t - 49248t ---R + ---R 48 47 46 45 44 ---R 1431133t + 20977409t + 521487t - 2697635t - 43763654t ---R + ---R 43 42 41 40 39 ---R - 3756573t - 2093410t + 71546495t + 19699032t + 35025028t ---R + ---R 38 37 36 35 34 ---R - 89623786t - 77798760t - 138654191t + 87596128t + 235642497t ---R + ---R 33 32 31 30 29 ---R 349607642t - 93299834t - 551563167t - 630995176t + 186818962t ---R + ---R 28 27 26 25 ---R 995427468t + 828416204t - 393919231t - 1076617485t ---R + ---R 24 23 22 21 ---R - 1609479791t + 595738126t + 1198787136t + 4342832069t ---R + ---R 20 19 18 17 ---R - 2075938757t - 4390835799t - 4822843033t + 6932747678t ---R + ---R 16 15 14 13 ---R 6172196808t + 1141517740t - 4981677585t - 9819815280t ---R + ---R 12 11 10 9 ---R - 7404299976t - 157295760t + 29124027630t + 14856038208t ---R + ---R 8 7 6 5 ---R - 16184101410t - 26935440354t - 3574164258t + 10271338974t ---R + ---R 4 3 2 ---R 11191425264t + 6869861262t - 9780477840t - 3586674168t + 2884297248 ---R , ---R ---R 3 3 2 6 3 9 6 3 ---R (3z + (6t - 6)z + (6t - 12t + 3)z + 2t - 6t + t + 3t)y ---R + ---R 3 3 6 3 2 9 6 3 12 9 ---R (3t - 3)z + (6t - 12t + 6)z + (4t - 12t + 11t - 3)z + t - 4t ---R + ---R 6 3 ---R 5t - 2t ---R , ---R 3 ---R x + y + z + t - 1} ---R , ---R 2 ---R {t - 1,z - 1,y,x + z}, ---R ---R 8 7 6 5 4 3 2 ---R {t + t + t - 2t - 2t - 2t + 19t + 19t - 8, ---R ---R 7 6 5 4 3 ---R 2395770t + 3934440t - 3902067t - 10084164t - 1010448t ---R + ---R 2 ---R 32386932t + 22413225t - 10432368 ---R * ---R z ---R + ---R 7 6 5 4 3 ---R - 463519t + 3586833t + 9494955t - 8539305t - 33283098t ---R + ---R 2 ---R 35479377t + 46263256t - 17419896 ---R , ---R ---R 4 3 3 6 3 2 3 ---R 3z + (9t - 9)z + (12t - 24t + 9)z + (- 152t + 219t - 67)z ---R + ---R 6 4 3 ---R - 41t + 57t + 25t - 57t + 16 ---R * ---R y ---R + ---R 3 4 6 3 3 3 2 ---R (3t - 3)z + (9t - 18t + 9)z + (- 181t + 270t - 89)z ---R + ---R 6 4 3 7 6 4 3 ---R (- 92t + 135t + 49t - 135t + 43)z + 27t - 27t - 54t + 396t ---R + ---R - 486t + 144 ---R , ---R 3 ---R x + y + z + t - 1} ---R , ---R 3 ---R {t,z - t + 1,y - 1,x - 1}, {t - 1,z,y,x}, {t,z - 1,y,x}, {t,z,y - 1,x}, ---R {t,z,y,x - 1}] ---R Type: List RegularChain(Integer,[x,y,z,t]) ---E 20 - ---S 21 of 28 -univariateSolve(lf)$pack ---R ---R ---R (21) ---R [[complexRoots= ?,coordinates= [x - 1,y - 1,z + 1,t - %A]], ---R [complexRoots= ?,coordinates= [x,y - 1,z,t - %A]], ---R [complexRoots= ? - 1,coordinates= [x,y,z,t - %A]], ---R [complexRoots= ?,coordinates= [x - 1,y,z,t - %A]], ---R [complexRoots= ?,coordinates= [x,y,z - 1,t - %A]], ---R [complexRoots= ? - 2,coordinates= [x - 1,y + 1,z,t - 1]], ---R [complexRoots= ?,coordinates= [x + 1,y - 1,z,t - 1]], ---R [complexRoots= ? - 1,coordinates= [x - 1,y + 1,z - 1,t]], ---R [complexRoots= ? + 1,coordinates= [x + 1,y - 1,z - 1,t]], ---R ---R 6 3 2 ---R [complexRoots= ? - 2? + 3? - 3, ---R 3 3 ---R coordinates= [2x + %A + %A - 1,2y + %A + %A - 1,z - %A,t - %A]] ---R , ---R ---R 5 3 2 ---R [complexRoots= ? + 3? - 2? + 3? - 3, ---R 3 ---R coordinates= [x - %A,y - %A,z + %A + 2%A - 1,t - %A]] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - ? - 2? + 3, ---R 3 3 3 ---R coordinates= [x + %A - %A - 1,y + %A - %A - 1,z - %A + 2%A + 1,t - %A]] ---R , ---R [complexRoots= ? + 1,coordinates= [x - 1,y - 1,z,t - %A]], ---R ---R 6 3 2 ---R [complexRoots= ? + 2? + 3? - 3, ---R 3 3 ---R coordinates= [2x - %A - %A - 1,y + %A,2z - %A - %A - 1,t + %A]] ---R , ---R ---R 6 4 3 2 ---R [complexRoots= ? + 12? + 20? - 45? - 42? - 953, ---R ---R coordinates = ---R 5 4 3 2 ---R [12609x + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239, ---R 5 4 3 2 ---R 25218y + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, ---R 5 4 3 2 ---R 25218z + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, ---R 5 4 3 2 ---R 12609t + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239] ---R ] ---R , ---R ---R 5 3 2 ---R [complexRoots= ? + 12? - 16? + 48? - 96, ---R 3 ---R coordinates= [8x + %A + 8%A - 8,2y - %A,2z - %A,2t - %A]] ---R , ---R ---R 5 4 3 2 ---R [complexRoots= ? + ? - 5? - 3? + 9? + 3, ---R ---R coordinates = ---R 3 3 3 ---R [2x - %A + 2%A - 1, 2y + %A - 4%A + 1, 2z - %A + 2%A - 1, ---R 3 ---R 2t - %A + 2%A - 1] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - 3? + 4? - 6? + 13, ---R ---R coordinates = ---R 3 2 3 2 ---R [9x - 2%A + 4%A - %A + 2, 9y + %A - 2%A + 5%A - 1, ---R 3 2 3 2 ---R 9z + %A - 2%A + 5%A - 1, 9t + %A - 2%A - 4%A - 1] ---R ] ---R , ---R ---R 4 2 ---R [complexRoots= ? - 11? + 37, ---R ---R coordinates = ---R 2 2 2 2 ---R [3x - %A + 7,6y + %A + 3%A - 7,3z - %A + 7,6t + %A - 3%A - 7] ---R ] ---R , ---R [complexRoots= ? + 1,coordinates= [x - 1,y,z - 1,t + 1]], ---R [complexRoots= ? + 2,coordinates= [x,y - 1,z - 1,t + 1]], ---R [complexRoots= ? - 2,coordinates= [x,y - 1,z + 1,t - 1]], ---R [complexRoots= ?,coordinates= [x,y + 1,z - 1,t - 1]], ---R [complexRoots= ? - 2,coordinates= [x - 1,y,z + 1,t - 1]], ---R [complexRoots= ?,coordinates= [x + 1,y,z - 1,t - 1]], ---R ---R 4 3 2 ---R [complexRoots= ? + 5? + 16? + 30? + 57, ---R ---R coordinates = ---R 3 2 3 2 ---R [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, ---R 3 2 3 2 ---R 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - ? - 2? + 3, ---R 3 3 3 ---R coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 2? - 8? + 48, ---R ---R coordinates = ---R 3 3 3 ---R [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] ---R ] ---R , ---R ---R 5 4 3 2 ---R [complexRoots= ? + ? - 2? - 4? + 5? + 8, ---R 3 3 3 ---R coordinates= [3x + %A - 1,3y + %A - 1,3z + %A - 1,t - %A]] ---R , ---R 3 ---R [complexRoots= ? + 3? - 1,coordinates= [x - %A,y - %A,z - %A,t - %A]]] ---RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) ---E 21 - ---S 22 of 28 -ts := lts.1 ---R ---R ---R (22) ---R 2 3 3 ---R {t + t + 1, z - z - t + t, ---R ---R 3 2 2 3 6 3 3 2 ---R (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z ---R + ---R 6 3 9 6 3 ---R (3t - 6t + 3)z + t - 3t + 5t - 3t ---R , ---R x + y + z} ---R Type: RegularChain(Integer,[x,y,z,t]) ---E 22 - -univariateSolve(ts)$pack ---S 23 of 28 ---R ---R ---R (23) ---R [ ---R 4 3 2 ---R [complexRoots= ? + 5? + 16? + 30? + 57, ---R ---R coordinates = ---R 3 2 3 2 ---R [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, ---R 3 2 3 2 ---R 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] ---R ] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? - ? - 2? + 3, ---R 3 3 3 ---R coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] ---R , ---R ---R 4 3 2 ---R [complexRoots= ? + 2? - 8? + 48, ---R ---R coordinates = ---R 3 3 3 ---R [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] ---R ] ---R ] ---RType: List Record(complexRoots: SparseUnivariatePolynomial Integer,coordinates: List Polynomial Integer) ---E 23 - ---S 24 of 28 -realSolve(ts)$pack ---R ---R ---R (24) [] ---R Type: List List RealClosure Fraction Integer ---E 24 - ---S 25 of 28 -lr2 := realSolve(lf)$pack ---R ---R ---R (25) ---R [[0,- 1,1,1], [0,0,1,0], [1,0,0,0], [0,0,0,1], [0,1,0,0], [1,0,%B37,- %B37], ---R [1,0,%B38,- %B38], [0,1,%B35,- %B35], [0,1,%B36,- %B36], [- 1,0,1,1], ---R ---R [%B32, ---R ---R 1 15 2 14 1 13 4 12 11 11 4 10 ---R -- %B32 + -- %B32 + -- %B32 - -- %B32 - -- %B32 - -- %B32 ---R 27 27 27 27 27 27 ---R + ---R 1 9 14 8 1 7 2 6 1 5 2 4 3 ---R -- %B32 + -- %B32 + -- %B32 + - %B32 + - %B32 + - %B32 + %B32 ---R 27 27 27 9 3 9 ---R + ---R 4 2 ---R - %B32 - %B32 - 2 ---R 3 ---R , ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B32 + - %B32 + - ---R 3 2 2 ---R , ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B32 + - %B32 + - ---R 3 2 2 ---R ] ---R , ---R ---R [%B33, ---R ---R 1 15 2 14 1 13 4 12 11 11 4 10 ---R -- %B33 + -- %B33 + -- %B33 - -- %B33 - -- %B33 - -- %B33 ---R 27 27 27 27 27 27 ---R + ---R 1 9 14 8 1 7 2 6 1 5 2 4 3 ---R -- %B33 + -- %B33 + -- %B33 + - %B33 + - %B33 + - %B33 + %B33 ---R 27 27 27 9 3 9 ---R + ---R 4 2 ---R - %B33 - %B33 - 2 ---R 3 ---R , ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B33 + - %B33 + - ---R 3 2 2 ---R , ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B33 + - %B33 + - ---R 3 2 2 ---R ] ---R , ---R ---R [%B34, ---R ---R 1 15 2 14 1 13 4 12 11 11 4 10 ---R -- %B34 + -- %B34 + -- %B34 - -- %B34 - -- %B34 - -- %B34 ---R 27 27 27 27 27 27 ---R + ---R 1 9 14 8 1 7 2 6 1 5 2 4 3 ---R -- %B34 + -- %B34 + -- %B34 + - %B34 + - %B34 + - %B34 + %B34 ---R 27 27 27 9 3 9 ---R + ---R 4 2 ---R - %B34 - %B34 - 2 ---R 3 ---R , ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B34 + - %B34 + - ---R 3 2 2 ---R , ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B34 + - %B34 + - ---R 3 2 2 ---R ] ---R , ---R [- 1,1,0,1], [- 1,1,1,0], ---R ---R [%B23, ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B23 + - %B23 + - ---R 3 2 2 ---R , ---R %B30, ---R ---R 1 15 1 14 1 13 2 12 11 11 ---R - %B30 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 ---R 54 27 54 27 54 ---R + ---R 2 10 1 9 7 8 1 7 1 6 1 5 ---R - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 ---R 27 54 27 54 9 6 ---R + ---R 1 4 2 2 1 1 ---R - %B23 + - %B23 - - %B23 - - ---R 9 3 2 2 ---R ] ---R , ---R ---R [%B23, ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B23 + - %B23 + - ---R 3 2 2 ---R , ---R %B31, ---R ---R 1 15 1 14 1 13 2 12 11 11 ---R - %B31 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 ---R 54 27 54 27 54 ---R + ---R 2 10 1 9 7 8 1 7 1 6 1 5 ---R - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 ---R 27 54 27 54 9 6 ---R + ---R 1 4 2 2 1 1 ---R - %B23 + - %B23 - - %B23 - - ---R 9 3 2 2 ---R ] ---R , ---R ---R [%B24, ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B24 + - %B24 + - ---R 3 2 2 ---R , ---R %B28, ---R ---R 1 15 1 14 1 13 2 12 11 11 ---R - %B28 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 ---R 54 27 54 27 54 ---R + ---R 2 10 1 9 7 8 1 7 1 6 1 5 ---R - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 ---R 27 54 27 54 9 6 ---R + ---R 1 4 2 2 1 1 ---R - %B24 + - %B24 - - %B24 - - ---R 9 3 2 2 ---R ] ---R , ---R ---R [%B24, ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B24 + - %B24 + - ---R 3 2 2 ---R , ---R %B29, ---R ---R 1 15 1 14 1 13 2 12 11 11 ---R - %B29 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 ---R 54 27 54 27 54 ---R + ---R 2 10 1 9 7 8 1 7 1 6 1 5 ---R - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 ---R 27 54 27 54 9 6 ---R + ---R 1 4 2 2 1 1 ---R - %B24 + - %B24 - - %B24 - - ---R 9 3 2 2 ---R ] ---R , ---R ---R [%B25, ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B25 + - %B25 + - ---R 3 2 2 ---R , ---R %B26, ---R ---R 1 15 1 14 1 13 2 12 11 11 ---R - %B26 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 ---R 54 27 54 27 54 ---R + ---R 2 10 1 9 7 8 1 7 1 6 1 5 ---R - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 ---R 27 54 27 54 9 6 ---R + ---R 1 4 2 2 1 1 ---R - %B25 + - %B25 - - %B25 - - ---R 9 3 2 2 ---R ] ---R , ---R ---R [%B25, ---R ---R 1 15 1 14 1 13 2 12 11 11 2 10 ---R - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 ---R 54 27 54 27 54 27 ---R + ---R 1 9 7 8 1 7 1 6 1 5 1 4 3 ---R - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 ---R 54 27 54 9 6 9 ---R + ---R 2 2 1 3 ---R - - %B25 + - %B25 + - ---R 3 2 2 ---R , ---R %B27, ---R ---R 1 15 1 14 1 13 2 12 11 11 ---R - %B27 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 ---R 54 27 54 27 54 ---R + ---R 2 10 1 9 7 8 1 7 1 6 1 5 ---R - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 ---R 27 54 27 54 9 6 ---R + ---R 1 4 2 2 1 1 ---R - %B25 + - %B25 - - %B25 - - ---R 9 3 2 2 ---R ] ---R , ---R [1,%B21,- %B21,0], [1,%B22,- %B22,0], [1,%B19,0,- %B19], [1,%B20,0,- %B20], ---R 1 3 1 1 3 1 1 3 1 ---R [%B17,- - %B17 + -,- - %B17 + -,- - %B17 + -], ---R 3 3 3 3 3 3 ---R 1 3 1 1 3 1 1 3 1 ---R [%B18,- - %B18 + -,- - %B18 + -,- - %B18 + -]] ---R 3 3 3 3 3 3 ---R Type: List List RealClosure Fraction Integer ---E 25 - ---S 26 of 28 -#lr2 ---R ---R ---R (26) 27 ---R Type: PositiveInteger ---E 26 - ---S 27 of 28 -lpr2 := positiveSolve(lf)$pack ---R ---R ---R 1 3 1 1 3 1 1 3 1 ---R (27) [[%B40,- - %B40 + -,- - %B40 + -,- - %B40 + -]] ---R 3 3 3 3 3 3 ---R Type: List List RealClosure Fraction Integer ---E 27 - ---S 28 of 28 -[approximate(r,1/10**21)::Float for r in lpr2.1] ---R ---R ---R (28) ---R [0.3221853546 2608559291, 0.3221853546 2608559291, 0.3221853546 2608559291, ---R 0.3221853546 2608559291] ---R Type: List Float ---E 28 -)spool -)lisp (bye) -@ -<>= -==================================================================== -ZeroDimensionalSolvePackage examples -==================================================================== - -The ZeroDimensionalSolvePackage package constructor provides -operations for computing symbolically the complex or real roots of -zero-dimensional algebraic systems. - -The package provides no multiplicity information (i.e. some returned -roots may be double or higher) but only distinct roots are returned. - -Complex roots are given by means of univariate representations of -irreducible regular chains. These representations are computed by the -univariateSolve operation (by calling the -InternalRationalUnivariateRepresentationPackage package constructor -which does the job). - -Real roots are given by means of tuples of coordinates lying in the -RealClosure of the coefficient ring. They are computed by the -realSolve and positiveSolve operations. The former computes all the -solutions of the input system with real coordinates whereas the later -concentrate on the solutions with (strictly) positive coordinates. In -both cases, the computations are performed by the RealClosure constructor. - -Both computations of complex roots and real roots rely on triangular -decompositions. These decompositions can be computed in two different -ways. First, by a applying the zeroSetSplit operation from the REGSET -domain constructor. In that case, no Groebner bases are computed. -This strategy is used by default. Secondly, by applying the zeroSetSplit -from LEXTRIPK. To use this later strategy with the operations -univariateSolve, realSolve and positiveSolve one just needs to use an -extra boolean argument. - -Note that the way of understanding triangular decompositions is -detailed in the example of the RegularTriangularSet constructor. - -The ZeroDimensionalSolvePackage constructor takes three arguments.The -first one R is the coefficient ring; it must belong to the categories -OrderedRing, EuclideanDomain, CharacteristicZero and RealConstant. This -means essentially that R is Integer or Fraction(Integer). The second -argument ls is the list of variables involved in the systems to solve. -The third one MUST BE concat(ls,s) where s is an additional symbol used -for the univariate representations. The abbreviation for -ZeroDimensionalSolvePackage is ZDSOLVE. - -We illustrate now how to use the constructor ZDSOLVE by two examples: -the Arnborg and Lazard system and the L-3 system (Aubry and Moreno -Maza). Note that the use of this package is also demonstrated in the -example of the LexTriangularPackage constructor. - -Define the coefficient ring. - - R := Integer - Integer - Type: Domain - -Define the lists of variables: - - ls : List Symbol := [x,y,z,t] - [x,y,z,t] - Type: List Symbol - -and: - - ls2 : List Symbol := [x,y,z,t,new()$Symbol] - [x,y,z,t,%A] - Type: List Symbol - -Call the package: - - pack := ZDSOLVE(R,ls,ls2) - ZeroDimensionalSolvePackage(Integer,[x,y,z,t],[x,y,z,t,%A]) - Type: Domain - -Define a polynomial system (Arnborg-Lazard) - - p1 := x**2*y*z + x*y**2*z + x*y*z**2 + x*y*z + x*y + x*z + y*z - 2 2 2 - x y z + (x y + (x + x + 1)y + x)z + x y - Type: Polynomial Integer - - p2 := x**2*y**2*z + x*y**2*z**2 + x**2*y*z + x*y*z + y*z + x + z - 2 2 2 2 2 - x y z + (x y + (x + x + 1)y + 1)z + x - Type: Polynomial Integer - - p3 := x**2*y**2*z**2 + x**2*y**2*z + x*y**2*z + x*y*z + x*z + z + 1 - 2 2 2 2 2 - x y z + ((x + x)y + x y + x + 1)z + 1 - Type: Polynomial Integer - - lp := [p1, p2, p3] - 2 2 2 - [x y z + (x y + (x + x + 1)y + x)z + x y, - 2 2 2 2 2 - x y z + (x y + (x + x + 1)y + 1)z + x, - 2 2 2 2 2 - x y z + ((x + x)y + x y + x + 1)z + 1] - Type: List Polynomial Integer - -Note that these polynomials do not involve the variable t; we will use -it in the second example. - -First compute a decomposition into regular chains (i.e. regular -triangular sets). - - triangSolve(lp)$pack - [ - { - 20 19 18 17 16 15 14 13 12 - z - 6z - 41z + 71z + 106z + 92z + 197z + 145z + 257z - + - 11 10 9 8 7 6 5 4 3 - 278z + 201z + 278z + 257z + 145z + 197z + 92z + 106z + 71z - + - 2 - - 41z - 6z + 1 - , - 19 18 17 16 - 14745844z + 50357474z - 130948857z - 185261586z - + - 15 14 13 12 - - 180077775z - 338007307z - 275379623z - 453190404z - + - 11 10 9 8 - - 474597456z - 366147695z - 481433567z - 430613166z - + - 7 6 5 4 - - 261878358z - 326073537z - 163008796z - 177213227z - + - 3 2 - - 104356755z + 65241699z + 9237732z - 1567348 - * - y - + - 19 18 17 16 15 - 1917314z + 6508991z - 16973165z - 24000259z - 23349192z - + - 14 13 12 11 10 - - 43786426z - 35696474z - 58724172z - 61480792z - 47452440z - + - 9 8 7 6 5 - - 62378085z - 55776527z - 33940618z - 42233406z - 21122875z - + - 4 3 2 - - 22958177z - 13504569z + 8448317z + 1195888z - 202934 - , - 3 2 3 2 2 2 - ((z - 2z)y + (- z - z - 2z - 1)y - z - z + 1)x + z - 1} - ] - Type: List RegularChain(Integer,[x,y,z,t]) - -We can see easily from this decomposition (consisting of a single -regular chain) that the input system has 20 complex roots. - -Then we compute a univariate representation of this regular chain. - - univariateSolve(lp)$pack - [ - [ - complexRoots = - 12 11 10 9 8 7 6 5 4 3 - ? - 12? + 24? + 4? - 9? + 27? - 21? + 27? - 9? + 4? - + - 2 - 24? - 12? + 1 - , - coordinates = - [ - 11 10 9 8 7 6 - 63x + 62%A - 721%A + 1220%A + 705%A - 285%A + 1512%A - + - 5 4 3 2 - - 735%A + 1401%A - 21%A + 215%A + 1577%A - 142 - , - 11 10 9 8 7 6 - 63y - 75%A + 890%A - 1682%A - 516%A + 588%A - 1953%A - + - 5 4 3 2 - 1323%A - 1815%A + 426%A - 243%A - 1801%A + 679 - , - z - %A] - ] - , - 6 5 4 3 2 - [complexRoots= ? + ? + ? + ? + ? + ? + 1, - 5 3 - coordinates= [x - %A ,y - %A ,z - %A]] - , - 2 - [complexRoots= ? + 5? + 1,coordinates= [x - 1,y - 1,z - %A]]] - Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, - coordinates: List Polynomial Integer) - -We see that the zeros of our regular chain are split into three components. -This is due to the use of univariate polynomial factorization. - -Each of these components consist of two parts. The first one is an -irreducible univariate polynomial p(?) which defines a simple -algebraic extension of the field of fractions of R. The second one -consists of multivariate polynomials pol1(x,%A), pol2(y,%A) and -pol3(z,%A). Each of these polynomials involve two variables: one is -an indeterminate x, y or z of the input system lp and the other is %A -which represents any root of p(?). Recall that this %A is the last -element of the third parameter of ZDSOLVE. Thus any complex root ? of -p(?) leads to a solution of the input system lp by replacing %A by -this ? in pol1(x,%A), pol2(y,%A) and pol3(z,%A). Note that the -polynomials pol1(x,%A), pol2(y,%A) and pol3(z,%A) have degree one -w.r.t. x, y or z respectively. This is always the case for all -univariate representations. Hence the operation univariateSolve -replaces a system of multivariate polynomials by a list of univariate -polynomials, what justifies its name. Another example of univariate -representations illustrates the LexTriangularPackage package constructor. - -We now compute the solutions with real coordinates: - - lr := realSolve(lp)$pack - [ - [%B1, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B1 - ------- %B1 - ------- %B1 + -------- %B1 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B1 + -------- %B1 + ------ %B1 + --------- %B1 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B1 + --------- %B1 + --------- %B1 + --------- %B1 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B1 + ------- %B1 + ------ %B1 + ------- %B1 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B1 + -------- %B1 - ---- %B1 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B1 + ------ %B1 + ------- %B1 - ------- %B1 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B1 - -------- %B1 - -------- %B1 - ------ %B1 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B1 - -------- %B1 - -------- %B1 - ------- %B1 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B1 - -------- %B1 - -------- %B1 - -------- %B1 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B1 - -------- %B1 - ------- %B1 + ------ - 26117 705159 705159 705159 - ] - , - [%B2, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B2 - ------- %B2 - ------- %B2 + -------- %B2 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B2 + -------- %B2 + ------ %B2 + --------- %B2 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B2 + --------- %B2 + --------- %B2 + --------- %B2 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B2 + ------- %B2 + ------ %B2 + ------- %B2 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B2 + -------- %B2 - ---- %B2 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B2 + ------ %B2 + ------- %B2 - ------- %B2 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B2 - -------- %B2 - -------- %B2 - ------ %B2 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B2 - -------- %B2 - -------- %B2 - ------- %B2 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B2 - -------- %B2 - -------- %B2 - -------- %B2 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B2 - -------- %B2 - ------- %B2 + ------ - 26117 705159 705159 705159 - ] - , - [%B3, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B3 - ------- %B3 - ------- %B3 + -------- %B3 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B3 + -------- %B3 + ------ %B3 + --------- %B3 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B3 + --------- %B3 + --------- %B3 + --------- %B3 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B3 + ------- %B3 + ------ %B3 + ------- %B3 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B3 + -------- %B3 - ---- %B3 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B3 + ------ %B3 + ------- %B3 - ------- %B3 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B3 - -------- %B3 - -------- %B3 - ------ %B3 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B3 - -------- %B3 - -------- %B3 - ------- %B3 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B3 - -------- %B3 - -------- %B3 - -------- %B3 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B3 - -------- %B3 - ------- %B3 + ------ - 26117 705159 705159 705159 - ] - , - [%B4, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B4 - ------- %B4 - ------- %B4 + -------- %B4 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B4 + -------- %B4 + ------ %B4 + --------- %B4 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B4 + --------- %B4 + --------- %B4 + --------- %B4 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B4 + ------- %B4 + ------ %B4 + ------- %B4 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B4 + -------- %B4 - ---- %B4 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B4 + ------ %B4 + ------- %B4 - ------- %B4 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B4 - -------- %B4 - -------- %B4 - ------ %B4 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B4 - -------- %B4 - -------- %B4 - ------- %B4 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B4 - -------- %B4 - -------- %B4 - -------- %B4 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B4 - -------- %B4 - ------- %B4 + ------ - 26117 705159 705159 705159 - ] - , - [%B5, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B5 - ------- %B5 - ------- %B5 + -------- %B5 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B5 + -------- %B5 + ------ %B5 + --------- %B5 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B5 + --------- %B5 + --------- %B5 + --------- %B5 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B5 + ------- %B5 + ------ %B5 + ------- %B5 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B5 + -------- %B5 - ---- %B5 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B5 + ------ %B5 + ------- %B5 - ------- %B5 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B5 - -------- %B5 - -------- %B5 - ------ %B5 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B5 - -------- %B5 - -------- %B5 - ------- %B5 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B5 - -------- %B5 - -------- %B5 - -------- %B5 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B5 - -------- %B5 - ------- %B5 + ------ - 26117 705159 705159 705159 - ] - , - [%B6, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B6 - ------- %B6 - ------- %B6 + -------- %B6 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B6 + -------- %B6 + ------ %B6 + --------- %B6 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B6 + --------- %B6 + --------- %B6 + --------- %B6 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B6 + ------- %B6 + ------ %B6 + ------- %B6 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B6 + -------- %B6 - ---- %B6 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B6 + ------ %B6 + ------- %B6 - ------- %B6 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B6 - -------- %B6 - -------- %B6 - ------ %B6 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B6 - -------- %B6 - -------- %B6 - ------- %B6 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B6 - -------- %B6 - -------- %B6 - -------- %B6 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B6 - -------- %B6 - ------- %B6 + ------ - 26117 705159 705159 705159 - ] - , - [%B7, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B7 - ------- %B7 - ------- %B7 + -------- %B7 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B7 + -------- %B7 + ------ %B7 + --------- %B7 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B7 + --------- %B7 + --------- %B7 + --------- %B7 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B7 + ------- %B7 + ------ %B7 + ------- %B7 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B7 + -------- %B7 - ---- %B7 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B7 + ------ %B7 + ------- %B7 - ------- %B7 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B7 - -------- %B7 - -------- %B7 - ------ %B7 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B7 - -------- %B7 - -------- %B7 - ------- %B7 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B7 - -------- %B7 - -------- %B7 - -------- %B7 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B7 - -------- %B7 - ------- %B7 + ------ - 26117 705159 705159 705159 - ] - , - [%B8, - 1184459 19 2335702 18 5460230 17 79900378 16 - ------- %B8 - ------- %B8 - ------- %B8 + -------- %B8 - 1645371 548457 182819 1645371 - + - 43953929 15 13420192 14 553986 13 193381378 12 - -------- %B8 + -------- %B8 + ------ %B8 + --------- %B8 - 548457 182819 3731 1645371 - + - 35978916 11 358660781 10 271667666 9 118784873 8 - -------- %B8 + --------- %B8 + --------- %B8 + --------- %B8 - 182819 1645371 1645371 548457 - + - 337505020 7 1389370 6 688291 5 3378002 4 - --------- %B8 + ------- %B8 + ------ %B8 + ------- %B8 - 1645371 11193 4459 42189 - + - 140671876 3 32325724 2 8270 9741532 - --------- %B8 + -------- %B8 - ---- %B8 - ------- - 1645371 548457 343 1645371 - , - 91729 19 487915 18 4114333 17 1276987 16 - - ------ %B8 + ------ %B8 + ------- %B8 - ------- %B8 - 705159 705159 705159 235053 - + - 13243117 15 16292173 14 26536060 13 722714 12 - - -------- %B8 - -------- %B8 - -------- %B8 - ------ %B8 - 705159 705159 705159 18081 - + - 5382578 11 15449995 10 14279770 9 6603890 8 - - ------- %B8 - -------- %B8 - -------- %B8 - ------- %B8 - 100737 235053 235053 100737 - + - 409930 7 37340389 6 34893715 5 26686318 4 - - ------ %B8 - -------- %B8 - -------- %B8 - -------- %B8 - 6027 705159 705159 705159 - + - 801511 3 17206178 2 4406102 377534 - - ------ %B8 - -------- %B8 - ------- %B8 + ------ - 26117 705159 705159 705159 - ] - ] - Type: List List RealClosure Fraction Integer - -The number of real solutions for the input system is: - - # lr - 8 - Type: PositiveInteger - -Each of these real solutions is given by a list of elements in -RealClosure(R). In these 8 lists, the first element is a value of z, -the second of y and the last of x. This is logical since by setting -the list of variables of the package to [x,y,z,t] we mean that the -elimination ordering on the variables is t < z < y < x. Note that -each system treated by the ZDSOLVE package constructor needs only to -be zero-dimensional w.r.t. the variables involved in the system it-self -and not necessarily w.r.t. all the variables used to define the package. - -We can approximate these real numbers as follows. This computation -takes between 30 sec. and 5 min, depending on your machine. - - [ [approximate(r,1/1000000) for r in point] for point in lr] - [ - 10048059 - [- --------, - 2097152 - - 4503057316985387943524397913838966414596731976211768219335881208385516_ - 314058924567176091423629695777403099833360761048898228916578137094309_ - 838597331137202584846939132376157019506760357601165917454986815382098_ - 789094851523420392811293126141329856546977145464661495487825919941188_ - 447041722440491921567263542158028061437758844364634410045253024786561_ - 923163288214175 - / - 4503057283025245488516511806985826635083100693757320465280554706865644_ - 949577509916867201889438090408354817931718593862797624551518983570793_ - 048774424291488708829840324189200301436123314860200821443733790755311_ - 243632919864895421704228949571290016119498807957023663865443069392027_ - 148979688266712323356043491523434068924275280417338574817381189277066_ - 143312396681216 - , - - 2106260768823475073894798680486016596249607148690685538763683715020639_ - 680858649650790055889505646893309447097099937802187329095325898785247_ - 249020717504983660482075156618738724514685333060011202964635166381351_ - 543255982200250305283981086837110614842307026091211297929876896285681_ - 830479054760056380762664905618462055306047816191782011588703789138988_ - 1895 - / - 2106260609498464192472113804816474175341962953296434102413903142368757_ - 967685273888585590975965211778862189872881953943640246297357061959812_ - 326103659799025126863258676567202342106877031710184247484181423288921_ - 837681237062708470295706218485928867400771937828499200923760593314168_ - 901000666373896347598118228556731037072026474496776228383762993923280_ - 0768 - ] - , - - 2563013 - [- -------, - 2097152 - - - - 2611346176791927789698617693237757719238259963063541781922752330440_ - 189899668072928338490768623593207442125925986733815932243504809294_ - 837523030237337236806668167446173001727271353311571242897 - / - 1165225400505222530583981916004589143757226610276858990008790134819_ - 914940922413753983971394019523433320408139928153188829495755455163_ - 963417619308395977544797140231469234269034921938055593984 - , - - 3572594550275917221096588729615788272998517054675603239578198141006034_ - 091735282826590621902304466963941971038923304526273329316373757450061_ - 9789892286110976997087250466235373 - / - 1039548269345598936877071244834026055800814551120170592200522366591759_ - 409659486442339141029452950265179989960104811875822530205346505131581_ - 2439017247289173865014702966308864 - ] - , - - 1715967 - [- -------, - 2097152 - - - - 4213093533784303521084839517977082390377261503969586224828998436606_ - 030656076359374564813773498376603121267822565801436206939519951465_ - 18222580524697287410022543952491 - / - 9441814144185374458649692034349224052436597470966253663930641960795_ - 805882585493199840191699917659443264824641135187383583888147867340_ - 19307857605820364195856822304768 - , - - 7635833347112644222515625424410831225347475669008589338834162172501904_ - 994376346730876809042845208919919925302105720971453918982731389072591_ - 4035 - / - 2624188764086097199784297610478066633934230467895851602278580978503784_ - 549205788499019640602266966026891580103543567625039018629887141284916_ - 75648 - ] - , - - 437701 - [- -------, - 2097152 - - 1683106908638349588322172332654225913562986313181951031452750161441497_ - 473455328150721364868355579646781603507777199075077835213366484533654_ - 91383623741304759 - / - 1683106868095213389001709982705913638963077668731226111167785188004907_ - 425226298680325887810962614140298597366984264887998908377068799998454_ - 23381649008099328 - , - - 4961550109835010186422681013422108735958714801003760639707968096646912_ - 82670847283444311723917219104249213450966312411133 - / - 4961549872757738315509192078210209029852897118611097126236384040829376_ - 59261914313170254867464792718363492160482442215424 - ] - , - - 222801 - [-------, - 2097152 - - - - 8994884880402428265107595121970691427136045692541978275573001865213_ - 759921588137716696126349101655220195142994932299137183241705867672_ - 383477 - / - 1167889998665026372177765100691888582708969960229934769690835752457_ - 077779416435209473767866507769405888942764587718542434255625992456_ - 372224 - , - - - - 2389704888133156878320801544373808395612771509208491019847452991885_ - 509546519525467839016613593999693886640036283570552321155037871291_ - 458703265 - / - 5355487273645096326090403286689931905988225444685411433221593833681_ - 192957562833671468654290340746993656285925599117602120446183443145_ - 479421952 - ] - , - - 765693 - [-------, - 2097152 - - 8558969219816716267873244761178198088724698958616670140213765754322002_ - 303251685786118678330840203328837654339523418704917749518340772512899_ - 000391009630373148561 - / - 2941442445533010790976428411376393499815580215945856917906452535495723_ - 013856818941702330228779890141296236721138154231997238917322156711965_ - 2444639331719460159488 - , - - - - 2057618230582572101247650324860242561111302581543588808843923662767_ - 549382241659362712290777612800192921420574408948085193743688582762_ - 2246433251878894899015 - / - 2671598203325735538097952353501450220576313759890835097091722520642_ - 710198771902667183948906289863714759678360292483949204616471537777_ - 775324180661095366656 - ] - , - - 5743879 - [-------, - 2097152 - - 1076288816968906847955546394773570208171456724942618614023663123574768_ - 960850434263971398072546592772662158833449797698617455397887562900072_ - 984768000608343553189801693408727205047612559889232757563830528688953_ - 535421809482771058917542602890060941949620874083007858366669453501766_ - 24841488732463225 - / - 3131768957080317946648461940023552044190376613458584986228549631916196_ - 601616219781765615532532294746529648276430583810894079374566460757823_ - 146888581195556029208515218838883200318658407469399426063260589828612_ - 309231596669129707986481319851571942927230340622934023923486703042068_ - 1530440845099008 - , - - - - 2113286699185750918364120475565458437870172489865485994389828135335_ - 264444665284557526492734931691731407872701432935503473348172076098_ - 720545849008780077564160534317894688366119529739980502944162668550_ - 098127961950496210221942878089359674925850594427768502251789758706_ - 752831632503615 - / - 1627615584937987580242906624347104580889144466168459718043153839408_ - 372525533309808070363699585502216011211087103263609551026027769414_ - 087391148126221168139781682587438075322591466131939975457200522349_ - 838568964285634448018562038272378787354460106106141518010935617205_ - 1706396253618176 - ] - , - - 19739877 - [--------, - 2097152 - - - - 2997249936832703303799015804861520949215040387500707177701285766720_ - 192530579422478953566024359860143101547801638082771611160372212874_ - 847778035809872843149225484238365858013629341705321702582333350918_ - 009601789937023985935304900460493389873837030853410347089908880814_ - 853981132018464582458800615394770741699487295875960210750215891948_ - 814476854871031530931295467332190133702671098200902282300510751860_ - 7185928457030277807397796525813862762239286996106809728023675 - / - 2308433274852278590728910081191811023906504141321432646123936794873_ - 933319270608960702138193417647898360620229519176632937631786851455_ - 014766027206259022252505551741823688896883806636602574431760472240_ - 292093196729475160247268834121141893318848728661844434927287285112_ - 897080767552864895056585864033178565910387065006112801516403522741_ - 037360990556054476949527059227070809593049491257519554708879259595_ - 52929920110858560812556635485429471554031675979542656381353984 - , - - - - 5128189263548228489096276397868940080600938410663080459407966335845_ - 009264109490520459825316250084723010047035024497436523038925818959_ - 289312931584701353927621435434398674263047293909122850133851990696_ - 490231566094371994333795070782624011727587749989296611277318372294_ - 624207116537910436554574146082884701305543912620419354885410735940_ - 157775896602822364575864611831512943973974715166920465061850603762_ - 87516256195847052412587282839139194642913955 - / - 2288281939778439330531208793181290471183631092455368990386390824243_ - 509463644236249773080647438987739144921607794682653851741189091711_ - 741868145114978337284191822497675868358729486644730856622552687209_ - 203724411800481405702837198310642291275676195774614443815996713502_ - 629391749783590041470860127752372996488627742672487622480063268808_ - 889324891850842494934347337603075939980268208482904859678177751444_ - 65749979827872616963053217673201717237252096 - ] - ] - Type: List List Fraction Integer - -We can also concentrate on the solutions with real (strictly) positive -coordinates: - - lpr := positiveSolve(lp)$pack - [] - Type: List List RealClosure Fraction Integer - -Thus we have checked that the input system has no solution with -strictly positive coordinates. - -Let us define another polynomial system (L-3). - - f0 := x**3 + y + z + t- 1 - 3 - z + y + x + t - 1 - Type: Polynomial Integer - - f1 := x + y**3 + z + t -1 - 3 - z + y + x + t - 1 - Type: Polynomial Integer - - f2 := x + y + z**3 + t-1 - 3 - z + y + x + t - 1 - Type: Polynomial Integer - - f3 := x + y + z + t**3 -1 - 3 - z + y + x + t - 1 - Type: Polynomial Integer - - lf := [f0, f1, f2, f3] - 3 3 3 3 - [z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1,z + y + x + t - 1] - Type: List Polynomial Integer - -First compute a decomposition into regular chains (i.e. regular -triangular sets). - - lts := triangSolve(lf)$pack - [ - 2 3 3 - {t + t + 1, z - z - t + t, - 3 2 2 3 6 3 3 2 - (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z - + - 6 3 9 6 3 - (3t - 6t + 3)z + t - 3t + 5t - 3t - , - x + y + z} - , - 16 13 10 7 4 2 - {t - 6t + 9t + 4t + 15t - 54t + 27, - 15 14 13 12 11 - 4907232t + 40893984t - 115013088t + 22805712t + 36330336t - + - 10 9 8 7 - 162959040t - 159859440t - 156802608t + 117168768t - + - 6 5 4 3 - 126282384t - 129351600t + 306646992t + 475302816t - + - 2 - - 1006837776t - 237269088t + 480716208 - * - z - + - 54 51 48 46 45 43 42 - 48t - 912t + 8232t - 72t - 46848t + 1152t + 186324t - + - 40 39 38 37 36 35 - - 3780t - 543144t - 3168t - 21384t + 1175251t + 41184t - + - 34 33 32 31 30 - 278003t - 1843242t - 301815t - 1440726t + 1912012t - + - 29 28 27 26 25 - 1442826t + 4696262t - 922481t - 4816188t - 10583524t - + - 24 23 22 21 20 - - 208751t + 11472138t + 16762859t - 857663t - 19328175t - + - 19 18 17 16 15 - - 18270421t + 4914903t + 22483044t + 12926517t - 8605511t - + - 14 13 12 11 10 - - 17455518t - 5014597t + 8108814t + 8465535t + 190542t - + - 9 8 7 6 5 4 - - 4305624t - 2226123t + 661905t + 1169775t + 226260t - 209952t - + - 3 - - 141183t + 27216t - , - 3 2 2 3 6 3 3 2 - (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z - + - 6 3 9 6 3 - (3t - 6t + 3)z + t - 3t + 5t - 3t - , - 3 - x + y + z + t - 1} - , - 2 2 2 - {t,z - 1,y - 1,x + y}, {t - 1,z,y - 1,x + y}, {t - 1,z - 1,z y + 1,x}, - 16 13 10 7 4 2 - {t - 6t + 9t + 4t + 15t - 54t + 27, - 29 28 27 26 25 - 4907232t + 40893984t - 115013088t - 1730448t - 168139584t - + - 24 23 22 21 - 738024480t - 195372288t + 315849456t - 2567279232t - + - 20 19 18 17 - 937147968t + 1026357696t + 4780488240t - 2893767696t - + - 16 15 14 13 - - 5617160352t - 3427651728t + 5001100848t + 8720098416t - + - 12 11 10 9 - 2331732960t - 499046544t - 16243306272t - 9748123200t - + - 8 7 6 5 - 3927244320t + 25257280896t + 10348032096t - 17128672128t - + - 4 3 2 - - 14755488768t + 544086720t + 10848188736t + 1423614528t - + - - 2884297248 - * - z - + - 68 65 62 60 59 57 56 - - 48t + 1152t - 13560t + 360t + 103656t - 7560t - 572820t - + - 54 53 52 51 50 49 - 71316t + 2414556t + 2736t - 402876t - 7985131t - 49248t - + - 48 47 46 45 44 - 1431133t + 20977409t + 521487t - 2697635t - 43763654t - + - 43 42 41 40 39 - - 3756573t - 2093410t + 71546495t + 19699032t + 35025028t - + - 38 37 36 35 34 - - 89623786t - 77798760t - 138654191t + 87596128t + 235642497t - + - 33 32 31 30 29 - 349607642t - 93299834t - 551563167t - 630995176t + 186818962t - + - 28 27 26 25 - 995427468t + 828416204t - 393919231t - 1076617485t - + - 24 23 22 21 - - 1609479791t + 595738126t + 1198787136t + 4342832069t - + - 20 19 18 17 - - 2075938757t - 4390835799t - 4822843033t + 6932747678t - + - 16 15 14 13 - 6172196808t + 1141517740t - 4981677585t - 9819815280t - + - 12 11 10 9 - - 7404299976t - 157295760t + 29124027630t + 14856038208t - + - 8 7 6 5 - - 16184101410t - 26935440354t - 3574164258t + 10271338974t - + - 4 3 2 - 11191425264t + 6869861262t - 9780477840t - 3586674168t + 2884297248 - , - 3 3 2 6 3 9 6 3 - (3z + (6t - 6)z + (6t - 12t + 3)z + 2t - 6t + t + 3t)y - + - 3 3 6 3 2 9 6 3 12 9 - (3t - 3)z + (6t - 12t + 6)z + (4t - 12t + 11t - 3)z + t - 4t - + - 6 3 - 5t - 2t - , - 3 - x + y + z + t - 1} - , - 2 - {t - 1,z - 1,y,x + z}, - 8 7 6 5 4 3 2 - {t + t + t - 2t - 2t - 2t + 19t + 19t - 8, - 7 6 5 4 3 - 2395770t + 3934440t - 3902067t - 10084164t - 1010448t - + - 2 - 32386932t + 22413225t - 10432368 - * - z - + - 7 6 5 4 3 - - 463519t + 3586833t + 9494955t - 8539305t - 33283098t - + - 2 - 35479377t + 46263256t - 17419896 - , - 4 3 3 6 3 2 3 - 3z + (9t - 9)z + (12t - 24t + 9)z + (- 152t + 219t - 67)z - + - 6 4 3 - - 41t + 57t + 25t - 57t + 16 - * - y - + - 3 4 6 3 3 3 2 - (3t - 3)z + (9t - 18t + 9)z + (- 181t + 270t - 89)z - + - 6 4 3 7 6 4 3 - (- 92t + 135t + 49t - 135t + 43)z + 27t - 27t - 54t + 396t - + - - 486t + 144 - , - 3 - x + y + z + t - 1} - , - 3 - {t,z - t + 1,y - 1,x - 1}, {t - 1,z,y,x}, {t,z - 1,y,x}, {t,z,y - 1,x}, - {t,z,y,x - 1}] - Type: List RegularChain(Integer,[x,y,z,t]) - -Then we compute a univariate representation. - - univariateSolve(lf)$pack - [[complexRoots= ?,coordinates= [x - 1,y - 1,z + 1,t - %A]], - [complexRoots= ?,coordinates= [x,y - 1,z,t - %A]], - [complexRoots= ? - 1,coordinates= [x,y,z,t - %A]], - [complexRoots= ?,coordinates= [x - 1,y,z,t - %A]], - [complexRoots= ?,coordinates= [x,y,z - 1,t - %A]], - [complexRoots= ? - 2,coordinates= [x - 1,y + 1,z,t - 1]], - [complexRoots= ?,coordinates= [x + 1,y - 1,z,t - 1]], - [complexRoots= ? - 1,coordinates= [x - 1,y + 1,z - 1,t]], - [complexRoots= ? + 1,coordinates= [x + 1,y - 1,z - 1,t]], - - 6 3 2 - [complexRoots= ? - 2? + 3? - 3, - 3 3 - coordinates= [2x + %A + %A - 1,2y + %A + %A - 1,z - %A,t - %A]] - , - - 5 3 2 - [complexRoots= ? + 3? - 2? + 3? - 3, - 3 - coordinates= [x - %A,y - %A,z + %A + 2%A - 1,t - %A]] - , - - 4 3 2 - [complexRoots= ? - ? - 2? + 3, - 3 3 3 - coordinates= [x + %A - %A - 1,y + %A - %A - 1,z - %A + 2%A + 1,t - %A]] - , - [complexRoots= ? + 1,coordinates= [x - 1,y - 1,z,t - %A]], - - 6 3 2 - [complexRoots= ? + 2? + 3? - 3, - 3 3 - coordinates= [2x - %A - %A - 1,y + %A,2z - %A - %A - 1,t + %A]] - , - - 6 4 3 2 - [complexRoots= ? + 12? + 20? - 45? - 42? - 953, - - coordinates = - 5 4 3 2 - [12609x + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239, - 5 4 3 2 - 25218y + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, - 5 4 3 2 - 25218z + 23%A + 49%A - 46%A + 362%A + 7594%A - 8239, - 5 4 3 2 - 12609t + 23%A + 49%A - 46%A + 362%A - 5015%A - 8239] - ] - , - - 5 3 2 - [complexRoots= ? + 12? - 16? + 48? - 96, - 3 - coordinates= [8x + %A + 8%A - 8,2y - %A,2z - %A,2t - %A]] - , - - 5 4 3 2 - [complexRoots= ? + ? - 5? - 3? + 9? + 3, - - coordinates = - 3 3 3 - [2x - %A + 2%A - 1, 2y + %A - 4%A + 1, 2z - %A + 2%A - 1, - 3 - 2t - %A + 2%A - 1] - ] - , - - 4 3 2 - [complexRoots= ? - 3? + 4? - 6? + 13, - - coordinates = - 3 2 3 2 - [9x - 2%A + 4%A - %A + 2, 9y + %A - 2%A + 5%A - 1, - 3 2 3 2 - 9z + %A - 2%A + 5%A - 1, 9t + %A - 2%A - 4%A - 1] - ] - , - - 4 2 - [complexRoots= ? - 11? + 37, - - coordinates = - 2 2 2 2 - [3x - %A + 7,6y + %A + 3%A - 7,3z - %A + 7,6t + %A - 3%A - 7] - ] - , - [complexRoots= ? + 1,coordinates= [x - 1,y,z - 1,t + 1]], - [complexRoots= ? + 2,coordinates= [x,y - 1,z - 1,t + 1]], - [complexRoots= ? - 2,coordinates= [x,y - 1,z + 1,t - 1]], - [complexRoots= ?,coordinates= [x,y + 1,z - 1,t - 1]], - [complexRoots= ? - 2,coordinates= [x - 1,y,z + 1,t - 1]], - [complexRoots= ?,coordinates= [x + 1,y,z - 1,t - 1]], - - 4 3 2 - [complexRoots= ? + 5? + 16? + 30? + 57, - - coordinates = - 3 2 3 2 - [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, - 3 2 3 2 - 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] - ] - , - - 4 3 2 - [complexRoots= ? - ? - 2? + 3, - 3 3 3 - coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] - , - - 4 3 2 - [complexRoots= ? + 2? - 8? + 48, - - coordinates = - 3 3 3 - [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] - ] - , - - 5 4 3 2 - [complexRoots= ? + ? - 2? - 4? + 5? + 8, - 3 3 3 - coordinates= [3x + %A - 1,3y + %A - 1,3z + %A - 1,t - %A]] - , - 3 - [complexRoots= ? + 3? - 1,coordinates= [x - %A,y - %A,z - %A,t - %A]]] - Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, - coordinates: List Polynomial Integer) - -Note that this computation is made from the input system lf. - -However it is possible to reuse a pre-computed regular chain as follows: - - ts := lts.1 - 2 3 3 - {t + t + 1, z - z - t + t, - - 3 2 2 3 6 3 3 2 - (3z + 3t - 3)y + (3z + (6t - 6)z + 3t - 6t + 3)y + (3t - 3)z - + - 6 3 9 6 3 - (3t - 6t + 3)z + t - 3t + 5t - 3t - , - x + y + z} - Type: RegularChain(Integer,[x,y,z,t]) - - univariateSolve(ts)$pack - [ - 4 3 2 - [complexRoots= ? + 5? + 16? + 30? + 57, - coordinates = - 3 2 3 2 - [151x + 15%A + 54%A + 104%A + 93, 151y - 10%A - 36%A - 19%A - 62, - 3 2 3 2 - 151z - 5%A - 18%A - 85%A - 31, 151t - 5%A - 18%A - 85%A - 31] - ] - , - 4 3 2 - [complexRoots= ? - ? - 2? + 3, - 3 3 3 - coordinates= [x - %A + 2%A + 1,y + %A - %A - 1,z - %A,t + %A - %A - 1]] - , - 4 3 2 - [complexRoots= ? + 2? - 8? + 48, - coordinates = - 3 3 3 - [8x - %A + 4%A - 8,2y + %A,8z + %A - 8%A + 8,8t - %A + 4%A - 8] - ] - ] - Type: List Record(complexRoots: SparseUnivariatePolynomial Integer, - coordinates: List Polynomial Integer) - - realSolve(ts)$pack - [] - Type: List List RealClosure Fraction Integer - -We compute now the full set of points with real coordinates: - - lr2 := realSolve(lf)$pack - [[0,- 1,1,1], [0,0,1,0], [1,0,0,0], [0,0,0,1], [0,1,0,0], [1,0,%B37,- %B37], - [1,0,%B38,- %B38], [0,1,%B35,- %B35], [0,1,%B36,- %B36], [- 1,0,1,1], - [%B32, - 1 15 2 14 1 13 4 12 11 11 4 10 - -- %B32 + -- %B32 + -- %B32 - -- %B32 - -- %B32 - -- %B32 - 27 27 27 27 27 27 - + - 1 9 14 8 1 7 2 6 1 5 2 4 3 - -- %B32 + -- %B32 + -- %B32 + - %B32 + - %B32 + - %B32 + %B32 - 27 27 27 9 3 9 - + - 4 2 - - %B32 - %B32 - 2 - 3 - , - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B32 + - %B32 + - - 3 2 2 - , - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B32 - -- %B32 - -- %B32 + -- %B32 + -- %B32 + -- %B32 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B32 - -- %B32 - -- %B32 - - %B32 - - %B32 - - %B32 - %B32 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B32 + - %B32 + - - 3 2 2 - ] - , - [%B33, - 1 15 2 14 1 13 4 12 11 11 4 10 - -- %B33 + -- %B33 + -- %B33 - -- %B33 - -- %B33 - -- %B33 - 27 27 27 27 27 27 - + - 1 9 14 8 1 7 2 6 1 5 2 4 3 - -- %B33 + -- %B33 + -- %B33 + - %B33 + - %B33 + - %B33 + %B33 - 27 27 27 9 3 9 - + - 4 2 - - %B33 - %B33 - 2 - 3 - , - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B33 + - %B33 + - - 3 2 2 - , - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B33 - -- %B33 - -- %B33 + -- %B33 + -- %B33 + -- %B33 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B33 - -- %B33 - -- %B33 - - %B33 - - %B33 - - %B33 - %B33 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B33 + - %B33 + - - 3 2 2 - ] - , - [%B34, - 1 15 2 14 1 13 4 12 11 11 4 10 - -- %B34 + -- %B34 + -- %B34 - -- %B34 - -- %B34 - -- %B34 - 27 27 27 27 27 27 - + - 1 9 14 8 1 7 2 6 1 5 2 4 3 - -- %B34 + -- %B34 + -- %B34 + - %B34 + - %B34 + - %B34 + %B34 - 27 27 27 9 3 9 - + - 4 2 - - %B34 - %B34 - 2 - 3 - , - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B34 + - %B34 + - - 3 2 2 - , - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B34 - -- %B34 - -- %B34 + -- %B34 + -- %B34 + -- %B34 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B34 - -- %B34 - -- %B34 - - %B34 - - %B34 - - %B34 - %B34 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B34 + - %B34 + - - 3 2 2 - ] - , - [- 1,1,0,1], [- 1,1,1,0], - [%B23, - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B23 + - %B23 + - - 3 2 2 - , - %B30, - 1 15 1 14 1 13 2 12 11 11 - - %B30 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 - 54 27 54 27 54 - + - 2 10 1 9 7 8 1 7 1 6 1 5 - - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 - 27 54 27 54 9 6 - + - 1 4 2 2 1 1 - - %B23 + - %B23 - - %B23 - - - 9 3 2 2 - ] - , - [%B23, - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B23 - -- %B23 - -- %B23 + -- %B23 + -- %B23 + -- %B23 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B23 - -- %B23 - -- %B23 - - %B23 - - %B23 - - %B23 - %B23 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B23 + - %B23 + - - 3 2 2 - , - %B31, - 1 15 1 14 1 13 2 12 11 11 - - %B31 + -- %B23 + -- %B23 + -- %B23 - -- %B23 - -- %B23 - 54 27 54 27 54 - + - 2 10 1 9 7 8 1 7 1 6 1 5 - - -- %B23 + -- %B23 + -- %B23 + -- %B23 + - %B23 + - %B23 - 27 54 27 54 9 6 - + - 1 4 2 2 1 1 - - %B23 + - %B23 - - %B23 - - - 9 3 2 2 - ] - , - [%B24, - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B24 + - %B24 + - - 3 2 2 - , - %B28, - 1 15 1 14 1 13 2 12 11 11 - - %B28 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 - 54 27 54 27 54 - + - 2 10 1 9 7 8 1 7 1 6 1 5 - - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 - 27 54 27 54 9 6 - + - 1 4 2 2 1 1 - - %B24 + - %B24 - - %B24 - - - 9 3 2 2 - ] - , - [%B24, - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B24 - -- %B24 - -- %B24 + -- %B24 + -- %B24 + -- %B24 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B24 - -- %B24 - -- %B24 - - %B24 - - %B24 - - %B24 - %B24 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B24 + - %B24 + - - 3 2 2 - , - %B29, - 1 15 1 14 1 13 2 12 11 11 - - %B29 + -- %B24 + -- %B24 + -- %B24 - -- %B24 - -- %B24 - 54 27 54 27 54 - + - 2 10 1 9 7 8 1 7 1 6 1 5 - - -- %B24 + -- %B24 + -- %B24 + -- %B24 + - %B24 + - %B24 - 27 54 27 54 9 6 - + - 1 4 2 2 1 1 - - %B24 + - %B24 - - %B24 - - - 9 3 2 2 - ] - , - [%B25, - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B25 + - %B25 + - - 3 2 2 - , - %B26, - 1 15 1 14 1 13 2 12 11 11 - - %B26 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 - 54 27 54 27 54 - + - 2 10 1 9 7 8 1 7 1 6 1 5 - - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 - 27 54 27 54 9 6 - + - 1 4 2 2 1 1 - - %B25 + - %B25 - - %B25 - - - 9 3 2 2 - ] - , - [%B25, - 1 15 1 14 1 13 2 12 11 11 2 10 - - -- %B25 - -- %B25 - -- %B25 + -- %B25 + -- %B25 + -- %B25 - 54 27 54 27 54 27 - + - 1 9 7 8 1 7 1 6 1 5 1 4 3 - - -- %B25 - -- %B25 - -- %B25 - - %B25 - - %B25 - - %B25 - %B25 - 54 27 54 9 6 9 - + - 2 2 1 3 - - - %B25 + - %B25 + - - 3 2 2 - , - %B27, - 1 15 1 14 1 13 2 12 11 11 - - %B27 + -- %B25 + -- %B25 + -- %B25 - -- %B25 - -- %B25 - 54 27 54 27 54 - + - 2 10 1 9 7 8 1 7 1 6 1 5 - - -- %B25 + -- %B25 + -- %B25 + -- %B25 + - %B25 + - %B25 - 27 54 27 54 9 6 - + - 1 4 2 2 1 1 - - %B25 + - %B25 - - %B25 - - - 9 3 2 2 - ] - , - [1,%B21,- %B21,0], [1,%B22,- %B22,0], [1,%B19,0,- %B19], [1,%B20,0,- %B20], - 1 3 1 1 3 1 1 3 1 - [%B17,- - %B17 + -,- - %B17 + -,- - %B17 + -], - 3 3 3 3 3 3 - 1 3 1 1 3 1 1 3 1 - [%B18,- - %B18 + -,- - %B18 + -,- - %B18 + -]] - 3 3 3 3 3 3 - Type: List List RealClosure Fraction Integer - -The number of real solutions for the input system is: - - #lr2 - 27 - Type: PositiveInteger - -Another example of computation of real solutions illustrates the -LexTriangularPackage package constructor. - -We concentrate now on the solutions with real (strictly) positive -coordinates: - - lpr2 := positiveSolve(lf)$pack - 1 3 1 1 3 1 1 3 1 - [[%B40,- - %B40 + -,- - %B40 + -,- - %B40 + -]] - 3 3 3 3 3 3 - Type: List List RealClosure Fraction Integer - -Finally, we approximate the coordinates of this point with 20 exact digits: - - [approximate(r,1/10**21)::Float for r in lpr2.1] - [0.3221853546 2608559291, 0.3221853546 2608559291, 0.3221853546 2608559291, - 0.3221853546 2608559291] - Type: List Float - -See Also: -o )show ZeroDimensionalSolvePackage -o $AXIOM/doc/src/algebra/zerodim.spad.dvi - -@ -<>= -)abbrev package ZDSOLVE ZeroDimensionalSolvePackage -++ Author: Marc Moreno Maza -++ Date Created: 23/01/1999 -++ Date Last Updated: 08/02/1999 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ A package for computing symbolically the complex and real roots of -++ zero-dimensional algebraic systems over the integer or rational -++ numbers. Complex roots are given by means of univariate representations -++ of irreducible regular chains. Real roots are given by means of tuples -++ of coordinates lying in the \spadtype{RealClosure} of the coefficient ring. -++ This constructor takes three arguments. The first one \spad{R} is the -++ coefficient ring. The second one \spad{ls} is the list of variables involved -++ in the systems to solve. The third one must be \spad{concat(ls,s)} where -++ \spad{s} is an additional symbol used for the univariate representations. -++ WARNING: The third argument is not checked. -++ All operations are based on triangular decompositions. -++ The default is to compute these decompositions directly from the input -++ system by using the \spadtype{RegularChain} domain constructor. -++ The lexTriangular algorithm can also be used for computing these decompositions -++ (see the \spadtype{LexTriangularPackage} package constructor). -++ For that purpose, the operations \axiomOpFrom{univariateSolve}{ZeroDimensionalSolvePackage}, -++ \axiomOpFrom{realSolve}{ZeroDimensionalSolvePackage} and -++ \axiomOpFrom{positiveSolve}{ZeroDimensionalSolvePackage} admit an optional -++ argument. \newline Author: Marc Moreno Maza. - -++ Version: 1. - -ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where - R : Join(OrderedRing,EuclideanDomain,CharacteristicZero,RealConstant) - ls: List Symbol - ls2: List Symbol - V ==> OrderedVariableList(ls) - N ==> NonNegativeInteger - Z ==> Integer - B ==> Boolean - P ==> Polynomial R - LP ==> List P - LS ==> List Symbol - Q ==> NewSparseMultivariatePolynomial(R,V) - U ==> SparseUnivariatePolynomial(R) - TS ==> RegularChain(R,ls) - RUR ==> Record(complexRoots: U, coordinates: LP) - K ==> Fraction R - RC ==> RealClosure(K) - PRC ==> Polynomial RC - REALSOL ==> List RC - URC ==> SparseUnivariatePolynomial RC - V2 ==> OrderedVariableList(ls2) - Q2 ==> NewSparseMultivariatePolynomial(R,V2) - E2 ==> IndexedExponents V2 - ST ==> SquareFreeRegularTriangularSet(R,E2,V2,Q2) - Q2WT ==> Record(val: Q2, tower: ST) - LQ2WT ==> Record(val: List(Q2), tower: ST) - WIP ==> Record(reals: List(RC), vars: List(Symbol), pols: List(Q2)) - polsetpack ==> PolynomialSetUtilitiesPackage(R,E2,V2,Q2) - normpack ==> NormalizationPackage(R,E2,V2,Q2,ST) - rurpack ==> InternalRationalUnivariateRepresentationPackage(R,E2,V2,Q2,ST) - quasicomppack ==> SquareFreeQuasiComponentPackage(R,E2,V2,Q2,ST) - lextripack ==> LexTriangularPackage(R,ls) - - Exports == with - triangSolve: (LP,B,B) -> List RegularChain(R,ls) - ++ \spad{triangSolve(lp,info?,lextri?)} decomposes the variety - ++ associated with \axiom{lp} into regular chains. - ++ Thus a point belongs to this variety iff it is a regular - ++ zero of a regular set in in the output. - ++ Note that \axiom{lp} needs to generate a zero-dimensional ideal. - ++ If \axiom{lp} is not zero-dimensional then the result is only - ++ a decomposition of its zero-set in the sense of the closure - ++ (w.r.t. Zarisky topology). - ++ Moreover, if \spad{info?} is \spad{true} then some information is - ++ displayed during the computations. - ++ See \axiomOpFrom{zeroSetSplit}{RegularTriangularSetCategory}(lp,true,info?). - ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called - ++ from the \spadtype{LexTriangularPackage} constructor - ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). - ++ Otherwise, the triangular decomposition is computed directly from the input - ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. - triangSolve: (LP,B) -> List RegularChain(R,ls) - ++ \spad{triangSolve(lp,info?)} returns the same as \spad{triangSolve(lp,false)} - triangSolve: LP -> List RegularChain(R,ls) - ++ \spad{triangSolve(lp)} returns the same as \spad{triangSolve(lp,false,false)} - univariateSolve: RegularChain(R,ls) -> List Record(complexRoots: U, coordinates: LP) - ++ \spad{univariateSolve(ts)} returns a univariate representation - ++ of \spad{ts}. - ++ See \axiomOpFrom{rur}{RationalUnivariateRepresentationPackage}(lp,true). - univariateSolve: (LP,B,B,B) -> List RUR - ++ \spad{univariateSolve(lp,info?,check?,lextri?)} returns a univariate - ++ representation of the variety associated with \spad{lp}. - ++ Moreover, if \spad{info?} is \spad{true} then some information is - ++ displayed during the decomposition into regular chains. - ++ If \spad{check?} is \spad{true} then the result is checked. - ++ See \axiomOpFrom{rur}{RationalUnivariateRepresentationPackage}(lp,true). - ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called - ++ from the \spadtype{LexTriangularPackage} constructor - ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). - ++ Otherwise, the triangular decomposition is computed directly from the input - ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. - univariateSolve: (LP,B,B) -> List RUR - ++ \spad{univariateSolve(lp,info?,check?)} returns the same as - ++ \spad{univariateSolve(lp,info?,check?,false)}. - univariateSolve: (LP,B) -> List RUR - ++ \spad{univariateSolve(lp,info?)} returns the same as - ++ \spad{univariateSolve(lp,info?,false,false)}. - univariateSolve: LP -> List RUR - ++ \spad{univariateSolve(lp)} returns the same as - ++ \spad{univariateSolve(lp,false,false,false)}. - realSolve: RegularChain(R,ls) -> List REALSOL - ++ \spad{realSolve(ts)} returns the set of the points in the regular - ++ zero set of \spad{ts} whose coordinates are all real. - ++ WARNING: For each set of coordinates given by \spad{realSolve(ts)} - ++ the ordering of the indeterminates is reversed w.r.t. \spad{ls}. - realSolve: (LP,B,B,B) -> List REALSOL - ++ \spad{realSolve(ts,info?,check?,lextri?)} returns the set of the points - ++ in the variety associated with \spad{lp} whose coordinates are all real. - ++ Moreover, if \spad{info?} is \spad{true} then some information is - ++ displayed during decomposition into regular chains. - ++ If \spad{check?} is \spad{true} then the result is checked. - ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called - ++ from the \spadtype{LexTriangularPackage} constructor - ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). - ++ Otherwise, the triangular decomposition is computed directly from the input - ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. - ++ WARNING: For each set of coordinates given by \spad{realSolve(ts,info?,check?,lextri?)} - ++ the ordering of the indeterminates is reversed w.r.t. \spad{ls}. - realSolve: (LP,B,B) -> List REALSOL - ++ \spad{realSolve(ts,info?,check?)} returns the same as \spad{realSolve(ts,info?,check?,false)}. - realSolve: (LP,B) -> List REALSOL - ++ \spad{realSolve(ts,info?)} returns the same as \spad{realSolve(ts,info?,false,false)}. - realSolve: LP -> List REALSOL - ++ \spad{realSolve(lp)} returns the same as \spad{realSolve(ts,false,false,false)} - positiveSolve: RegularChain(R,ls) -> List REALSOL - ++ \spad{positiveSolve(ts)} returns the points of the regular - ++ set of \spad{ts} with (real) strictly positive coordinates. - positiveSolve: (LP,B,B) -> List REALSOL - ++ \spad{positiveSolve(lp,info?,lextri?)} returns the set of the points - ++ in the variety associated with \spad{lp} whose coordinates are (real) strictly positive. - ++ Moreover, if \spad{info?} is \spad{true} then some information is - ++ displayed during decomposition into regular chains. - ++ If \spad{lextri?} is \spad{true} then the lexTriangular algorithm is called - ++ from the \spadtype{LexTriangularPackage} constructor - ++ (see \axiomOpFrom{zeroSetSplit}{LexTriangularPackage}(lp,false)). - ++ Otherwise, the triangular decomposition is computed directly from the input - ++ system by using the \axiomOpFrom{zeroSetSplit}{RegularChain} from \spadtype{RegularChain}. - ++ WARNING: For each set of coordinates given by \spad{positiveSolve(lp,info?,lextri?)} - ++ the ordering of the indeterminates is reversed w.r.t. \spad{ls}. - positiveSolve: (LP,B) -> List REALSOL - ++ \spad{positiveSolve(lp)} returns the same as \spad{positiveSolve(lp,info?,false)}. - positiveSolve: LP -> List REALSOL - ++ \spad{positiveSolve(lp)} returns the same as \spad{positiveSolve(lp,false,false)}. - squareFree: (TS) -> List ST - ++ \spad{squareFree(ts)} returns the square-free factorization of \spad{ts}. - ++ Moreover, each factor is a Lazard triangular set and the decomposition - ++ is a Kalkbrener split of \spad{ts}, which is enough here for - ++ the matter of solving zero-dimensional algebraic systems. - ++ WARNING: \spad{ts} is not checked to be zero-dimensional. - convert: Q -> Q2 - ++ \spad{convert(q)} converts \spad{q}. - convert: P -> PRC - ++ \spad{convert(p)} converts \spad{p}. - convert: Q2 -> PRC - ++ \spad{convert(q)} converts \spad{q}. - convert: U -> URC - ++ \spad{convert(u)} converts \spad{u}. - convert: ST -> List Q2 - ++ \spad{convert(st)} returns the members of \spad{st}. - - Implementation == add - news: Symbol := last(ls2)$(List Symbol) - newv: V2 := (variable(news)$V2)::V2 - newq: Q2 := newv :: Q2 - - convert(q:Q):Q2 == - ground? q => (ground(q))::Q2 - q2: Q2 := 0 - while not ground?(q) repeat - v: V := mvar(q) - d: N := mdeg(q) - v2: V2 := (variable(convert(v)@Symbol)$V2)::V2 - iq2: Q2 := convert(init(q))@Q2 - lq2: Q2 := (v2 :: Q2) - lq2 := lq2 ** d - q2 := iq2 * lq2 + q2 - q := tail(q) - q2 + (ground(q))::Q2 - - squareFree(ts:TS):List(ST) == - irred?: Boolean := false - st: ST := [[newq]$(List Q2)] - lq: List(Q2) := [convert(p)@Q2 for p in parts(ts)] - lq := sort(infRittWu?,lq) - toSee: List LQ2WT := [] - if irred? - then - lf := irreducibleFactors([first lq])$polsetpack - lq := rest lq - for f in lf repeat - toSee := cons([cons(f,lq),st]$LQ2WT, toSee) - else - toSee := [[lq,st]$LQ2WT] - toSave: List ST := [] - while not empty? toSee repeat - lqwt := first toSee; toSee := rest toSee - lq := lqwt.val; st := lqwt.tower - empty? lq => - toSave := cons(st,toSave) - q := first lq; lq := rest lq - lsfqwt: List Q2WT := squareFreePart(q,st)$ST - for sfqwt in lsfqwt repeat - q := sfqwt.val; st := sfqwt.tower - if not ground? init(q) - then - q := normalizedAssociate(q,st)$normpack - newts := internalAugment(q,st)$ST - newlq := [remainder(q,newts).polnum for q in lq] - toSee := cons([newlq,newts]$LQ2WT,toSee) - toSave - - - triangSolve(lp: LP, info?: B, lextri?: B): List TS == - lq: List(Q) := [convert(p)$Q for p in lp] - lextri? => zeroSetSplit(lq,false)$lextripack - zeroSetSplit(lq,true,info?)$TS - - triangSolve(lp: LP, info?: B): List TS == triangSolve(lp,info?,false) - - triangSolve(lp: LP): List TS == triangSolve(lp,false) - - convert(u: U): URC == - zero? u => 0 - ground? u => ((ground(u) :: K)::RC)::URC - uu: URC := 0 - while not ground? u repeat - uu := monomial((leadingCoefficient(u) :: K):: RC,degree(u)) + uu - u := reductum u - uu + ((ground(u) :: K)::RC)::URC - - coerceFromRtoRC(r:R): RC == - (r::K)::RC - - convert(p:P): PRC == - map(coerceFromRtoRC,p)$PolynomialFunctions2(R,RC) - - convert(q2:Q2): PRC == - p: P := coerce(q2)$Q2 - convert(p)@PRC - - convert(sts:ST): List Q2 == - lq2: List(Q2) := parts(sts)$ST - lq2 := sort(infRittWu?,lq2) - rest(lq2) - - realSolve(ts: TS): List REALSOL == - lsts: List ST := squareFree(ts) - lr: REALSOL := [] - lv: List Symbol := [] - toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] - toSave: List REALSOL := [] - while not empty? toSee repeat - wip := first toSee; toSee := rest toSee - lr := wip.reals; lv := wip.vars; lq2 := wip.pols - (empty? lq2) and (not empty? lr) => - toSave := cons(reverse(lr),toSave) - q2 := first lq2; lq2 := rest lq2 - qrc := convert(q2)@PRC - if not empty? lr - then - for r in reverse(lr) for v in reverse(lv) repeat - qrc := eval(qrc,v,r) - lv := cons((mainVariable(qrc) :: Symbol),lv) - urc: URC := univariate(qrc)@URC - urcRoots := allRootsOf(urc)$RC - for urcRoot in urcRoots repeat - toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) - toSave - - realSolve(lp: List(P), info?:Boolean, check?:Boolean, lextri?: Boolean): List REALSOL == - lts: List TS - lq: List(Q) := [convert(p)$Q for p in lp] - if lextri? - then - lts := zeroSetSplit(lq,false)$lextripack - else - lts := zeroSetSplit(lq,true,info?)$TS - lsts: List ST := [] - for ts in lts repeat - lsts := concat(squareFree(ts), lsts) - lsts := removeSuperfluousQuasiComponents(lsts)$quasicomppack - lr: REALSOL := [] - lv: List Symbol := [] - toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] - toSave: List REALSOL := [] - while not empty? toSee repeat - wip := first toSee; toSee := rest toSee - lr := wip.reals; lv := wip.vars; lq2 := wip.pols - (empty? lq2) and (not empty? lr) => - toSave := cons(reverse(lr),toSave) - q2 := first lq2; lq2 := rest lq2 - qrc := convert(q2)@PRC - if not empty? lr - then - for r in reverse(lr) for v in reverse(lv) repeat - qrc := eval(qrc,v,r) - lv := cons((mainVariable(qrc) :: Symbol),lv) - urc: URC := univariate(qrc)@URC - urcRoots := allRootsOf(urc)$RC - for urcRoot in urcRoots repeat - toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) - if check? - then - for p in lp repeat - for realsol in toSave repeat - prc: PRC := convert(p)@PRC - for rr in realsol for symb in reverse(ls) repeat - prc := eval(prc,symb,rr) - not zero? prc => - error "realSolve$ZDSOLVE: bad result" - toSave - - realSolve(lp: List(P), info?:Boolean, check?:Boolean): List REALSOL == - realSolve(lp,info?,check?,false) - - realSolve(lp: List(P), info?:Boolean): List REALSOL == - realSolve(lp,info?,false,false) - - realSolve(lp: List(P)): List REALSOL == - realSolve(lp,false,false,false) - - positiveSolve(ts: TS): List REALSOL == - lsts: List ST := squareFree(ts) - lr: REALSOL := [] - lv: List Symbol := [] - toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] - toSave: List REALSOL := [] - while not empty? toSee repeat - wip := first toSee; toSee := rest toSee - lr := wip.reals; lv := wip.vars; lq2 := wip.pols - (empty? lq2) and (not empty? lr) => - toSave := cons(reverse(lr),toSave) - q2 := first lq2; lq2 := rest lq2 - qrc := convert(q2)@PRC - if not empty? lr - then - for r in reverse(lr) for v in reverse(lv) repeat - qrc := eval(qrc,v,r) - lv := cons((mainVariable(qrc) :: Symbol),lv) - urc: URC := univariate(qrc)@URC - urcRoots := allRootsOf(urc)$RC - for urcRoot in urcRoots repeat - if positive? urcRoot - then - toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) - toSave - - positiveSolve(lp: List(P), info?:Boolean, lextri?: Boolean): List REALSOL == - lts: List TS - lq: List(Q) := [convert(p)$Q for p in lp] - if lextri? - then - lts := zeroSetSplit(lq,false)$lextripack - else - lts := zeroSetSplit(lq,true,info?)$TS - lsts: List ST := [] - for ts in lts repeat - lsts := concat(squareFree(ts), lsts) - lsts := removeSuperfluousQuasiComponents(lsts)$quasicomppack - lr: REALSOL := [] - lv: List Symbol := [] - toSee := [[lr,lv,convert(sts)@(List Q2)]$WIP for sts in lsts] - toSave: List REALSOL := [] - while not empty? toSee repeat - wip := first toSee; toSee := rest toSee - lr := wip.reals; lv := wip.vars; lq2 := wip.pols - (empty? lq2) and (not empty? lr) => - toSave := cons(reverse(lr),toSave) - q2 := first lq2; lq2 := rest lq2 - qrc := convert(q2)@PRC - if not empty? lr - then - for r in reverse(lr) for v in reverse(lv) repeat - qrc := eval(qrc,v,r) - lv := cons((mainVariable(qrc) :: Symbol),lv) - urc: URC := univariate(qrc)@URC - urcRoots := allRootsOf(urc)$RC - for urcRoot in urcRoots repeat - if positive? urcRoot - then - toSee := cons([cons(urcRoot,lr),lv,lq2]$WIP, toSee) - toSave - - positiveSolve(lp: List(P), info?:Boolean): List REALSOL == - positiveSolve(lp, info?, false) - - positiveSolve(lp: List(P)): List REALSOL == - positiveSolve(lp, false, false) - - univariateSolve(ts: TS): List RUR == - toSee: List ST := squareFree(ts) - toSave: List RUR := [] - for st in toSee repeat - lus: List ST := rur(st,true)$rurpack - for us in lus repeat - g: U := univariate(select(us,newv)::Q2)$Q2 - lc: LP := [convert(q2)@P for q2 in parts(collectUpper(us,newv)$ST)$ST] - toSave := cons([g,lc]$RUR, toSave) - toSave - - univariateSolve(lp: List(P), info?:Boolean, check?:Boolean, lextri?: Boolean): List RUR == - lts: List TS - lq: List(Q) := [convert(p)$Q for p in lp] - if lextri? - then - lts := zeroSetSplit(lq,false)$lextripack - else - lts := zeroSetSplit(lq,true,info?)$TS - toSee: List ST := [] - for ts in lts repeat - toSee := concat(squareFree(ts), toSee) - toSee := removeSuperfluousQuasiComponents(toSee)$quasicomppack - toSave: List RUR := [] - if check? - then - lq2: List(Q2) := [convert(p)$Q2 for p in lp] - for st in toSee repeat - lus: List ST := rur(st,true)$rurpack - for us in lus repeat - if check? - then - rems: List(Q2) := [removeZero(q2,us)$ST for q2 in lq2] - not every?(zero?,rems) => - output(st::OutputForm)$OutputPackage - output("Has a bad RUR component:")$OutputPackage - output(us::OutputForm)$OutputPackage - error "univariateSolve$ZDSOLVE: bad RUR" - g: U := univariate(select(us,newv)::Q2)$Q2 - lc: LP := [convert(q2)@P for q2 in parts(collectUpper(us,newv)$ST)$ST] - toSave := cons([g,lc]$RUR, toSave) - toSave - - univariateSolve(lp: List(P), info?:Boolean, check?:Boolean): List RUR == - univariateSolve(lp,info?,check?,false) - - univariateSolve(lp: List(P), info?:Boolean): List RUR == - univariateSolve(lp,info?,false,false) - - univariateSolve(lp: List(P)): List RUR == - univariateSolve(lp,false,false,false) - -@ -\section{License} -<>= ---Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. ---All rights reserved. --- ---Redistribution and use in source and binary forms, with or without ---modification, are permitted provided that the following conditions are ---met: --- --- - Redistributions of source code must retain the above copyright --- notice, this list of conditions and the following disclaimer. --- --- - Redistributions in binary form must reproduce the above copyright --- notice, this list of conditions and the following disclaimer in --- the documentation and/or other materials provided with the --- distribution. --- --- - Neither the name of The Numerical ALgorithms Group Ltd. nor the --- names of its contributors may be used to endorse or promote products --- derived from this software without specific prior written permission. --- ---THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS ---IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ---TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ---PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER ---OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ---EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ---PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ---PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ---LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ---NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ---SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -@ -<<*>>= -<> - -<> -<> -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 5d65de8..7895929 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -935,5 +935,7 @@ bookvol10.4 add packages
bookvol10.4 add packages
20090209.01.tpd.patch bookvol10.4 add packages
+20090209.02.tpd.patch +bookvol10.4 add packages