This file is indexed.

/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)