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

Edit detail for PAFF revision 1 of 1

1
Editor: page
Time: 2007/11/12 23:08:29 GMT-8
Note: transferred from axiom-developer.org

changed:
-
"PAFF":http://www-rocq.inria.fr/codes/Gaetan.Hache/PAFF.html
: Package for Algebraic Function Fields in one variable

by Gaétan Haché

PAFF is a package written in Axiom and one of its many purpose is to construct geometric Goppa codes (also called algebraic geometric codes or AG-codes). I wrote this package in the frame work of my doctorate thesis on "Effective construction of geometric codes": this thesis was done at Inria in Rocquencourt at project CODES and under the direction of Dominique LeBrigand at Université Pierre et Marie Curie (Paris 6). Here is a
"résumé":http://www-rocq.inria.fr/codes/Gaetan.Hache/these/resumeThese.html
of my thesis.

It is well known that the most difficult part in constructing AG-code is the computation of a basis of the vector space "L(D)" where D is a divisor of the function field of an irreducible curve. To compute such a basis, PAFF used the Brill-Noether algorithm which was generalized to any plane curve by D. !LeBrigand and J.J. Risler (see ![7] ). In ![4] you will find more details about the algorithmic aspect of the Brill-Noether algorithm. Also, if you prefer, as I do, a strictly algebraic approach, see ![3]. This is the approach I used in my thesis (![4]) and of course this is where you will find complete details about the implementation of the algorithm. The algebraic approach use the theory of algebraic function field in one variable : you will find in ![8] a very good introduction to this theory and AG-codes.

It is important to notice that PAFF can be used for most computation related to the function field of an irreducible plane curve. For example, you can compute the genus, find all places above all the singular points, compute the adjunction divisor and of course compute a basis of the vector space L(D) for any divisor D of the function field of the curve.

There is also the package PAFFFF which is especially designed to be used over finite fields. This package is essentially the same as PAFF, except that the computation are done over "dynamic extensions" of the ground field. For this, I used a simplify version of the notion of dynamic algebraic closure as proposed by D. Duval (see ![1]).

References

  1 Duval (D.). -- Évaluation dynamique et clôture algébrique en Axiom. Journal of Pure and Applied Algebra, no99, 1995, pp. 267--295.

  2 Garcia (A.) et Stichtenoth (H.). -- A tower of Artin-Schreier extensions of function fields attaining the Drinfeld-Vladut bound. Invent. Math., vol. 121, 1995, pp. 211--222.

  3 Haché (G.). -- Computation in algebraic function fields for effective construction of algebraic-geometric codes. Lecture Notes in Computer Science, vol. 948, 1995, pp. 262--278.

  4 Haché (G.). -- Construction effective des codes géométriques. -- Thèse de doctorat de l'Université Pierre et Marie Curie (Paris 6), Septembre 1996.

  5 Haché (G.) et Le Brigand (D.). -- Effective construction of algebraic geometry codes. IEEE Transaction on Information Theory, vol. 41, n'27 6, November 1995, pp. 1615--1628.

  6 Huang (M.D.) et Ierardi (D.). -- Efficient algorithms for Riemann-Roch problem and for addition in the jacobian of a curve. In: Proceedings 32nd Annual Symposium on Foundations of Computer Sciences. IEEE Comput. Soc. Press, pp. 678--687.

  7 Le Brigand (D.) et Risler (J.J.). -- Algorithme de Brill-Noether et codes de Goppa. Bull. Soc. Math. France, vol. 116, 1988, pp. 231--253.

  8 Stichtenoth (H.). -- Algebraic function fields and codes. -- Springer-Verlag, 1993, University Text. 


Example 1

  This example compute the genus of the projective plane curve defined by::

       5    2 3      4
      X  + Y Z  + Y Z  = 0

  over the field GF(2).

First load the PAFF library (must be done twice).

\begin{axiom}
)lib )dir PAFF/spad
)lib )dir PAFF/spad
\end{axiom}

\begin{axiom}

-- First we define the field GF(2).

K:=PF 2  

-- Next, we define the polynomial ring over which
-- the polynomial is defined. 
-- You have the choice for the name of 
-- the three variables (always three !!) but  
-- the domain  DMP must be used. 
-- DMP  is an AXIOM domain and stands for DistributedMultivariatePolymnomial.

R:=DMP([X,Y,Z],K)

-- Then we tell to the package PAFF over which field the computation must be done.
-- Also, you must give the same list of variables which is used to defined the polynomial.
-- BLQT Stand for BlowUpWithQuadTrans which specified the method
-- used for blowing-up (there will be another one (when ?) 
-- using similar thechnics to Hamburger-Nother expansions).


P:=PAFF(K,[X,Y,Z],BLQT)

-- We defined now the polynomial of the curve.

C:R:=X**5 + Y**2*Z**3+Y*Z**4

-- We give it to the package PAFF(K,[X,Y,Z]) which was assigned to the
-- variable "P"


setCurve(C)$P

-- To compute the genus of the curve, simply do 


genus()$P


-- To compute the genus, the package use the genus formula 
-- given by the blowin-up theory. That means that the singular points
-- has been computed. 

singularPoints()$P

-- The results of singularPoints()$P is the list of all
-- the singular points of the curve in the projective plane.
--
--
-- The Brill-Noether algorithm use the notion of "adjunction divisor".
-- To compute it simply do "adjunctionDivisor()$P"
-- You should obtained something like
--
--            1
--       8 %I1
--
-- This is a divisor of the function field of the curve, consisting
-- of 8 times the place %I1 which is of degree 1 (the exponant).
-- The place %I1 is a place above a singular point (the unique one for this example).
-- This mean that the "desingularization tree" has been computed. See next step.

adjunctionDivisor()$P


-- To compute the "desingularization tree" simply do:
-- desingTree()$P
--
-- For this example, you should obtained from desingTree()$P
--
--        ["UU.."]
--
-- This a list of desingularization tree for each singular point.
-- Here there is only one, which is "UU..".  
-- To interpret the result, you have to do some manual drawing.
-- The letter U means "Up", and a . (dot) means "down".
-- 
--
--
--              o
--              |  
--           ^  |  |
--           |  |  | .
--         U |  |  | 
--           |  |  v
--              |
--              |
--              o
--              |  
--           ^  |  |
--           |  |  | .
--         U |  |  |
--           |  |  v
--              |
--              |
--              o
--         

desingTree()$P

-- To see more information about the desingularization trees,
-- issue the command, fullDesTree()$P, and recall the command 
-- desingTree()$P. Here you have a bit more information about
-- the infinitly near points in the desingularization trees.
-- For this example, the result corresponds to the following
--
--         %I1  o  multiplicity = 1
--              |  
--              |
--              |
--              |
--              |
--              |
--              |
--         %I0  o  multiplicity = 2
--              |  
--              |
--              |
--              |
--              |
--              |
--              |
--         %P0  o  multiplicity = 3
--         


fullDesTree()$P
desingTree()$P


-- To see everything about desingularization trees, issue
-- the following

fullInfClsPt()$P
--desingTree()$P


-- You can ask for all the place of degree 1
--

placesOfDegree(1)$P


-- With those places, you can create divisors 


listOfDiv:=placesOfDegree(1)$P :: List DIV PLACES PF 2

-- You can add the divisors.

D:=reduce(+, listOfDiv)

-- You can multiply the divisor by an integer

D10 := 10 * D


-- You can ask for the degree of the divisor

degree D10


-- You can compute the basis of the vector space L(D10).
-- The results is an Axiom Record. The first selector "num"
-- corresponds to the numerators of the elements of the basis,
-- and the second selector "den" is the common denominator.


baseOfLofD:= lBasis(D10)$P

-- Of course, the number of element in the list of numerator
-- is the dimension of the vector space L(D10). According to the 
-- Riemann-Roch Theorem, since 
-- 
--  deg D10 >= 2 g - 1
-- 
-- we should have 
--
-- dim L(D10) = deg D10 - g + 1
--
--

((# baseOfLofD.num) = degree D10 - genus()$P + 1 ) :: Boolean

\end{axiom}



PAFF : Package for Algebraic Function Fields in one variable

by Gaétan Haché

PAFF is a package written in Axiom and one of its many purpose is to construct geometric Goppa codes (also called algebraic geometric codes or AG-codes). I wrote this package in the frame work of my doctorate thesis on "Effective construction of geometric codes": this thesis was done at Inria in Rocquencourt at project CODES and under the direction of Dominique LeBrigand? at Université Pierre et Marie Curie (Paris 6). Here is a résumé of my thesis.

It is well known that the most difficult part in constructing AG-code is the computation of a basis of the vector space "L(D)" where D is a divisor of the function field of an irreducible curve. To compute such a basis, PAFF used the Brill-Noether algorithm which was generalized to any plane curve by D. LeBrigand and J.J. Risler (see [7] ). In [4] you will find more details about the algorithmic aspect of the Brill-Noether algorithm. Also, if you prefer, as I do, a strictly algebraic approach, see [3]. This is the approach I used in my thesis ([4]) and of course this is where you will find complete details about the implementation of the algorithm. The algebraic approach use the theory of algebraic function field in one variable : you will find in [8] a very good introduction to this theory and AG-codes.

It is important to notice that PAFF can be used for most computation related to the function field of an irreducible plane curve. For example, you can compute the genus, find all places above all the singular points, compute the adjunction divisor and of course compute a basis of the vector space L(D) for any divisor D of the function field of the curve.

There is also the package PAFFFF which is especially designed to be used over finite fields. This package is essentially the same as PAFF, except that the computation are done over "dynamic extensions" of the ground field. For this, I used a simplify version of the notion of dynamic algebraic closure as proposed by D. Duval (see [1]).

References

  1. Duval (D.). -- Évaluation dynamique et clôture algébrique en Axiom. Journal of Pure and Applied Algebra, no99, 1995, pp. 267--295.
  2. Garcia (A.) et Stichtenoth (H.). -- A tower of Artin-Schreier extensions of function fields attaining the Drinfeld-Vladut bound. Invent. Math., vol. 121, 1995, pp. 211--222.
  3. Haché (G.). -- Computation in algebraic function fields for effective construction of algebraic-geometric codes. Lecture Notes in Computer Science, vol. 948, 1995, pp. 262--278.
  4. Haché (G.). -- Construction effective des codes géométriques. -- Thèse de doctorat de l'Université Pierre et Marie Curie (Paris 6), Septembre 1996.
  5. Haché (G.) et Le Brigand (D.). -- Effective construction of algebraic geometry codes. IEEE Transaction on Information Theory, vol. 41, n'27 6, November 1995, pp. 1615--1628.
  6. Huang (M.D.) et Ierardi (D.). -- Efficient algorithms for Riemann-Roch problem and for addition in the jacobian of a curve. In: Proceedings 32nd Annual Symposium on Foundations of Computer Sciences. IEEE Comput. Soc. Press, pp. 678--687.
  7. Le Brigand (D.) et Risler (J.J.). -- Algorithme de Brill-Noether et codes de Goppa. Bull. Soc. Math. France, vol. 116, 1988, pp. 231--253.
  8. Stichtenoth (H.). -- Algebraic function fields and codes. -- Springer-Verlag, 1993, University Text.

Example 1

This example compute the genus of the projective plane curve defined by:

       5    2 3      4
      X  + Y Z  + Y Z  = 0

over the field GF(2).

First load the PAFF library (must be done twice).

axiom
)lib )dir PAFF/spad
UnivariateTaylorSeriesCZero is now explicitly exposed in frame initial UnivariateTaylorSeriesCZero will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/UTSZ.NRLIB/code SetCategoryWithDegree is now explicitly exposed in frame initial SetCategoryWithDegree will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/SETCATD.NRLIB/code RootsFindingPackage is now explicitly exposed in frame initial RootsFindingPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/RFP.NRLIB/code ProjectiveSpaceCategory is now explicitly exposed in frame initial ProjectiveSpaceCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PRSPCAT.NRLIB/code ProjectiveSpace is now explicitly exposed in frame initial ProjectiveSpace will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PROJSP.NRLIB/code ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField is now explicitly exposed in frame initial ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PROJPLPS.NRLIB/code ProjectivePlane is now explicitly exposed in frame initial ProjectivePlane will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PROJPL.NRLIB/code ProjectiveAlgebraicSetPackage is now explicitly exposed in frame initial ProjectiveAlgebraicSetPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PRJALGPK.NRLIB/code PolynomialPackageForCurve is now explicitly exposed in frame initial
PolynomialPackageForCurve will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLPKCRV.NRLIB/code Plcs is now explicitly exposed in frame initial Plcs will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLCS.NRLIB/code PlacesOverPseudoAlgebraicClosureOfFiniteField is now explicitly exposed in frame initial PlacesOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLACESPS.NRLIB/code PlacesCategory is now explicitly exposed in frame initial PlacesCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLACESC.NRLIB/code Places is now explicitly exposed in frame initial Places will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLACES.NRLIB/code PackageForPoly is now explicitly exposed in frame initial PackageForPoly will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PFORP.NRLIB/code ParametrizationPackage is now explicitly exposed in frame initial ParametrizationPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PARAMP.NRLIB/code PackageForAlgebraicFunctionFieldOverFiniteField is now explicitly exposed in frame initial PackageForAlgebraicFunctionFieldOverFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PAFFFF.NRLIB/code PackageForAlgebraicFunctionField is now explicitly exposed in frame initial PackageForAlgebraicFunctionField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PAFF.NRLIB/code PseudoAlgebraicClosureOfRationalNumberCategory is now explicitly exposed in frame initial PseudoAlgebraicClosureOfRationalNumberCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACRATC.NRLIB/code PseudoAlgebraicClosureOfRationalNumber is now explicitly exposed in frame initial PseudoAlgebraicClosureOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACRAT.NRLIB/code PseudoAlgebraicClosureOfPerfectFieldCategory is now explicitly exposed in frame initial PseudoAlgebraicClosureOfPerfectFieldCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACPERC.NRLIB/code PseudoAlgebraicClosureOfFiniteField is now explicitly exposed in frame initial PseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACOFF.NRLIB/code PseudoAlgebraicClosureOfFiniteFieldCategory is now explicitly exposed in frame initial PseudoAlgebraicClosureOfFiniteFieldCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACFFC.NRLIB/code PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory is now explicitly exposed in frame initial PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACEXTC.NRLIB/code PseudoAlgebraicClosureOfAlgExtOfRationalNumber is now explicitly exposed in frame initial PseudoAlgebraicClosureOfAlgExtOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACEXT.NRLIB/code NeitherSparseOrDensePowerSeries is now explicitly exposed in frame initial NeitherSparseOrDensePowerSeries will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/NSDPS.NRLIB/code NewtonPolygon is now explicitly exposed in frame initial NewtonPolygon will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/NPOLYGON.NRLIB/code LocalParametrizationOfSimplePointPackage is now explicitly exposed in frame initial LocalParametrizationOfSimplePointPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LPARSPT.NRLIB/code LinesOpPack is now explicitly exposed in frame initial LinesOpPack will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LOP.NRLIB/code LocalPowerSeriesCategory is now explicitly exposed in frame initial LocalPowerSeriesCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LOCPOWC.NRLIB/code LinearSystemFromPowerSeriesPackage is now explicitly exposed in frame initial LinearSystemFromPowerSeriesPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LISYSER.NRLIB/code InterpolateFormsPackage is now explicitly exposed in frame initial InterpolateFormsPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INTFRSP.NRLIB/code InterfaceGroebnerPackage is now explicitly exposed in frame initial InterfaceGroebnerPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INTERGB.NRLIB/code IntersectionDivisorPackage is now explicitly exposed in frame initial IntersectionDivisorPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INTDIVP.NRLIB/code InfinitlyClosePoint is now explicitly exposed in frame initial InfinitlyClosePoint will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INFCLSPT.NRLIB/code InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField is now explicitly exposed in frame initial InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INFCLSPS.NRLIB/code InfinitlyClosePointCategory is now explicitly exposed in frame initial InfinitlyClosePointCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INFCLCT.NRLIB/code InfClsPt is now explicitly exposed in frame initial InfClsPt will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/ICP.NRLIB/code GeneralPackageForAlgebraicFunctionField is now explicitly exposed in frame initial GeneralPackageForAlgebraicFunctionField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/GPAFF.NRLIB/code FiniteFieldSquareFreeDecomposition is now explicitly exposed in frame initial FiniteFieldSquareFreeDecomposition will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FFSQFR.NRLIB/code FiniteFieldFactorizationWithSizeParseBySideEffect is now explicitly exposed in frame initial FiniteFieldFactorizationWithSizeParseBySideEffect will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FFFACTSE.NRLIB/code FactorisationOverPseudoAlgebraicClosureOfRationalNumber is now explicitly exposed in frame initial FactorisationOverPseudoAlgebraicClosureOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FACTRN.NRLIB/code FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber is now explicitly exposed in frame initial FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FACTEXT.NRLIB/code DesingTreePackage is now explicitly exposed in frame initial DesingTreePackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DTP.NRLIB/code DesingTree is now explicitly exposed in frame initial DesingTree will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DSTREE.NRLIB/code DesingTreeCategory is now explicitly exposed in frame initial DesingTreeCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DSTRCAT.NRLIB/code DivisorCategory is now explicitly exposed in frame initial DivisorCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DIVCAT.NRLIB/code Divisor is now explicitly exposed in frame initial Divisor will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DIV.NRLIB/code BlowUpPackage is now explicitly exposed in frame initial BlowUpPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLUPPACK.NRLIB/code BlowUpWithQuadTrans is now explicitly exposed in frame initial BlowUpWithQuadTrans will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLQT.NRLIB/code BlowUpMethodCategory is now explicitly exposed in frame initial BlowUpMethodCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLMETCT.NRLIB/code BlowUpWithHamburgerNoether is now explicitly exposed in frame initial BlowUpWithHamburgerNoether will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLHN.NRLIB/code AffineSpaceCategory is now explicitly exposed in frame initial AffineSpaceCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFSPCAT.NRLIB/code AffineSpace is now explicitly exposed in frame initial AffineSpace will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFFSP.NRLIB/code AffinePlaneOverPseudoAlgebraicClosureOfFiniteField is now explicitly exposed in frame initial AffinePlaneOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFFPLPS.NRLIB/code AffinePlane is now explicitly exposed in frame initial AffinePlane will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFFPL.NRLIB/code AffineAlgebraicSetComputeWithResultant is now explicitly exposed in frame initial AffineAlgebraicSetComputeWithResultant will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFALGRES.NRLIB/code AffineAlgebraicSetComputeWithGroebnerBasis is now explicitly exposed in frame initial AffineAlgebraicSetComputeWithGroebnerBasis will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFALGGRO.NRLIB/code
axiom
)lib )dir PAFF/spad
UnivariateTaylorSeriesCZero is already explicitly exposed in frame initial UnivariateTaylorSeriesCZero will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/UTSZ.NRLIB/code SetCategoryWithDegree is already explicitly exposed in frame initial
SetCategoryWithDegree will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/SETCATD.NRLIB/code RootsFindingPackage is already explicitly exposed in frame initial RootsFindingPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/RFP.NRLIB/code ProjectiveSpaceCategory is already explicitly exposed in frame initial ProjectiveSpaceCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PRSPCAT.NRLIB/code ProjectiveSpace is already explicitly exposed in frame initial ProjectiveSpace will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PROJSP.NRLIB/code ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField is already explicitly exposed in frame initial ProjectivePlaneOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PROJPLPS.NRLIB/code ProjectivePlane is already explicitly exposed in frame initial ProjectivePlane will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PROJPL.NRLIB/code ProjectiveAlgebraicSetPackage is already explicitly exposed in frame initial ProjectiveAlgebraicSetPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PRJALGPK.NRLIB/code PolynomialPackageForCurve is already explicitly exposed in frame initial PolynomialPackageForCurve will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLPKCRV.NRLIB/code Plcs is already explicitly exposed in frame initial Plcs will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLCS.NRLIB/code PlacesOverPseudoAlgebraicClosureOfFiniteField is already explicitly exposed in frame initial PlacesOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLACESPS.NRLIB/code PlacesCategory is already explicitly exposed in frame initial PlacesCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLACESC.NRLIB/code Places is already explicitly exposed in frame initial Places will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PLACES.NRLIB/code PackageForPoly is already explicitly exposed in frame initial PackageForPoly will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PFORP.NRLIB/code ParametrizationPackage is already explicitly exposed in frame initial ParametrizationPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PARAMP.NRLIB/code PackageForAlgebraicFunctionFieldOverFiniteField is already explicitly exposed in frame initial PackageForAlgebraicFunctionFieldOverFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PAFFFF.NRLIB/code PackageForAlgebraicFunctionField is already explicitly exposed in frame initial PackageForAlgebraicFunctionField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PAFF.NRLIB/code PseudoAlgebraicClosureOfRationalNumberCategory is already explicitly exposed in frame initial PseudoAlgebraicClosureOfRationalNumberCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACRATC.NRLIB/code PseudoAlgebraicClosureOfRationalNumber is already explicitly exposed in frame initial PseudoAlgebraicClosureOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACRAT.NRLIB/code PseudoAlgebraicClosureOfPerfectFieldCategory is already explicitly exposed in frame initial PseudoAlgebraicClosureOfPerfectFieldCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACPERC.NRLIB/code PseudoAlgebraicClosureOfFiniteField is already explicitly exposed in frame initial PseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACOFF.NRLIB/code PseudoAlgebraicClosureOfFiniteFieldCategory is already explicitly exposed in frame initial PseudoAlgebraicClosureOfFiniteFieldCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACFFC.NRLIB/code PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory is already explicitly exposed in frame initial PseudoAlgebraicClosureOfAlgExtOfRationalNumberCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACEXTC.NRLIB/code PseudoAlgebraicClosureOfAlgExtOfRationalNumber is already explicitly exposed in frame initial PseudoAlgebraicClosureOfAlgExtOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/PACEXT.NRLIB/code NeitherSparseOrDensePowerSeries is already explicitly exposed in frame initial NeitherSparseOrDensePowerSeries will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/NSDPS.NRLIB/code NewtonPolygon is already explicitly exposed in frame initial NewtonPolygon will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/NPOLYGON.NRLIB/code LocalParametrizationOfSimplePointPackage is already explicitly exposed in frame initial LocalParametrizationOfSimplePointPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LPARSPT.NRLIB/code LinesOpPack is already explicitly exposed in frame initial LinesOpPack will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LOP.NRLIB/code LocalPowerSeriesCategory is already explicitly exposed in frame initial LocalPowerSeriesCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LOCPOWC.NRLIB/code LinearSystemFromPowerSeriesPackage is already explicitly exposed in frame initial LinearSystemFromPowerSeriesPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/LISYSER.NRLIB/code InterpolateFormsPackage is already explicitly exposed in frame initial InterpolateFormsPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INTFRSP.NRLIB/code InterfaceGroebnerPackage is already explicitly exposed in frame initial InterfaceGroebnerPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INTERGB.NRLIB/code IntersectionDivisorPackage is already explicitly exposed in frame initial IntersectionDivisorPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INTDIVP.NRLIB/code InfinitlyClosePoint is already explicitly exposed in frame initial InfinitlyClosePoint will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INFCLSPT.NRLIB/code InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField is already explicitly exposed in frame initial InfinitlyClosePointOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INFCLSPS.NRLIB/code InfinitlyClosePointCategory is already explicitly exposed in frame initial InfinitlyClosePointCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/INFCLCT.NRLIB/code InfClsPt is already explicitly exposed in frame initial InfClsPt will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/ICP.NRLIB/code GeneralPackageForAlgebraicFunctionField is already explicitly exposed in frame initial GeneralPackageForAlgebraicFunctionField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/GPAFF.NRLIB/code FiniteFieldSquareFreeDecomposition is already explicitly exposed in frame initial FiniteFieldSquareFreeDecomposition will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FFSQFR.NRLIB/code FiniteFieldFactorizationWithSizeParseBySideEffect is already explicitly exposed in frame initial FiniteFieldFactorizationWithSizeParseBySideEffect will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FFFACTSE.NRLIB/code FactorisationOverPseudoAlgebraicClosureOfRationalNumber is already explicitly exposed in frame initial FactorisationOverPseudoAlgebraicClosureOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FACTRN.NRLIB/code FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber is already explicitly exposed in frame initial FactorisationOverPseudoAlgebraicClosureOfAlgExtOfRationalNumber will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/FACTEXT.NRLIB/code DesingTreePackage is already explicitly exposed in frame initial DesingTreePackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DTP.NRLIB/code DesingTree is already explicitly exposed in frame initial DesingTree will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DSTREE.NRLIB/code DesingTreeCategory is already explicitly exposed in frame initial DesingTreeCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DSTRCAT.NRLIB/code DivisorCategory is already explicitly exposed in frame initial DivisorCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DIVCAT.NRLIB/code Divisor is already explicitly exposed in frame initial Divisor will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/DIV.NRLIB/code BlowUpPackage is already explicitly exposed in frame initial BlowUpPackage will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLUPPACK.NRLIB/code BlowUpWithQuadTrans is already explicitly exposed in frame initial BlowUpWithQuadTrans will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLQT.NRLIB/code BlowUpMethodCategory is already explicitly exposed in frame initial BlowUpMethodCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLMETCT.NRLIB/code BlowUpWithHamburgerNoether is already explicitly exposed in frame initial BlowUpWithHamburgerNoether will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/BLHN.NRLIB/code AffineSpaceCategory is already explicitly exposed in frame initial AffineSpaceCategory will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFSPCAT.NRLIB/code AffineSpace is already explicitly exposed in frame initial AffineSpace will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFFSP.NRLIB/code AffinePlaneOverPseudoAlgebraicClosureOfFiniteField is already explicitly exposed in frame initial AffinePlaneOverPseudoAlgebraicClosureOfFiniteField will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFFPLPS.NRLIB/code AffinePlane is already explicitly exposed in frame initial AffinePlane will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFFPL.NRLIB/code AffineAlgebraicSetComputeWithResultant is already explicitly exposed in frame initial AffineAlgebraicSetComputeWithResultant will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFALGRES.NRLIB/code AffineAlgebraicSetComputeWithGroebnerBasis is already explicitly exposed in frame initial AffineAlgebraicSetComputeWithGroebnerBasis will be automatically loaded when needed from /var/zope2/var/LatexWiki/PAFF/spad/AFALGGRO.NRLIB/code

axiom
-- First we define the field GF(2).
K:=PF 2
LatexWiki Image(1)
Type: Domain
axiom
-- Next, we define the polynomial ring over which
-- the polynomial is defined.
-- You have the choice for the name of
-- the three variables (always three !!) but
-- the domain  DMP must be used.
-- DMP  is an AXIOM domain and stands for DistributedMultivariatePolymnomial.
R:=DMP([X,Y,Z],K)
LatexWiki Image(2)
Type: Domain
axiom
-- Then we tell to the package PAFF over which field the computation must be done.
-- Also, you must give the same list of variables which is used to defined the polynomial.
-- BLQT Stand for BlowUpWithQuadTrans which specified the method
-- used for blowing-up (there will be another one (when ?)
-- using similar thechnics to Hamburger-Nother expansions).
P:=PAFF(K,[X,Y,Z],BLQT)
LatexWiki Image(3)
Type: Domain
axiom
-- We defined now the polynomial of the curve.
C:R:=X**5 + Y**2*Z**3+Y*Z**4
LatexWiki Image(4)
Type: DistributedMultivariatePolynomial?([X,Y,Z]?,PrimeField? 2)
axiom
-- We give it to the package PAFF(K,[X,Y,Z]) which was assigned to the
-- variable "P"
setCurve(C)$P
LatexWiki Image(5)
Type: DistributedMultivariatePolynomial?([X,Y,Z]?,PrimeField? 2)
axiom
-- To compute the genus of the curve, simply do 
genus()$P
LatexWiki Image(6)
Type: NonNegativeInteger
axiom
-- To compute the genus, the package use the genus formula
-- given by the blowin-up theory. That means that the singular points
-- has been computed. 
singularPoints()$P
LatexWiki Image(7)
Type: List ProjectivePlane? PrimeField? 2
axiom
-- The results of singularPoints()$P is the list of all
-- the singular points of the curve in the projective plane.
--
--
-- The Brill-Noether algorithm use the notion of "adjunction divisor".
-- To compute it simply do "adjunctionDivisor()$P"
-- You should obtained something like
--
--            1
--       8 %I1
--
-- This is a divisor of the function field of the curve, consisting
-- of 8 times the place %I1 which is of degree 1 (the exponant).
-- The place %I1 is a place above a singular point (the unique one for this example).
-- This mean that the "desingularization tree" has been computed. See next step.
adjunctionDivisor()$P
LatexWiki Image(8)
Type: Divisor Places PrimeField? 2
axiom
-- To compute the "desingularization tree" simply do:
-- desingTree()$P
--
-- For this example, you should obtained from desingTree()$P
--
--        ["UU.."]
--
-- This a list of desingularization tree for each singular point.
-- Here there is only one, which is "UU..".
-- To interpret the result, you have to do some manual drawing.
-- The letter U means "Up", and a . (dot) means "down".
--
--
--
--              o
--              |
--           ^  |  |
--           |  |  | .
--         U |  |  |
--           |  |  v
--              |
--              |
--              o
--              |
--           ^  |  |
--           |  |  | .
--         U |  |  |
--           |  |  v
--              |
--              |
--              o
--         
desingTree()$P
LatexWiki Image(9)
Type: List DesingTree? InfClsPt?(PrimeField? 2,[X,Y,Z]?,BlowUpWithQuadTrans?)
axiom
-- To see more information about the desingularization trees,
-- issue the command, fullDesTree()$P, and recall the command
-- desingTree()$P. Here you have a bit more information about
-- the infinitly near points in the desingularization trees.
-- For this example, the result corresponds to the following
--
--         %I1  o  multiplicity = 1
--              |
--              |
--              |
--              |
--              |
--              |
--              |
--         %I0  o  multiplicity = 2
--              |
--              |
--              |
--              |
--              |
--              |
--              |
--         %P0  o  multiplicity = 3
--         
fullDesTree()$P
Type: Void
axiom
desingTree()$P
LatexWiki Image(10)
Type: List DesingTree? InfClsPt?(PrimeField? 2,[X,Y,Z]?,BlowUpWithQuadTrans?)
axiom
-- To see everything about desingularization trees, issue
-- the following
fullInfClsPt()$P
Type: Void
axiom
--desingTree()$P
-- You can ask for all the place of degree 1 --
placesOfDegree(1)$P
LatexWiki Image(11)
Type: List Places PrimeField? 2
axiom
-- With those places, you can create divisors 
listOfDiv:=placesOfDegree(1)$P :: List DIV PLACES PF 2
LatexWiki Image(12)
Type: List Divisor Places PrimeField? 2
axiom
-- You can add the divisors.
D:=reduce(+, listOfDiv)
LatexWiki Image(13)
Type: Divisor Places PrimeField? 2
axiom
-- You can multiply the divisor by an integer
D10 := 10 * D
LatexWiki Image(14)
Type: Divisor Places PrimeField? 2
axiom
-- You can ask for the degree of the divisor
degree D10
LatexWiki Image(15)
Type: PositiveInteger
axiom
-- You can compute the basis of the vector space L(D10).
-- The results is an Axiom Record. The first selector "num"
-- corresponds to the numerators of the elements of the basis,
-- and the second selector "den" is the common denominator.
baseOfLofD:= lBasis(D10)$P
Trying to interpolate with forms of degree: 8 Denominator found Intersection Divisor of Denominator found
LatexWiki Image(16)
Type: Record(num: List DistributedMultivariatePolynomial?([X,Y,Z]?,PrimeField? 2),den: DistributedMultivariatePolynomial?([X,Y,Z]?,PrimeField? 2))
axiom
-- Of course, the number of element in the list of numerator
-- is the dimension of the vector space L(D10). According to the
-- Riemann-Roch Theorem, since
--
--  deg D10 >= 2 g - 1
--
-- we should have
--
-- dim L(D10) = deg D10 - g + 1
--
--
((# baseOfLofD.num) = degree D10 - genus()$P + 1 ) :: Boolean
LatexWiki Image(17)
Type: Boolean