## Pari/GP scripts

Last updated on 2007-02-21
• Scripts for general elliptic curve related functions.
(1) there are dependencies between some of the following files!
(2) Tested under version 2.4.1 of pari/gp
(3) Fuller documentation and examples are contained in each file
• ell_utils.gp General utilities:
• ellneg(e,p) // negation of a point
• e.ai // extract [a1,a2,a3,a4,a6]
• ellinvert(urst) // invert a change of variables
• ellcompose(urst1,urst2) // compose two changes of variables
• polratroots(pol) // roots of a polynomial
• elliso(e1,e2) // Isomorphism test (char not 2,3)
• compsq(e) // complete the square to make e1=e3=0
• ellcomb(E,pts,v) // form sum v[i]*pts[i] on E
• ellpointsfromx(e,xi,flag=0) // list of points from list of x-coords
• ell2torsion(e) // list of 2-torsion points
• ell3torsion(e) // list of 3-torsion points
• ell_models.gp: Integral and minimal models (local and global, over Q)
• ellisintegral(e)
• ellislocallyintegral(e,p)
• elllocalintegralmodel(e,p)
• ellintegralmodel(e)
• ellvalidc4c6(c4,c6)
• ellislocallyminimal(e,p)
• ellisminimal(e)
• ellinitfromc4c6(c4,c6)
• ellminimisec4c6(c4,c6)
• ellminimalmodel2(e) // like ellminimalmodel(e) but not using Tate
• ell_divpol.gp: Division polynomials
• elldivpol(e,n) // n'th division polynomial of e
• elltorsionpoints(e,m) // all m-torsion points of e using division poly
• ell_baby.gp: Baby-step-giant-step with applications to elliptic discrete log and point order
• hasse_bounds(q) // Hasse bounds for curves over F_q
• order_point_from_fact(e,P,fact) // order of P given factorization of a multiple of the order
• order_point_from_mult(e,P, m) // order of P given a multiple of the order
• order_point_from_bounds(e,P, lower, upper) // order of P given Hasse bounds on group order (over finite fields)
• order_point(e,P) // order of P over a finite field
• bg_algorithm(e, PP, QQ, lower, upper, info) // Discrete log, solving i*P=Q with lower≤i≤upper
• ell_ff.gp: Function field functions, including construction of a functions with certain divisors (e.g. m(T)-m(O) where T has order m) and division of points (given a point q and an integer m returns all points p such that m*p=q)
• ellffeqn(e) // the affine eqation of e (in global variables ellffV,ellffU)
• ellffgenpt(e) // generic point on e
• ellffeval(h,p) // value of rational function h at p (if not a pole)
• ellffeval2(h,p1,p2) // value of rational function h at divisor (p1)-(p2)
• ellffvert(e,t) // function with divisor (t)+(-t)-2(0)
• ellfftang(e,t) // function with divisor 2(t)+(-2t)-3(0)
• ellffchord(e,t) // function with divisor (t)+(s)+(-s-t)-3(0)
• ellffaddpol(e,t,s) // function with divisor (t)+(s)-(s+t)-(0)
• ellffmultpol(e,t,m) // function with divisor m(t)-(m*t)-(m-1)(0)
• ellffweilpol(e,t,m) // function whose divisor is m(t)-m(0), assuming m*t=0 and m>0
• elldivpoint(e,q,m) // returns a list of points p such that m*p=q
• ell_weil.gp: Functions for computing Weil Pairing and related things -- mostly over an arbitrary ground field k, but at present we need to be able to generate random points on the curves which is only implemented for k=Z/pZ
• ellffweilpairing(e,s,t,m) // provided m*t=m*s=0, returns e_m(s,t) = Weil Pairing of s,t, an m'th root of unity
• ell_zp.gp: Functions for elliptic curves over the finite field Z/pZ, including group structure and generators
• ellzprandompoint(ep) // a random point on ep (defined over Z/pZ)
• ellreducepoint(P,p) // reduction of P mod p
• ellzpinit(ai,p) // enhancement of ellinit for curves over Z/pZ, returning group order and structure and generators in fields 14-17
• ellzp.grouporder // utilities for the above...
• ellzp.factoredgrouporder
• ellzp.groupstr
• ellzp.iscyclic
• ellzp.isotype
• ellzp.generators
• ellzppointorder(ellzp,t) // Order of a point (using the factored group order)

• Scripts for analytic rank and Heegner point computation
1. bgc.gp: functions for computing L-series derivatives and analytic ranks for elliptic curves over Q
2. lambda.gp: utility functions used in implementing the "Silverman-Cremona trick" for computing Heegner points on (rank 1) elliptic curves over Q
3. forms.gp: quadratic form utility functions used in computing Heegner points on (rank 1) elliptic curves over Q
4. heegner.gp: functions to compute Heegner points on (rank 1) elliptic curves over Q.
This file includes the preceding three files.
Sample use: H_auto([0,0,1,-1,0]); finds the point [0,0] on the first rank 1 curve.
H_auto([1,1,0,-3233812,-2240095280],1) find the point [6895338740919600657/1732529155042921, 15647805808301267927173594042/72114206222122984153781] of height 43.6 on curve 20382A1