Download A Tutorial for Pari/GP

Transcript
lift(Mod(1,2) * d)
centerlift(Mod(1,3) * d)
and now this works like a charm. The pattern in the first result is clear; the pattern is less clear in
the second result, but nonetheless there is one. Of course, it now remains to prove it (see Antwerp
III or your resident modular forms guru).
10. Working with Elliptic Curves.
Now we are getting to more complicated objects. Just as with number fields which we will
meet later on, the first thing to do is to initialize them. That’s because a lot of data will be needed
repeatedly, and it’s much more convenient to have it ready once and for all. Here, this is done with
the function ellinit.
So type
e0 = ellinit([6,-3,9,-16,-14])
This computes a number of things about the elliptic curve defined by the affine equation
y 2 + 6xy + 9y = x3 − 3x2 − 16x − 14 .
It is not that clear what all these funny numbers mean, except that we recognize the first few of
them as the coefficients we just input. To retrieve meaningful information from such complicated
objects (and number fields will be much worse), one uses so-called member functions. Type ?. to
get a complete list. Whenever ell appears in the right hand side, we can apply the corresponding
function to an object output by ellinit. (I’m sure you know how the other init functions will
be called now, don’t you? Oh, by the way, neither clgpinit nor pridinit exist.)
Let’s try it. The discriminant e0.disc is equal to 37, hence the conductor of the curve is
37. Of course in general it is not so trivial. In fact, although the equation of the curve is clearly
minimal (since the discriminant is 12th-power-free), it is not in standard reduced form, so type
e = ellminimalmodel(e0)
which gives the ell structure associated with the standard model, exactly as if we had used ellinit
on a reduced equation. For some related data, type
gr = ellglobalred(e0)
The first component gr[1] tells us that the conductor is 37 as we already knew. The second
component is a 4-component vector which allows us to get the minimal equation: in fact e is
ellchangecurve(e0, gr[2]). You can for the moment ignore the third component gr[3]. (For
the impatient reader, this is the product of the local Tamagawa numbers, cp .) Type
q0 = [-2,2]
ellisoncurve(e0, q0)
q = ellchangepoint(q0,gr[2])
ellisoncurve(e, q)
The point q0 is on the curve, as checked by ellisoncurve, and we transferred it onto the minimal
model e, using ellchangepoint and the change of variable computed above. Note that ellchangepoint() is unusual among the elliptic curve functions in that it does not take an ell structure as
its first argument: in gp, points do not “know” which curve they are on, but to move a point from
25