login  home  contents  what's new  discussion  bug reports     help  links  subscribe  changes  refresh  edit

Edit detail for Cylindrical Algebraic Decomposition revision 1 of 1

1
Editor: 127.0.0.1
Time: 2007/11/06 20:54:09 GMT-8
Note: copied from axiom-developer

changed:
-
**On Wednesday, October 12, 2005 5:29 PM Renaud Rioboo wrote:**

Dear Axiom fans,

In the last few years there have been a regain of interest in some Computer
Algebra users circles about Cylindrical Algebraic Decomposition (aka CAD). As
some of you may know my thesis was about CAD and I am regularly receiving
queries about CAD and the Axiom implementation I wrote.

I already privately gave sources or ran particular problems for some people
but I have never officially released my sources because I do not think they
are at production level and many work has still to be done on them.

Recently Martin Rubey thought it could be a good idea to release them and I
have of course no objection on that point nor on sharing these sources with
the community. If there is some interest on it you may include it into the
Axiom distribution with the same permissions than the rest of the software.

While I wait for my lab to give me the necessary permissions to be able to use
Axiom and export this software you may find it's sources at the unlisted url

http://rioboo.free.fr/CadPub/

I would like to add just a few words about that work which is a
straightforward implementation of the standard papers by Arnon, Collins and
McCallum which are more than 20 years old now.

My work on Cad is 15 years old and was developped for the defense of my thesis
where CAD was an sample application for real algebraic numbers
manipulations. By the time I wrote it I also needed some subresultant
calculations which were not in Axiom (Scratchpad by that time) and the
required machinery to work with real algebraic numbers.

Along the times, real algebraic numbers were included into Axiom and
subresultant calculations which are used in several places of the Axiom
Library were modified to all use Lionel Ducos's package which enables a
performance gain. While making these modifications to Axiom I tried to keep my
CAD package up-to-date with the Axiom Library and have used it as a test for
other packages. It thus should compile under recent Axiom versions and should
compute something that resembles a CAD.

Don't expect this package to be the absolute CAD program, I never found time
to further work on it in order to include many enhancements which are present
in other CAD packages. While Axiom versions evolved I had to remove what I
thought were enhancements and remove some support for generalization. As of
today it only includes one projection method which is the McCallum projection
and no reconstruction nor adjacency's are taken into account.

However it did reasonabily compare with more recent techniques such as
Rational Univariate Representation (aka RUR) for simple cases though it could
not produce results for some more complicated cases. By the time this
comparison was made Axiom had some severe memory restrictions which seem to
have disappear now. I thus think that many objections to using CAD could now
be revised.

For hard problems this package should thus not be worse than any other CAD
package except that you cannot fall into an optimzation drawback :-) There is
no optimization !

I will of course try to maintain the package to the best of my ability. One
thing I should do is include comments describing the different functions, but
even that requires going into the code and the algorithms which are quite old
for me now.

Let me know if there is some interest on it.

Best regards,

Renaud

<hr />

\begin{spad}
)ab pack CADU CylindricalAlgebraicDecompositionUtilities

CylindricalAlgebraicDecompositionUtilities(R,P) : PUB == PRIV where

-- Tese are some standard tools which are needed to compute with univariate
-- polynomials. 
--
-- A gcd basis for a set of polynomials is a set of pairwise relatively prime 
-- polynomials which all divide the original set and whose product is the
-- same than the product of the original set.
--
-- A square free basis for a list of polynomials is just a list
-- of square free polynomials which are pairwise relatively primes and have
-- the same roots than the original polynomials.

  R : GcdDomain
  P : UnivariatePolynomialCategory(R)

  PUB == with
      squareFreeBasis : List(P) -> List(P)
        ++ 
      gcdBasis : List(P) -> List(P)
        ++ decompose a list of polynomials into pairwise relatively 
        ++ prime polynomials
      gcdBasisAdd : (P,List(P)) -> List(P)
        ++ add one polynomial to list of pairwise relatively prime polynomials

  PRIV == add

     squareFreeBasis(lpols) ==
       lpols = [] => []
       pol := first(lpols)
       sqpol := unitCanonical(squareFreePart(pol))
       gcdBasis(cons(sqpol,squareFreeBasis(rest(lpols))))
         
     gcdBasisAdd(p,lpols) ==
       (degree(p) = 0) => lpols
       null lpols => [unitCanonical p]
       p1 := first(lpols)
       g := gcd(p,p1)
       (degree(g) = 0) => cons(p1,gcdBasisAdd(p,rest lpols))
       p := (p exquo g)::P
       p1 := (p1 exquo g)::P
       basis := gcdBasisAdd(p,rest(lpols))
       if degree(p1) > 0 then basis := cons(p1,basis)
       gcdBasisAdd(g,basis)
       

     gcdBasis(lpols) ==
       (#lpols <= 1) => lpols
       basis := gcdBasis(rest lpols)
       gcdBasisAdd(first(lpols),basis)
\end{spad}

\begin{spad}
)ab domain SCELL SimpleCell

-- This domain is made to work with one-dimensional semi-algebraic cells
-- ie either an algebraic point, either an interval. The point is specified as 
-- specification of an algebraic value.

SimpleCell(TheField,ThePols) : PUB == PRIV where
  TheField : RealClosedField
  ThePols : UnivariatePolynomialCategory(TheField)
  O           ==> OutputForm
  B           ==> Boolean
  Z           ==> Integer
  N           ==> NonNegativeInteger

--  VARS ==> VariationsPackage(TheField,ThePols)
  VARS ==> RealPolynomialUtilitiesPackage(TheField,ThePols)
  LF ==> List(TheField)

  PUB == CoercibleTo(O) with

     allSimpleCells : (ThePols,Symbol) -> List %
     allSimpleCells : (List(ThePols),Symbol) -> List %
     hasDimension? : % -> B
     samplePoint : % -> TheField
     stablePol : % -> ThePols
     variableOf : % -> Symbol
     separe : (LF,TheField,TheField) -> LF
     pointToCell : (TheField,B,Symbol) -> %

  PRIV == add

     Rep := Record(samplePoint:TheField,
                   hasDim:B,
                   varOf:Symbol)

     samplePoint(c) == c.samplePoint

     stablePol(c) == error "Prout"

     hasDimension?(c) == c.hasDim

     variableOf(c) == c.varOf

     coerce(c:%):O ==
       o : O := ((c.varOf)::O) = ((c.samplePoint)::O)
       brace [o,(c.hasDim)::O]

     separe(liste,gauche,droite) ==
       milieu : TheField := (gauche + droite) / (2::TheField)
       liste = [] => [milieu]
       #liste = 1 => [gauche,first(liste),droite]
       nbe := first(liste)
       lg :List(TheField) := []
       ld :List(TheField) := rest(liste)
       sg := sign(milieu-nbe)
       while sg > 0 repeat
         lg := cons(nbe,lg)
         ld = [] => return(separe(reverse(lg),gauche,milieu))
         nbe := first(ld)
         sg := sign(milieu-nbe)
         ld := rest(ld)
       sg < 0 =>
         append(separe(reverse(lg),gauche,milieu),
                rest(separe(cons(nbe,ld),milieu,droite)))
       newDroite := (gauche+milieu)/(2::TheField)
       null lg =>
           newGauche := (milieu+droite)/(2::TheField)
           while newGauche >= first(ld) repeat
             newGauche := (milieu+newGauche)/(2::TheField)
           append([gauche,milieu],separe(ld,newGauche,droite))
       while newDroite <= first(lg) repeat
         newDroite := (newDroite+milieu)/(2::TheField)
       newGauche := (milieu+droite)/(2::TheField)
       null ld => append(separe(reverse(lg),gauche,newDroite),[milieu,droite])
       while newGauche >= first(ld) repeat
         newGauche := (milieu+newGauche)/(2::TheField)
       append(separe(reverse(lg),gauche,newDroite),
              cons(milieu,separe(ld,newGauche,droite)))


     pointToCell(sp,hasDim?,varName) ==
       [sp,hasDim?,varName]$Rep

     allSimpleCells(p:ThePols,var:Symbol) ==
       allSimpleCells([p],var)

     PACK ==> CylindricalAlgebraicDecompositionUtilities(TheField,ThePols)
     allSimpleCells(lp:List(ThePols),var:Symbol) ==
       lp1 := gcdBasis(lp)$PACK
       null(lp1) => [pointToCell(0,true,var)]
       b := ("max" / [ boundOfCauchy(p)$VARS for p in lp1 ])::TheField
       l := "append" / [allRootsOf(makeSUP(unitCanonical(p))) for p in lp1]
       l := sort(l)
       l1 := separe(l,-b,b)
       res : List(%) := [pointToCell(first(l1),true,var)]
       l1 := rest(l1)
       while not(null(l1)) repeat
         res := cons(pointToCell(first(l1),false,var),res)
         l1 := rest(l1)
         l1 = [] => return(error "Liste vide")
         res := cons(pointToCell(first(l1),true,var),res)
         l1 := rest(l1)
       reverse! res
\end{spad}

\begin{spad}
)ab domain CELL Cell

Cell(TheField) : PUB == PRIV where
  TheField : RealClosedField

  ThePols ==> Polynomial(TheField)

  O           ==> OutputForm
  B           ==> Boolean
  Z           ==> Integer
  N           ==> NonNegativeInteger
  BUP         ==> SparseUnivariatePolynomial(TheField)
  SCELL       ==> SimpleCell(TheField,BUP)


  PUB == CoercibleTo(O) with

     samplePoint : % -> List(TheField)
     dimension : % -> N
     hasDimension? :  (%,Symbol) -> B
     makeCell : List(SCELL) -> %
     makeCell : (SCELL,%) -> %
     mainVariableOf : % -> Symbol
     variablesOf : % -> List Symbol
     projection : % -> Union(%,"failed")
     


  PRIV == add

    Rep := List(SCELL)

    coerce(c:%):O == 
      paren [sc::O for sc in c]

    projection(cell) ==
      null cell => error "projection: should not appear"
      r := rest(cell)
      null r => "failed"
      r

    makeCell(l:List(SCELL)) == l

    makeCell(scell,toAdd) == cons(scell,toAdd)

    mainVariableOf(cell) == 
      null(cell) => 
        error "Should not appear"
      variableOf(first(cell))

    variablesOf(cell) ==
      null(cell) => []
      cons(mainVariableOf(cell),variablesOf(rest(cell)::%))

    dimension(cell) ==
      null(cell) => 0
      hasDimension?(first(cell)) => 1+dimension(rest(cell))
      dimension(rest(cell))

    hasDimension?(cell,var) ==
      null(cell) => 
        error "Should not appear"
      sc : SCELL := first(cell)
      v := variableOf(sc)
      v = var => hasDimension?(sc)
      v < var => false
      v > var => true
      error "Caca Prout"

    samplePoint(cell) ==
      null(cell) => []
      cons(samplePoint(first(cell)),samplePoint(rest(cell)))
\end{spad}

\begin{spad}
)ab pack CAD CylindricalAlgebraicDecompositionPackage

CylindricalAlgebraicDecompositionPackage(TheField) : PUB == PRIV where

  TheField : RealClosedField

  ThePols ==> Polynomial(TheField)
  P ==> ThePols
  BUP ==> SparseUnivariatePolynomial(TheField)
  RUP ==> SparseUnivariatePolynomial(ThePols)

  Z           ==> Integer
  N           ==> NonNegativeInteger

  CELL ==> Cell(TheField)
  SCELL ==> SimpleCell(TheField,BUP)

  PUB == with

      cylindricalDecomposition: List P ->        List CELL
      cylindricalDecomposition: (List(P),List(Symbol)) ->        List CELL
      projectionSet: (List RUP)                ->    List P
      coefficientSet: RUP                ->    List P
      discriminantSet : List RUP -> List(P)
      resultantSet :  List RUP -> List P 
      principalSubResultantSet : (RUP,RUP) -> List P
      specialise : (List(ThePols),CELL) -> List(BUP)

  PRIV == add

     cylindricalDecomposition(lpols) ==
       lv : List(Symbol) := []
       for pol in lpols repeat
         ground?(pol) => "next pol"
         lv := removeDuplicates(append(variables(pol),lv))
       lv := reverse(sort(lv))
       cylindricalDecomposition(lpols,lv)

     cylindricalDecomposition(lpols,lvars) ==
       lvars = [] => error("CAD: cylindricalDecomposition: empty list of vars")
       mv := first(lvars)
       lv := rest(lvars)
       lv = [] =>
         lp1 := [ univariate(pol) for pol in lpols ]
         scells := allSimpleCells(lp1,mv)$SCELL
         [ makeCell([scell]) for scell in scells ]
       lpols1 := projectionSet [univariate(pol,mv) for pol in lpols]
       previousCad := cylindricalDecomposition(lpols1,lv)
       res : List(CELL) := []
       for cell in previousCad repeat
         lspec := specialise(lpols,cell)
         scells := allSimpleCells(lspec,mv)
         res := append(res,[makeCell(scell,cell) for scell in scells])
       res


     PACK1 ==> CylindricalAlgebraicDecompositionUtilities(ThePols,RUP)
     PACK2 ==> CylindricalAlgebraicDecompositionUtilities(TheField,BUP)

     specialise(lpols,cell) ==
       lpols = [] => error("CAD: specialise: empty list of pols")
       sp := samplePoint(cell)
       vl := variablesOf(cell)
       res : List(BUP) := []
       for pol in lpols repeat
         p1 := univariate(eval(pol,vl,sp))
--         zero?(p1) => return(error "Bad sepcialise")
         degree(p1) = 0 => "next pol"
         res := cons(p1,res)
       res


     coefficientSet(pol) ==
       res : List(ThePols) := []
       for c in coefficients(pol) repeat
         ground?(c) => return(res)
         res := cons(c,res)
       res

     SUBRES ==> SubResultantPackage(ThePols,RUP)
     discriminantSet(lpols) ==
       res : List(ThePols) := []
       for p in lpols repeat
         v := subresultantVector(p,differentiate(p))$SUBRES
         not(zero?(degree(v.0))) => return(error "Bad discriminant")
         d : ThePols :=  leadingCoefficient(v.0)
--         d := discriminant p
         zero?(d) => return(error "Non Square Free polynomial")
         if not(ground? d) then res := cons(d,res)
       res

     principalSubResultantSet(p,q) ==
        if degree(p) < degree(q)
        then (p,q) := (q,p)
        if degree(p) = degree(q)
        then (p,q) := (q,pseudoRemainder(p, q))
        v := subresultantVector(p,q)$SUBRES
        [coefficient(v.i,i) for i in 0..(((#v)-2)::N)]

     resultantSet(lpols) ==
       res : List(ThePols) := []
       laux := lpols
       for p in lpols repeat
         laux := rest(laux)
         for q in laux repeat
           r : ThePols :=  first(principalSubResultantSet(p,q))
--           r := resultant(p,q)
           zero?(r) => return(error "Non relatively prime polynomials")
           if not(ground? r) then res := cons(r,res)
       res

     projectionSet(lpols) ==
       res : List(ThePols) := []
       for p in lpols repeat
         c := content(p)
         ground?(c) => "next p"
         res := cons(c,res)
       lp1 := [primitivePart p for p in lpols]
       f : ((RUP,RUP) -> Boolean) := (degree(#1) <= degree(#2))
       lp1 := sort(f,lp1)
       lsqfrb := squareFreeBasis(lp1)$PACK1
       lsqfrb := sort(f,lsqfrb)
       for p in lp1 repeat
         res := append(res,coefficientSet(p))
       res := append(res,discriminantSet(lsqfrb))
       append(res,resultantSet(lsqfrb))
\end{spad}

\begin{axiom}
)lib )dir .
)lib SCELL CELL CAD
Ran := RECLOS(FRAC INT)
Cad := CAD(Ran)
p1 : POLY(Ran) := x^2+y^2-1
p2 : POLY(Ran) := y-x^2
lpols : List(POLY(Ran)) := [p1,p2]
cad := cylindricalDecomposition(lpols)$Cad
precision(30)
ls := [ samplePoint cell for cell in cad]
lf := [ [relativeApprox(coord,2^(-precision()))::Float for coord in point] for point in ls]
lp := [ point(term::List(DoubleFloat))$Point(DoubleFloat) for term in lf ]
[ sign(eval(p1,variables(p1),samplePoint(cell))::Ran) for cell in cad ]
--[ sign(eval(p2,variables(p2),samplePoint(cell))::Ran) for cell in cad ]
\end{axiom}


On Wednesday, October 12, 2005 5:29 PM Renaud Rioboo wrote:

Dear Axiom fans,

In the last few years there have been a regain of interest in some Computer Algebra users circles about Cylindrical Algebraic Decomposition (aka CAD). As some of you may know my thesis was about CAD and I am regularly receiving queries about CAD and the Axiom implementation I wrote.

I already privately gave sources or ran particular problems for some people but I have never officially released my sources because I do not think they are at production level and many work has still to be done on them.

Recently Martin Rubey thought it could be a good idea to release them and I have of course no objection on that point nor on sharing these sources with the community. If there is some interest on it you may include it into the Axiom distribution with the same permissions than the rest of the software.

While I wait for my lab to give me the necessary permissions to be able to use Axiom and export this software you may find it's sources at the unlisted url

http://rioboo.free.fr/CadPub/

I would like to add just a few words about that work which is a straightforward implementation of the standard papers by Arnon, Collins and McCallum? which are more than 20 years old now.

My work on Cad is 15 years old and was developped for the defense of my thesis where CAD was an sample application for real algebraic numbers manipulations. By the time I wrote it I also needed some subresultant calculations which were not in Axiom (Scratchpad by that time) and the required machinery to work with real algebraic numbers.

Along the times, real algebraic numbers were included into Axiom and subresultant calculations which are used in several places of the Axiom Library were modified to all use Lionel Ducos's package which enables a performance gain. While making these modifications to Axiom I tried to keep my CAD package up-to-date with the Axiom Library and have used it as a test for other packages. It thus should compile under recent Axiom versions and should compute something that resembles a CAD.

Don't expect this package to be the absolute CAD program, I never found time to further work on it in order to include many enhancements which are present in other CAD packages. While Axiom versions evolved I had to remove what I thought were enhancements and remove some support for generalization. As of today it only includes one projection method which is the McCallum? projection and no reconstruction nor adjacency's are taken into account.

However it did reasonabily compare with more recent techniques such as Rational Univariate Representation (aka RUR) for simple cases though it could not produce results for some more complicated cases. By the time this comparison was made Axiom had some severe memory restrictions which seem to have disappear now. I thus think that many objections to using CAD could now be revised.

For hard problems this package should thus not be worse than any other CAD package except that you cannot fall into an optimzation drawback :-) There is no optimization !

I will of course try to maintain the package to the best of my ability. One thing I should do is include comments describing the different functions, but even that requires going into the code and the algorithms which are quite old for me now.

Let me know if there is some interest on it.

Best regards,

Renaud


spad
)ab pack CADU CylindricalAlgebraicDecompositionUtilities
CylindricalAlgebraicDecompositionUtilities(R,P) : PUB == PRIV where
-- Tese are some standard tools which are needed to compute with univariate -- polynomials. -- -- A gcd basis for a set of polynomials is a set of pairwise relatively prime -- polynomials which all divide the original set and whose product is the -- same than the product of the original set. -- -- A square free basis for a list of polynomials is just a list -- of square free polynomials which are pairwise relatively primes and have -- the same roots than the original polynomials.
R : GcdDomain P : UnivariatePolynomialCategory(R)
PUB == with squareFreeBasis : List(P) -> List(P) ++ gcdBasis : List(P) -> List(P) ++ decompose a list of polynomials into pairwise relatively ++ prime polynomials gcdBasisAdd : (P,List(P)) -> List(P) ++ add one polynomial to list of pairwise relatively prime polynomials
PRIV == add
squareFreeBasis(lpols) == lpols = [] => [] pol := first(lpols) sqpol := unitCanonical(squareFreePart(pol)) gcdBasis(cons(sqpol,squareFreeBasis(rest(lpols))))
gcdBasisAdd(p,lpols) == (degree(p) = 0) => lpols null lpols => [unitCanonical p] p1 := first(lpols) g := gcd(p,p1) (degree(g) = 0) => cons(p1,gcdBasisAdd(p,rest lpols)) p := (p exquo g)::P p1 := (p1 exquo g)::P basis := gcdBasisAdd(p,rest(lpols)) if degree(p1) > 0 then basis := cons(p1,basis) gcdBasisAdd(g,basis)
gcdBasis(lpols) == (#lpols <= 1) => lpols basis := gcdBasis(rest lpols) gcdBasisAdd(first(lpols),basis)
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/4986109030324487666-25px001.spad using 
      old system compiler.
   CADU abbreviates package CylindricalAlgebraicDecompositionUtilities 
------------------------------------------------------------------------
   initializing NRLIB CADU for CylindricalAlgebraicDecompositionUtilities 
   compiling into NRLIB CADU 
   compiling exported squareFreeBasis : List P -> List P
Time: 0.18 SEC.
compiling exported gcdBasisAdd : (P,List P) -> List P Time: 0.02 SEC.
compiling exported gcdBasis : List P -> List P Time: 0.04 SEC.
(time taken in buildFunctor: 6)
;;; *** |CylindricalAlgebraicDecompositionUtilities| REDEFINED
;;; *** |CylindricalAlgebraicDecompositionUtilities| REDEFINED Time: 0.06 SEC.
Cumulative Statistics for Constructor CylindricalAlgebraicDecompositionUtilities Time: 0.30 seconds
finalizing NRLIB CADU Processing CylindricalAlgebraicDecompositionUtilities for Browser database: --------(squareFreeBasis ((List P) (List P)))--------- --------(gcdBasis ((List P) (List P)))--------- --->-->CylindricalAlgebraicDecompositionUtilities((gcdBasis ((List P) (List P)))): Improper first word in comments: decompose "decompose a list of polynomials into pairwise relatively prime polynomials" --------(gcdBasisAdd ((List P) P (List P)))--------- --->-->CylindricalAlgebraicDecompositionUtilities((gcdBasisAdd ((List P) P (List P)))): Improper first word in comments: add "add one polynomial to list of pairwise relatively prime polynomials" --->-->CylindricalAlgebraicDecompositionUtilities(constructor): Not documented!!!! --->-->CylindricalAlgebraicDecompositionUtilities(): Missing Description ------------------------------------------------------------------------ CylindricalAlgebraicDecompositionUtilities is now explicitly exposed in frame initial CylindricalAlgebraicDecompositionUtilities will be automatically loaded when needed from /var/zope2/var/LatexWiki/CADU.NRLIB/code

spad
)ab domain SCELL SimpleCell
This domain is made to work with one-dimensional semi-algebraic cells -- ie either an algebraic point, either an interval. The point is specified as -- specification of an algebraic value.
SimpleCell(TheField,ThePols) : PUB == PRIV where TheField : RealClosedField ThePols : UnivariatePolynomialCategory(TheField) O ==> OutputForm B ==> Boolean Z ==> Integer N ==> NonNegativeInteger
-- VARS ==> VariationsPackage(TheField,ThePols) VARS ==> RealPolynomialUtilitiesPackage(TheField,ThePols) LF ==> List(TheField)
PUB == CoercibleTo(O) with
allSimpleCells : (ThePols,Symbol) -> List % allSimpleCells : (List(ThePols),Symbol) -> List % hasDimension? : % -> B samplePoint : % -> TheField stablePol : % -> ThePols variableOf : % -> Symbol separe : (LF,TheField,TheField) -> LF pointToCell : (TheField,B,Symbol) -> %
PRIV == add
Rep := Record(samplePoint:TheField, hasDim:B, varOf:Symbol)
samplePoint(c) == c.samplePoint
stablePol(c) == error "Prout"
hasDimension?(c) == c.hasDim
variableOf(c) == c.varOf
coerce(c:%):O == o : O := ((c.varOf)::O) = ((c.samplePoint)::O) brace [o,(c.hasDim)::O]
separe(liste,gauche,droite) == milieu : TheField := (gauche + droite) / (2::TheField) liste = [] => [milieu] #liste = 1 => [gauche,first(liste),droite] nbe := first(liste) lg :List(TheField) := [] ld :List(TheField) := rest(liste) sg := sign(milieu-nbe) while sg > 0 repeat lg := cons(nbe,lg) ld = [] => return(separe(reverse(lg),gauche,milieu)) nbe := first(ld) sg := sign(milieu-nbe) ld := rest(ld) sg < 0 => append(separe(reverse(lg),gauche,milieu), rest(separe(cons(nbe,ld),milieu,droite))) newDroite := (gauche+milieu)/(2::TheField) null lg => newGauche := (milieu+droite)/(2::TheField) while newGauche >= first(ld) repeat newGauche := (milieu+newGauche)/(2::TheField) append([gauche,milieu],separe(ld,newGauche,droite)) while newDroite <= first(lg) repeat newDroite := (newDroite+milieu)/(2::TheField) newGauche := (milieu+droite)/(2::TheField) null ld => append(separe(reverse(lg),gauche,newDroite),[milieu,droite]) while newGauche >= first(ld) repeat newGauche := (milieu+newGauche)/(2::TheField) append(separe(reverse(lg),gauche,newDroite), cons(milieu,separe(ld,newGauche,droite)))
pointToCell(sp,hasDim?,varName) == [sp,hasDim?,varName]$Rep
allSimpleCells(p:ThePols,var:Symbol) == allSimpleCells([p],var)
PACK ==> CylindricalAlgebraicDecompositionUtilities(TheField,ThePols) allSimpleCells(lp:List(ThePols),var:Symbol) == lp1 := gcdBasis(lp)$PACK null(lp1) => [pointToCell(0,true,var)] b := ("max" / [ boundOfCauchy(p)$VARS for p in lp1 ])::TheField l := "append" / [allRootsOf(makeSUP(unitCanonical(p))) for p in lp1] l := sort(l) l1 := separe(l,-b,b) res : List(%) := [pointToCell(first(l1),true,var)] l1 := rest(l1) while not(null(l1)) repeat res := cons(pointToCell(first(l1),false,var),res) l1 := rest(l1) l1 = [] => return(error "Liste vide") res := cons(pointToCell(first(l1),true,var),res) l1 := rest(l1) reverse! res
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/9165941727097331838-25px002.spad using 
      old system compiler.
   SCELL abbreviates domain SimpleCell 
   processing macro definition O ==> OutputForm 
   processing macro definition B ==> Boolean 
   processing macro definition Z ==> Integer 
   processing macro definition N ==> NonNegativeInteger 
   processing macro definition VARS ==> RealPolynomialUtilitiesPackage(TheField,ThePols) 
   processing macro definition LF ==> List TheField 
------------------------------------------------------------------------
   initializing NRLIB SCELL for SimpleCell 
   compiling into NRLIB SCELL 
   compiling exported samplePoint : $ -> TheField
      SCELL;samplePoint;$TheField;1 is replaced by QVELTc0 
Time: 0.03 SEC.
compiling exported stablePol : $ -> ThePols SCELL;stablePol;$ThePols;2 is replaced by errorProut Time: 0 SEC.
compiling exported hasDimension? : $ -> Boolean SCELL;hasDimension?;$B;3 is replaced by QVELTc1 Time: 0 SEC.
compiling exported variableOf : $ -> Symbol SCELL;variableOf;$S;4 is replaced by QVELTc2 Time: 0 SEC.
compiling exported coerce : $ -> OutputForm Time: 0.11 SEC.
compiling exported separe : (List TheField,TheField,TheField) -> List TheField Time: 0.05 SEC.
compiling exported pointToCell : (TheField,Boolean,Symbol) -> $ SCELL;pointToCell;TheFieldBS$;7 is replaced by VECTOR Time: 0 SEC.
compiling exported allSimpleCells : (ThePols,Symbol) -> List $ Time: 0.02 SEC.
processing macro definition PACK ==> CylindricalAlgebraicDecompositionUtilities(TheField,ThePols) compiling exported allSimpleCells : (List ThePols,Symbol) -> List $ Time: 0.12 SEC.
(time taken in buildFunctor: 0)
;;; *** |SimpleCell| REDEFINED
;;; *** |SimpleCell| REDEFINED Time: 0 SEC.
Warnings: [1] allSimpleCells: not known that (Ring) is of mode (CATEGORY domain (SIGNATURE allSimpleCells ((List $) ThePols (Symbol))) (SIGNATURE allSimpleCells ((List $) (List ThePols) (Symbol))) (SIGNATURE hasDimension? ((Boolean) $)) (SIGNATURE samplePoint (TheField $)) (SIGNATURE stablePol (ThePols $)) (SIGNATURE variableOf ((Symbol) $)) (SIGNATURE separe ((List TheField) (List TheField) TheField TheField)) (SIGNATURE pointToCell ($ TheField (Boolean) (Symbol))))
Cumulative Statistics for Constructor SimpleCell Time: 0.33 seconds
finalizing NRLIB SCELL Processing SimpleCell for Browser database: --->-->SimpleCell((allSimpleCells ((List %) ThePols (Symbol)))): Not documented!!!! --->-->SimpleCell((allSimpleCells ((List %) (List ThePols) (Symbol)))): Not documented!!!! --->-->SimpleCell((hasDimension? (B %))): Not documented!!!! --->-->SimpleCell((samplePoint (TheField %))): Not documented!!!! --->-->SimpleCell((stablePol (ThePols %))): Not documented!!!! --->-->SimpleCell((variableOf ((Symbol) %))): Not documented!!!! --->-->SimpleCell((separe (LF LF TheField TheField))): Not documented!!!! --->-->SimpleCell((pointToCell (% TheField B (Symbol)))): Not documented!!!! --->-->SimpleCell(constructor): Not documented!!!! --->-->SimpleCell(): Missing Description ------------------------------------------------------------------------ SimpleCell is now explicitly exposed in frame initial SimpleCell will be automatically loaded when needed from /var/zope2/var/LatexWiki/SCELL.NRLIB/code

spad
)ab domain CELL Cell
Cell(TheField) : PUB == PRIV where TheField : RealClosedField
ThePols ==> Polynomial(TheField)
O ==> OutputForm B ==> Boolean Z ==> Integer N ==> NonNegativeInteger BUP ==> SparseUnivariatePolynomial(TheField) SCELL ==> SimpleCell(TheField,BUP)
PUB == CoercibleTo(O) with
samplePoint : % -> List(TheField) dimension : % -> N hasDimension? : (%,Symbol) -> B makeCell : List(SCELL) -> % makeCell : (SCELL,%) -> % mainVariableOf : % -> Symbol variablesOf : % -> List Symbol projection : % -> Union(%,"failed")
PRIV == add
Rep := List(SCELL)
coerce(c:%):O == paren [sc::O for sc in c]
projection(cell) == null cell => error "projection: should not appear" r := rest(cell) null r => "failed" r
makeCell(l:List(SCELL)) == l
makeCell(scell,toAdd) == cons(scell,toAdd)
mainVariableOf(cell) == null(cell) => error "Should not appear" variableOf(first(cell))
variablesOf(cell) == null(cell) => [] cons(mainVariableOf(cell),variablesOf(rest(cell)::%))
dimension(cell) == null(cell) => 0 hasDimension?(first(cell)) => 1+dimension(rest(cell)) dimension(rest(cell))
hasDimension?(cell,var) == null(cell) => error "Should not appear" sc : SCELL := first(cell) v := variableOf(sc) v = var => hasDimension?(sc) v < var => false v > var => true error "Caca Prout"
samplePoint(cell) == null(cell) => [] cons(samplePoint(first(cell)),samplePoint(rest(cell)))
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/6660987790622940247-25px003.spad using 
      old system compiler.
   CELL abbreviates domain Cell 
   processing macro definition ThePols ==> Polynomial TheField 
   processing macro definition O ==> OutputForm 
   processing macro definition B ==> Boolean 
   processing macro definition Z ==> Integer 
   processing macro definition N ==> NonNegativeInteger 
   processing macro definition BUP ==> SparseUnivariatePolynomial TheField 
   processing macro definition SCELL ==> SimpleCell(TheField,SparseUnivariatePolynomial TheField) 
------------------------------------------------------------------------
   initializing NRLIB CELL for Cell 
   compiling into NRLIB CELL 
   compiling exported coerce : $ -> OutputForm
Time: 0.01 SEC.
compiling exported projection : $ -> Union($,failed) Time: 0.01 SEC.
compiling exported makeCell : List SimpleCell(TheField,SparseUnivariatePolynomial TheField) -> $ CELL;makeCell;L$;3 is replaced by l Time: 0 SEC.
compiling exported makeCell : (SimpleCell(TheField,SparseUnivariatePolynomial TheField),$) -> $ CELL;makeCell;Sc2$;4 is replaced by CONS Time: 0 SEC.
compiling exported mainVariableOf : $ -> Symbol Time: 0.01 SEC.
compiling exported variablesOf : $ -> List Symbol Time: 0 SEC.
compiling exported dimension : $ -> NonNegativeInteger Time: 0.01 SEC.
compiling exported hasDimension? : ($,Symbol) -> Boolean Time: 0.01 SEC.
compiling exported samplePoint : $ -> List TheField Time: 0 SEC.
(time taken in buildFunctor: 0)
;;; *** |Cell| REDEFINED
;;; *** |Cell| REDEFINED Time: 0 SEC.
Cumulative Statistics for Constructor Cell Time: 0.05 seconds
finalizing NRLIB CELL Processing Cell for Browser database: --->-->Cell((samplePoint ((List TheField) %))): Not documented!!!! --->-->Cell((dimension (N %))): Not documented!!!! --->-->Cell((hasDimension? (B % (Symbol)))): Not documented!!!! --->-->Cell((makeCell (% (List SCELL)))): Not documented!!!! --->-->Cell((makeCell (% SCELL %))): Not documented!!!! --->-->Cell((mainVariableOf ((Symbol) %))): Not documented!!!! --->-->Cell((variablesOf ((List (Symbol)) %))): Not documented!!!! --->-->Cell((projection ((Union % failed) %))): Not documented!!!! --->-->Cell(constructor): Not documented!!!! --->-->Cell(): Missing Description ------------------------------------------------------------------------ Cell is now explicitly exposed in frame initial Cell will be automatically loaded when needed from /var/zope2/var/LatexWiki/CELL.NRLIB/code

spad
)ab pack CAD CylindricalAlgebraicDecompositionPackage
CylindricalAlgebraicDecompositionPackage(TheField) : PUB == PRIV where
TheField : RealClosedField
ThePols ==> Polynomial(TheField) P ==> ThePols BUP ==> SparseUnivariatePolynomial(TheField) RUP ==> SparseUnivariatePolynomial(ThePols)
Z ==> Integer N ==> NonNegativeInteger
CELL ==> Cell(TheField) SCELL ==> SimpleCell(TheField,BUP)
PUB == with
cylindricalDecomposition: List P -> List CELL cylindricalDecomposition: (List(P),List(Symbol)) -> List CELL projectionSet: (List RUP) -> List P coefficientSet: RUP -> List P discriminantSet : List RUP -> List(P) resultantSet : List RUP -> List P principalSubResultantSet : (RUP,RUP) -> List P specialise : (List(ThePols),CELL) -> List(BUP)
PRIV == add
cylindricalDecomposition(lpols) == lv : List(Symbol) := [] for pol in lpols repeat ground?(pol) => "next pol" lv := removeDuplicates(append(variables(pol),lv)) lv := reverse(sort(lv)) cylindricalDecomposition(lpols,lv)
cylindricalDecomposition(lpols,lvars) == lvars = [] => error("CAD: cylindricalDecomposition: empty list of vars") mv := first(lvars) lv := rest(lvars) lv = [] => lp1 := [ univariate(pol) for pol in lpols ] scells := allSimpleCells(lp1,mv)$SCELL [ makeCell([scell]) for scell in scells ] lpols1 := projectionSet [univariate(pol,mv) for pol in lpols] previousCad := cylindricalDecomposition(lpols1,lv) res : List(CELL) := [] for cell in previousCad repeat lspec := specialise(lpols,cell) scells := allSimpleCells(lspec,mv) res := append(res,[makeCell(scell,cell) for scell in scells]) res
PACK1 ==> CylindricalAlgebraicDecompositionUtilities(ThePols,RUP) PACK2 ==> CylindricalAlgebraicDecompositionUtilities(TheField,BUP)
specialise(lpols,cell) == lpols = [] => error("CAD: specialise: empty list of pols") sp := samplePoint(cell) vl := variablesOf(cell) res : List(BUP) := [] for pol in lpols repeat p1 := univariate(eval(pol,vl,sp)) -- zero?(p1) => return(error "Bad sepcialise") degree(p1) = 0 => "next pol" res := cons(p1,res) res
coefficientSet(pol) == res : List(ThePols) := [] for c in coefficients(pol) repeat ground?(c) => return(res) res := cons(c,res) res
SUBRES ==> SubResultantPackage(ThePols,RUP) discriminantSet(lpols) == res : List(ThePols) := [] for p in lpols repeat v := subresultantVector(p,differentiate(p))$SUBRES not(zero?(degree(v.0))) => return(error "Bad discriminant") d : ThePols := leadingCoefficient(v.0) -- d := discriminant p zero?(d) => return(error "Non Square Free polynomial") if not(ground? d) then res := cons(d,res) res
principalSubResultantSet(p,q) == if degree(p) < degree(q) then (p,q) := (q,p) if degree(p) = degree(q) then (p,q) := (q,pseudoRemainder(p, q)) v := subresultantVector(p,q)$SUBRES [coefficient(v.i,i) for i in 0..(((#v)-2)::N)]
resultantSet(lpols) == res : List(ThePols) := [] laux := lpols for p in lpols repeat laux := rest(laux) for q in laux repeat r : ThePols := first(principalSubResultantSet(p,q)) -- r := resultant(p,q) zero?(r) => return(error "Non relatively prime polynomials") if not(ground? r) then res := cons(r,res) res
projectionSet(lpols) == res : List(ThePols) := [] for p in lpols repeat c := content(p) ground?(c) => "next p" res := cons(c,res) lp1 := [primitivePart p for p in lpols] f : ((RUP,RUP) -> Boolean) := (degree(#1) <= degree(#2)) lp1 := sort(f,lp1) lsqfrb := squareFreeBasis(lp1)$PACK1 lsqfrb := sort(f,lsqfrb) for p in lp1 repeat res := append(res,coefficientSet(p)) res := append(res,discriminantSet(lsqfrb)) append(res,resultantSet(lsqfrb))
spad
   Compiling FriCAS source code from file 
      /var/zope2/var/LatexWiki/1235315989953270759-25px004.spad using 
      old system compiler.
   CAD abbreviates package CylindricalAlgebraicDecompositionPackage 
   processing macro definition ThePols ==> Polynomial TheField 
   processing macro definition P ==> Polynomial TheField 
   processing macro definition BUP ==> SparseUnivariatePolynomial TheField 
   processing macro definition RUP ==> SparseUnivariatePolynomial Polynomial TheField 
   processing macro definition Z ==> Integer 
   processing macro definition N ==> NonNegativeInteger 
   processing macro definition CELL ==> Cell TheField 
   processing macro definition SCELL ==> SimpleCell(TheField,SparseUnivariatePolynomial TheField) 
------------------------------------------------------------------------
   initializing NRLIB CAD for CylindricalAlgebraicDecompositionPackage 
   compiling into NRLIB CAD 
   compiling exported cylindricalDecomposition : List Polynomial TheField -> List Cell TheField
Time: 0.04 SEC.
compiling exported cylindricalDecomposition : (List Polynomial TheField,List Symbol) -> List Cell TheField Time: 0.46 SEC.
processing macro definition PACK1 ==> CylindricalAlgebraicDecompositionUtilities(Polynomial TheField,SparseUnivariatePolynomial Polynomial TheField) processing macro definition PACK2 ==> CylindricalAlgebraicDecompositionUtilities(TheField,SparseUnivariatePolynomial TheField) compiling exported specialise : (List Polynomial TheField,Cell TheField) -> List SparseUnivariatePolynomial TheField Time: 0.28 SEC.
compiling exported coefficientSet : SparseUnivariatePolynomial Polynomial TheField -> List Polynomial TheField Time: 0.01 SEC.
processing macro definition SUBRES ==> SubResultantPackage(Polynomial TheField,SparseUnivariatePolynomial Polynomial TheField) compiling exported discriminantSet : List SparseUnivariatePolynomial Polynomial TheField -> List Polynomial TheField Time: 0.17 SEC.
compiling exported principalSubResultantSet : (SparseUnivariatePolynomial Polynomial TheField,SparseUnivariatePolynomial Polynomial TheField) -> List Polynomial TheField Time: 0.17 SEC.
compiling exported resultantSet : List SparseUnivariatePolynomial Polynomial TheField -> List Polynomial TheField Time: 0.03 SEC.
compiling exported projectionSet : List SparseUnivariatePolynomial Polynomial TheField -> List Polynomial TheField Time: 0.08 SEC.
(time taken in buildFunctor: 0)
;;; *** |CylindricalAlgebraicDecompositionPackage| REDEFINED
;;; *** |CylindricalAlgebraicDecompositionPackage| REDEFINED Time: 0 SEC.
Warnings: [1] cylindricalDecomposition: lv has no value [2] cylindricalDecomposition: not known that (Ring) is of mode (CATEGORY package (SIGNATURE cylindricalDecomposition ((List (Cell TheField)) (List (Polynomial TheField)))) (SIGNATURE cylindricalDecomposition ((List (Cell TheField)) (List (Polynomial TheField)) (List (Symbol)))) (SIGNATURE projectionSet ((List (Polynomial TheField)) (List (SparseUnivariatePolynomial (Polynomial TheField))))) (SIGNATURE coefficientSet ((List (Polynomial TheField)) (SparseUnivariatePolynomial (Polynomial TheField)))) (SIGNATURE discriminantSet ((List (Polynomial TheField)) (List (SparseUnivariatePolynomial (Polynomial TheField))))) (SIGNATURE resultantSet ((List (Polynomial TheField)) (List (SparseUnivariatePolynomial (Polynomial TheField))))) (SIGNATURE principalSubResultantSet ((List (Polynomial TheField)) (SparseUnivariatePolynomial (Polynomial TheField)) (SparseUnivariatePolynomial (Polynomial TheField)))) (SIGNATURE specialise ((List (SparseUnivariatePolynomial TheField)) (List (Polynomial TheField)) (Cell TheField)))) [3] specialise: res has no value [4] discriminantSet: res has no value [5] resultantSet: res has no value [6] projectionSet: res has no value
Cumulative Statistics for Constructor CylindricalAlgebraicDecompositionPackage Time: 1.24 seconds
finalizing NRLIB CAD Processing CylindricalAlgebraicDecompositionPackage for Browser database: --->-->CylindricalAlgebraicDecompositionPackage((cylindricalDecomposition ((List CELL) (List P)))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((cylindricalDecomposition ((List CELL) (List P) (List (Symbol))))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((projectionSet ((List P) (List RUP)))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((coefficientSet ((List P) RUP))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((discriminantSet ((List P) (List RUP)))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((resultantSet ((List P) (List RUP)))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((principalSubResultantSet ((List P) RUP RUP))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage((specialise ((List BUP) (List ThePols) CELL))): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage(constructor): Not documented!!!! --->-->CylindricalAlgebraicDecompositionPackage(): Missing Description ------------------------------------------------------------------------ CylindricalAlgebraicDecompositionPackage is now explicitly exposed in frame initial CylindricalAlgebraicDecompositionPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/CAD.NRLIB/code

axiom
)lib )dir .
XPrimitiveArray is now explicitly exposed in frame initial XPrimitiveArray will be automatically loaded when needed from /var/zope2/var/LatexWiki/XPRIMARR.NRLIB/code Word is now explicitly exposed in frame initial Word will be automatically loaded when needed from /var/zope2/var/LatexWiki/WORD.NRLIB/code VectorField is now explicitly exposed in frame initial VectorField will be automatically loaded when needed from /var/zope2/var/LatexWiki/VF.NRLIB/code TaylorSolve is now explicitly exposed in frame initial TaylorSolve will be automatically loaded when needed from /var/zope2/var/LatexWiki/UTSSOL.NRLIB/code Units is now explicitly exposed in frame initial Units will be automatically loaded when needed from /var/zope2/var/LatexWiki/UNITS.NRLIB/code UnivariateFormalPowerSeriesFunctions is now explicitly exposed in frame initial UnivariateFormalPowerSeriesFunctions will be automatically loaded when needed from /var/zope2/var/LatexWiki/UFPS1.NRLIB/code UnivariateFormalPowerSeries is now explicitly exposed in frame initial UnivariateFormalPowerSeries will be automatically loaded when needed from /var/zope2/var/LatexWiki/UFPS.NRLIB/code testtype is now explicitly exposed in frame initial testtype will be automatically loaded when needed from /var/zope2/var/LatexWiki/TT.NRLIB/code TranscendentalManipulations2 is now explicitly exposed in frame initial TranscendentalManipulations2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TRMANIP2.NRLIB/code TensorProduct2 is now explicitly exposed in frame initial TensorProduct2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TPROD2.NRLIB/code TensorProduct is now explicitly exposed in frame initial TensorProduct will be automatically loaded when needed from /var/zope2/var/LatexWiki/TPROD.NRLIB/code SimplicialComplex is now explicitly exposed in frame initial SimplicialComplex will be automatically loaded when needed from /var/zope2/var/LatexWiki/TOPAZ.NRLIB/code test10 is now explicitly exposed in frame initial test10 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TESTTEN.NRLIB/code test6 is now explicitly exposed in frame initial test6 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TESTSIX.NRLIB/code test9 is now explicitly exposed in frame initial test9 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TESTNINE.NRLIB/code test8 is now explicitly exposed in frame initial test8 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TESTEGT.NRLIB/code Test is now explicitly exposed in frame initial Test will be automatically loaded when needed from /var/zope2/var/LatexWiki/TEST.NRLIB/code TemplateUtilities is now explicitly exposed in frame initial TemplateUtilities will be automatically loaded when needed from /var/zope2/var/LatexWiki/TEMUTL.NRLIB/code tee2 is now explicitly exposed in frame initial tee2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TEETWO.NRLIB/code tee1 is now explicitly exposed in frame initial tee1 will be automatically loaded when needed from /var/zope2/var/LatexWiki/TEEONE.NRLIB/code T is now explicitly exposed in frame initial T will be automatically loaded when needed from /var/zope2/var/LatexWiki/T.NRLIB/code TheSymbolTable is now explicitly exposed in frame initial TheSymbolTable will be automatically loaded when needed from /var/zope2/var/LatexWiki/SYMS.NRLIB/code Symbolic is now explicitly exposed in frame initial Symbolic will be automatically loaded when needed from /var/zope2/var/LatexWiki/SYMB.NRLIB/code SymbolVariableTest8 is now explicitly exposed in frame initial SymbolVariableTest8 will be automatically loaded when needed from /var/zope2/var/LatexWiki/SVT8.NRLIB/code SymbolVariableTest3 is now explicitly exposed in frame initial SymbolVariableTest3 will be automatically loaded when needed from /var/zope2/var/LatexWiki/SVT3.NRLIB/code SymbolVariableTest1 is now explicitly exposed in frame initial SymbolVariableTest1 will be automatically loaded when needed from /var/zope2/var/LatexWiki/SVT1.NRLIB/code SparseUnivariatePolynomialExpressions is now explicitly exposed in frame initial SparseUnivariatePolynomialExpressions will be automatically loaded when needed from /var/zope2/var/LatexWiki/SUPEXPR.NRLIB/code Sum is now explicitly exposed in frame initial Sum will be automatically loaded when needed from /var/zope2/var/LatexWiki/SUM.NRLIB/code SubDomain is now explicitly exposed in frame initial SubDomain will be automatically loaded when needed from /var/zope2/var/LatexWiki/SUBDOM.NRLIB/code SubDom is now explicitly exposed in frame initial SubDom will be automatically loaded when needed from /var/zope2/var/LatexWiki/SUB.NRLIB/code StringConversions is now explicitly exposed in frame initial StringConversions will be automatically loaded when needed from /var/zope2/var/LatexWiki/STRCNV.NRLIB/code StreamAsDomain is now explicitly exposed in frame initial StreamAsDomain will be automatically loaded when needed from /var/zope2/var/LatexWiki/STDOMAIN.NRLIB/code StatPackage is now explicitly exposed in frame initial StatPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/STAT.NRLIB/code SiSocket is now explicitly exposed in frame initial SiSocket will be automatically loaded when needed from /var/zope2/var/LatexWiki/SISOCK.NRLIB/code SimpsonIntegration is now explicitly exposed in frame initial SimpsonIntegration will be automatically loaded when needed from /var/zope2/var/LatexWiki/SIMPINT.NRLIB/code SpecialFunctionsExtended is now explicitly exposed in frame initial SpecialFunctionsExtended will be automatically loaded when needed from /var/zope2/var/LatexWiki/SFX.NRLIB/code SetAggregate is now explicitly exposed in frame initial SetAggregate will be automatically loaded when needed from /var/zope2/var/LatexWiki/SETAGG.NRLIB/code SetAggregate& is now explicitly exposed in frame initial SetAggregate& will be automatically loaded when needed from /var/zope2/var/LatexWiki/SETAGG-.NRLIB/code Set is now explicitly exposed in frame initial Set will be automatically loaded when needed from /var/zope2/var/LatexWiki/SET.NRLIB/code SparseEchelonMatrix is now explicitly exposed in frame initial SparseEchelonMatrix will be automatically loaded when needed from /var/zope2/var/LatexWiki/SEM.NRLIB/code SegmentExpansionCategory is now explicitly exposed in frame initial SegmentExpansionCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/SEGXCAT.NRLIB/code SegmentCategory is now explicitly exposed in frame initial SegmentCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/SEGCAT.NRLIB/code Segment is now explicitly exposed in frame initial Segment will be automatically loaded when needed from /var/zope2/var/LatexWiki/SEG.NRLIB/code SetAsDomain is now explicitly exposed in frame initial SetAsDomain will be automatically loaded when needed from /var/zope2/var/LatexWiki/SDOMAIN.NRLIB/code SimpleCell is already explicitly exposed in frame initial SimpleCell will be automatically loaded when needed from /var/zope2/var/LatexWiki/SCELL.NRLIB/code RationalInterpolationAlgorithms is now explicitly exposed in frame initial RationalInterpolationAlgorithms will be automatically loaded when needed from /var/zope2/var/LatexWiki/RINTERPA.NRLIB/code RationalInterpolation is now explicitly exposed in frame initial RationalInterpolation will be automatically loaded when needed from /var/zope2/var/LatexWiki/RINTERP.NRLIB/code Ring is now explicitly exposed in frame initial Ring will be automatically loaded when needed from /var/zope2/var/LatexWiki/RING.NRLIB/code Relations is now explicitly exposed in frame initial Relations will be automatically loaded when needed from /var/zope2/var/LatexWiki/REL.NRLIB/code Reflect is now explicitly exposed in frame initial Reflect will be automatically loaded when needed from /var/zope2/var/LatexWiki/REFL.NRLIB/code RecurrenceOperator is now explicitly exposed in frame initial RecurrenceOperator will be automatically loaded when needed from /var/zope2/var/LatexWiki/RECOP.NRLIB/code ReadFile is now explicitly exposed in frame initial ReadFile will be automatically loaded when needed from /var/zope2/var/LatexWiki/READFILE.NRLIB/code QuadraticForm is now explicitly exposed in frame initial QuadraticForm will be automatically loaded when needed from /var/zope2/var/LatexWiki/QFORM.NRLIB/code Product is now explicitly exposed in frame initial Product will be automatically loaded when needed from /var/zope2/var/LatexWiki/PRODUCT.NRLIB/code PointedPrimeField is now explicitly exposed in frame initial PointedPrimeField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PPF.NRLIB/code Polytope is now explicitly exposed in frame initial Polytope will be automatically loaded when needed from /var/zope2/var/LatexWiki/POLYTOPE.NRLIB/code PolynomialCategory is now explicitly exposed in frame initial PolynomialCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/POLYCAT.NRLIB/code PolynomialCategory& is now explicitly exposed in frame initial PolynomialCategory& will be automatically loaded when needed from /var/zope2/var/LatexWiki/POLYCAT-.NRLIB/code Poly2? is now explicitly exposed in frame initial Poly2? will be automatically loaded when needed from /var/zope2/var/LatexWiki/POLY2?.NRLIB/code Poly1? is now explicitly exposed in frame initial Poly1? will be automatically loaded when needed from /var/zope2/var/LatexWiki/POLY1?.NRLIB/code PositiveInteger is now explicitly exposed in frame initial PositiveInteger will be automatically loaded when needed from /var/zope2/var/LatexWiki/PI.NRLIB/code PolynomialCommonDenominator is now explicitly exposed in frame initial PolynomialCommonDenominator will be automatically loaded when needed from /var/zope2/var/LatexWiki/PCDEN.NRLIB/code Parity is now explicitly exposed in frame initial Parity will be automatically loaded when needed from /var/zope2/var/LatexWiki/PARITY.NRLIB/code OptimizationPackage is now explicitly exposed in frame initial OptimizationPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/OPT.NRLIB/code OrderedFreeMonoid is now explicitly exposed in frame initial OrderedFreeMonoid will be automatically loaded when needed from /var/zope2/var/LatexWiki/OFMONOID.NRLIB/code odd is now explicitly exposed in frame initial odd will be automatically loaded when needed from /var/zope2/var/LatexWiki/ODD.NRLIB/code Object is now explicitly exposed in frame initial Object will be automatically loaded when needed from /var/zope2/var/LatexWiki/OBJ.NRLIB/code NonNegativeInteger2 is now explicitly exposed in frame initial NonNegativeInteger2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/NNI2.NRLIB/code NonNegativeInteger is now explicitly exposed in frame initial NonNegativeInteger will be automatically loaded when needed from /var/zope2/var/LatexWiki/NNI.NRLIB/code NewtonInterpolation is now explicitly exposed in frame initial NewtonInterpolation will be automatically loaded when needed from /var/zope2/var/LatexWiki/NEWTON.NRLIB/code NewMonoid is now explicitly exposed in frame initial NewMonoid will be automatically loaded when needed from /var/zope2/var/LatexWiki/NEWMON.NRLIB/code NewMonoid& is now explicitly exposed in frame initial NewMonoid& will be automatically loaded when needed from /var/zope2/var/LatexWiki/NEWMON-.NRLIB/code NewInteger is now explicitly exposed in frame initial NewInteger will be automatically loaded when needed from /var/zope2/var/LatexWiki/NEWINT.NRLIB/code Inequation is now explicitly exposed in frame initial Inequation will be automatically loaded when needed from /var/zope2/var/LatexWiki/NEQ.NRLIB/code Inequation is already explicitly exposed in frame initial Inequation will be automatically loaded when needed from /var/zope2/var/LatexWiki/NE.NRLIB/code MySubset is now explicitly exposed in frame initial MySubset will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYSUB.NRLIB/code MySingleInteger is now explicitly exposed in frame initial MySingleInteger will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYSINT.NRLIB/code MyReduce3 is now explicitly exposed in frame initial MyReduce3 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYRED3.NRLIB/code MyReduce2 is now explicitly exposed in frame initial MyReduce2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYRED2.NRLIB/code MyReduce1 is now explicitly exposed in frame initial MyReduce1 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYRED1.NRLIB/code MyReduce is now explicitly exposed in frame initial MyReduce will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYRED.NRLIB/code MyPair2 is now explicitly exposed in frame initial MyPair2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYPAIR2.NRLIB/code MyPair is now explicitly exposed in frame initial MyPair will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYPAIR.NRLIB/code MyNonNegativeInteger is now explicitly exposed in frame initial MyNonNegativeInteger will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYNNI.NRLIB/code MyMonoid1 is now explicitly exposed in frame initial MyMonoid1 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYMON1.NRLIB/code MyMonoid1& is now explicitly exposed in frame initial MyMonoid1& will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYMON1-.NRLIB/code MyMonoid is now explicitly exposed in frame initial MyMonoid will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYMON.NRLIB/code MyMonoid& is now explicitly exposed in frame initial MyMonoid& will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYMON-.NRLIB/code MyMapping is now explicitly exposed in frame initial MyMapping will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYMAP.NRLIB/code MyField is now explicitly exposed in frame initial MyField will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYFIELD.NRLIB/code MyDomain is now explicitly exposed in frame initial MyDomain will be automatically loaded when needed from /var/zope2/var/LatexWiki/MYDOM.NRLIB/code MatrixStatPackage is now explicitly exposed in frame initial MatrixStatPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/MSTAT.NRLIB/code Morphism is now explicitly exposed in frame initial Morphism will be automatically loaded when needed from /var/zope2/var/LatexWiki/MORPH.NRLIB/code Moo2 is now explicitly exposed in frame initial Moo2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MOO2.NRLIB/code Monoid is now explicitly exposed in frame initial Monoid will be automatically loaded when needed from /var/zope2/var/LatexWiki/MONOID.NRLIB/code Monadx is now explicitly exposed in frame initial Monadx will be automatically loaded when needed from /var/zope2/var/LatexWiki/MONADX.NRLIB/code MkMul is now explicitly exposed in frame initial MkMul will be automatically loaded when needed from /var/zope2/var/LatexWiki/MM.NRLIB/code MinimalInitialNotIntegrated is now explicitly exposed in frame initial MinimalInitialNotIntegrated will be automatically loaded when needed from /var/zope2/var/LatexWiki/MINI.NRLIB/code MkInt is now explicitly exposed in frame initial MkInt will be automatically loaded when needed from /var/zope2/var/LatexWiki/MI.NRLIB/code Maybe2 is now explicitly exposed in frame initial Maybe2 will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAYBE2.NRLIB/code Maybe is now explicitly exposed in frame initial Maybe will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAYBE.NRLIB/code MappingPackage3x is now explicitly exposed in frame initial MappingPackage3x will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAPPK3X.NRLIB/code MappingPackage2x is now explicitly exposed in frame initial MappingPackage2x will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAPPK2X.NRLIB/code MapPackInternalHac3x is now explicitly exposed in frame initial MapPackInternalHac3x will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAPHAC3X.NRLIB/code MapPackInternalHac2x is now explicitly exposed in frame initial MapPackInternalHac2x will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAPHAC2X.NRLIB/code Map is now explicitly exposed in frame initial Map will be automatically loaded when needed from /var/zope2/var/LatexWiki/MAP.NRLIB/code MkAdd is now explicitly exposed in frame initial MkAdd will be automatically loaded when needed from /var/zope2/var/LatexWiki/MA.NRLIB/code LUDecomposition is now explicitly exposed in frame initial LUDecomposition will be automatically loaded when needed from /var/zope2/var/LatexWiki/LUD.NRLIB/code Inequality is now explicitly exposed in frame initial Inequality will be automatically loaded when needed from /var/zope2/var/LatexWiki/LT.NRLIB/code LittleHttpDeamon is now explicitly exposed in frame initial LittleHttpDeamon will be automatically loaded when needed from /var/zope2/var/LatexWiki/LHTTPD.NRLIB/code LeftFreeModule is now explicitly exposed in frame initial LeftFreeModule will be automatically loaded when needed from /var/zope2/var/LatexWiki/LFREEMOD.NRLIB/code ListAsDomain is now explicitly exposed in frame initial ListAsDomain will be automatically loaded when needed from /var/zope2/var/LatexWiki/LDOMAIN.NRLIB/code JetBundleXExpression is now explicitly exposed in frame initial JetBundleXExpression will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBX.NRLIB/code JetBundleLinearFunction is now explicitly exposed in frame initial JetBundleLinearFunction will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBLF.NRLIB/code JetBundleFunctionCategory is now explicitly exposed in frame initial
JetBundleFunctionCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBFC.NRLIB/code JetBundleFunctionCategory& is now explicitly exposed in frame initial JetBundleFunctionCategory& will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBFC-.NRLIB/code JetBundleExpression is now explicitly exposed in frame initial JetBundleExpression will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBE.NRLIB/code JetBundleCategory is now explicitly exposed in frame initial JetBundleCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBC.NRLIB/code JetBundleCategory& is now explicitly exposed in frame initial JetBundleCategory& will be automatically loaded when needed from /var/zope2/var/LatexWiki/JBC-.NRLIB/code JetBundle is now explicitly exposed in frame initial JetBundle will be automatically loaded when needed from /var/zope2/var/LatexWiki/JB.NRLIB/code Inverse is now explicitly exposed in frame initial Inverse will be automatically loaded when needed from /var/zope2/var/LatexWiki/INV.NRLIB/code InputFormFunctions1 is now explicitly exposed in frame initial InputFormFunctions1 will be automatically loaded when needed from /var/zope2/var/LatexWiki/INFORM1.NRLIB/code InputForm is now explicitly exposed in frame initial InputForm will be automatically loaded when needed from /var/zope2/var/LatexWiki/INFORM.NRLIB/code Inequality is already explicitly exposed in frame initial Inequality will be automatically loaded when needed from /var/zope2/var/LatexWiki/INEQ.NRLIB/code Indeterminants is now explicitly exposed in frame initial Indeterminants will be automatically loaded when needed from /var/zope2/var/LatexWiki/INDETS.NRLIB/code Indeterminant is now explicitly exposed in frame initial Indeterminant will be automatically loaded when needed from /var/zope2/var/LatexWiki/INDET.NRLIB/code IndexedJetBundle is now explicitly exposed in frame initial IndexedJetBundle will be automatically loaded when needed from /var/zope2/var/LatexWiki/IJB.NRLIB/code IntegralDomainStatPackage is now explicitly exposed in frame initial
IntegralDomainStatPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/IDSTAT.NRLIB/code Identity is now explicitly exposed in frame initial Identity will be automatically loaded when needed from /var/zope2/var/LatexWiki/ID.NRLIB/code
>> System error: |Commutative| is invalid as a function.