/usr/share/axiom-20140801/input/paffexample.input is in axiom-test 20140801-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 | )set break resume
)spool paffexample.output
)set message auto off
)clear all
-- This example compute the genus of the projective plane curve defined by
-- by
--
-- 5 2 3 4
-- X + Y Z + Y Z = 0
--
-- over the field GF(2).
-- First we define the field GF(2).
--S 1 of 20
K:=PF 2
--R
--R
--R (1) PrimeField(2)
--R Type: Domain
--E 1
-- 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.
--S 2 of 20
R:=DMP([X,Y,Z],K)
--R
--R
--R (2) DistributedMultivariatePolynomial([X,Y,Z],PrimeField(2))
--R Type: Domain
--E 2
-- 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
-- using similar technics to Hamburger-Nother expansions).
--S 3 of 20
P:=PAFF(K,[X,Y,Z],BLQT)
--R
--R
--R (3)
--R PackageForAlgebraicFunctionField(PrimeField(2),[X,Y,Z],BlowUpWithQuadTrans)
--R Type: Domain
--E 3
-- We defined now the polynomial of the curve.
--S 4 of 20
C:R:=X**5 + Y**2*Z**3+Y*Z**4
--R
--R
--R 5 2 3 4
--R (4) X + Y Z + Y Z
--R Type: DistributedMultivariatePolynomial([X,Y,Z],PrimeField(2))
--E 4
-- We give it to the package PAFF(K,[X,Y,Z]) which was assigned to the
-- variable "P"
--S 5 of 20
setCurve(C)$P
--R
--R
--R 5 2 3 4
--R (5) X + Y Z + Y Z
--R Type: DistributedMultivariatePolynomial([X,Y,Z],PrimeField(2))
--E 5
-- To compute the genus of the curve, simply do
--S 6 of 20
genus()$P
--R
--R
--R (6) 2
--R Type: NonNegativeInteger
--E 6
-- 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.
--S 7 of 20
singularPoints()$P
--R
--R
--R 1
--R (7) [(0:1:0) ]
--R Type: List(ProjectivePlane(PrimeField(2)))
--E 7
-- 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.
--S 8 of 20
adjunctionDivisor()$P
--R
--R
--R 1
--R (8) 8 %I1
--R Type: Divisor(Places(PrimeField(2)))
--E 8
-- 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
--
--S 9 of 20
desingTree()$P
--R
--R
--R (9) ["UU.."]
--R Type: List(DesingTree(InfClsPt(PrimeField(2),[X,Y,Z],BlowUpWithQuadTrans)))
--E 9
-- 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
--
--S 10 of 20
fullDesTree()$P
--R
--R Type: Void
--E 10
--S 11 of 20
desingTree()$P
--R
--R
--R (11) [[name= %P0,mult= 3]([name= %I0,mult= 2]([name= %I1,mult= 1]))]
--R Type: List(DesingTree(InfClsPt(PrimeField(2),[X,Y,Z],BlowUpWithQuadTrans)))
--E 11
-- To see everything about desingularization trees, issue
-- the following
--S 12 of 20
fullInfClsPt()$P
--R
--R Type: Void
--E 12
--S 13 of 20
desingTree()$P
--R
--R
--R (13)
--R [
--R 1 5 4 3
--R [dominate= (0:1:0) , name= %P0, mult= 3, defCurve= X + Y + Y ,
--R 1 1
--R localPoint= (0:0) , chart= [exCoord= 0,affNeigh= 2], expD= 3 %I1 ]
--R 1 2 4 3
--R [dominate= (0:1:0) , name= %I0, mult= 2, defCurve= X + X Y + Y ,
--R 1 1
--R localPoint= (0:0) , chart= [exCoord= 1,affNeigh= 2], expD= 2 %I1 ]
--R 1 2 3
--R [dominate= (0:1:0) , name= %I1, mult= 1, defCurve= X + X Y + Y,
--R 1 1
--R localPoint= (0:0) , chart= [exCoord= 2,affNeigh= 2], expD= %I1 ]
--R ]
--R Type: List(DesingTree(InfClsPt(PrimeField(2),[X,Y,Z],BlowUpWithQuadTrans)))
--E 13
-- You can ask for all the place of degree 1
--S 14 of 20
placesOfDegree(1)$P
--R
--R
--R 1 1 1
--R (14) [[0:1:1] ,[0:0:1] ,%I1 ]
--R Type: List(Places(PrimeField(2)))
--E 14
-- With those places, you can create divisors
--S 15 of 20
listOfDiv:=placesOfDegree(1)$P :: List DIV PLACES PF 2
--R
--R
--R 1 1 1
--R (15) [[0:1:1] ,[0:0:1] ,%I1 ]
--R Type: List(Divisor(Places(PrimeField(2))))
--E 15
-- You can add the divisors.
--S 16 of 20
D:=reduce(+, listOfDiv)
--R
--R
--R 1 1 1
--R (16) [0:1:1] + [0:0:1] + %I1
--R Type: Divisor(Places(PrimeField(2)))
--E 16
-- You can multiply the divisor by an integer
--S 17 of 20
D10 := 10 * D
--R
--R
--R 1 1 1
--R (17) 10 [0:1:1] + 10 [0:0:1] + 10 %I1
--R Type: Divisor(Places(PrimeField(2)))
--E 17
-- You can ask for the degree of the divisor
--S 18 of 20
degree D10
--R
--R
--R (18) 30
--R Type: PositiveInteger
--E 18
-- 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.
--S 19 of 20
baseOfLofD:= lBasis(D10)$P
--R
--R Trying to interpolate with forms of degree:
--R 8
--R Denominator found
--R Intersection Divisor of Denominator found
--R
--R (19)
--R [
--R num =
--R 8 5 3 6 2 7 4 3 5 2 2 6 2 3 3 2 4 2 2 5
--R [Z , Y Z , Y Z , X Z , X Y Z , X Y Z , X Z , X Y Z , X Y Z , X Y Z,
--R 3 5 3 2 3 3 3 2 3 4 4 4 4 3 4 2 2 4 3 4 4 5 3
--R X Z , X Y Z , X Y Z , X Y Z, X Z , X Y Z , X Y Z , X Y Z, X Y , X Z ,
--R 5 2 5 2 5 3 6 2 6 6 2 7 7 8
--R X Y Z , X Y Z, X Y , X Z , X Y Z, X Y , X Z, X Y, X ]
--R ,
--R 5 2 5 2
--R den= X Y Z + X Y Z ]
--IType: Record(num: List DistributedMultivariatePolynomial(...
--E 19
-- 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
--S 20 of 20
((# baseOfLofD.num) = degree D10 - genus()$P + 1 ) :: Boolean
--R
--R
--R (20) true
--R Type: Boolean
--E 20
)spool
)lisp (bye)
|