Detailed version of the article.

In this article, we describe an explicit method for performing a descent via isogeny on elliptic curves which have a rational torsion point of order N where N is any of the following: 4,5,7,8,9. As an additional goal, we have tried to implement the entire algorithm described in this article in PARI/GP. This has culminated in the creation of a PARI/GP function, SelmerBound(N,t), which gives a bound on the N-Selmer group of the elliptic curve E^N_t found in Table 1 in the above article. For example, SelmerBound(5,-1) returns 5. Now we see that N=5 and t=-1 corresponds to the elliptic curve E: y^2 - y = x^3 -x^2, so the 5-Selmer group of E has order 5. Since the 5-torsion group of E also has order 5, we can conclude that the rank of E is 0. Notice that at the moment, this function works for N equal to 5 and 7, but not for 4,8,9. The hope is to resolve this soon.

Be aware that this function is

Note that the general outline for the method is based on work by Edward Schaefer in "Computing a Selmer group of a Jacobian using functions on the curve". More examples of this method for descent via 2-isogeny on hyperelliptic curves can by found in

dual_isogeny.gp

descent1.gp

descent2.gp

If E: y^2 + (1-w)*x*y + v*y = x^3 + v*x^2 is the equation for an elliptic curve with a rational torsion point of order N at the point (0,0), then TateTorsion(N) uses the group law to return a relation between v and w. This is an equation for the curve parametrizing the family of elliptic curves with a rational point of order N. That is, this function returns a model for the modular curve X_1(N). Note that this equation will almost certainly have singularities.

This function takes as input N in {4,5,7,8,9} and t in the rational numbers and returns the coefficients of the Weierstrass equation for the elliptic curve E^N_t from Table 1 in the above article (an elliptic curve from our one-parameter family of elliptic curves with a rational torsion point of order N). These are returned as a 5-component vector [a1,a2,a3,a4,a6], where it will always be the case that a2=a3 and a4=a6=0. Note that this output really is just a vector: users will need to take ellinit([a1,a2,a3,a4,a6]) in order to work with the elliptic curve E^N_t in PARI.

This function takes as input N in {4,5,7,8,9} and t in the rational numbers and returns the coefficients of the Weierstrass equation for the elliptic curve E'^N_t from Table 2 in the above article. E'^N_t is isogenous to E^N_t by an isogeny of degree N. This function implements Vélu's method, described in the above article.

This function takes as input N in {4,5,7,8,9}, t in the rational numbers, and a point P=[x,y] on E^N_t that isnotin the kernel of the isogeny Phi. It then returns Phi(P) where Phi(P) is on E'^N_t. Usually, you would want to let P be a specific point on the curve (e.g. [1,2]), but you could also let P=[x,y] if you want to work with a general point. Doing this lets you retrieve the formula for the isogeny in the function field of the curve. This isogeny is constructed using Vélu's method.

This function takes as input N in {4,5,7,8,9}, t in the rational numbers, and a point P=[x,y] on E'^N_t that isnotin the kernel of the dual isogeny Dual. It then returns Dual(P) where Dual(P) is on E^N_t. Usually, you would want to let P be a specific point on the curve (e.g. [1,2]), but you could also let P=[x,y] if you want to work with a general point. Doing this lets you retrieve the formula for the isogeny in the function field of the curve. This isogeny is constructed using Vélu's method, though it is not implemented as explicitly as in IsogenyPhi.

This function takes as input N in {4,5,7,8,9}, t in the rational numbers, and returns the kernel of the dual isogeny, Dual:E'^N_t -> E^N_t. Namely, the function returns a polynomial whose roots correspond to the x-coordinates of the points in the kernel of the dual isogeny.

This function takes as input N in {4,5,7,8,9}, t in the rational numbers, and a prime p. It then returns the number of Q_p points in the kernel of the dual isogeny. If p=0, then it returns the number of rational points in the kernel of the dual isogeny.

Let N be in {4,5,7,8,9} and let t be a rational number. Let p be a prime in Q(S,N). Then BpgenQSp(N,t,p) returns the generators the image of Q(S,N) in Q_p^*/(Q_p^*)^N under the map B_p (and the identity, 1). See Chapter 3, Remark 1.0.8 for a diagram that may clarify this. For example, BpgenQSp(5,4,5) = [1,2,5], which says that Q_5^*/(Q_5^*)^5 = <2,5>.

This function returns the function F: E^N_t(Q)/Dual(E'^N_t(Q)) described in the above article.

This function finds F(P) where F: E(Q)/Dual(E'(Q)) -> Q(S,N).

This function finds F_p(P) where F_p: E(Q_p)/Dual(E'(Q_p)) -> Q_p^*/(Q_p^*)^N. See Chapter 3, Section 1 and Section 3 for more information about this map. Note that our output is a 2-component vector: If z=F(P), then this function returns [factor(z), order(z)] where factor(z) is the factorization of z and order(z) is its order in our local quotient group.

This function searches for generators for Q_p^*/(Q_p^*)^N. Our generators are returned as 2-component vectors: If z is a generator that we found, then this function (essentially) labels z as [factor(z), order(z)] factor(z) is the factorization of z and order(z) is its order in our local quotient group. This second component shouldnotbe viewed as the order of z in all cases, though. It is difficult to explain efficiently, but this second component is there as a way of counting how big of a subgroup of Q_p^*/(Q_p^*)^N the points we've found generates.

This function returns the leading coefficient to the power series representation of the dual isogeny, Dual:E'^N_t -> E^N_t, as explained in Chapter 3, Definition 4.0.11 and Remark 4.0.12. In our case, this will always be N.

This function returns the leading coefficient to the power series representation of the isogeny Phi:E^N_t -> E'^N_t as explained in Chapter 3, Definition 4.0.11 and Remark 4.0.12. In our case, this will always be 1.

This function takes as input N in {4,5,7,8,9}, t in the rational numbers, and a prime p. It then returns generators for the kernel of the map B_p: Q(S,N) -> Q_p^*/(Q_p^*)^N.

Let E be a 5-component vector [a1,a2,a3,a4,a6] describing an elliptic curve and let N be in {4,5,7,8,9}. Then QS(E,N) returns the generators for Q(S,N). If N is odd, then this is the set of primes of bad reduction and the prime dividing N. If N is even, then this set also includes -1.

If there exists a point of the form [x1,y] on E^N_t for some y in Q_p, then the function returns [x1,y] to the precision O(p^30). Otherwise, it returns 0. Note that this precision may not be sufficient in larger calculations--please adjust it as necessary. At some point, the aim is to change this function so the p-adic precision adjusts automatically.

This function the order of the quotient group E^N_t(Q_p)/dual(E'^N_t(Q_p)).

This function returns z modulo Nth powers. For example, ModuloPow(2*3^5*7^11,5) = 14 = 2*7. The output from this function is rather simple--note that this is not case for the p-adic analogue to this function, ModuloPowLocalp, given below.

Let N be in {4,5,7,8,9} and let z and t be rational numbers. Let p be a prime in Q(S,N). Then ModuloPowLocalp(z,N,t,p) returns the image of z in Bp(Q(S,N)), which is contained in Q_p^*/(Q_p^*)^N. This function serves a rather straightforward purpose, but its output is not quite as easy to grasp at first glance. Let b denote the image of z in Q_p^*/(Q_p^*)^N. Then the output of our function will actually be a 2-component vector where the first component is factor(b) (the factorization of b in PARI/GP using the factor function), and the order of b as an element of Q_p^*/(Q_p^*)^N. For example, ModuloPowLocalp(2^-7,9,2,2) = [Mat([2, 2]), 9], which is equivalent to saying that b=4 and the order of 4 is 9 in Q_2^*/(Q_2^*)^9.Note that this function does not return results that are guaranteed to be correct when N=4,8 because there is a part of this function which needs fixing.

This function computes an upper bound on the order of the N-Selmer group of E^N_t. As long as the Tate-Shafarevich groups of E'^N_t and E^N_t are trivial, then this bound will allow us to determine the rank of E^N_t. Note that this function is still being developed--it will not work in every case. If you tried an example that did not work, please send an email with the N and t you tried, along with the error message you received. If you received an error message about your stack size being too small, try allocatemem() to allow PARI to use more memory to compute. If you received the message*****root does not exist in rootpadic, then you need to upgrade to the latest version of PARI/GP. Note that this function only works for N=5,7 at the moment, but the aim is to get it working for N=4,8,9 soon.

Let E be a 5-component vector [a1,a2,a3,a4,a6] describing an elliptic curve and let N be in {4,5,7,8,9}. Then QS(E,N) returns the set of primes of dividing the discriminant of E, plus the prime dividing N.