diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet index 4ebd8b4..4d10c5c 100644 --- a/books/bookvol10.4.pamphlet +++ b/books/bookvol10.4.pamphlet @@ -35084,7 +35084,7 @@ GeneralizedMultivariateFactorize(OV,E,S,R,P) : C == T --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 Issue )edit bookvol10.4.pamphlet to see algebra source code for GPAFF --R --R------------------------------- Operations -------------------------------- --R adjunctionDivisor : () -> DIVISOR desingTree : () -> List DesTree @@ -121962,6 +121962,868 @@ OutputPackage: with %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Chapter P} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package PAFF PackageForAlgebraicFunctionField} +<>= +)set break resume +)sys rm -f PackageForAlgebraicFunctionField.output +)spool PackageForAlgebraicFunctionField.output +)set message test on +)set message auto off +)clear all + +--S 1 of 1 +)show PackageForAlgebraicFunctionField +--R PackageForAlgebraicFunctionField(K: Field,symb: List Symbol,BLMET: BlowUpMethodCategory) is a package constructor +--R Abbreviation for PackageForAlgebraicFunctionField is PAFF +--R This constructor is exposed in this frame. +--R Issue )edit bookvol10.4.pamphlet to see algebra source code for PAFF +--R +--R------------------------------- Operations -------------------------------- +--R fullDesTree : () -> Void fullInfClsPt : () -> Void +--R genus : () -> NonNegativeInteger genusNeg : () -> Integer +--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 adjunctionDivisor : () -> Divisor Places K +--R classNumber : () -> Integer if K has FINITE +--R desingTree : () -> List DesingTree InfClsPt(K,symb,BLMET) +--R desingTreeWoFullParam : () -> List DesingTree InfClsPt(K,symb,BLMET) +--R eval : (DistributedMultivariatePolynomial(symb,K),Places K) -> K +--R eval : (DistributedMultivariatePolynomial(symb,K),DistributedMultivariatePolynomial(symb,K),Places K) -> K +--R eval : (Fraction DistributedMultivariatePolynomial(symb,K),Places K) -> K +--R evalIfCan : (DistributedMultivariatePolynomial(symb,K),Places K) -> Union(K,"failed") +--R evalIfCan : (DistributedMultivariatePolynomial(symb,K),DistributedMultivariatePolynomial(symb,K),Places K) -> Union(K,"failed") +--R evalIfCan : (Fraction DistributedMultivariatePolynomial(symb,K),Places K) -> Union(K,"failed") +--R findOrderOfDivisor : (Divisor Places K,Integer,Integer) -> Record(ord: Integer,num: DistributedMultivariatePolynomial(symb,K),den: DistributedMultivariatePolynomial(symb,K),upTo: Integer) +--R goppaCode : (Divisor Places K,Divisor Places K) -> Matrix K +--R goppaCode : (Divisor Places K,List Places K) -> Matrix K +--R homogenize : (DistributedMultivariatePolynomial(symb,K),Integer) -> DistributedMultivariatePolynomial(symb,K) +--R interpolateForms : (Divisor Places K,NonNegativeInteger) -> List DistributedMultivariatePolynomial(symb,K) +--R interpolateFormsForFact : (Divisor Places K,List DistributedMultivariatePolynomial(symb,K)) -> List DistributedMultivariatePolynomial(symb,K) +--R intersectionDivisor : DistributedMultivariatePolynomial(symb,K) -> Divisor Places K +--R lBasis : (Divisor Places K,NonNegativeInteger) -> List Fraction DistributedMultivariatePolynomial(symb,K) +--R lBasis : Divisor Places K -> Record(num: List DistributedMultivariatePolynomial(symb,K),den: DistributedMultivariatePolynomial(symb,K)) +--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 : (DistributedMultivariatePolynomial(symb,K),Places K) -> NeitherSparseOrDensePowerSeries K +--R placesAbove : ProjectivePlane K -> List Places K +--R placesOfDegree : PositiveInteger -> List Places K if K has FINITE +--R pointDominateBy : Places K -> ProjectivePlane K +--R projectivePoint : List K -> ProjectivePlane K +--R rationalPlaces : () -> List Places K +--R rationalPoints : () -> List ProjectivePlane K +--R setCurve : DistributedMultivariatePolynomial(symb,K) -> DistributedMultivariatePolynomial(symb,K) +--R setSingularPoints : List ProjectivePlane K -> List ProjectivePlane K +--R singularPoints : () -> List ProjectivePlane K +--R theCurve : () -> DistributedMultivariatePolynomial(symb,K) +--R +--E 1 + +)spool +)lisp (bye) +@ +<>= +==================================================================== +PackageForAlgebraicFunctionField examples +==================================================================== + +See Also: +o )show PackageForAlgebraicFunctionField + +@ +\pagehead{PackageForAlgebraicFunctionField}{PAFF} +\pagepic{ps/v104packageforalgebraicfunctionfield.eps}{PAFF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{PAFF}{adjunctionDivisor} & +\cross{PAFF}{classNumber} & +\cross{PAFF}{desingTree} \\ +\cross{PAFF}{desingTreeWoFullParam} & +\cross{PAFF}{eval} & +\cross{PAFF}{evalIfCan} \\ +\cross{PAFF}{findOrderOfDivisor} & +\cross{PAFF}{fullDesTree} & +\cross{PAFF}{fullInfClsPt} \\ +\cross{PAFF}{genus} & +\cross{PAFF}{genusNeg} & +\cross{PAFF}{goppaCode} \\ +\cross{PAFF}{homogenize} & +\cross{PAFF}{interpolateForms} & +\cross{PAFF}{interpolateFormsForFact} \\ +\cross{PAFF}{intersectionDivisor} & +\cross{PAFF}{lBasis} & +\cross{PAFF}{LPolynomial} \\ +\cross{PAFF}{numberOfPlacesOfDegree} & +\cross{PAFF}{numberPlacesDegExtDeg} & +\cross{PAFF}{numberRatPlacesExtDeg} \\ +\cross{PAFF}{parametrize} & +\cross{PAFF}{placesAbove} & +\cross{PAFF}{placesOfDegree} \\ +\cross{PAFF}{pointDominateBy} & +\cross{PAFF}{projectivePoint} & +\cross{PAFF}{rationalPlaces} \\ +\cross{PAFF}{rationalPoints} & +\cross{PAFF}{setCurve} & +\cross{PAFF}{setSingularPoints} \\ +\cross{PAFF}{singularPoints} & +\cross{PAFF}{theCurve} & +\cross{PAFF}{ZetaFunction} + +\end{tabular} + +<>= +)abbrev package PAFF PackageForAlgebraicFunctionField +++ 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 +PackageForAlgebraicFunctionField(K,symb,BLMET):Exports == Implementation where + K:Field + symb : List(Symbol) + PolyRing ==> DistributedMultivariatePolynomial(symb,K) + E ==> DirectProduct(#symb,NonNegativeInteger) + BLMET : BlowUpMethodCategory + + AFP ==> AffinePlane(K) + ProjPt ==> ProjectivePlane(K) + PCS ==> NeitherSparseOrDensePowerSeries(K) + Plc ==> Places(K) + DIVISOR ==> Divisor(Plc) + InfClsPoint ==> InfClsPt(K,symb,BLMET) + DesTree ==> DesingTree(InfClsPoint) + FRACPOLY ==> Fraction PolyRing + NNI ==> NonNegativeInteger + PI ==> PositiveInteger + UTSZ ==> UnivariateTaylorSeriesCZero(Integer,t) + PAFFPC ==> GeneralPackageForAlgebraicFunctionField + PACKPOLY ==> PackageForPoly(K,PolyRing,E,#symb) + BP ==> PAFFPC(K,symb,PolyRing,E,ProjPt,PCS,Plc,DIVISOR,InfClsPoint,DesTree,BLMET) + + Exports ==> with + homogenize: (PolyRing,Integer) -> PolyRing + + interpolateFormsForFact: (DIVISOR,List PolyRing) -> List(PolyRing) + + fullDesTree: () -> Void + + fullInfClsPt: () -> Void + + setCurve: PolyRing -> PolyRing + + projectivePoint: List K -> ProjPt + + pointDominateBy : Plc -> ProjPt + ++ pointDominateBy(pl) returns the projective point dominated + ++ by the place pl. + + placesAbove: ProjPt -> List Plc + + setSingularPoints: List ProjPt -> List ProjPt + + goppaCode: (DIVISOR,DIVISOR) -> Matrix K + + goppaCode: (DIVISOR,List(Plc)) -> Matrix K + + rationalPlaces: () -> List Plc + ++ rationalPlaces returns all the rational places of the + ++ curve defined by the polynomial given to the 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: () -> Integer + + 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. + + desingTree: () -> List DesTree + ++ desingTree returns the desingularisation trees at all singular + ++ points of the curve defined by the polynomial given to the package. + + rationalPoints: () -> List(ProjPt) + + 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,NNI) -> List FRACPOLY + + 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. + + 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 set with the function setCurve. + + if K has Finite then --should we say LocallyAlgebraicallyClosedField?? + + 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 BP + + homogenize(pol,n) == homogenize(pol,n)$PACKPOLY + + pointDominateBy(pl)== pointDominateBy(pl)$BP + + placesAbove(pt)== placesAbove(pt)$BP + + setSingularPoints(lspt)== setSingularPoints(lspt)$BP + + projectivePoint(lpt)==projectivePoint(lpt)$ProjPt + + interpolateFormsForFact(d,lm)== + interpolateFormsForFact(d,lm)$BP + + if K has Finite then + + goppaCode(d:DIVISOR,lp:List(Plc))== + lb:=lBasis(d) + dd:=lb.den + ll:=[[eval(f,dd,pl) for pl in lp] for f in lb.num] + matrix ll + + goppaCode(d:DIVISOR,p:DIVISOR)== + lp:=supp p + goppaCode(d,lp) + + ZetaFunction == ZetaFunction()$BP + + ZetaFunction(d) == ZetaFunction(d)$BP + + numberOfPlacesOfDegree(i)==numberOfPlacesOfDegree(i)$BP + + placesOfDegree(i) ==placesOfDegree(i)$BP + + numberRatPlacesExtDeg(extDegree)==numberRatPlacesExtDeg(extDegree)$BP + + numberPlacesDegExtDeg(degree,extDegree)== + numberPlacesDegExtDeg(degree,extDegree)$BP + + LPolynomial == LPolynomial()$BP + + LPolynomial(extDeg)==LPolynomial(extDeg)$BP + + classNumber== classNumber()$BP + + rationalPlaces == rationalPlaces()$BP + + rationalPoints==rationalPoints()$BP + + crvLocal:PolyRing + + eval(f:PolyRing,pl:Plc)== + dd:= degree pl + ^one?(dd) => error " cannot evaluate at place of degree greater than one" + eval(f,pl)$BP + + evalIfCan(f:PolyRing,pl:Plc)== + dd:= degree pl + ^one?(dd) => error " cannot evaluate at place of degree greater than one" + evalIfCan(f,pl)$BP + + setCurve(pol)==setCurve(pol)$BP + + lBasis(divis)==lBasis(divis)$BP + + genus==genus()$BP + + genusNeg==genusNeg()$BP + + theCurve==theCurve()$BP + + desingTree==desingTree()$BP + + desingTreeWoFullParam== desingTreeWoFullParam()$BP + + -- compute the adjunction divisor of the curve using + -- adjunctionDivisor from DesingTreePackage + adjunctionDivisor == adjunctionDivisor()$BP + + singularPoints==singularPoints()$BP + + parametrize(f,pl)==parametrize(f,pl)$BP + + -- compute the interpolating forms (see package InterpolateFormsPackage) + interpolateForms(d,n)==interpolateForms(d,n)$BP + + eval(f:PolyRing,g:PolyRing,pl:Plc)==eval(f,g,pl)$BP + + eval(u:FRACPOLY,pl:Plc)== + ff:=numer u + gg:=denom u + eval(ff,gg,pl) + + evalIfCan(f:PolyRing,g:PolyRing,pl:Plc)==evalIfCan(f,g,pl)$BP + + evalIfCan(u:FRACPOLY,pl:Plc)== + ff:=numer u + gg:=denom u + evalIfCan(ff,gg,pl) + + intersectionDivisor(pol)==intersectionDivisor(pol)$BP + + fullDesTree== + fullOutput()$DesTree => fullOutput(false())$DesTree + fullOutput(true())$DesTree + + fullInfClsPt== + fullOutput()$InfClsPoint => fullOutput(false())$InfClsPoint + fullOutput(true())$InfClsPoint + +@ +<>= +"PAFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PAFF"] +"PAFFFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PAFFFF"] +"INFCLSPS" [color="#88FF44",href="bookvol10.3.pdf#nameddest=INFCLSPS"] +"PAFF" -> "PAFFFF" +"PAFF" -> "INFCLSPS" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package PAFFFF PackageForAlgebraicFunctionFieldOverFiniteField} +<>= +)set break resume +)sys rm -f PackageForAlgebraicFunctionFieldOverFiniteField.output +)spool PackageForAlgebraicFunctionFieldOverFiniteField.output +)set message test on +)set message auto off +)clear all + +--S 1 of 1 +)show PackageForAlgebraicFunctionFieldOverFiniteField +--R PackageForAlgebraicFunctionFieldOverFiniteField(K: FiniteFieldCategory,symb: List Symbol,BLMET: BlowUpMethodCategory) is a package constructor +--R Abbreviation for PackageForAlgebraicFunctionFieldOverFiniteField is PAFFFF +--R This constructor is exposed in this frame. +--R Issue )edit bookvol10.4.pamphlet to see algebra source code for PAFFFF +--R +--R------------------------------- Operations -------------------------------- +--R fullDesTree : () -> Void fullInfClsPt : () -> Void +--R genus : () -> NonNegativeInteger genusNeg : () -> Integer +--R LPolynomial : () -> SparseUnivariatePolynomial Integer if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R LPolynomial : PositiveInteger -> SparseUnivariatePolynomial Integer if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R ZetaFunction : () -> UnivariateTaylorSeriesCZero(Integer,t) if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R ZetaFunction : PositiveInteger -> UnivariateTaylorSeriesCZero(Integer,t) if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R adjunctionDivisor : () -> Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K +--R classNumber : () -> Integer if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R desingTree : () -> List DesingTree InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField(K,symb,BLMET) +--R desingTreeWoFullParam : () -> List DesingTree InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField(K,symb,BLMET) +--R eval : (DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> K +--R eval : (DistributedMultivariatePolynomial(symb,K),DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> K +--R eval : (Fraction DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> K +--R evalIfCan : (DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> Union(K,"failed") +--R evalIfCan : (DistributedMultivariatePolynomial(symb,K),DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> Union(K,"failed") +--R evalIfCan : (Fraction DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> Union(K,"failed") +--R findOrderOfDivisor : (Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K,Integer,Integer) -> Record(ord: Integer,num: DistributedMultivariatePolynomial(symb,K),den: DistributedMultivariatePolynomial(symb,K),upTo: Integer) +--R goppaCode : (Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K,Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> Matrix K +--R goppaCode : (Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K,List PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> Matrix K +--R homogenize : (DistributedMultivariatePolynomial(symb,K),Integer) -> DistributedMultivariatePolynomial(symb,K) +--R interpolateForms : (Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K,NonNegativeInteger) -> List DistributedMultivariatePolynomial(symb,K) +--R interpolateFormsForFact : (Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K,List DistributedMultivariatePolynomial(symb,K)) -> List DistributedMultivariatePolynomial(symb,PseudoAlgebraicClosureOfFiniteField K) +--R intersectionDivisor : DistributedMultivariatePolynomial(symb,K) -> Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K +--R lBasis : (Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K,NonNegativeInteger) -> List Fraction DistributedMultivariatePolynomial(symb,K) +--R lBasis : Divisor PlacesOverPseudoAlgebraicClosureOfFiniteField K -> Record(num: List DistributedMultivariatePolynomial(symb,K),den: DistributedMultivariatePolynomial(symb,K)) +--R numberOfPlacesOfDegree : PositiveInteger -> Integer if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R numberPlacesDegExtDeg : (PositiveInteger,PositiveInteger) -> Integer if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R numberRatPlacesExtDeg : PositiveInteger -> Integer if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R parametrize : (DistributedMultivariatePolynomial(symb,K),PlacesOverPseudoAlgebraicClosureOfFiniteField K) -> NeitherSparseOrDensePowerSeries PseudoAlgebraicClosureOfFiniteField K +--R placesAbove : ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K -> List PlacesOverPseudoAlgebraicClosureOfFiniteField K +--R placesOfDegree : PositiveInteger -> List PlacesOverPseudoAlgebraicClosureOfFiniteField K if PseudoAlgebraicClosureOfFiniteField K has FINITE +--R pointDominateBy : PlacesOverPseudoAlgebraicClosureOfFiniteField K -> ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K +--R projectivePoint : List PseudoAlgebraicClosureOfFiniteField K -> ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K +--R rationalPlaces : () -> List PlacesOverPseudoAlgebraicClosureOfFiniteField K +--R rationalPoints : () -> List ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K +--R setCurve : DistributedMultivariatePolynomial(symb,K) -> DistributedMultivariatePolynomial(symb,K) +--R setSingularPoints : List ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K -> List ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K +--R singularPoints : () -> List ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K +--R theCurve : () -> DistributedMultivariatePolynomial(symb,K) +--R translateToOrigin : (DistributedMultivariatePolynomial(symb,K),ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField K) -> DistributedMultivariatePolynomial(symb,PseudoAlgebraicClosureOfFiniteField K) +--R +--E 1 + +)spool +)lisp (bye) +@ +<>= +==================================================================== +PackageForAlgebraicFunctionFieldOverFiniteField examples +==================================================================== + +See Also: +o )show PackageForAlgebraicFunctionFieldOverFiniteField + +@ +\pagehead{PackageForAlgebraicFunctionFieldOverFiniteField}{PAFFFF} +\pagepic{ps/v104packageforalgebraicfunctionfieldoverfinitefield.eps}{PAFFFF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lll} +\cross{PAFFFF}{adjunctionDivisor} & +\cross{PAFFFF}{classNumber} & +\cross{PAFFFF}{desingTree} \\ +\cross{PAFFFF}{desingTreeWoFullParam} & +\cross{PAFFFF}{eval} & +\cross{PAFFFF}{evalIfCan} \\ +\cross{PAFFFF}{findOrderOfDivisor} & +\cross{PAFFFF}{fullDesTree} & +\cross{PAFFFF}{fullInfClsPt} \\ +\cross{PAFFFF}{genus} & +\cross{PAFFFF}{genusNeg} & +\cross{PAFFFF}{goppaCode} \\ +\cross{PAFFFF}{homogenize} & +\cross{PAFFFF}{interpolateForms} & +\cross{PAFFFF}{interpolateFormsForFact} \\ +\cross{PAFFFF}{intersectionDivisor} & +\cross{PAFFFF}{lBasis} & +\cross{PAFFFF}{LPolynomial} \\ +\cross{PAFFFF}{numberOfPlacesOfDegree} & +\cross{PAFFFF}{numberPlacesDegExtDeg} & +\cross{PAFFFF}{numberRatPlacesExtDeg} \\ +\cross{PAFFFF}{parametrize} & +\cross{PAFFFF}{placesAbove} & +\cross{PAFFFF}{placesOfDegree} \\ +\cross{PAFFFF}{pointDominateBy} & +\cross{PAFFFF}{projectivePoint} & +\cross{PAFFFF}{rationalPlaces} \\ +\cross{PAFFFF}{rationalPoints} & +\cross{PAFFFF}{setCurve} & +\cross{PAFFFF}{setSingularPoints} \\ +\cross{PAFFFF}{singularPoints} & +\cross{PAFFFF}{theCurve} & +\cross{PAFFFF}{translateToOrigin} \\ +\cross{PAFFFF}{ZetaFunction} && +\end{tabular} + +<>= +)abbrev package PAFFFF PackageForAlgebraicFunctionFieldOverFiniteField +++ 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 +PackageForAlgebraicFunctionFieldOverFiniteField(K,symb,BLMET):Exp == Impl where + + K:FiniteFieldCategory -- Field + symb : List(Symbol) + BLMET : BlowUpMethodCategory + + DK ==> PseudoAlgebraicClosureOfFiniteField(K) + PolyRing ==> DistributedMultivariatePolynomial(symb,K) + PolyRing2 ==> DistributedMultivariatePolynomial(symb,DK) + ProjPt ==> ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField(K) + NNI ==> NonNegativeInteger + PI ==> PositiveInteger + UTSZ ==> UnivariateTaylorSeriesCZero(Integer,t) + PAFFPC ==> GeneralPackageForAlgebraicFunctionField + PCS ==> NeitherSparseOrDensePowerSeries(DK) + Plc ==> PlacesOverPseudoAlgebraicClosureOfFiniteField(K) + DIVISOR ==> Divisor(Plc) + InfClsPoint ==> InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField(K,symb,BLMET) + DesTree ==> DesingTree(InfClsPoint) + FracPoly ==> Fraction PolyRing + PackPoly ==> PackageForPoly(DK,PolyRing2,E,#symb) + E ==> DirectProduct(#symb,NNI) + BP ==> PAFFPC(DK,symb,PolyRing2,E,ProjPt,PCS,Plc,DIVISOR,InfClsPoint,DesTree,BLMET) + + Exp ==> with + homogenize: (PolyRing,Integer) -> PolyRing + + fullDesTree: () -> Void + + fullInfClsPt: () -> Void + + setCurve: PolyRing -> PolyRing + + translateToOrigin: (PolyRing, ProjPt) -> PolyRing2 + + goppaCode: (DIVISOR,DIVISOR) -> Matrix K + + goppaCode: (DIVISOR,List(Plc)) -> Matrix K + + pointDominateBy : Plc -> ProjPt + ++ pointDominateBy(pl) returns the projective point dominated + ++ by the place pl. + + placesAbove: ProjPt -> List Plc + + projectivePoint: List DK -> ProjPt + + setSingularPoints: List ProjPt -> List ProjPt + + rationalPlaces: () -> List Plc + ++ rationalPlaces returns all the rational places of the + ++ curve defined by the polynomial given to the 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: () -> Integer + + 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. + + desingTree: () -> List DesTree + ++ desingTree returns the desingularisation trees at all singular points + ++ of the curve defined by the polynomial given to the package. + + rationalPoints: () -> List(ProjPt) + + 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,NNI) -> List FracPoly + + 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) + + interpolateFormsForFact: (DIVISOR,List PolyRing) -> List(PolyRing2) + + interpolateForms: (DIVISOR,NNI) -> List(PolyRing) + ++ interpolateForms(d,n) returns a basis of the interpolate forms of + ++ degree n of the divisor d. + + 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 of the + ++ form pol with the curve. + ++ (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 defined by setCurve. + + if DK has Finite then --should we say LocallyAlgebraicallyClosedField?? + + 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 + + Impl ==> add + import BP + + homogenize(pol,n) == homogenize(pol,n)$PackageForPoly(K,PolyRing,E,#symb) + + toPolyRing2: PolyRing -> PolyRing2 + + toPolyRing: PolyRing2 -> PolyRing + + projectivePoint(lpt)==projectivePoint(lpt)$ProjPt + + pointDominateBy(pl)== pointDominateBy(pl)$BP + + placesAbove(pt)== placesAbove(pt)$BP + + setSingularPoints(lspt)== setSingularPoints(lspt)$BP + + findOrderOfDivisor(divis,lb,hb) == + ens:=findOrderOfDivisor(divis,lb,hb)$BP + [ens.ord, toPolyRing ens.num, toPolyRing ens.den, ens.upTo] + + setCurve(pol)== + ooo:=setCurve(toPolyRing2 pol)$BP + pol + + ZetaFunction == ZetaFunction()$BP + + ZetaFunction(d) == ZetaFunction(d)$BP + + numberOfPlacesOfDegree(i)==numberOfPlacesOfDegree(i)$BP + + placesOfDegree(i) ==placesOfDegree(i)$BP + + numberRatPlacesExtDeg(extDegree)==numberRatPlacesExtDeg(extDegree)$BP + + numberPlacesDegExtDeg(degree,extDegree)== + numberPlacesDegExtDeg(degree,extDegree)$BP + + LPolynomial == LPolynomial()$BP + + LPolynomial(extDeg)==LPolynomial(extDeg)$BP + + classNumber== classNumber()$BP + + rationalPlaces == rationalPlaces()$BP + + rationalPoints==rationalPoints()$BP + + goppaCode(d:DIVISOR,lp:List(Plc))== + lb:=lBasis(d) + dd:=lb.den + ll:=[[eval(f,dd,pl) for pl in lp] for f in lb.num] + matrix ll + + goppaCode(d:DIVISOR,p:DIVISOR)== + lp:=supp p + goppaCode(d,lp) + + toPolyRing(pol)== + zero?(pol) => 0$PolyRing + lc:=leadingCoefficient pol + lce:K:= retract lc + lm:=leadingMonomial pol + lt:=degree lm + monomial(lce,lt)$PolyRing + toPolyRing( reductum pol ) + + toPolyRing2(pol)== + zero?(pol) => 0$PolyRing2 + lc:=leadingCoefficient pol + lce:DK:= lc :: DK + lm:=leadingMonomial pol + lt:=degree lm + monomial(lce,lt)$PolyRing2 + toPolyRing2( reductum pol ) + + evalIfCan(f:PolyRing,pl:Plc)== + dd:= degree pl + ^one?(dd) => error " cannot evaluate at place of degree greater than one" + ee:=evalIfCan(toPolyRing2 f,pl)$BP + ee case "failed" => "failed" + retract ee + + eval(f:PolyRing,pl:Plc)== + dd:= degree pl + ^one?(dd) => error " cannot evaluate at place of degree greater than one" + ee:=eval(toPolyRing2 f,pl)$BP + retract ee + + lBasis(divis)== + ans:=lBasis(divis)$BP + nn:=ans.num + dd:=ans.den + nnd:=[toPolyRing pol for pol in nn] + ddd:=toPolyRing dd + [nnd,ddd] + + genus==genus()$BP + + genusNeg==genusNeg()$BP + + theCurve== + ccc:= theCurve()$BP + toPolyRing ccc + + desingTree==desingTree()$BP + + desingTreeWoFullParam== desingTreeWoFullParam()$BP + + -- compute the adjunction divisor of the curve using + -- adjunctionDivisor from DesingTreePackage + adjunctionDivisor == adjunctionDivisor()$BP + + singularPoints==singularPoints()$BP + + parametrize(f,pl)== + ff:= toPolyRing2 f + parametrize(ff,pl)$BP + + -- compute the interpolating forms (see package InterpolateFormsPackage) + interpolateForms(d,n)== + ans:=interpolateForms(d,n)$BP + [toPolyRing pol for pol in ans] + + interpolateFormsForFact(d,lm)== + lm2:List PolyRing2 := [ toPolyRing2 p for p in lm] + interpolateFormsForFact(d,lm2)$BP + + evalIfCan(ff:PolyRing,gg:PolyRing,pl:Plc)== + dd:= degree pl + ^one?(dd) => error " cannot evaluate at place of degree greater than one" + f:=toPolyRing2 ff + g:=toPolyRing2 gg + ee:=evalIfCan(f,g,pl)$BP + ee case "failed" => "failed" + retract ee + + eval(ff:PolyRing,gg:PolyRing,pl:Plc)== + dd:= degree pl + ^one?(dd) => error " cannot evaluate at place of degree greater than one" + f:=toPolyRing2 ff + g:=toPolyRing2 gg + ee:=eval(f,g,pl)$BP + retract ee + + evalIfCan(u:FracPoly,pl:Plc)== + ff:=numer u + gg:=denom u + evalIfCan(ff,gg,pl) + + eval(u:FracPoly,pl:Plc)== + ff:=numer u + gg:=denom u + eval(ff,gg,pl) + + intersectionDivisor(pol)== + polu:=toPolyRing2 pol + intersectionDivisor(polu)$BP + + fullDesTree== + fullOutput()$DesTree => fullOutput(false())$DesTree + fullOutput(true())$DesTree + + fullInfClsPt== + fullOutput()$InfClsPoint => fullOutput(false())$InfClsPoint + fullOutput(true())$InfClsPoint + + +@ +<>= +"PAFFFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PAFFFF"] +"PAFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PAFF"] +"INFCLSPS" [color="#88FF44",href="bookvol10.3.pdf#nameddest=INFCLSPS"] +"PAFFFF" -> "PAFF" +"PAFFFF" -> "INFCLSPS" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{package PFORP PackageForPoly} <>= )set break resume @@ -159381,6 +160243,8 @@ ZeroDimensionalSolvePackage(R,ls,ls2): Exports == Implementation where <> <> +<> +<> <> <> <> diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet index 5bfcd47..4e3ea32 100644 --- a/books/bookvol5.pamphlet +++ b/books/bookvol5.pamphlet @@ -24081,6 +24081,8 @@ otherwise the new algebra won't be loaded by the interpreter when needed. (|OrdSetInts| . OSI) (|OrthogonalPolynomialFunctions| . ORTHPOL) (|OutputPackage| . OUT) + (|PackageForAlgebraicFunctionField| . PAFF) + (|PackageForAlgebraicFunctionFieldOverFiniteField| . PAFFFF) (|PackageForPoly| . PFORP) (|PadeApproximantPackage| . PADEPAC) (|Palette| . PALETTE) diff --git a/books/ps/v104packageforalgebraicfunctionfield.eps b/books/ps/v104packageforalgebraicfunctionfield.eps new file mode 100644 index 0000000..ca525df --- /dev/null +++ b/books/ps/v104packageforalgebraicfunctionfield.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 212 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 212 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 176 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +% PAFF +gsave +[ /Rect [ 52 72 106 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PAFF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 106 108 moveto +52 108 lineto +52 72 lineto +106 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 106 108 moveto +52 108 lineto +52 72 lineto +106 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +61.5 85.9 moveto 35 (PAFF) alignedtext +grestore +% PAFFFF +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PAFFFF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 66 36 moveto +0 36 lineto +0 0 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 66 36 moveto +0 36 lineto +0 0 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +7.5 13.9 moveto 51 (PAFFFF) alignedtext +grestore +% PAFF->PAFFFF +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 67 72 moveto +62 64 55 54 49 44 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 52.27 42.62 moveto +44 36 lineto +46.33 46.34 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 52.27 42.62 moveto +44 36 lineto +46.33 46.34 lineto +closepath stroke +grestore +% INFCLSPS +gsave +[ /Rect [ 84 0 168 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=INFCLSPS) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 168 36 moveto +84 36 lineto +84 0 lineto +168 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 168 36 moveto +84 36 lineto +84 0 lineto +168 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +92 13.9 moveto 68 (INFCLSPS) alignedtext +grestore +% PAFF->INFCLSPS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 91 72 moveto +96 64 103 54 109 44 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 111.67 46.34 moveto +114 36 lineto +105.73 42.62 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 111.67 46.34 moveto +114 36 lineto +105.73 42.62 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +end +restore +%%EOF diff --git a/books/ps/v104packageforalgebraicfunctionfieldoverfinitefield.eps b/books/ps/v104packageforalgebraicfunctionfieldoverfinitefield.eps new file mode 100644 index 0000000..8a88f1f --- /dev/null +++ b/books/ps/v104packageforalgebraicfunctionfieldoverfinitefield.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 200 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 200 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 164 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +% PAFFFF +gsave +[ /Rect [ 37 72 103 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PAFFFF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 103 108 moveto +37 108 lineto +37 72 lineto +103 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 103 108 moveto +37 108 lineto +37 72 lineto +103 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +44.5 85.9 moveto 51 (PAFFFF) alignedtext +grestore +% PAFF +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PAFF) >> + /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 +9.5 13.9 moveto 35 (PAFF) alignedtext +grestore +% PAFFFF->PAFF +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 59 72 moveto +54 64 48 54 43 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 45.92 43.04 moveto +38 36 lineto +39.8 46.44 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 45.92 43.04 moveto +38 36 lineto +39.8 46.44 lineto +closepath stroke +grestore +% INFCLSPS +gsave +[ /Rect [ 72 0 156 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=INFCLSPS) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 156 36 moveto +72 36 lineto +72 0 lineto +156 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 156 36 moveto +72 36 lineto +72 0 lineto +156 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +80 13.9 moveto 68 (INFCLSPS) alignedtext +grestore +% PAFFFF->INFCLSPS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 81 72 moveto +86 64 92 54 98 45 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 101.2 46.44 moveto +103 36 lineto +95.08 43.04 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 101.2 46.44 moveto +103 36 lineto +95.08 43.04 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +end +restore +%%EOF diff --git a/changelog b/changelog index c31b5c5..9df4b30 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,9 @@ +20100525 tpd src/axiom-website/patches.html 20100525.01.tpd.patch +20100525 tpd src/algebra/Makefile help and test for PAFF, PAFFFF +20100525 tpd books/bookvol5 expose PAFF, PAFFFF +20100525 tpd books/bookvol10.4 add PAFF, PAFFFF +20100525 tpd books/ps/v104packageforalgebraicfunctionfieldoverfinitefield.eps +20100525 tpd books/ps/v104packageforalgebraicfunctionfield.eps added 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 diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 74e60f9..25137cb 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -16326,6 +16326,61 @@ LAYER22=\ /*"INFCLSPS" -> {"FLAGG-"; "LNAGG-"; "LSAGG-"; "STAGG-"; "ELAGG-"; "URAGG-"}*/ @ +\subsection{Layer23} +Depends on: INFCLSPS + +Note that PAFF and PAFFFF form clique2.spad. Each one depends on the other. +<>= + +LAYER23=\ + ${MID}/clique2.spad \ + layer23done + +@ +<>= +/* layer 23 */ + +"PAFF" -> "PAFFFF" +"PAFF" -> "INFCLSPS" +/*"PAFF" -> {"BLMETCT"; "GPAFF"; "PFORP"; "PACOFF"; "PROJPLPS"; "PLACESPS"}*/ +/*"PAFF" -> {"NSDPS"; "LOCPOWC"; "DIV"; "SETCATD"; "PLACESC"; "DIVCAT"}*/ +/*"PAFF" -> {"INFCLCT"; "DSTREE"; "DSTRCAT"; "PRSPCAT"; "UTSZ"; "PACFFC"}*/ +/*"PAFF" -> {"PACPERC"; "PROJPL"; "PLACES"; "INFCLSPT"; "PROJPL"; "ICP"}*/ +/*"PAFF" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/ +/*"PAFF" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/ +/*"PAFF" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"; "LMODULE"}*/ +/*"PAFF" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"}*/ +/*"PAFF" -> {"DIVRING"; "POLYCAT"; "PDRING"; "FAMR"; "AMR"; "CHARZ"}*/ +/*"PAFF" -> {"CHARNZ"; "FRETRCT"; "RETRACT"; "EVALAB"; "IEVALAB"}*/ +/*"PAFF" -> {"FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"; "PFECAT"}*/ +/*"PAFF" -> {"LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "HOAGG"; "AGG"; "TYPE"}*/ +/*"PAFF" -> {"LNAGG"; "IXAGG"; "ELTAGG"; "ELTAB"; "CLAGG"; "FLAGG"}*/ +/*"PAFF" -> {"ELAGG"; "OM"; "INT"; "LIST"; "ILIST"; "DIRPCAT"; "DIFEXT"}*/ +/*"PAFF" -> {"DIFRING"; "FINITE"; "ORDRING"; "OAGROUP"; "OCAMON"; "OAMON"}*/ +/*"PAFF" -> {"OASGP"; "OAMONS"; "VSPACE"; "INS"; "OINTDOM"; "CFCAT"; "REAL"}*/ +/*"PAFF" -> {"STEP"; "PI"; "NNI"; "BOOLEAN"}*/ + +"PAFFFF" -> "PAFF" +"PAFF" -> "INFCLSPS" +/*"PAFF" -> {"BLMETCT"; "GPAFF"; "PFORP"; "PACOFF"; "PROJPLPS"; "PLACESPS"}*/ +/*"PAFF" -> {"NSDPS"; "LOCPOWC"; "DIV"; "SETCATD"; "PLACESC"; "DIVCAT"}*/ +/*"PAFF" -> {"INFCLCT"; "DSTREE"; "DSTRCAT"; "PRSPCAT"; "UTSZ"; "PACFFC"}*/ +/*"PAFF" -> {"PACPERC"; "PROJPL"; "PLACES"; "INFCLSPT"; "PROJPL"; "ICP"}*/ +/*"PAFF" -> {"FIELD"; "EUCDOM"; "PID"; "GCDDOM"; "INTDOM"; "COMRING"}*/ +/*"PAFF" -> {"RING"; "RNG"; "ABELGRP"; "CABMON"; "ABELMON"; "ABELSG"}*/ +/*"PAFF" -> {"SETCAT"; "BASTYPE"; "KOERCE"; "SGROUP"; "MONOID"; "LMODULE"}*/ +/*"PAFF" -> {"BMODULE"; "RMODULE"; "ALGEBRA"; "MODULE"; "ENTIRER"; "UFD"}*/ +/*"PAFF" -> {"DIVRING"; "POLYCAT"; "PDRING"; "FAMR"; "AMR"; "CHARZ"}*/ +/*"PAFF" -> {"CHARNZ"; "FRETRCT"; "RETRACT"; "EVALAB"; "IEVALAB"}*/ +/*"PAFF" -> {"FLINEXP"; "LINEXP"; "ORDSET"; "KONVERT"; "PATMAB"; "PFECAT"}*/ +/*"PAFF" -> {"LSAGG"; "STAGG"; "URAGG"; "RCAGG"; "HOAGG"; "AGG"; "TYPE"}*/ +/*"PAFF" -> {"LNAGG"; "IXAGG"; "ELTAGG"; "ELTAB"; "CLAGG"; "FLAGG"}*/ +/*"PAFF" -> {"ELAGG"; "OM"; "INT"; "LIST"; "ILIST"; "DIRPCAT"; "DIFEXT"}*/ +/*"PAFF" -> {"DIFRING"; "FINITE"; "ORDRING"; "OAGROUP"; "OCAMON"; "OAMON"}*/ +/*"PAFF" -> {"OASGP"; "OAMONS"; "VSPACE"; "INS"; "OINTDOM"; "CFCAT"; "REAL"}*/ +/*"PAFF" -> {"STEP"; "PI"; "NNI"; "BOOLEAN"}*/ + +@ \subsection{Order} The final order of the layers is determined here. <>= @@ -16335,7 +16390,7 @@ ORDER=\ ${LAYER4} ${LAYER5} ${LAYER6} ${LAYER7} ${LAYER8} ${LAYER9} \ ${LAYER10} ${LAYER11} ${LAYER12} ${LAYER13} ${LAYER14} ${LAYER15} \ ${LAYER16} ${LAYER17} ${LAYER18} ${LAYER19} ${LAYER20} ${LAYER21} \ - ${LAYER22} ${LAYER0COPY} + ${LAYER22} ${LAYER23} ${LAYER0COPY} @ \section{Cliques} @@ -16347,13 +16402,13 @@ So the idea to remove the BOOTSTRAP code is to cluster the spad sources into "cliqueN.spad" files and feed them all to the compiler at once. <>= -CLIQUE1DEPS = ${MID}/MYUP.spad ${MID}/MYEXPR.spad +CLIQUE1FILES = ${MID}/MYUP.spad ${MID}/MYEXPR.spad -${MID}/clique1.spad: ${CLIQUE1DEPS} +${MID}/clique1.spad: ${CLIQUE1FILES} @echo cl1 making ${OUT}/MYUP.o from ${MID}/clique1.spad @echo cl1 making ${OUT}/MYEXPR.o from ${MID}/clique1.spad @ (cd ${MID} ; \ - cat ${CLIQUE1DEPS} >clique1.spad ; \ + cat ${CLIQUE1FILES} >clique1.spad ; \ if [ -z "${NOISE}" ] ; then \ echo ")co clique1.spad" | ${INTERPSYS} ; \ else \ @@ -16361,6 +16416,31 @@ ${MID}/clique1.spad: ${CLIQUE1DEPS} fi ) @ +Here we have the general case where two files are co-dependent, that is, +PAFF and PAFFFF both have to be compiled together. They also have a set +of prerequired files that must be loaded since they are not yet in the +new database. +<>= +CLIQUE2FILES = ${MID}/PAFF.spad ${MID}/PAFFFF.spad +CLIQUE2DEPS = BLMETCT GPAFF PFORP PACOFF PROJPLPS PLACESPS NSDPS LOCPOWC \ + DIV SETCATD PLACESC DIVCAT INFCLSPS INFCLCT DSTREE DSTRCAT \ + PRSPCAT UTSZ PACFFC PACPERC PROJPL PLACES INFCLSPT PROJPL ICP + +${MID}/clique2.spad: ${CLIQUE2FILES} + @echo cl1 making ${OUT}/PAFF.o from ${MID}/clique2.spad + @echo cl1 making ${OUT}/PAFFFF.o from ${MID}/clique2.spad + @ (cd ${MID} ; \ + cat ${CLIQUE2FILES} >clique2.spad ; \ + if [ -z "${NOISE}" ] ; then \ + echo -e ")lib ${CLIQUE2DEPS} \n )co clique2.spad" \ + | ${INTERPSYS} ; \ + else \ + echo -e ")lib ${CLIQUE2DEPS} \n )co clique2.spad" \ + | ${INTERPSYS} >${TMP}/trace ; \ + echo ")co clique2.spad" | ${INTERPSYS} >${TMP}/trace ; \ + fi ) + +@ \section{New Algebra dependencies} New algebra files can depend on new algebra files. Since these files @@ -18094,6 +18174,8 @@ SPADHELP=\ ${HELP}/OrderedFreeMonoid.help \ ${HELP}/OrderedVariableList.help \ ${HELP}/OrderlyDifferentialPolynomial.help \ + ${HELP}/PackageForAlgebraicFunctionField.help \ + ${HELP}/PackageForAlgebraicFunctionFieldOverFiniteField.help \ ${HELP}/PackageForPoly.help \ ${HELP}/ParametrizationPackage.help \ ${HELP}/PartialFraction.help \ @@ -18291,6 +18373,8 @@ REGRESS= \ OrderedFreeMonoid.regress \ OrderedVariableList.regress \ OrderlyDifferentialPolynomial.regress \ + PackageForAlgebraicFunctionField.regress \ + PackageForAlgebraicFunctionFieldOverFiniteField.regress \ PackageForPoly.regress \ ParametrizationPackage.regress \ PartialFraction.regress \ @@ -19795,6 +19879,36 @@ ${HELP}/OrderlyDifferentialPolynomial.help: ${BOOKS}/bookvol10.3.pamphlet >${INPUT}/OrderlyDifferentialPolynomial.input @echo "OrderlyDifferentialPolynomial (ODPOL)" >>${HELPFILE} +${HELP}/PackageForAlgebraicFunctionField.help: \ + ${BOOKS}/bookvol10.4.pamphlet + @echo 7875 make PackageForAlgebraicFunctionField.help \ + from ${BOOKS}/bookvol10.4.pamphlet + @${TANGLE} -R"PackageForAlgebraicFunctionField.help" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${HELP}/PackageForAlgebraicFunctionField.help + @cp ${HELP}/PackageForAlgebraicFunctionField.help \ + ${HELP}/PAFF.help + @${TANGLE} -R"PackageForAlgebraicFunctionField.input" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${INPUT}/PackageForAlgebraicFunctionField.input + @echo "PackageForAlgebraicFunctionField (PAFF)" \ + >>${HELPFILE} + +${HELP}/PackageForAlgebraicFunctionFieldOverFiniteField.help: \ + ${BOOKS}/bookvol10.4.pamphlet + @echo 7875 make PackageForAlgebraicFunctionFieldOverFiniteField.help \ + from ${BOOKS}/bookvol10.4.pamphlet + @${TANGLE} -R"PackageForAlgebraicFunctionFieldOverFiniteField.help" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${HELP}/PackageForAlgebraicFunctionFieldOverFiniteField.help + @cp ${HELP}/PackageForAlgebraicFunctionFieldOverFiniteField.help \ + ${HELP}/PAFFFF.help + @${TANGLE} -R"PackageForAlgebraicFunctionFieldOverFiniteField.input" \ + ${BOOKS}/bookvol10.4.pamphlet \ + >${INPUT}/PackageForAlgebraicFunctionFieldOverFiniteField.input + @echo "PackageForAlgebraicFunctionFieldOverFiniteField (PAFFFF)" \ + >>${HELPFILE} + ${HELP}/PackageForPoly.help: ${BOOKS}/bookvol10.4.pamphlet @echo 7880 create PackageForPoly.help from \ ${BOOKS}/bookvol10.4.pamphlet @@ -20646,6 +20760,7 @@ ${HELP}/dcopy.help: ${BOOKS}/bookvol10.5.pamphlet <> <> <> +<> <> all: src ${OUT}/libdb.text ${SPADBIN}/index.html gloss diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 7db29e0..9d7a17b 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -2797,5 +2797,8 @@ books/bookvol10.4 add InterpolateFormsPackage
books/bookvol10.4 add IntersectionDivisorPackage
20100524.02.tpd.patch books/bookvol10.4 add GeneralPackageForAlgebraicFunctionField
+20100525.01.tpd.patch +books/bookvol10.4 add PackageForAlgebraicFunctionFieldOverFiniteField
+books/bookvol10.4 add PackageForAlgebraicFunctionField