diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet index 74166cc..4ebd8b4 100644 --- a/books/bookvol10.4.pamphlet +++ b/books/bookvol10.4.pamphlet @@ -35070,6 +35070,782 @@ GeneralizedMultivariateFactorize(OV,E,S,R,P) : C == T @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package GPAFF GeneralPackageForAlgebraicFunctionField} +<>= +)set break resume +)sys rm -f GeneralPackageForAlgebraicFunctionField.output +)spool GeneralPackageForAlgebraicFunctionField.output +)set message test on +)set message auto off +)clear all + +--S 1 of 1 +)show GeneralPackageForAlgebraicFunctionField +--R GeneralPackageForAlgebraicFunctionField(K: Field,symb: List Symbol,PolyRing: PolynomialCategory(K,E,OrderedVariableList symb),E: DirectProductCategory(# symb,NonNegativeInteger),ProjPt: ProjectiveSpaceCategory K,PCS: LocalPowerSeriesCategory K,Plc: PlacesCategory(K,PCS),DIVISOR: DivisorCategory Plc,InfClsPoint: InfinitlyClosePointCategory(K,symb,PolyRing,E,ProjPt,PCS,Plc,DIVISOR,BLMET),DesTree: DesingTreeCategory InfClsPoint,BLMET: BlowUpMethodCategory) is a package constructor +--R Abbreviation for GeneralPackageForAlgebraicFunctionField is GPAFF +--R This constructor is exposed in this frame. +--R Issue )edit /tmp/PAFF/spad/generalPaffPack.spad to see algebra source code for GPAFF +--R +--R------------------------------- Operations -------------------------------- +--R adjunctionDivisor : () -> DIVISOR desingTree : () -> List DesTree +--R eval : (PolyRing,Plc) -> K genus : () -> NonNegativeInteger +--R genusNeg : () -> Integer placesAbove : ProjPt -> List Plc +--R pointDominateBy : Plc -> ProjPt printInfo : List Boolean -> Void +--R reset : () -> Void setCurve : PolyRing -> PolyRing +--R singularPoints : () -> List ProjPt theCurve : () -> PolyRing +--R LPolynomial : () -> SparseUnivariatePolynomial Integer if K has FINITE +--R LPolynomial : PositiveInteger -> SparseUnivariatePolynomial Integer if K has FINITE +--R ZetaFunction : () -> UnivariateTaylorSeriesCZero(Integer,t) if K has FINITE +--R ZetaFunction : PositiveInteger -> UnivariateTaylorSeriesCZero(Integer,t) if K has FINITE +--R classNumber : () -> Integer if K has FINITE +--R desingTreeWoFullParam : () -> List DesTree +--R eval : (PolyRing,PolyRing,Plc) -> K +--R eval : (Fraction PolyRing,Plc) -> K +--R evalIfCan : (PolyRing,Plc) -> Union(K,"failed") +--R evalIfCan : (PolyRing,PolyRing,Plc) -> Union(K,"failed") +--R evalIfCan : (Fraction PolyRing,Plc) -> Union(K,"failed") +--R findOrderOfDivisor : (DIVISOR,Integer,Integer) -> Record(ord: Integer,num: PolyRing,den: PolyRing,upTo: Integer) +--R homogenize : (PolyRing,Integer) -> PolyRing +--R interpolateForms : (DIVISOR,NonNegativeInteger) -> List PolyRing +--R interpolateFormsForFact : (DIVISOR,List PolyRing) -> List PolyRing +--R intersectionDivisor : PolyRing -> DIVISOR +--R lBasis : DIVISOR -> Record(num: List PolyRing,den: PolyRing) +--R numberOfPlacesOfDegree : PositiveInteger -> Integer if K has FINITE +--R numberPlacesDegExtDeg : (PositiveInteger,PositiveInteger) -> Integer if K has FINITE +--R numberRatPlacesExtDeg : PositiveInteger -> Integer if K has FINITE +--R parametrize : (PolyRing,Plc) -> PCS +--R placesOfDegree : PositiveInteger -> List Plc if K has FINITE +--R rationalPlaces : () -> List Plc if K has FINITE +--R rationalPoints : () -> List ProjPt if K has FINITE +--R setSingularPoints : List ProjPt -> List ProjPt +--R +--E 1 + +)spool +)lisp (bye) +@ +<>= +==================================================================== +GeneralPackageForAlgebraicFunctionField examples +==================================================================== + +See Also: +o )show GeneralPackageForAlgebraicFunctionField + +@ +\pagehead{GeneralPackageForAlgebraicFunctionField}{GPAFF} +\pagepic{ps/v104generalpackageforalgebraicfunctionfield.eps}{GPAFF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{GPAFF}{adjunctionDivisor} & +\cross{GPAFF}{classNumber} & +\cross{GPAFF}{desingTree} \\ +\cross{GPAFF}{desingTreeWoFullParam} & +\cross{GPAFF}{eval} & +\cross{GPAFF}{evalIfCan} \\ +\cross{GPAFF}{findOrderOfDivisor} & +\cross{GPAFF}{genus} & +\cross{GPAFF}{genusNeg} \\ +\cross{GPAFF}{homogenize} & +\cross{GPAFF}{interpolateForms} & +\cross{GPAFF}{interpolateFormsForFact} \\ +\cross{GPAFF}{intersectionDivisor} & +\cross{GPAFF}{lBasis} & +\cross{GPAFF}{LPolynomial} \\ +\cross{GPAFF}{numberOfPlacesOfDegree} & +\cross{GPAFF}{numberPlacesDegExtDeg} & +\cross{GPAFF}{numberRatPlacesExtDeg} \\ +\cross{GPAFF}{parametrize} & +\cross{GPAFF}{placesAbove} & +\cross{GPAFF}{placesOfDegree} \\ +\cross{GPAFF}{pointDominateBy} & +\cross{GPAFF}{printInfo} & +\cross{GPAFF}{rationalPlaces} \\ +\cross{GPAFF}{rationalPoints} & +\cross{GPAFF}{reset} & +\cross{GPAFF}{setCurve} \\ +\cross{GPAFF}{setSingularPoints} & +\cross{GPAFF}{singularPoints} & +\cross{GPAFF}{theCurve} \\ +\cross{GPAFF}{ZetaFunction} && +\end{tabular} + +<>= +)abbrev package GPAFF GeneralPackageForAlgebraicFunctionField +++ Author: Gaetan Hache +++ Date created: June 1995 +++ Date Last Updated: May 2010 by Tim Daly +++ Description: +++ A package that implements the Brill-Noether algorithm. Part of the +++ PAFF package. +GeneralPackageForAlgebraicFunctionField( K, + symb, + PolyRing, + E, + ProjPt, + PCS, + Plc, + DIVISOR, + InfClsPoint, + DesTree, + BLMET + ) :Exports == Implementation where + K:Field + symb: List(Symbol) + OV ==> OrderedVariableList(symb) + E : DirectProductCategory(#symb,NonNegativeInteger) + PolyRing : PolynomialCategory(K,E,OV) + ProjPt : ProjectiveSpaceCategory(K) + PCS : LocalPowerSeriesCategory(K) + Plc : PlacesCategory(K,PCS) + DIVISOR : DivisorCategory(Plc) + InfClsPoint : InfinitlyClosePointCategory(K,symb,PolyRing,E,ProjPt,_ + PCS,Plc,DIVISOR,BLMET) + DesTree : DesingTreeCategory(InfClsPoint) + BLMET : BlowUpMethodCategory + + FRACPOLY ==> Fraction PolyRing + OF ==> OutputForm + INT ==> Integer + NNI ==> NonNegativeInteger + PI ==> PositiveInteger + UP ==> UnivariatePolynomial + UPZ ==> UP(t, Integer) + UTSZ ==> UnivariateTaylorSeriesCZero(Integer,t) + SUP ==> SparseUnivariatePolynomial + PPFC1 ==> PolynomialPackageForCurve(K,PolyRing,E,#symb,ProjPt) + + + ParamPackFC ==> LocalParametrizationOfSimplePointPackage(K,symb,PolyRing,_ + E,ProjPt,PCS,Plc) + ParamPack ==> ParametrizationPackage(K,symb,PolyRing,E,ProjPt,PCS,Plc) + RatSingPack ==> ProjectiveAlgebraicSetPackage(K,symb,PolyRing,E,ProjPt) + IntDivPack ==> IntersectionDivisorPackage(K,symb,PolyRing,E,ProjPt,PCS,_ + Plc,DIVISOR,InfClsPoint,DesTree,BLMET) + IntFrmPack ==> InterpolateFormsPackage(K,symb,PolyRing,E,ProjPt,PCS,_ + Plc,DIVISOR) + DesTrPack ==> DesingTreePackage(K,symb,PolyRing,E,ProjPt,PCS,_ + Plc,DIVISOR,InfClsPoint,DesTree,BLMET) + PackPoly ==> PackageForPoly(K,PolyRing,E,#symb) + + Exports ==> with + + reset: () -> Void + + setCurve: PolyRing -> PolyRing + + homogenize: (PolyRing,Integer) -> PolyRing + + printInfo: List Boolean -> Void + ++ printInfo(lbool) prints some information comming from various + ++ package and domain used by this package. + + theCurve: () -> PolyRing + ++ theCurve returns the specified polynomial for the package. + + genus: () -> NNI + ++ genus returns the genus of the curve defined by the polynomial + ++ given to the package. + + genusNeg: () -> INT + + desingTree: () -> List DesTree + ++ desingTree returns the desingularisation trees at all singular + ++ points of the curve defined by the polynomial given to the package. + + desingTreeWoFullParam : () -> List DesTree + ++ desingTreeWoFullParam returns the desingularisation trees at all + ++ singular points of the curve defined by the polynomial given to + ++ the package. The local parametrizations are not computed. + + setSingularPoints: List ProjPt -> List ProjPt + ++ setSingularPoints(lpt) sets the singular points to be used. + ++ Beware: no attempt is made to check if the points are singular + ++ or not, nor if all of the singular points are presents. Hence, + ++ results of some computation maybe false. It is intend to be use + ++ when one want to compute the singular points are computed by other + ++ means than to use the function singularPoints. + + singularPoints: () -> List(ProjPt) + ++ rationalPoints() returns the singular points of the + ++ curve defined by the polynomial given to the package. + ++ If the singular points lie in an extension of the specified ground + ++ field an error message is issued specifying the extension degree + ++ needed to find all singular points. + + parametrize: (PolyRing,Plc) -> PCS + ++ parametrize(f,pl) returns a local parametrization of f at the place + ++ pl. + + lBasis: DIVISOR -> Record(num:List PolyRing, den: PolyRing) + ++ lBasis computes a basis associated to the specified divisor + + findOrderOfDivisor: (DIVISOR,Integer,Integer) -> _ + Record(ord:Integer,num:PolyRing,den:PolyRing,upTo:Integer) + + interpolateForms: (DIVISOR,NNI) -> List(PolyRing) + ++ interpolateForms(d,n) returns a basis of the interpolate forms of + ++ degree n of the divisor d. + + interpolateFormsForFact: (DIVISOR,List PolyRing) -> List(PolyRing) + + eval: (PolyRing,Plc) -> K + ++ eval(f,pl) evaluate f at the place pl. + + eval: (PolyRing,PolyRing,Plc) -> K + ++ eval(f,g,pl) evaluate the function f/g at the place pl. + + eval: (FRACPOLY,Plc) -> K + ++ eval(u,pl) evaluate the function u at the place pl. + + evalIfCan: (PolyRing,Plc) -> Union(K,"failed") + ++ evalIfCan(f,pl) evaluate f at the place pl + ++ (returns "failed" if it is a pole). + + evalIfCan: (PolyRing,PolyRing,Plc) -> Union(K,"failed") + ++ evalIfCan(f,g,pl) evaluate the function f/g at the place pl + ++ (returns "failed" if it is a pole). + + evalIfCan: (FRACPOLY,Plc) -> Union(K,"failed") + ++ evalIfCan(u,pl) evaluate the function u at the place pl + ++ (returns "failed" if it is a pole). + + intersectionDivisor: PolyRing -> DIVISOR + ++ intersectionDivisor(pol) compute the intersection divisor + ++ (the Cartier divisor) of the form pol with the curve. If some + ++ intersection points lie in an extension of the ground field, + ++ an error message is issued specifying the extension degree + ++ needed to find all the intersection points. + ++ (If pol is not homogeneous an error message is issued). + + adjunctionDivisor: () -> DIVISOR + ++ adjunctionDivisor computes the adjunction divisor of the plane + ++ curve given by the polynomial crv. + + placesAbove: ProjPt -> List Plc + + pointDominateBy : Plc -> ProjPt + ++ pointDominateBy(pl) returns the projective point dominated + ++ by the place pl. + + if K has Finite then --should we say LocallyAlgebraicallyClosedField?? + + rationalPlaces: () -> List Plc + ++ rationalPlaces returns all the rational places of the + ++ curve defined by the polynomial given to the package. + + rationalPoints: () -> List(ProjPt) + + LPolynomial: () -> SparseUnivariatePolynomial Integer + ++ Returns the L-Polynomial of the curve. + + LPolynomial: PI -> SparseUnivariatePolynomial Integer + ++ LPolynomial(d) returns the L-Polynomial of the curve in + ++ constant field extension of degree d. + + classNumber: () -> Integer + ++ Returns the class number of the curve. + + placesOfDegree: PI -> List Plc + ++ placesOfDegree(d) returns all places of degree d of the + ++ curve. + + numberOfPlacesOfDegree: PI -> Integer + ++ returns the number of places of the given degree + + numberRatPlacesExtDeg: PI -> Integer + ++ numberRatPlacesExtDeg(n) returns the number of rational + ++ places in the constant field extenstion of degree n + + numberPlacesDegExtDeg: (PI, PI) -> Integer + ++ numberRatPlacesExtDegExtDeg(d, n) returns the number of + ++ places of degree d in the constant field extension of + ++ degree n + + ZetaFunction: () -> UTSZ + ++ Returns the Zeta function of the curve. Calculated by + ++ using the L-Polynomial + + ZetaFunction: PI -> UTSZ + ++ Returns the Zeta function of the curve in constant field + ++ extension. Calculated by using the L-Polynomial + + Implementation ==> add + import PPFC1 + import PPFC2 + import DesTrPack + import IntFrmPack + import IntDivPack + import RatSingPack + import ParamPack + import ParamPackFC + import PackPoly + + crvLocal:PolyRing:=1$PolyRing + + -- flags telling such and such is already computed. + + genusCalc?:Boolean:= false()$Boolean + theGenus:INT:=0 + + desingTreeCalc?:Boolean:=false()$Boolean + theTree:List DesTree := empty() + + desingTreeWoFullParamCalc?:Boolean:=false()$Boolean + + adjDivCalc?:Boolean:=false()$Boolean + theAdjDiv:DIVISOR:=0 + + singularPointsCalc?:Boolean:=false()$Boolean + lesPtsSing:List(ProjPt):=empty() + + rationalPointsCalc?:Boolean:=false()$Boolean + lesRatPts:List(ProjPt):=empty() + + rationalPlacesCalc?:Boolean:=false()$Boolean + lesRatPlcs:List(Plc):=empty() + + zf:UTSZ:=1$UTSZ + zfCalc : Boolean := false()$Boolean + + DegOfPlacesFound: List Integer := empty() + + -- see package IntersectionDivisorPackage + intersectionDivisor(pol)== + if ^(pol =$PolyRing homogenize(pol,1)) then _ + error _ + "From intersectionDivisor: the input is NOT a homogeneous polynomial" + intersectionDivisor(pol,theCurve(),desingTree(),singularPoints()) + + lBasis(divis)== + d:=degree divis + d < 0 => [[0$PolyRing],1$PolyRing] + A:=adjunctionDivisor() + -- modifie le 08/05/97: avant c'etait formToInterp:=divOfZero(divis) + A + formToInterp:= divOfZero(divis + A) + degDpA:=degree formToInterp + degCrb:=totalDegree(theCurve())$PackPoly + dd:=divide(degDpA,degCrb pretend Integer) + dmin:NNI:= + if ^zero?(dd.remainder) then (dd.quotient+1) pretend NNI + else dd.quotient pretend NNI + print("Trying to interpolate with forms of degree:"::OF) + print(dmin::OF) + lg0:List PolyRing:=interpolateForms(formToInterp,dmin) + while zero?(first lg0) repeat + dmin:=dmin+1 + print("Trying to interpolate with forms of degree:"::OF) + print(dmin::OF) + lg0:=interpolateForms(formToInterp,dmin) + print("Denominator found"::OF) + g0:PolyRing:=first lg0 + dg0:=intersectionDivisor(g0) + print("Intersection Divisor of Denominator found"::OF) + lnumer:List PolyRing:=interpolateForms(dg0-divis,dmin) + [lnumer,g0] + + genus== + if ^(genusCalc?) then + degCrb:=totalDegree(theCurve())$PackPoly + theGenus:=genusTreeNeg(degCrb,desingTreeWoFullParam()) + genusCalc?:=true()$Boolean + theGenus < 0 => + print(("Too many infinitly near points")::OF) + print(("The curve may not be absolutely irreducible")::OF) + error "Have a nice day" + theGenus pretend NNI + + genusNeg== + if ^(genusCalc?) then + degCrb:=totalDegree(theCurve())$PackPoly + theGenus:=genusTreeNeg(degCrb,desingTreeWoFullParam()) + genusCalc?:=true()$Boolean + theGenus + + homogenize(pol,n)== homogenize(pol,n)$PackPoly + + fPl(pt:ProjPt,desTr:DesTree):Boolean == + nd:=value desTr + lpt:=pointV nd + pt = lpt + + + placesAbove(pt)== + -- verifie si le point est simple, si c'est le cas, + -- on retourne la place correpondante + -- avec pointToPlace qui cre' la place si necessaire. + ^member?(pt,singularPoints()) => _ + [pointToPlace(pt,theCurve())$ParamPackFC] + -- les quatres lignes suivantes trouvent les feuilles qui + -- sont au-dessus du point. + theTree:= desingTree() + cTree:= find(fPl(pt,#1),theTree) + cTree case "failed" => error "Big error in placesAbove" + -- G. Hache, gaetan.hache@inria.fr" + lvs:=leaves cTree + -- retourne les places correspondant aux feuilles en "consultant" + -- les diviseurs exceptionnels. + concat [supp excpDivV(l) for l in lvs] + + pointDominateBy(pl)== pointDominateBy(pl)$ParamPackFC + + reduceForm(p1:PolyRing,p2:PolyRing):PolyRing== + normalForm(p1,[p2])$GroebnerPackage(K,E,OV,PolyRing) + + evalIfCan(f:PolyRing,pl:Plc)== + u:=reduceForm(f, theCurve() ) + zero?(u) => 0 + pf:= parametrize(f,pl) + ord:INT:=order pf + ord < 0 => "failed" + ord > 0 => 0 + coefOfFirstNonZeroTerm pf + + eval(f:PolyRing,pl:Plc)== + eic:=evalIfCan(f,pl) + eic case "failed" => _ + error "From eval (function at place): its a pole !!!" + eic + + setCurve(pol)== + crvLocal:=pol + ^(crvLocal =$PolyRing homogenize(crvLocal,1)) => + print(("the defining polynomial is not homogeneous")::OF) + error "Have a nice day" + reset() + theCurve() + + reset == + setFoundPlacesToEmpty()$Plc + genusCalc?:Boolean:= false()$Boolean + theGenus:INT:=0 + desingTreeCalc?:Boolean:=false()$Boolean + desingTreeWoFullParamCalc?:Boolean:=false()$Boolean + theTree:List DesTree := empty() + adjDivCalc?:Boolean:=false()$Boolean + theAdjDiv:DIVISOR:=0 + singularPointsCalc?:Boolean:=false()$Boolean + lesPtsSing:List(ProjPt):=empty() + rationalPointsCalc?:Boolean:=false()$Boolean + lesRatPts:List(ProjPt):=empty() + rationalPlacesCalc?:Boolean:=false()$Boolean + lesRatPlcs:List(Plc):=empty() + DegOfPlacesFound: List Integer := empty() + zf:UTSZ:=1$UTSZ + zfCalc:Boolean := false$Boolean + + foundPlacesOfDeg?(i:PositiveInteger):Boolean == + ld: List Boolean := [zero?(a rem i) for a in DegOfPlacesFound] + entry?(true$Boolean,ld) + + findOrderOfDivisor(divis,lb,hb) == + ^zero?(degree divis) => error("The divisor is NOT of degre zero !!!!") + A:=adjunctionDivisor() + formToInterp:=divOfZero ( hb*divis + A ) + degDpA:=degree formToInterp + degCrb:=totalDegree( theCurve())$PackPoly + dd:=divide(degDpA,degCrb pretend Integer) + dmin:NNI:= + if ^zero?(dd.remainder) then (dd.quotient+1) pretend NNI + else dd.quotient pretend NNI + lg0:List PolyRing:=interpolateForms(formToInterp,dmin) + while zero?(first lg0) repeat + dmin:=dmin+1 + lg0:=interpolateForms(formToInterp,dmin) + g0:PolyRing:=first lg0 + dg0:=intersectionDivisor(g0) + nhb:=hb + while effective?(dg0 - nhb*divis - A) repeat + nhb:=nhb+1 + nhb:=nhb-1 + ftry:=lb + lnumer:List PolyRing:=interpolateForms(dg0-ftry*divis,dmin) + while zero?(first lnumer) and ftry < nhb repeat + ftry:=ftry + 1 + lnumer:List PolyRing:=interpolateForms(dg0-ftry*divis,dmin) + [ftry,first lnumer,g0,nhb] + + theCurve== + one?(crvLocal) => error "The defining polynomial has not been set yet!" + crvLocal + + printInfo(lbool)== + printInfo(lbool.2)$ParamPackFC + printInfo(lbool.3)$PCS + void() + + desingTree== + theTree:= desingTreeWoFullParam() + if ^(desingTreeCalc?) then + for arb in theTree repeat + fullParamInit(arb) + desingTreeCalc?:=true()$Boolean + theTree + + desingTreeWoFullParam== + if ^(desingTreeWoFullParamCalc?) then + theTree:=[desingTreeAtPoint(pt,theCurve()) for pt in singularPoints()] + desingTreeWoFullParamCalc?:=true()$Boolean + theTree + + -- compute the adjunction divisor of the curve using adjunctionDivisor + -- from DesingTreePackage + adjunctionDivisor()== + if ^(adjDivCalc?) then + theAdjDiv:=_ + reduce("+",[adjunctionDivisor(tr) for tr in desingTree()],0$DIVISOR) + adjDivCalc?:=true()$Boolean + theAdjDiv + + -- returns the singular points using the function singularPoints + -- from ProjectiveAlgebraicSetPackage + singularPoints== + if ^(singularPointsCalc?) then + lesPtsSing:=singularPoints(theCurve()) + singularPointsCalc?:=true()$Boolean + lesPtsSing + + setSingularPoints(lspt)== + singularPointsCalc?:=true()$Boolean + lesPtsSing:= lspt + + -- returns the rational points using the function rationalPoints + -- from ProjectiveAlgebraicSetPackage + + -- compute the local parametrization of f at the place pl + -- (from package ParametrizationPackage) + parametrize(f,pl)==parametrize(f,pl)$ParamPack + + -- compute the interpolating forms (see package InterpolateFormsPackage) + interpolateForms(d,n)== + lm:List PolyRing:=listAllMono(n)$PackPoly + interpolateForms(d,n,theCurve(),lm) + + interpolateFormsForFact(d,lm)== + interpolateFormsForFact(d,lm)$IntFrmPack + + evalIfCan(f:PolyRing,g:PolyRing,pl:Plc)== + fu:=reduceForm(f,theCurve()) + gu:=reduceForm(g,theCurve()) + zero?(fu) and ^zero?(gu) => 0 + ^zero?(fu) and zero?(gu) => "failed" + pf:= parametrize(fu,pl) + pg:= parametrize(gu,pl) + ordf:INT:=order pf + ordg:INT:=order pg + cf:=coefOfFirstNonZeroTerm pf + cg:=coefOfFirstNonZeroTerm pg + (ordf - ordg) < 0 => "failed" + (ordf - ordg) > 0 => 0 + cf * inv cg + + eval(f:PolyRing,g:PolyRing,pl:Plc)== + eic:=evalIfCan(f,g,pl) + eic case "failed" => error "From eval (function at place): its a pole" + eic + + evalIfCan(u:FRACPOLY,pl:Plc)== + f:PolyRing := numer u + g:PolyRing := denom u + evalIfCan(f,g,pl) + + eval(u:FRACPOLY,pl:Plc)== + f:PolyRing := numer u + g:PolyRing := denom u + eval(f,g,pl) + + thedeg:PI := 1 + + crap(p:Plc):Boolean == + degree(p)$Plc = thedeg + + if K has Finite then + rationalPlaces == + K has PseudoAlgebraicClosureOfFiniteFieldCategory => _ + placesOfDegree(1$PI) + --non good pour LACF !!!! + rationalPlacesCalc? => lesRatPlcs + ltr:List(DesTree):=desingTree() + ratP:List(ProjPt):=rationalPoints() + singP:List(ProjPt):=singularPoints() + simRatP:List(ProjPt):=setDifference(ratP,singP) + for pt in simRatP repeat + pointToPlace(pt,theCurve())$ParamPackFC + rationalPlacesCalc? := true()$Boolean + lesRatPlcs:=foundPlaces()$Plc + lesRatPlcs + + rationalPoints== + if ^(rationalPointsCalc?) then + if K has Finite then + lesRatPts:= rationalPoints(theCurve(),1)$RatSingPack + rationalPointsCalc?:=true()$Boolean + else + error "Can't find rationalPoints when the field is not finite" + lesRatPts + + ZetaFunction() == + if not zfCalc then + zf:= ZetaFunction(1) + zfCalc:= true$Boolean + zf + + ZetaFunction(d) == + lp:= LPolynomial(d) + if K has PseudoAlgebraicClosureOfFiniteFieldCategory then + setTower!(1$K) + q:INT := size()$K ** d + lpt:UPZ := unmakeSUP(lp)$UPZ + lps:UTSZ := coerce(lpt)$UTSZ + x:= monomial(1,1)$UTSZ + mul: UTSZ := (1-x)*(1 - q * x) + invmul:Union(UTSZ,"failed") := recip(mul)$UTSZ + ivm: UTSZ + if not (invmul case "failed") then + ivm := invmul pretend UTSZ + else + ivm := 1 + lps * ivm + + calculatedSer: List UTSZ:= [1] + --in index i is the "almost ZetaFunction" summed to i-1. + --Except calculatedSer.1 which is 1 + + numberOfPlacesOfDegreeUsingZeta(degree:PI): Integer == + --is at most called once for each degree. Will calculate the + --entries in calculatdSer. + ser:UTSZ := 1 + x:= monomial(1,1)$UTSZ + pol:UTSZ + polser:Union(UTSZ,"failed") + serdel:UTSZ + i:PI := maxIndex(calculatedSer) pretend PI + while i < degree repeat + serdel:= 1 + if (n:= numberOfPlacesOfDegree(i)) > 0 then + pol:= (1-x**i) ** (n pretend PI) + polser:= recip(pol)$UTSZ -- coerce(pol)$UTSZ)$UTSZ + if not (polser case "failed") then + serdel:= (polser pretend UTSZ) + else + error "In numberOfPlacesOfDegreeUsingZeta. This shouldn't happen" + ser:= serdel * calculatedSer.i + calculatedSer:= concat(calculatedSer, ser) + i:= i + 1 + if degree = 1 then + coefficient(ZetaFunction(),degree) + else + coefficient(ZetaFunction(),degree) - _ + coefficient(calculatedSer.degree, degree) + + calculatedNP: List Integer := empty() + --local variable, in index i is number of places of degree i. + + numberOfPlacesOfDegree(i:PI): Integer == + if zfCalc then + if (m := maxIndex(calculatedNP)) < i then + calculatedNP:= _ + concat(calculatedNP, _ + [numberOfPlacesOfDegreeUsingZeta(j pretend PI) _ + for j in ((m+1) pretend PI)..i]) + calculatedNP.i + else + # placesOfDegree(i) --maybe we should make an improvement in this + + placesOfDegree(i) == + if (not foundPlacesOfDeg?(i)) then + if characteristic()$K**i > (2**16 - 1) then + print("If you are using a prime field and"::OF) + print("GB this will not work."::OF) + desingTree() + placesOfDegree(i,theCurve(),singularPoints()) + DegOfPlacesFound:= concat(DegOfPlacesFound, i) + thedeg:= i + select(crap(#1), foundPlaces()$Plc) + + numberRatPlacesExtDeg(extDegree:PI): Integer == + numberPlacesDegExtDeg(1,extDegree) + + numberPlacesDegExtDeg(degree:PI, extDegree:PI): Integer == + res:Integer:=0 + m:PI := degree * extDegree + d: PI + while m > 0 repeat + d:= gcd(m, extDegree) + if (m quo d) = degree then + res:= res + (numberOfPlacesOfDegree(m) * d) + m:= (m - 1) pretend PI + res + + calculateS(extDeg:PI): List Integer == + g := genus() + sizeK:NNI := size()$K ** extDeg + i:PositiveInteger := g pretend PI + S: List Integer := [0 for j in 1..g] + good:Boolean := true()$Boolean + while good repeat + S.i := numberRatPlacesExtDeg(i*extDeg) - ((sizeK **$NNI i) + 1) + j:Integer := i - 1 + if (not (j = 0)) then + i:= (j pretend PI) + else good:= false()$Boolean + S + + LPolynomial(): SparseUnivariatePolynomial Integer == + LPolynomial(1) + + LPolynomial(extDeg:PI): SparseUnivariatePolynomial Integer == + --when translating to AxiomXL rewrite this function! + g := genus() + zero?(g) => 1 + coef: List Integer := [1] + if K has PseudoAlgebraicClosureOfFiniteFieldCategory then + setTower!(1$K) + sizeK:Integer := size()$K ** extDeg --need to do a setExtension before + coef:= concat(coef,[0 for j in 1..(2*g)]) + S: List Integer := calculateS(extDeg) + i:PI := 1 + tmp:Integer + while i < g + 1 repeat + j:PI := 1 + tmp:= 0 + while j < i + 1 repeat + tmp:= tmp + S.j * coef((i + 1 - j) pretend PI) + j:= j + 1 + coef.(i+1) := tmp quo i + i:= i + 1 + i:= 1 + while i < g + 1 repeat + ss: Integer := sizeK **$Integer ((g + 1 - i) pretend PI) + val:Integer := ss * coef.i + coef.((2*g+2 - i) pretend PI) := val + i:= i + 1 + x:= monomial(1,1)$SUP(INT) + result: SparseUnivariatePolynomial(Integer):= _ + 1$SparseUnivariatePolynomial(Integer) + coef:= rest(coef) + i:= 1 + while i < 2 * g + 1 repeat + pol: SUP(INT) := (first(coef) :: Integer) * (x ** i) + result:= result + pol --(first(coef) :: Integer) * (x ** i) + coef:= rest(coef) + i:= i + 1 + result + + classNumber():Integer == + LPolynomial()(1) + +@ +<>= +"GPAFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=GPAFF"] +"DTP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=DTP"] +"INTDIVP" [color="#FF4488",href="bookvol10.4.pdf#nameddest=INTDIVP"] +"GPAFF" -> "INTDIVP" +"GPAFF" -> "DTP" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package GENPGCD GeneralPolynomialGcdPackage} \pagehead{GeneralPolynomialGcdPackage}{GENPGCD} \pagepic{ps/v104generalpolynomialgcdpackage.ps}{GENPGCD}{1.00} @@ -158429,6 +159205,7 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where <> <> <> +<> <> <> <> diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet index ce11c9d..5bfcd47 100644 --- a/books/bookvol5.pamphlet +++ b/books/bookvol5.pamphlet @@ -23956,6 +23956,7 @@ otherwise the new algebra won't be loaded by the interpreter when needed. (|FunctionSpacePrimitiveElement| . FSPRMELT) (|FunctionSpaceSum| . SUMFS) (|GaussianFactorizationPackage| . GAUSSFAC) + (|GeneralPackageForAlgebraicFunctionField| . GPAFF) (|GeneralUnivariatePowerSeries| . GSERIES) (|GenerateUnivariatePowerSeries| . GENUPS) (|GraphicsDefaults| . GRDEF) diff --git a/books/ps/v104generalpackageforalgebraicfunctionfield.eps b/books/ps/v104generalpackageforalgebraicfunctionfield.eps new file mode 100644 index 0000000..3b02b19 --- /dev/null +++ b/books/ps/v104generalpackageforalgebraicfunctionfield.eps @@ -0,0 +1,311 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: Graphviz version 2.20.2 (Mon Mar 30 10:09:11 UTC 2009) +%%For: (root) root +%%Title: pic +%%Pages: 1 +%%BoundingBox: 36 36 190 152 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + 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 190 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 154 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +% GPAFF +gsave +[ /Rect [ 37 72 99 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=GPAFF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 99 108 moveto +37 108 lineto +37 72 lineto +99 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 99 108 moveto +37 108 lineto +37 72 lineto +99 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +45 85.9 moveto 46 (GPAFF) alignedtext +grestore +% DTP +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=DTP) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 54 36 moveto +0 36 lineto +0 0 lineto +54 0 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 54 36 moveto +0 36 lineto +0 0 lineto +54 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +12.5 13.9 moveto 29 (DTP) alignedtext +grestore +% GPAFF->DTP +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 58 72 moveto +53 64 48 54 42 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 44.92 43.04 moveto +37 36 lineto +38.8 46.44 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 44.92 43.04 moveto +37 36 lineto +38.8 46.44 lineto +closepath stroke +grestore +% INTDIVP +gsave +[ /Rect [ 72 0 146 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=INTDIVP) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 146 36 moveto +72 36 lineto +72 0 lineto +146 0 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 146 36 moveto +72 36 lineto +72 0 lineto +146 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +79.5 13.9 moveto 59 (INTDIVP) alignedtext +grestore +% GPAFF->INTDIVP +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 78 72 moveto +83 64 88 54 94 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 97.2 46.44 moveto +99 36 lineto +91.08 43.04 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 97.2 46.44 moveto +99 36 lineto +91.08 43.04 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +end +restore +%%EOF diff --git a/changelog b/changelog index 1a0d09e..c31b5c5 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,8 @@ +20100524 tpd src/axiom-website/patches.html 20100524.02.tpd.patch +20100524 tpd src/algebra/Makefile help and test for GPAFF +20100524 tpd books/bookvol5 expose +20100524 tpd books/bookvol10.4 add GPAFF +20100524 tpd books/ps/v104generalpackageforalgebraicfunctionfield.eps added 20100524 tpd src/axiom-website/patches.html 20100524.01.tpd.patch 20100524 tpd src/algebra/Makefile help and test for IntersectionDivisorPackage 20100524 tpd books/bookvol5 expose IntersectionDivisorPackage diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 5ada953..74e60f9 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -15846,11 +15846,12 @@ LAYER18=\ @ \subsection{Layer19} -Depends on: EXPRSOL SFRTCAT FACTEXT\\ +Depends on: EXPRSOL SFRTCAT FACTEXT INTDIVP DTP\\ Next layer depends on: RECOP <>= LAYER19=\ + ${OUT}/GPAFF.o \ ${OUT}/IRURPK.o ${OUT}/LAZM3PK.o ${OUT}/LEXTRIPK.o ${OUT}/NORMPK.o \ ${OUT}/PACEXT.o \ ${OUT}/RECOP.o ${OUT}/RURPK.o ${OUT}/SFRGCD.o ${OUT}/SFQCMPK.o \ @@ -15862,6 +15863,31 @@ LAYER19=\ /* layer 19 */ /* EXPRSOL SFRTCAT */ +"GPAFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=GPAFF"] +"GPAFF" -> "INTDIVP" +"GPAFF" -> "DTP" +/*"GPAFF" -> {"PRSPCAT"; "SETCATD"; "LOCPOWC"; "PLACESC"; "DIVCAT"}*/ +/*"GPAFF" -> {"INFCLCT"; "DSTRCAT"; "BLMETCT"; "PACFFC"; "PACPERC"}*/ +/*"GPAFF" -> {"PFORP"; "PLPKCRV"; "INTFRSP"; "PRJALGPK"; "PARAMP"; "LPARSPT"}*/ +/*"GPAFF" -> {"UTSZ"; "FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"}*/ +/*"GPAFF" -> {"COMRING"; "RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"}*/ +/*"GPAFF" -> {"ABELSG"; "SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"}*/ +/*"GPAFF" -> {"LMODULE"; "BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"}*/ +/*"GPAFF" -> {"ENTIRER"; "UFD"; "DIVRING"; "POLYCAT"; "PDRING"; "FAMR"}*/ +/*"GPAFF" -> {"AMR"; "CHARZ"; "CHARNZ"; "FRETRCT"; "RETRACT"; "EVALAB"}*/ +/*"GPAFF" -> {"IEVALAB"; "FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"}*/ +/*"GPAFF" -> {"PFECAT"; "DIRPCAT"; "IXAGG"; "HOAGG"; "AGG"; "TYPE"}*/ +/*"GPAFF" -> {"ELTAGG"; "ELTAB"; "DIFEXT"; "DIFRING"; "FINITE"; "ORDRING"}*/ +/*"GPAFF" -> {"OAGROUP"; "OCAMON"; "OAMON"; "OASGP"; "OAMONS"; "VSPACE"}*/ +/*"GPAFF" -> {"UPSCAT"; "PSCAT"; "FAMONC"; "RCAGG"; "BOOLEAN"; "INT"}*/ +/*"GPAFF" -> {"LIST"; "ILIST"; "INS"; "OINTDOM"; "CFCAT"; "REAL"; "STEP"}*/ +/*"GPAFF" -> {"LSAGG"; "STAGG"; "URAGG"; "LNAGG"; "CLAGG"; "FLAGG"; "ELAGG"}*/ +/*"GPAFF" -> {"OM"; "NNI"; "LSAGG-"; "STAGG-"; "ORDFIN"; "LOGIC"; "ELAGG-"}*/ +/*"GPAFF" -> {"FLAGG-"; "URAGG-"; "LNAGG-"; "RCAGG-"; "IXAGG-"; "CLAGG-"}*/ +/*"GPAFF" -> {"HOAGG-"; "ORDSET-"; "AGG-"; "ELTAGG-"; "SETCAT-"; "BASTYPE-"}*/ +/*"GPAFF" -> {"PI"; "FFIELDC"; "FPC"; "MONOID-"; "ABELMON-"; "SGROUP-"}*/ +/*"GPAFF" -> {"ABELSG-"; "SINT"; "OUTFORM"}*/ + "IRURPK" [color="#FF4488",href="bookvol10.4.pdf#nameddest=IRURPK"] /*"IRURPK" -> {"EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"; "RING"}*/ /*"IRURPK" -> {"RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"; "SETCAT"}*/ @@ -17121,7 +17147,7 @@ ${MID}/AFALGGRO.nrlib/code.o: ${MID}/AFALGGRO.spad echo -e ")lib ${AFALGGRODEPS} \n )co AFALGGRO.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${AFALGGRODEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${AFALGGRODEPS} \n )co AFALGGRO.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17137,7 +17163,7 @@ ${MID}/PRJALGPK.nrlib/code.o: ${MID}/PRJALGPK.spad echo -e ")lib ${PRJALGPKDEPS} \n )co PRJALGPK.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${PRJALGPKDEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${PRJALGPKDEPS} \n )co PRJALGPK.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17152,7 +17178,7 @@ ${MID}/LPARSPT.nrlib/code.o: ${MID}/LPARSPT.spad echo -e ")lib ${LPARSPTDEPS} \n )co LPARSPT.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${LPARSPTDEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${LPARSPTDEPS} \n )co LPARSPT.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17167,7 +17193,7 @@ ${MID}/PARAMP.nrlib/code.o: ${MID}/PARAMP.spad echo -e ")lib ${PARAMPDEPS} \n )co PARAMP.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${PARAMPDEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${PARAMPDEPS} \n )co PARAMP.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17183,7 +17209,7 @@ ${MID}/DTP.nrlib/code.o: ${MID}/DTP.spad echo -e ")lib ${DTPDEPS} \n )co DTP.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${DTPDEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${DTPDEPS} \n )co DTP.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17199,7 +17225,7 @@ ${MID}/INTFRSP.nrlib/code.o: ${MID}/INTFRSP.spad echo -e ")lib ${INTFRSPDEPS} \n )co INTFRSP.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${INTFRSPDEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${INTFRSPDEPS} \n )co INTFRSP.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17215,7 +17241,24 @@ ${MID}/INTDIVP.nrlib/code.o: ${MID}/INTDIVP.spad echo -e ")lib ${INTDIVPDEPS} \n )co INTDIVP.spad" \ | ${INTERPSYS} ; \ else \ - echo -e ")lib ${INTDIVPDEPS} \n )co AFALGRES.spad" \ + echo -e ")lib ${INTDIVPDEPS} \n )co INTDIVP.spad" \ + | ${INTERPSYS} >${TMP}/trace ; \ + fi ) +@ +<>= + +GPAFFDEPS = PRSPCAT SETCATD LOCPOWC PLACESC DIVCAT INFCLCT DSTRCAT BLMETCT \ + INTDIVP PACFFC PACPERC PFORP PLPKCRV DTP INTFRSP PRJALGPK \ + PARAMP LPARSPT UTSZ + +${MID}/GPAFF.nrlib/code.o: ${MID}/GPAFF.spad + @echo P3 making ${MID}/GPAFF.nrlib/code.o from ${MID}/GPAFF.spad + @ (cd ${MID} ; \ + if [ -z "${NOISE}" ] ; then \ + echo -e ")lib ${GPAFFDEPS} \n )co GPAFF.spad" \ + | ${INTERPSYS} ; \ + else \ + echo -e ")lib ${GPAFFDEPS} \n )co GPAFF.spad" \ | ${INTERPSYS} >${TMP}/trace ; \ fi ) @ @@ -17981,6 +18024,7 @@ SPADHELP=\ ${HELP}/Fraction.help \ ${HELP}/FullPartialFractionExpansion.help \ ${HELP}/GeneralDistributedMultivariatePolynomial.help \ + ${HELP}/GeneralPackageForAlgebraicFunctionField.help \ ${HELP}/GeneralSparseTable.help \ ${HELP}/GroebnerFactorizationPackage.help \ ${HELP}/GroebnerPackage.help \ @@ -18191,6 +18235,7 @@ REGRESS= \ Fraction.regress \ FullPartialFractionExpansion.regress \ GeneralDistributedMultivariatePolynomial.regress \ + GeneralPackageForAlgebraicFunctionField.regress \ GeneralSparseTable.regress \ GroebnerFactorizationPackage.regress \ GroebnerPackage.regress \ @@ -18996,6 +19041,20 @@ ${HELP}/GeneralDistributedMultivariatePolynomial.help: \ >${INPUT}/GeneralDistributedMultivariatePolynomial.input @echo "GeneralDistributedMultivariatePolynomial (GDMP)" >>${HELPFILE} +${HELP}/GeneralPackageForAlgebraicFunctionField.help: \ + ${BOOKS}/bookvol10.4.pamphlet + @echo 7355 create GeneralPackageForAlgebraicFunctionField.help \ + from ${BOOKS}/bookvol10.4.pamphlet + @${TANGLE} -R"GeneralPackageForAlgebraicFunctionField.help" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${HELP}/GeneralPackageForAlgebraicFunctionField.help + @cp ${HELP}/GeneralPackageForAlgebraicFunctionField.help \ + ${HELP}/GPAFF.help + @${TANGLE} -R"GeneralPackageForAlgebraicFunctionField.input" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${INPUT}/GeneralPackageForAlgebraicFunctionField.input + @echo "GeneralPackageForAlgebraicFunctionField (GPAFF)" >>${HELPFILE} + ${HELP}/GeneralSparseTable.help: ${BOOKS}/bookvol10.3.pamphlet @echo 7360 create GeneralSparseTable.help from \ ${BOOKS}/bookvol10.3.pamphlet diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 7afd192..7db29e0 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -2795,5 +2795,7 @@ books/bookvol10.4 add DesingTreePackage, ParametrizationPackage
books/bookvol10.4 add InterpolateFormsPackage
20100524.01.tpd.patch books/bookvol10.4 add IntersectionDivisorPackage
+20100524.02.tpd.patch +books/bookvol10.4 add GeneralPackageForAlgebraicFunctionField