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}
+
+<<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)
+
+@
+<<DIRPROD2.dotabb>>=
+"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}
+
+<<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
+
+@
+<<ESTOOLS.dotabb>>=
+"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}
+
+<<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]
+
+@
+<<ESTOOLS1.dotabb>>=
+"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}
+
+<<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)
+
+@
+<<ESTOOLS2.dotabb>>=
+"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}
+
+<<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")
+
+@
+<<EXPRTUBE.dotabb>>=
+"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}
+
+<<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]
+
+@
+<<FGLMICPK.dotabb>>=
+"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}
+
+<<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
+
+@
+<<IRURPK.dotabb>>=
+"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}
+<<LexTriangularPackage.input>>=
+-- 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.help>>=
+====================================================================
+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}
+
+<<package LEXTRIPK LexTriangularPackage>>=
+)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.dotabb>>=
+"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}
+
+<<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
+
+@
+<<NORMRETR.dotabb>>=
+"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}
+
+<<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)
+
+@
+<<NUMTUBE.dotabb>>=
+"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}
+
+<<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
+
+@
+<<YSTREAM.dotabb>>=
+"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}
+
+<<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   
+
+@
+<<PSETPK.dotabb>>=
+"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}
+
+<<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)
+
+@
+<<RURPK.dotabb>>=
+"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}
+
+<<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"
+
+@
+<<RESLATC.dotabb>>=
+"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}
+
+<<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.2<p2.2 else p1.1<p2.1
+       lex lp==(sort$(L PAIR))(lexorder(#1,#2),lp)
+       slex ls==lex([[i,j] for i in srt(#1<#2,ls) for j in ls])
+       inverse ls==[lss.2 for lss in
+                    lex([[j,i] for i in srt(#1<#2,ls) for j in ls])]
+
+       tab(ls:(PAIR))==(tableau tab1 slex ls )
+
+       maxrow(n,a,b,c,d,llls)==
+        if null llls or null(first llls)
+        then [n,a,b,c]$RC
+        else (fst:=first first llls;rst:=rest first llls;
+              if fst.1>n.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.dotabb>>=
+"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}
+
+<<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
+
+@
+<<TEX1.dotabb>>=
+"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}
+
+<<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}
+<<package SOLVETRA TransSolvePackage>>=
+
+     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.dotabb>>=
+"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}
+
+<<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"
+
+@
+<<SOLVESER.dotabb>>=
+"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}
+
+<<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))
+
+@
+<<TUBETOOL.dotabb>>=
+"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}
+
+<<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]
+
+@
+<<TWOFACT.dotabb>>=
+"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}
+
+<<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<j then cbound := j
+       (2*cbound*lcm)::PI -- adjusted by lcm to prepare for exquo in ghensel
+
+     remp(t: Z,q:PI): Z == ((t := t rem q)<0 => 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<ddRep repeat
+         -- q must be a new prime number at each iteration
+         q:=nextPrime(q)$IntegerPrimesPackage(Z) pretend PI
+         (rr:=lcm rem q) = 0$Z => "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<degree m =>
+         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.dotabb>>=
+"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}
+
+<<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])
+
+@
+<<UPDECOMP.dotabb>>=
+"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}
+
+<<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]
+
+@
+<<UPDIVP.dotabb>>=
+"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}
+
+<<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
+
+@
+<<UTS2.dotabb>>=
+"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}
+
+<<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<n>=f(y,y',..,y<n-1>)} such that
+      ++ \spad{y<i>(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<n>]
+      -- integrate [y',..,y<n>] to get [y,..,y<n-1>]
+      yil := [lazyIntegrate(c,y)$STT for c in cl for y in rest yl]
+      -- use y<n> = f(y,..,y<n-1>)
+      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.dotabb>>=
+"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}
+
+<<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
+
+@
+<<VECTOR2.dotabb>>=
+"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}
+
+<<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
+
+@
+<<VIEWDEF.dotabb>>=
+"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}
+
+<<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
+
+@
+<<VIEW.dotabb>>=
+"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}
+
+<<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)
+
+@
+<<WEIER.dotabb>>=
+"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.dotabb>>=
+"XEXPPKG" [color="#FF4488",href="bookvol10.4.pdf#nameddest=XEXPPKG"]
+
+@
+<<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)
+
+@
+<<XEXPPKG.dotabb>>=
+"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.
+<<ZeroDimensionalSolvePackage.input>>=
+-- 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.help>>=
+====================================================================
+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}
+
+<<package ZDSOLVE ZeroDimensionalSolvePackage>>=
+)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.dotabb>>=
+"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
 <<package DFINTTLS DefiniteIntegrationTools>>
 <<package DEGRED DegreeReductionPackage>>
 <<package DIOSP DiophantineSolutionPackage>>
+<<package DIRPROD2 DirectProductFunctions2>>
 <<package DLP DiscreteLogarithmPackage>>
 <<package DISPLAY DisplayPackage>>
 <<package DDFACT DistinctDegreeFactorize>>
@@ -89606,6 +101775,9 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package EVALCYC EvaluateCycleIndicators>>
 <<package ESCONT ExpertSystemContinuityPackage>>
 <<package ESCONT1 ExpertSystemContinuityPackage1>>
+<<package ESTOOLS ExpertSystemToolsPackage>>
+<<package ESTOOLS1 ExpertSystemToolsPackage1>>
+<<package ESTOOLS2 ExpertSystemToolsPackage2>>
 <<package EXPR2 ExpressionFunctions2>>
 <<package EXPRSOL ExpressionSolve>>
 <<package ES1 ExpressionSpaceFunctions1>>
@@ -89613,12 +101785,14 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package EXPRODE ExpressionSpaceODESolver>>
 <<package OMEXPR ExpressionToOpenMath>>
 <<package EXPR2UPS ExpressionToUnivariatePowerSeries>>
+<<package EXPRTUBE ExpressionTubePlot>>
 <<package E04AGNT e04AgentsPackage>>
 
 <<package FACTFUNC FactoredFunctions>>
 <<package FR2 FactoredFunctions2>>
 <<package FRUTIL FactoredFunctionUtilities>>
 <<package FACUTIL FactoringUtilities>>
+<<package FGLMICPK FGLMIfCanPackage>>
 <<package FORDER FindOrderFinite>>
 <<package FAMR2 FiniteAbelianMonoidRingFunctions2>>
 <<package FDIV2 FiniteDivisorFunctions2>>
@@ -89723,6 +101897,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package IR2F IntegrationResultToFunction>>
 <<package INTTOOLS IntegrationTools>>
 <<package IPRNTPK InternalPrintPackage>>
+<<package IRURPK InternalRationalUnivariateRepresentationPackage>>
 <<package IRREDFFX IrredPolyOverFiniteField>>
 <<package IRSN IrrRepSymNatPackage>>
 <<package INVLAPLA InverseLaplaceTransform>>
@@ -89733,6 +101908,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package LAPLACE LaplaceTransform>>
 <<package LAZM3PK LazardSetSolvingPackage>>
 <<package LEADCDET LeadingCoefDetermination>>
+<<package LEXTRIPK LexTriangularPackage>>
 <<package LINDEP LinearDependence>>
 <<package LODOF LinearOrdinaryDifferentialOperatorFactorizer>>
 <<package LODOOPS LinearOrdinaryDifferentialOperatorsOps>>
@@ -89804,6 +101980,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package NLINSOL NonLinearSolvePackage>>
 <<package NORMPK NormalizationPackage>>
 <<package NORMMA NormInMonogenicAlgebra>>
+<<package NORMRETR NormRetractPackage>>
 <<package NPCOEF NPCoef>>
 <<package NFINTBAS NumberFieldIntegralBasis>>
 <<package NUMFMT NumberFormats>>
@@ -89814,6 +101991,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package NCEP NumericComplexEigenPackage>>
 <<package NCNTFRAC NumericContinuedFraction>>
 <<package NREP NumericRealEigenPackage>>
+<<package NUMTUBE NumericTubePlot>>
 
 <<package OCTCT2 OctonionCategoryFunctions2>>
 <<package ODEINT ODEIntegration>>
@@ -89831,6 +102009,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package PADEPAC PadeApproximantPackage>>
 <<package PADE PadeApproximants>>
 <<package PWFFINTB PAdicWildFunctionFieldIntegralBasis>>
+<<package YSTREAM ParadoxicalCombinatorsForStreams>>
 <<package PLEQN ParametricLinearEquations>>
 <<package PARPC2 ParametricPlaneCurveFunctions2>>
 <<package PARSC2 ParametricSpaceCurveFunctions2>>
@@ -89877,6 +102056,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package PINTERPA PolynomialInterpolationAlgorithms>>
 <<package PNTHEORY PolynomialNumberTheoryFunctions>>
 <<package POLYROOT PolynomialRoots>>
+<<package PSETPK PolynomialSetUtilitiesPackage>>
 <<package SOLVEFOR PolynomialSolveByFormulas>>
 <<package PSQFR PolynomialSquareFree>>
 <<package POLY2UP PolynomialToUnivariatePolynomial>>
@@ -89918,6 +102098,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package ODERAT RationalLODE>>
 <<package RATRET RationalRetractions>>
 <<package ODERTRIC RationalRicDE>>
+<<package RURPK RationalUnivariateRepresentationPackage>>
 <<package POLUTIL RealPolynomialUtilitiesPackage>>
 <<package REALSOLV RealSolvePackage>>
 <<package REAL0 RealZeroPackage>>
@@ -89933,6 +102114,7 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package REPSQ RepeatedSquaring>>
 <<package REP1 RepresentationPackage1>>
 <<package REP2 RepresentationPackage2>>
+<<package RESLATC ResolveLatticeCompletion>>
 <<package RETSOL RetractSolvePackage>>
 
 <<package SAERFFC SAERationalFunctionAlgFactor>>
@@ -89966,10 +102148,12 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package SGCF SymmetricGroupCombinatoricFunctions>>
 <<package SYMFUNC SymmetricFunctions>>
 
+<<package TABLBUMP TableauxBumpers>>
 <<package TBCMPPK TabulatedComputationPackage>>
 <<package TANEXP TangentExpansions>>
 <<package UTSSOL TaylorSolve>>
 <<package TEMUTL TemplateUtilities>>
+<<package TEX1 TexFormat1>>
 <<package TOOLSIGN ToolsForSign>>
 <<package DRAW TopLevelDrawFunctions>>
 <<package DRAWCURV TopLevelDrawFunctionsForAlgebraicCurves>>
@@ -89981,26 +102165,43 @@ WildFunctionFieldIntegralBasis(K,R,UP,F): Exports == Implementation where
 <<package TRMANIP TranscendentalManipulations>>
 <<package RDETR TranscendentalRischDE>>
 <<package RDETRS TranscendentalRischDESystem>>
+<<package SOLVETRA TransSolvePackage>>
+<<package SOLVESER TransSolvePackageService>>
 <<package TRIMAT TriangularMatrixOperations>>
 <<package TRIGMNIP TrigonometricManipulations>>
+<<package TUBETOOL TubePlotTools>>
 <<package CLIP TwoDimensionalPlotClipping>>
+<<package TWOFACT TwoFactorize>>
 
+<<package UNIFACT UnivariateFactorize>>
 <<package UFPS1 UnivariateFormalPowerSeriesFunctions>>
 <<package ULS2 UnivariateLaurentSeriesFunctions2>>
 <<package UPOLYC2 UnivariatePolynomialCategoryFunctions2>>
 <<package UPCDEN UnivariatePolynomialCommonDenominator>>
+<<package UPDECOMP UnivariatePolynomialDecompositionPackage>>
+<<package UPDIVP UnivariatePolynomialDivisionPackage>>
 <<package UP2 UnivariatePolynomialFunctions2>>
 <<package UPMP UnivariatePolynomialMultiplicationPackage>>
 <<package UPSQFREE UnivariatePolynomialSquareFree>>
 <<package UPXS2 UnivariatePuiseuxSeriesFunctions2>>
 <<package OREPCTO UnivariateSkewPolynomialCategoryOps>>
+<<package UTS2 UnivariateTaylorSeriesFunctions2>>
+<<package UTSODE UnivariateTaylorSeriesODESolver>>
 <<package UNISEG2 UniversalSegmentFunctions2>>
 <<package UDPO UserDefinedPartialOrdering>>
 <<package UDVO UserDefinedVariableOrdering>>
 <<package UTSODETL UTSodetools>>
 
+<<package VECTOR2 VectorFunctions2>>
+<<package VIEWDEF ViewDefaultsPackage>>
+<<package VIEW ViewportPackage>>
+
+<<package WEIER WeierstrassPreparation>>
 <<package WFFINTBS WildFunctionFieldIntegralBasis>>
 
+<<package XEXPPKG XExponentialPackage>>
+
+<<package ZDSOLVE ZeroDimensionalSolvePackage>>
 @
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \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.
 <<environment>>=
 
 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}
-<<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.2<p2.2 else p1.1<p2.1
-       lex lp==(sort$(L PAIR))(lexorder(#1,#2),lp)
-       slex ls==lex([[i,j] for i in srt(#1<#2,ls) for j in ls])
-       inverse ls==[lss.2 for lss in
-                    lex([[j,i] for i in srt(#1<#2,ls) for j in ls])]
-
-       tab(ls:(PAIR))==(tableau tab1 slex ls )
-
-       maxrow(n,a,b,c,d,llls)==
-        if null llls or null(first llls)
-        then [n,a,b,c]$RC
-        else (fst:=first first llls;rst:=rest first llls;
-              if fst.1>n.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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package TABLBUMP TableauxBumpers>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package UTS2 UnivariateTaylorSeriesFunctions2>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package TEX1 TexFormat1>>
-@
-\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}
-<<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}
-<<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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package ESTOOLS ExpertSystemToolsPackage>>
-<<package ESTOOLS1 ExpertSystemToolsPackage1>>
-<<package ESTOOLS2 ExpertSystemToolsPackage2>>
-@
-\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}
-<<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}
-<<package SOLVETRA TransSolvePackage>>=
-
-     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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package SOLVETRA TransSolvePackage>>
-<<package SOLVESER TransSolvePackageService>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package PSETPK PolynomialSetUtilitiesPackage>>
-@
-\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}
-<<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}
-<<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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package TUBETOOL TubePlotTools>>
-<<package EXPRTUBE ExpressionTubePlot>>
-<<package NUMTUBE NumericTubePlot>>
-@
-\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}
-<<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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package NORMRETR NormRetractPackage>>
-<<package TWOFACT TwoFactorize>>
-@
-\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}
-<<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<j then cbound := j
-       (2*cbound*lcm)::PI -- adjusted by lcm to prepare for exquo in ghensel
-
-     remp(t: Z,q:PI): Z == ((t := t rem q)<0 => 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<ddRep repeat
-         -- q must be a new prime number at each iteration
-         q:=nextPrime(q)$IntegerPrimesPackage(Z) pretend PI
-         (rr:=lcm rem q) = 0$Z => "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<degree m =>
-         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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package UNIFACT UnivariateFactorize>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package UPDECOMP UnivariatePolynomialDecompositionPackage>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package UPDIVP UnivariatePolynomialDivisionPackage>>
-@
-\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}
-<<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<n>=f(y,y',..,y<n-1>)} such that
-      ++ \spad{y<i>(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<n>]
-      -- integrate [y',..,y<n>] to get [y,..,y<n-1>]
-      yil := [lazyIntegrate(c,y)$STT for c in cl for y in rest yl]
-      -- use y<n> = f(y,..,y<n-1>)
-      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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package UTSODE UnivariateTaylorSeriesODESolver>>
-@
-\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}
-<<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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package VECTOR2 VectorFunctions2>>
-<<package DIRPROD2 DirectProductFunctions2>>
- 
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package VIEWDEF ViewDefaultsPackage>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package VIEW ViewportPackage>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package RESLATC ResolveLatticeCompletion>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package WEIER WeierstrassPreparation>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package XEXPPKG XExponentialPackage>>
-@
-\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}
-<<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}
-<<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.
-@
-<<*>>=
-<<license>>
- 
-<<package YSTREAM ParadoxicalCombinatorsForStreams>>
-@
-\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}
-<<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}
-<<LexTriangularPackage.input>>=
--- 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.help>>=
-====================================================================
-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
-
-@
-<<package LEXTRIPK LexTriangularPackage>>=
-)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}
-<<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}
-<<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.
-<<ZeroDimensionalSolvePackage.input>>=
--- 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.help>>=
-====================================================================
-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
-
-@
-<<package ZDSOLVE ZeroDimensionalSolvePackage>>=
-)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}
-<<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.
-@
-<<*>>=
-<<license>>
-
-<<package FGLMICPK FGLMIfCanPackage>>
-<<package LEXTRIPK LexTriangularPackage>>
-<<package IRURPK InternalRationalUnivariateRepresentationPackage>>
-<<package RURPK RationalUnivariateRepresentationPackage>>
-<<package ZDSOLVE ZeroDimensionalSolvePackage>>
-@
-\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<br/>
 bookvol10.4 add packages<br/>
 <a href="patches/20090209.01.tpd.patch">20090209.01.tpd.patch</a>
 bookvol10.4 add packages<br/>
+<a href="patches/20090209.02.tpd.patch">20090209.02.tpd.patch</a>
+bookvol10.4 add packages<br/>
  </body>
 </html>
