Mordell-Weil Groups and Descent Methods

The remainder of the chapter describes the functions and methods for determining the Mordell-Weil group (the group of rational points) for a curve defined over Q or a number field.

The Mordell--Weil theorem states that for an elliptic curve E defined over a global field F (such as Q or a number field), the set E(F) of points on E with F-rational coordinates forms a finitely generated abelian group. This is called the Mordell--Weil group, and the Z-rank of the free part is called the Mordell--Weil rank of E.

It is an open problem to give an explicit algorithm which can determine the Mordell-Weil group of any elliptic curve over Q (or any number field). The general approach is to use the method of n-descent, for one or more suitable integers n. There are two main problems with this. Firstly, n-descent cannot determine the rank of E if the Tate-Shafarevich group Sha(E) has elements of order n. It is an open conjecture that, for fixed E, this occurs for only finitely many values of n. The second problem is more practical: one cannot implement n-descent for general n.

Magma has implementations of descent over Q for n = 2, 4, 8, 3, 9, 5 as well as for isogenies of various degrees. It is the only software that has a complete implementation of 2-descent over number fields (in the sense that 2-coverings are reduced and therefore can be used to search for points). In addition, the Cassels-Tate pairing on the 2-Selmer group is implemented over all global fields, and also on the 4-Selmer group over Q. All these techniques (and some others) are combined in the main functions to determine ranks and generators. Each of the main functions returns a result together with the status of the result, i.e. whether the rank has been proven, or the group returned is known to be the full Mordell-Weil group.

Prior to version 2.21, the commands MordellWeilGroup, Rank, Generators, etc, did not use all available techniques. Furthermore they did not return the status of their results, but instead a warning was printed in the event of an unproven result; no such warnings are printed now.

Magma provides several ways to ask for information about ranks and Mordell-Weil groups.

(i)
The main commands are Rank, RankBounds, MordellWeilGroup, Generators. These apply the available techniques in a suitable order.
(ii)
At a slightly lower level, the routine MordellWeilShaInformation follows the same procedure, and also prints a summary of what is known about the rank, generators and sha after applying each technique. The information about sha is also returned at the end.
(iii)
The techniques may be called individually. This is often necessary to get the best results in hard examples -- the automated procedure used by the higher level routines cannot always make the best choices. All the descent techniques are described later in this chapter; the other main techniques are AnalyticRank and HeegnerPoint.

Contents

Torsion

TorsionSubgroup(E) : CrvEll -> GrpAb, Map
TorsionSubgroup(H) : SetPtEll -> GrpAb, Map
Given an elliptic curve E defined over Q or a number field, this returns an abelian group A isomorphic to the torsion subgroup of the Mordell--Weil group, and a map from this abstract group A to the elliptic curve providing the isomorphism.

For a curve over Q, by a theorem of Mazur, A is either Ck (for k in {1..10} or 12) or C2 x C2k (for k in {1..4}). When there are two generators, they are chosen in such a way that the first generator has order 2.

The algorithm (for curves over number fields) is based on the TorsionBound described in this section. (For curves over Q a similar method is used.)

TwoTorsionSubgroup(E) : CrvEll -> GrpAb, Map
This returns the group of 2-torsion points on the elliptic curve E (returned in the same way as the TorsionSubgroup). Note that this is a very cheap computation.
TorsionBound(E, n) : CrvEll, RngIntElt -> RngIntElt
Given an elliptic curve E defined over a number field, returns a bound on the size of the torsion subgroup of E. This is done by considering at least n primes of good reduction (with early exit in some cases, such as when the torsion is shown to be only two-torsion).
pPowerTorsion(E, p) : CrvEll, RngIntElt -> GrpAb, Map
    Bound: RngIntElt                    Default: 
Given an elliptic curve E defined over Q or a number field, this returns the p-power torsion subgroup of E over its base field (returned in the same way as the TorsionSubgroup). A bound on the size of the p-power torsion subgroup may be given, as the parameter Bound, to cut short the computation in hard cases.

Mordell-Weil Group and Rank

RankBounds(H: parameters) : SetPtEll -> RngIntElt, RngIntElt
RankBounds(E: parameters) : CrvEll -> RngIntElt, RngIntElt
MordellWeilRankBounds(H: parameters) : SetPtEll -> RngIntElt, RngIntElt
MordellWeilRankBounds(E: parameters) : CrvEll -> RngIntElt, RngIntElt
    Effort: RngIntElt                   Default: 1
Given an elliptic curve E defined over Q or a number field, this returns lower and upper bounds on the rank of the Mordell--Weil group of E.

The parameter Effort must be an integer at least 1 (the default). Its usage is explained under MordellWeilShaInformation.

Rank(H: parameters) : SetPtEll -> RngIntElt, BoolElt
Rank(E: parameters) : CrvEll -> RngIntElt, BoolElt
RankBound(E) : CrvEll -> RngIntElt, BoolElt
MordellWeilRank(H: parameters) : SetPtEll -> RngIntElt, BoolElt
MordellWeilRank(E: parameters) : CrvEll -> RngIntElt, BoolElt
    Effort: RngIntElt                   Default: 1
Given an elliptic curve E defined over Q or a number field, this returns a lower bound r for the Mordell--Weil group of E. The second value returned is a boolean, which is true iff it is known that the rank is exactly r.

The parameter Effort must be an integer at least 1 (the default). Its usage is explained under MordellWeilShaInformation.

MordellWeilGroup(H: parameters) : SetPtEll -> GrpAb, Map, BoolElt, BoolElt
MordellWeilGroup(E: parameters) : CrvEll -> GrpAb, Map, BoolElt, BoolElt
AbelianGroup(H: parameters) : SetPtEll -> GrpAb, Map, BoolElt, BoolElt
AbelianGroup(E: parameters) : CrvEll -> GrpAb, Map, BoolElt, BoolElt
    Effort: RngIntElt                   Default: 1
    HeightBound: RngIntElt              Default: 15
The Mordell--Weil group of an elliptic curve E defined over Q. The first two values returned are an abelian group A and a map m from A to E. The map m provides an isomorphism between the abstract group A and the Mordell--Weil group.

Additionally the function returns two booleans. The first boolean is true iff the rank of the group returned is known to be the rank of the curve. The second boolean is true iff the group returned is known to be the full Mordell-Weil group.

The parameter Effort must be an integer at least 1 (the default). Its usage is explained under MordellWeilShaInformation.

The parameter HeightBound limits the search for points directly on E to the given naive height. (Note: this affects only saturation of the group, not determination of the rank.)

Generators(H) : SetPtEll -> [ PtEll ]
Generators(E) : CrvEll -> [ PtEll ]
This function returns the generators of the MordellWeilGroup of the elliptic curve E (listed in the same order).
NumberOfGenerators(H) : SetPtEll -> RngIntElt
NumberOfGenerators(E) : CrvEll -> RngIntElt
Ngens(H) : SetPtEll -> RngIntElt
Ngens(E) : CrvEll -> RngIntElt
This is equivalent to NumberOfGenerators(MordellWeilGroup(E)).
Saturation(points, n) : [ PtEll ], RngIntElt -> [ PtEll ]
    TorsionFree: BoolElt                Default: false
    OmitPrimes: [ RngIntElt ]           Default: []
    Check: BoolElt                      Default: true
Given a sequence of points on an elliptic curve E over the rationals or a number field, and an integer n, this function returns a sequence of points generating a subgroup of E(Q) which contains the given points and which is p-saturated for all primes p up to n. (A subgroup S is p-saturated in a group G if there is no intermediate subgroup H for which the index [H:S] is finite and divisible by p.)

If OmitPrimes is set to be a sequence of primes, then the group is not checked to be p-saturated for those primes. If TorsionFree is set to {tt true}, torsion points are omitted from the result (that is, the result contains independent generators modulo torsion). If Check is set to false, the input sequence of points are assumed to be independent modulo torsion.

Saturation(points) : [ PtEll ] -> [ PtEll ]
    TorsionFree: BoolElt                Default: false
    Check: BoolElt                      Default: true
Given a sequence of points on an elliptic curve E over the rationals or a number field, returns generators of the saturation of the given points in the Mordell-Weil group of E.

Example CrvEllQNF_MordellWeil (H130E26)

> E := EllipticCurve([73, 0]);
> E;
Elliptic Curve defined by y^2 = x^3 + 73*x over Rational Field
> Factorization(Integers() ! Discriminant(E));
[ <2, 6>, <73, 3> ]
> BadPrimes(E);
[ 2, 73 ]
> LocalInformation(E);
[ <2, 6, 6, 1, II, true>, <73, 3, 2, 2, III, true> ]
> G, m := MordellWeilGroup(E);
> G;
Abelian Group isomorphic to Z/2 + Z + Z
Defined on 3 generators
Relations:
    2*G.1 = 0
> Generators(E);
[ (0 : 0 : 1), (36 : -222 : 1), (4/9 : 154/27 : 1) ]
> 2*m(G.1);
(0 : 1 : 0)

Example CrvEllQNF_Rank (H130E27)

Here is a curve with moderately large rank; we do not attempt to compute the full group since that would be quite time-consuming.
> E := EllipticCurve([0, 0, 0, -9217, 300985]);
> T, h := TorsionSubgroup(E);
> T;
Abelian Group of order 1
> time RankBounds(E);
7 7
Time: 0.070
This curve was well-behaved in that the computed lower and upper bounds on the rank are the same, and so we know that we have computed the rank exactly. Here is a curve where that is not the case:
> E := EllipticCurve([0, -1, 0, -140, -587]);
> time G, h := MordellWeilGroup(E);
Warning: rank computed (2) is only a lower bound
(It may still be correct, though)
Time: 0.250
> RankBounds(E);
2 3
The difficulty here is that the Tate--Shafarevich group of E is not trivial, and this blocks the 2-descent process used to compute the rank. We can compute the AnalyticRank of the curve to be 2, but this is only conjecturally equal to the rank. In cases like this, higher level descents may provide a more definitive answer; the machinery for two- and four-descents described in the next two sections can be used to confirm that the rank is indeed 2. In any case, we can certainly get the group with rank equal to the lower bound.
> G;
Abelian Group isomorphic to Z + Z
Defined on 2 generators (free)
> S := Generators(E);
> S;
[ (-6 : -1 : 1), (-7 : 1 : 1) ]
> [ Order(P) : P in S ];
[ 0, 0 ]
> h(G.1) eq S[1];
true
> h(G.2) eq S[2];
true
> h(2*G.1 + 3*G.2);
(-359741403/57729604 : 940675899883/438629531192 : 1)
> 2*S[1] + 3*S[2];
(-359741403/57729604 : 940675899883/438629531192 : 1)
As mentioned above, the rank of this curve is actually 2, so we have computed generators for the full group of E.
MordellWeilShaInformation(E: parameters) : CrvEll -> [RngIntElt], [PtEll], [Tup]
DescentInformation(E: parameters) : CrvEll -> [RngIntElt], [PtEll], [Tup]
    RankOnly: BoolElt                   Default: false
    ShaInfo: BoolElt                    Default: false
    Silent: BoolElt                     Default: false
    Effort: RngIntElt                   Default: 1
This is a special function which uses all relevant Magma machinery to obtain as much information as possible about the Mordell-Weil group and the Tate-Shafarevich group of the given elliptic curve E over Q or a number field. The tools used include 2-descent, 4-descent, Cassels-Tate pairings, 8-descent, 3-descent. When the conductor is not too large, analytic methods (analytic rank and Heegner points) are also used. The information is progressively refined as the tools are applied (in order of their estimated cost), and a summary is printed at each stage. At the end, all information obtained is returned in three sequences.

The first sequence returned contains lower and upper bounds on the Mordell-Weil rank of E(Q), and the second is the sequence of independent generators of the Mordell-Weil group (modulo the torsion subgroup) that have been found. The third sequence returned contains the information obtained about the Tate-Shafarevich group Sha(E): letting rn denote the largest integer such that Z/nZ is contained in Sha(E), the tuple <n, [l,u]> would indicate that the computations prove l ≤rn ≤u.

By default, the routine attempts to determine the rank and generators, and returns whenever it succeeds in determining them. When RankOnly is set to true, it returns as soon as the Mordell-Weil rank has been determined. When ShaInfo is set to true, it additionally probes the structure of Sha(E) using all available tools.

The parameter Effort must be an integer at least 1 (the default). Currently it has the following effect. For curves over Q: when the effort is 1, the algorithm terminates before attempting the hardest methods (FourDescent is used but not EightDescent or ThreeDescent), otherwise all methods are used. For curves over number fields: all available methods are always used, and the Effort is a linear multiplier that controls the time spent in searching for points in some of the methods.

Example CrvEllQNF_mwsha-example (H130E28)

Conductor 389 is the smallest conductor of a curve with rank 2:
> E := EllipticCurve("389a1");
> time rank, gens, sha := MordellWeilShaInformation(E);
Torsion Subgroup is trivial
Analytic rank = 2
The 2-Selmer group has rank 2
Found a point of infinite order.
Found 2 independent points.
After 2-descent:
    2 <= Rank(E) <= 2
    Sha(E)[2] is trivial
(Searched up to height 100 on the 2-coverings.)
Time: 0.280
We now take a curve of conductor 571, which has rank 0 and nontrivial Tate-Shafarevich group:
> E := EllipticCurve("571a1");
> time rank, gens, sha :=MordellWeilShaInformation(E);
Torsion Subgroup is trivial
Analytic rank = 0
     ==> Rank(E) = 0
Time: 0.010
We must specify that we want information about the Tate-Shafarevich group:
> time rank, gens, sha :=MordellWeilShaInformation(E : ShaInfo);
Torsion Subgroup is trivial
Analytic rank = 0
     ==> Rank(E) = 0
The 2-Selmer group has rank 2
After 2-descent:
    0 <= Rank(E) <= 0
    (Z/2)^2 <= Sha(E)[2] <= (Z/2)^2
(Searched up to height 10000 on the 2-coverings.)
The Cassels-Tate pairing on Sel(2,E)/E[2] is
[0 1]
[1 0]
After using Cassels-Tate:
    0 <= Rank(E) <= 0
    (Z/2)^2 <= Sha(E)[4] <= (Z/2)^2
The 3-Selmer group has rank 0
After 3-descent:
    0 <= Rank(E) <= 0
    (Z/2)^2 <= Sha(E)[12] <= (Z/2)^2
Time: 0.840

Two-Descent

This section describes the main implementations of two-descent (by the "algebraic" algorithm) in Magma, for curves over Q and for curves over number fields.

The two-descent process determines the locally soluble 2-coverings of a given elliptic curve, returning them as hyperelliptic curves C:y2 = f(x) of degree four. The process breaks into two main parts: first to compute the 2-Selmer group, then to construct 2-covering curves corresponding to its elements. To obtain nice models of the coverings, minimisation and reduction techniques are used. This is done over (general) number fields using algorithms developed by Donnelly and Fisher.

A separate implementation is available for the case where E admits a 2-isogeny: this involves first computing the 2-coverings for the isogeny and its dual (in this case the covering maps have degree 2 instead of degree 4), and then lifting these to the level of a "full 2-descent".

This section also describes functions for dealing with 2-covering curves as binary quartic forms: invariant theory, and minimisation and reduction. This functionality overlaps with the package for genus one models (see MODELS OF GENUS ONE CURVES). There is also a straightforward interface to the 2-Selmer group machinery.

TwoDescent(E: parameters) : CrvEll -> [CrvHyp] , [Map], Map
    RemoveTorsion: BoolElt              Default: false
    RemoveGens: { PtEll }               Default: { }
    WithMaps: BoolElt                   Default: true
    MinRed: BoolElt                     Default: 
    SetVerbose("TwoDescent", n):        Maximum: 1
Given an elliptic curve E over the rationals or a number field, this performs 2-descent on E producing 2-covering curves that represent the elements of the 2-Selmer group of E. The function returns these as a sequence of hyperelliptic curves, and also returns a corresponding list of maps (unless the parameter WithMaps is set to false).

If RemoveTorsion is true, the generators of the torsion subgroup are factored out from the group. If RemoveGens is given, the group spanned by the specified points is factored out.

For curves over number fields: a third item is returned which specifies the group structure on the set of 2-coverings. This is a map (with inverse) from an abstract group to the sequence of 2-coverings; the abstract group is either TwoSelmerGroup(E), or the appropriate quotient in the case where RemoveTorsion or RemoveGens were specified.

Currently, for curves over number fields: the parameter MinRed controls whether the coverings are to be minimised and reduced. (This may be expensive for various reasons, especially when the field discriminant is not small: in particular, a large integer may need to be factored.)

AssociatedEllipticCurve(f) : RngUPolElt -> CrvEll, Map
AssociatedEllipticCurve(C) : CrvHyp -> CrvEll, Map
    E: CrvEll                           Default: 
Gives the minimal model of the elliptic curve associated with a two-covering given as a polynomial f or a hyperelliptic curve C, along with a map from points [x, y] on the two-covering to the curve.

If an elliptic curve is given as E, this must be isomorphic to the Jacobian of C, and then the map returned will be a map to the given E.

TwoCover(e) : FldNumElt -> CrvHyp, Map
TwoCover(e) : RngUPolResElt -> CrvHyp, Map
The purpose of this function is to calculate the 2-covers that are returned by TwoDescent individually rather than all together.

The argument e is an element of a cubic extension A/F, where F is a number field, and where A may be either a number field over F or an affine algebra over F. The element e determines a 2-cover of some elliptic curve over F (by the construction given in the description of DescentMaps).

Example CrvEllQNF_twodescent (H130E29)

> SetSeed(1); // results may depend slightly on the seed
> E := EllipticCurve([0, 1, 0, -7, 6]);
> S := TwoDescent(E);
> S;
[
    Hyperelliptic Curve defined by y^2 = x^4 + 4*x^3 - 2*x^2 - 20*x + 9 over
    Rational Field,
    Hyperelliptic Curve defined by y^2 = x^4 - x^3 - 2*x^2 + 2*x + 1 over
    Rational Field,
    Hyperelliptic Curve defined by y^2 = 2*x^4 - 4*x^3 - 8*x^2 + 4*x + 10 over
    Rational Field
]
The curve E has three non-trivial two-descendants, hence its rank is at most 2. The first two curves yield obvious rational points, so we can find two independent points on E (and it has exact rank 2).
> pt_on_S1 := Points(S[1] : Bound:=10 )[1];
> pt_on_S1;
// We obtain the map from S[1] to E by
> _, phi := AssociatedEllipticCurve(S[1] : E:=E );
> phi( pt_on_S1 );
(1 : -1 : 1)
// Now do the same for the second curve.
> pt_on_S2 := Points(S[2] : Bound:=10 )[1];
> _, phi := AssociatedEllipticCurve(S[2] : E:=E );
> phi( pt_on_S2 );
(-3 : 3 : 1)
Two Descent Using Isogenies
TwoIsogenyDescent(E : parameters) : CrvEll -> SeqEnum[CrvHyp], List, SeqEnum[CrvHyp], List, MapSch, MapSch
    Isogeny: MapSch                     Default: 
    TwoTorsionPoint: PtEll              Default: 
Given an elliptic curve E over Q admitting a 2-isogeny φ : E' -> E, this function computes 2-coverings representing the nontrivial elements of the Selmer groups of φ and of the dual isogeny φ' : E -> E'. These coverings are given as hyperelliptic curves C : y2=quartic(x). Six objects are returned: (i) the sequence of coverings C of E for φ; (ii) the corresponding list of maps C -> E; (iii) and (iv) the coverings C' and maps C' -> E' for φ'; (v) and (vi) the isogenies φ and φ' that were used.
LiftDescendant(C) : CrvHyp -> SeqEnum[ CrvHyp ], List, MapSch
TwoDescendantsOverTwoIsogenyDescendant(C) : CrvHyp -> SeqEnum[ CrvHyp ], List, MapSch
This routine performs a higher descent on curves arising in TwoIsogenyDescent(E) on an elliptic curve E over Q. The curves obtained are 2-coverings of E in the sense of ordinary (full) TwoDescent; more precisely, they are exactly the set of 2-coverings D for which the covering map D -> E factors through C. Up to isomorphism, they are a subset of the 2-coverings returned by TwoDescent(E). The advantage of this approach is that it works entirely over the base field of E, whereas TwoDescent will in general compute a class group over a quadratic extension of the base field. The example below explains how to recover all coverings produced by TwoDescent(E) using the 2-isogeny approach.

This function accepts any curve C in the first sequence of curves returned by TwoIsogenyDescent(E) (these are the 2-isogeny-coverings of E). More generally it accepts any hyperelliptic curve of the form y2 = d1x4 + cx2 + d2. A model for the associated elliptic curve E is then y2 = x(x2 + cx + d1 d2).

The function returns three objects: a sequence containing the covering curves D, a list containing the corresponding maps D -> C, and lastly the covering map C -> E from the given curve to some model of its associated elliptic curve.

Invariants
QuarticIInvariant(q) : RngUPolElt -> RngIntElt
QuarticG4Covariant(q) : RngUPolElt -> RngUPolElt
QuarticHSeminvariant(q) : RngUPolElt -> RngIntElt
QuarticPSeminvariant(q) : RngUPolElt -> RngIntElt
QuarticQSeminvariant(q) : RngUPolElt -> RngIntElt
QuarticRSeminvariant(q) : RngUPolElt -> RngIntElt
Compute invariants, semivariants, and covariants, as in paper [Cre01], of a given quartic polynomial q. The G4 and G6 covariants are polynomials of degrees four and six respectively; the I and J invariants are integers that generate the ring of integer invariants of the polynomial and satisfy J2 - 4I3 = 27 Δ(f). The names H and P have been used for essentially the same seminvariant in different papers; they are related by H= - P.
QuarticNumberOfRealRoots(q) : RngUPolElt -> RngUPolElt
Using invariant theory, compute the number of real roots of a real quartic polynomial q.
QuarticMinimise(q) : RngUPolElt -> RngUPolElt, AlgMatElt
This computes a minimal model of the quartic polynomial q over the rationals or a univariate rational function field.

Three objects are returned: the minimised quartic, the transformation matrix, and the scaling factor.

For further explanation see Chapter MODELS OF GENUS ONE CURVES. The algorithm can be found in [CFS10].

QuarticReduce(q) : RngUPolElt -> RngUPolElt, AlgMatElt
Given a quartic q, the algorithm of [Cre99] is applied to find the reduced quartic and the matrix that reduced it.
IsEquivalent(f,g) : RngUPolElt, RngUPolElt -> BoolElt
Determines if the quartics f and g are equivalent.

Selmer Groups

First we give a short overview of the theory of Selmer groups. This enables us to fix the notation that is used in the naming of the Magma functions. For a more complete account, see [Sil86]. The actual algorithms to compute the Selmer groups are closer to the description in [Cas66].

Let E', E be elliptic curves over a number field K and let φ:E' -> E be an isogeny. The only cases currently implemented are where φ is a 2-isogeny, i.e., an isogeny of degree 2, and where E'=E and φ is multiplication by 2.

Let E'[φ] be the kernel subscheme of φ. By taking Galois cohomology of the short exact sequence of schemes over K, 0 -> E'[φ] -> E' -> E -> 0, we obtain E'(K) -> E(K) -> H1(K, E'[φ]) -> H1(K, E'). For the middle map, we write μ:E(K) -> H1(K, E'[φ]). Thus, E(K)/φ(E'(K)) injects in H1(K, E'[φ]) and the image consists exactly of the cocycles that vanish in H1(K, E').

As an approximation to this image, we define the φ-Selmer group of E over K to consist of those cocycles H1(K, E'[φ]) that vanish in all restrictions H1(Kp, E'), where p runs though all places of K. It fits in the exact sequence

0 -> S(φ)(E/K) -> H1(K, E'[φ]) -> ∏p H1(Kp, E')

The main application of Selmer groups is that they provide the bound: #E(K)/φ E'(K)≤# S(φ)(E/K). If φ * :E -> E' is the isogeny dual to φ, then φφ * :E -> E is multiplication by d=(Deg)(φ). Thus, one can use the φ and φ * Selmer groups to provide a bound on #E(K)/dE(K) and thus on the Mordell--Weil rank of E(K).

Representation of H1(K, E'[φ]):

If φ is a 2-isogeny, then H1(K, E'[φ])~K * /K * 2. Thus, we can represent elements by δ∈K * . In Magma, the map μ corresponds to a representation of the map E(K) -> K * . The map μ also accepts just x-coordinates.

If φ is multiplication-by-2 and E : y2=f(x), we write A=K[x]/(f(x)) then H1(K, E[2])~{δ∈A * /A * 2| NA/K(δ)∈K * 2}. In fact, the full set A * /A * 2 corresponds to H1(K, E[2] x {∓ 1}).

The set H1(K, E'[φ]) also corresponds to the set of covers τδ:Tδ -> E over K, modulo isomorphy over K, that are isomorphic to φ:E' -> E over the algebraic closure of K (see [Sil86], Theorem X.2.2). In this section, we write tor for the map δ |-> τδ.

DescentMaps(phi) : Map -> Map, Map
CasselsMap(phi) : Map -> Map, Map
    Fields: SetEnum                     Default: { }
Given an isogeny φ : E -> E1 of elliptic curves over a number field K (or Q), the function returns the connecting homomorphism μ : E1(K) -> H1(K, E[φ]), and a map τ sending an element of H1(K, E[φ]) to the corresponding homogeneous space. Here elements of H1(K, E[φ]) are represented as elements of A * /(A * )2 (as described above). The maps are actually given as maps to, and from, A (rather than A * /(A * )2).

The isogeny φ must be either a 2-isogeny or multiplication--by--2.

When φ is multiplication--by--two, then the computation of μ involves a call to AbsoluteAlgebra. The optional parameter Fields is passed on to that. If the fields mentioned in this set are found to be of any use, then these will be used and whatever class group and unit data stored on the fields will be used in subsequent computations.

When φ is multiplication--by--two, the second map τ accepts all elements δ ∈A * . An element δ ∈A * represents an element of H1(K, E[2]) if and only if δ must have square norm. In general, δ ∈A * represents an element of H1(K, E[2] x {∓ 1}), in which case τ(δ) is the corresponding covering Tδ -> (P)1. (This covering is a twist of the covering E -> E -> (P)1 given by P |-> 2P |-> x(2P).)

SelmerGroup(phi) : Map -> GrpAb, Map, Map, SeqEnum, SetEnum
    Hints: SetEnum                      Default: { }
    Raw: BoolElt                        Default: false
    Bound: RngIntElt                    Default: -1
    SetVerbose("Selmer", n):            Maximum: 4

Given an isogeny φ : E -> E1 defined over a number field K, computes the associated Selmer group Sel(φ) := Selφ(E/K).

The Selmer group is returned as a finite abelian group S, together with a map AtoS : A -> S, where A is as in the introduction. This is a map only in the Magma sense; it is defined only on a finite subset of A. Its "inverse" S -> A provides the mathematically meaningful injection S -> A * /(A * )2. The standard map E1(K) -> E1(K)/φ E(K) -> Sel(φ) is given by the composition of μ with AtoS, where μ : E1(K) -> H1(K, E[φ]) is the first map returned by DescentMaps.

If the optional parameter Hints is given, it is used as a list of x-coordinates to try first when determining local images. Supplying Hints does not change the outcome, but may speed up the computation.

The calculation of the Selmer group involves possibly expensive class group and unit group computations. If no such data has been precomputed, SelmerGroup will attempt to obtain this information unconditionally, unless Bound is positive. This bound is then passed on to any called ClassGroup. However, if such data is already stored, it will be used and subsequent results will be conditional on whatever assumptions were made while computing this information. If conditional results are desired (for instance, assuming GRH), one should precompute class group information on the codomain of CasselsMap(phi) prior to calling SelmerGroup(phi).

If Raw is true, then three technical items are also returned. The first two of these, toVec and FB, enable one to represent elements of the Selmer group in terms of a "factor base" FB consisting of elements of A that generate a relevant subgroup of A * /(A * )2. The map toVec sends an element of S to an exponent vector relative to FB. The map from S to A obtained by multiplying out the results is inverse to AtoS.

The final returned value (when Raw is true) is a set of Hints (just as in the optional parameter).

TwoSelmerGroup(E) : CrvEll -> GrpAb, Map, SetEnum, Map, SeqEnum
    Hints: SetEnum                      Default: { }
    Raw: BoolElt                        Default: false
    Bound: RngIntElt                    Default: -1
    SetVerbose("TwoDescent", n):        Maximum: 2
The 2-Selmer group of an elliptic curve defined over Q or a number field. The function simply calls SelmerGroup for the multiplication--by--two isogeny. The given model for E should be integral. The options and return values are the same as for SelmerGroup.

Example CrvEllQNF_selmer (H130E30)

In this example, we determine the rank of y2 = x3 + 9x2 - 10x + 1 by computing the 2-Selmer group.
> E := EllipticCurve([0,9,0,-10,1]);
> two := MultiplicationByMMap(E,2);
> mu, tor := DescentMaps(two);
The hard work: computing the Selmer group.
> S, AtoS := SelmerGroup(two);
> #S;
8
So the Selmer rank is 3. We deduce the following upper bound on the rank of E(Q), taking into account any 2-torsion.
> RankBound(E : Isogeny := two);
3
In fact, there are 3 points: (0, 1), (1, 1) and (2, 5).
> g1 := E![ 0, 1 ];
> g2 := E![ 1, 1 ];
> g3 := E![ 2, 5 ];
We now test these points for linear independence. It will follow that the points generate E(K)/2E(K), which means they are independent nontorsion points in E(K) (since we know there is no 2-torsion).
> IsLinearlyIndependent ([g1, g2, g3]);
true
Next we compute the homogeneous space associated to the point g1 + g2. It must have a rational point mapping to g1 + g2. Note that @@ always denotes "preimage" in Magma. The algebra for AtoS is not the same as the original cubic, so we must translate before applying the requisite map.
> K := NumberField(Modulus(Domain(AtoS)));
> L := NumberField(Polynomial([1,-10,9,1]));
> b, m := IsIsomorphic (K, L); assert b;
> theta := (Rationals()! (L.1 - m(K.1))) + Domain(AtoS).1;
> H, mp := TwoCover((g1+g2)[1] - theta : E:=E); H;
Hyperelliptic Curve defined by y^2 = 9*x^4 - 4*x^3 - 18*x^2 + 4*x + 13
The next command finds all Q-rational points in the preimage of the point g1 + g2 on E. (In Magma the preimage is constructed as a scheme.)
> RationalPoints( (g1+g2) @@ mp);
{@ (-1 : -2 : 1) @}

Example CrvEllQNF_selmer2 (H130E31)

We consider the elliptic curve E : y2 = dx(x + 1)(x + 3) where d is the product of the primes less than 50. Since E has full 2-torsion, we can carry out 2-isogeny descent in three non-equivalent ways, resulting in three different rank bounds.
> P<x> := PolynomialRing(Integers());
> d := &*[ p : p in [1..50] | IsPrime(p) ];
> E := EllipticCurve(HyperellipticCurve(d*x*(x + 1)*(x + 3)));
The nontrivial 2-torsion points in E(Q):
> A, mp := TorsionSubgroup(E);
> T := [ t : a in A | t ne E!0 where t := mp(a) ];
The corresponding 2-isogenies:
> phis := [ TwoIsogeny(t) : t in T ];
The rank bounds obtained from these isogenies:
> [ RankBound(E : Isogeny := phi) : phi in phis ];
[ 9, 5, 7 ]
We find [9, 5, 7]! Each descent gives a different rank bound. However, a full 2-descent gives:
> two := MultiplicationByMMap(E,2);
> RankBound(E : Isogeny := two);
1
Now doing full 2-descent on the three isogenous curves, we see where the obstacle for sharp rank bounds comes from.
> OtherTwos := [ MultiplicationByMMap(Codomain(phi), 2) : phi in phis ];
> [ RankBound(Domain(two) : Isogeny := two) : two in OtherTwos ];
[ 9, 5, 7 ]
We find [9, 5, 7] again.

Example CrvEllQNF_selmer3 (H130E32)

The next example is a classic one from [Kra81].
> E := EllipticCurve([0, 977, 0, 976, 0]);
> #TwoTorsionSubgroup(E);
4
> RankBound(E);
> ptsE := [E| [-4, 108], [4, 140]];
> IsLinearlyIndependent(ptsE); // they are non-torsion points
true
> // So E is really of rank 2
> d := 109;
> Ed := QuadraticTwist(E, d);
> Points(Ed, -976);
[ (-976 : 298656 : 1), (-976 : -298656 : 1) ]
Since Ed has a nontorsion point, its rank is at least 1. We will show that its rank is exactly 1, by comparing 2-descent on E and on its base change.
> _<x> := PolynomialRing(Rationals());
> K := NumberField(x^2 - d);
> EK := BaseChange(E, K);
> Ngens(TwoSelmerGroup(EK));
5
Note that the Selmer group contains the 2-torsion subgroup, so this tells us that the rank of E(K) is at most 3, hence it is exactly 3 because we know 3 independent points. The rank of Ed(Q) must equal the rank of E(K) minus the rank of E(Q), therefore Ed(Q) has rank 1. This is smaller than the bound of 3 we get from a 2-descent on Ed alone:
> Ngens(TwoSelmerGroup(Ed));
5
We may confirm the result as follows (this performs higher descents).
> RankBound(Ed);
1 true

Example CrvEllQNF_selmer4 (H130E33)

Here we give some examples of using TwoDescent, TwoSelmerGroup, and TwoCover.
> E := EllipticCurve( [ 0, 0, 1, -7, 6] ); // rank 3 curve
> T := TwoDescent(E);
> T[6];
Hyperelliptic Curve defined by y^2 = 3*x^4 - 10*x^3 + 10*x + 1 over
Rational Field
> G, m := TwoSelmerGroup(E);
> G.1 @@ m;
theta^2 - 12*theta + 33
> Parent($1); // Modulus has y^2 = modulus isomorphic to E
Univariate Quotient Polynomial Algebra in theta over Rational Field
with modulus theta^3 - 112*theta + 400
> TwoCover( (G.1 + G.2) @@ m);
Hyperelliptic Curve defined by y^2 = 3*x^4 - 10*x^3 + 10*x + 1 over
Rational Field
> TwoCover( Domain(m) ! 1 );
Hyperelliptic Curve defined by y^2 = 2*x^3 - 12*x^2 - 32*x + 196 over
Rational Field

The Cassels-Tate Pairing

The Tate--Shafarevich group of any elliptic curve E admits an alternating bilinear form on Sha()(E) with values in Q/Z, known as the Cassels-Tate pairing. The key property is that if Sha()(E) is finite (as conjectured), the Cassels-Tate pairing is non-degenerate. When restricted to the 2-torsion subgroup, one obtains a non-degenerate alternating bilinear form on Sha()(E)[2]/2Sha()(E)[4], or equivalently on Sel2(E) modulo the image of Sel4(E), with values in Z/2Z.

This means that if C and D are 2-coverings of E and the pairing (C, D) has value 1, then both C and D represent elements of order 2 in Sha()(E), and moreover there are no locally solvable 4-coverings of E lying above them (in other words, FourDescent(C) and FourDescent(D) would both return an empty sequence). In this sense the Cassels-Tate pairing provides the same information as 4-descent, but is much easier to compute.

Similarly, for an element in Sha()(E)[4]/2Sha()(E)[8], the values of the pairing between this element and all elements in Sha()(E)[2]/2Sha()(E)[4] provides the same information as performing an 8-descent on C. These elements may be represented by a 4-covering C -> E and a 2-covering D -> E respectively.

In Magma the pairing between 2-coverings is implemented over Q number fields, and rational function fields F(t) for F finite of odd characteristic. The pairing between a 2-covering and a 4-covering is implemented over Q. A new, very efficient implementation of pairing on 2-coverings over Q was released in Magma V2.15.

The algorithms are due to Steve Donnelly and will be described in a forthcoming paper, a draft of which is available on request. For the pairing between 2-coverings, the only nontrivial computation is to solve a conic over the base field of E, so over Q the pairing is easy to compute. For the pairing between 2- and 4-coverings, the key step is to solve a conic defined over a degree 4 field; this is also the case for performing 8-descent on the 4-covering, however the advantage here is that there is considerable freedom to choose the field to have small discriminant. Consequently it is more efficient to use the pairing than to apply EightDescent.

To have information about the computation printed while it is running, one may use SetVerbose("CasselsTate",n); with n = 1 (for fairly concise information) or n = 2.

CasselsTatePairing(C, D) : CrvHyp, CrvHyp -> RngIntElt
    SetVerbose("CasselsTate", n):       Maximum: 2
This evaluates the Cassels-Tate pairing on 2-coverings of an elliptic curve over Q, a number field, or a function field F(t) where F is a finite field of odd characteristic. The given curves C and D must be hyperelliptic curves of the form y2 = q(x) where q(x) has degree 4, and they must admit 2-covering maps to the same elliptic curve. In addition, they must both be locally solvable over all completions of their base field (otherwise the pairing is not defined).

Typically the input curves C and D would be obtained using TwoDescent(E).

The pairing takes values in Z/2Z (returned as elements of Z).

CasselsTatePairing(C, D) : Crv, CrvHyp -> RngIntElt
    SetVerbose("CasselsTate", n):       Maximum: 2
This evaluates the Cassels-Tate pairing between a 4-covering C and a 2-covering D of the same elliptic curve over Q. The arguments must be curves over Q, with C an intersection of two quadrics in P3 (for instance, a curve obtained from FourDescent), and D a hyperelliptic curve of the form y2 = q(x). In addition, they must both be locally solvable over all completions of Q (otherwise the pairing is not defined).

The pairing takes values in Z/2Z (returned as elements of Z).

Example CrvEllQNF_cassels-tate-example (H130E34)

We consider the first elliptic curve with trivial 2-torsion and nontrivial Tate-Shafarevich group.
> E := EllipticCurve("571a1"); E;
Elliptic Curve defined by y^2 + y = x^3 - x^2 - 929*x - 10595 over Rational Field
> #TorsionSubgroup(E);
1
> time covers := TwoDescent(E); covers;
Time: 0.270
[
    Hyperelliptic Curve defined by y^2 = -11*x^4 - 68*x^3 - 52*x^2 + 164*x - 64
    over Rational Field,
    Hyperelliptic Curve defined by y^2 = -19*x^4 + 112*x^3 - 142*x^2 - 68*x - 7
    over Rational Field,
    Hyperelliptic Curve defined by y^2 = -4*x^4 + 60*x^3 - 232*x^2 + 52*x - 3
    over Rational Field
]
> time CasselsTatePairing(covers[1], covers[2]);
1
Time: 0.130
This proves that these two coverings both represent nontrivial elements in the Tate-Shafarevich group; in fact our computations show that the 2-primary part of Sha()(E) is precisely Z/2 x Z/2. We could have reached the same conclusion using 4-descent:
> time FourDescent(covers[1]);
[]
Time: 0.460

Four-Descent

This section describes an implementation of the algorithm for higher descent given in a 1996 paper [MSS96] by Merriman, Siksek and Smart, for elliptic curves over Q. Four-descent is performed as a higher descent on a given two-cover, that is a hyperelliptic curve defined by a polynomial of degree four, as returned by TwoDescent. (The trivial case where the quartic has a rational root is excluded: such a quartic can be transformed to an elliptic curve by a linear transformation, and four-descent then becomes standard two-descent.)

Note: for curves over number fields, the same algorithm is partly implemented by the function TwoCoverDescent. However in that case we lack techniques for reducing the coverings, so this can not be used to find points but only to bound the rank.

A four-covering F is a pair of symmetric 4 x 4 matrices, defining an intersection of two quadrics in P3. Associated to F is an elliptic curve E; there is a rational map from F to E of degree 16. The four-descent process takes a two-covering curve C (something of the shape y2 = f(x) with f quartic, and possessing points over Qp for all p), and returns a set of four-coverings that arise from C.

In particular, if C represents an element of order two in the Tate--Shafarevich group of E, then the four-descent process will return the empty set. If C represents an element of the Mordell--Weil group, at least one of the four-coverings arising from C will have a rational point --- all of them will do so if the Tate--Shafarevich group of E is trivial --- and once found this point can be lifted to a point on E.

FourDescent(C : parameters) : CrvHyp -> [Crv]
FourDescent(f : parameters) : RngUPolElt -> [Crv]
FourDescent(S : parameters) : SeqEnum -> [Crv]
FourDescent(C : parameters) : ModelG1 -> [Crv]
    RemoveTorsion: BoolElt              Default: false
    IgnoreRealSolubility: BoolElt       Default: false
    RemoveTorsion: BoolElt              Default: false
    RemoveGensEC: { PtEll }             Default: { }
    RemoveGensHC: { PtHyp }             Default: { }
    SetVerbose("FourDescent", n):       Maximum: 3
    SetVerbose("LocalQuartic", n):      Maximum: 2
    SetVerbose("MinimiseFD", n):        Maximum: 2
    SetVerbose("QISearch", n):          Maximum: 1
    SetVerbose("ReduceFD", n):          Maximum: 2
    SetVerbose("QuotientFD", n):        Maximum: 2
Performs a four-descent on the curve y2 = f(x), where f is a quartic. Returns a set of four-coverings of size 2s - 1, where s is the Selmer 2-rank of the curve. If the verbose level of the main function is set to 3, then the auxiliary verbose levels are all set to at least 1. If RemoveTorsion is true, the generators of the torsion subgroup are factored out from the set. The optional argument RemoveGensHC performs a quotient by the images of given points that are on the input quartic to FourDescent. The optional argument RemoveGensEC forms a quotient by the images of given points; these can be on any elliptic curve that is isomorphic to the AssociatedEllipticCurve of the quartic (though all given points must be on the same elliptic curve). These options can be used together. It can be non-trivial to remove torsion and generators, as points on the elliptic curve need not pull-back to the given y2 = f(x) curve. The algorithm used exploits various primes of good reduction, and attempts to determine whether the images under the μp are the same. This in turn can be tricky, due to the Cassels kernel, and even more so when there are extra automorphisms (that is, when j=0, 1728 over (F)p).

Example CrvEllQNF_simplefourdesc (H130E35)

This example shows that a well-known curve has rank 0 and that the 2-torsion subgroup of its Tate--Shafarevich group is isomorphic to (Z/2Z)2.
> D := CremonaDatabase();
> E := EllipticCurve(D, 571, 1, 1);
> time td := TwoDescent(E);
Time: 2.500
> #td;
3
There are three 2-covers, so the 2-Selmer group has order four (since TwoDescent elides the trivial element).
> time [ FourDescent(t) : t in td ];
[
    [],
    [],
    []
]
Time: 3.290
So none of the two-covers have four-covers lying over them; hence they all represent elements of Sha, and the Mordell--Weil rank must be zero.
AssociatedEllipticCurve(qi) : Crv -> CrvEll, Map
AssociatedHyperellipticCurve(qi) : Crv -> CrvHyp, Map
    E: CrvEll                           Default: 
Given an intersection of quadrics qi, return the associated elliptic and hyperelliptic curves, respectively, together with maps to them.

If an elliptic curve is given as E, this must be isomorphic to the Jacobian of the curve qi, and then the map returned will be a map to the given E.

QuadricIntersection(F) : [AlgMatElt] -> Crv
QuadricIntersection(P, F) : Prj, [AlgMatElt] -> Crv
Given a pair of symmetric 4 x 4 matrices F, this function returns the associated quadric intersection in P = P3.
QuadricIntersection(E) : CrvEll -> Crv, MapIsoSch
QuadricIntersection(C) : CrvHyp -> Crv, MapIsoSch
Given an elliptic curve E or a hyperelliptic curve C, write it as an intersection of quadrics. The inverse map for the hyperelliptic curve has problems due to difficulties with weighted projective space.
IsQuadricIntersection(C) : Crv -> BoolElt, [AlgMatElt]
Given a curve C, determines if C is in P3 and has two defining equations, both of which involve only quadrics. In the case where C is a quadric intersection, the associated pair of matrices are also returned.
PointsQI(C, B : parameters) : Crv, RngIntElt -> [Pt]
    OnlyOne: BoolElt                    Default: false
    ExactBound: BoolElt                 Default: false
    SetVerbose("QISearch", n):          Maximum: 1
Given a quadric intersection C, this function searches, by a reasonably efficient method due to Elkies [Elk00], for a point on C of na{"{char"10}}ve height up to B; the asymptotic running time is O(B2/3).

If OnlyOne is set to true, the search stops as soon as it finds one point; however, the algorithm is p-adic and there is no guarantee that points with small coordinates in Z will be found first. If ExactBound is set to true, then points that are found with height larger than B will be ignored.

TwoCoverPullback(H, pt) : CrvHyp[FldRat], PtEll[FldRat] -> [PtHyp]
TwoCoverPullback(f, pt) : RngUPolElt[FldRat], PtEll[FldRat] -> [PtHyp]
Given a two-covering of a rational elliptic curve (as either a hyperelliptic curve or a quartic) and a point on the elliptic curve, compute the pre-images on the two-covering. This is faster than using the generic machinery.
FourCoverPullback(C, pt) : Crv[FldRat], PtEll[FldRat] -> [Pt]
FourCoverPullback(C, pt) : Crv[FldRat], PtHyp[FldRat] -> [Pt]
Given a four-covering of a rational elliptic curve as an intersection of quadrics and a point either on the associated elliptic curve or the associated hyperelliptic curve, this function computes the pre-images on the covering. This is faster than using the generic machinery.

Example CrvEllQNF_fourdescent (H130E36)

This example exhibits a four-descent computation, and manipulation of points once they have been found, by mapping from the curve to its two- and four-covers.

> P<x> := PolynomialRing(Integers());
> E := EllipticCurve([0, -1, 0, 203, -93]);
> f := P!Reverse([-7, 12, 20, -120, 172]);
> f;
-7*x^4 + 12*x^3 + 20*x^2 - 120*x + 172
The quartic given was obtained with mwrank; the two-descent routine could have been used instead, although it provides a different (but equivalent) quartic.
> time S := FourDescent(f);
Time: 4.280
> #S;
1

The single cover indicates that the curve E has Selmer rank 1, though this was already known from the calculation that constructed f.

> _,m := AssociatedEllipticCurve(S[1] : E:=E );
> pts := PointsQI(S[1], 10^4);
> pts;
[ (-5/3 : 13/3 : -34/3 : 1) ]
We now map this point back to E.
> m(pts[1]);
(2346223045599488598/1033322524668523441 :
20326609223460937753264735467/1050397899358266605692672489 : 1)
> Height($1);
44.19679596739622477261983370

Eight-Descent

One may perform 8-descent (ie a further 2-descent) on curves of the kind produced by a 4-descent on an elliptic curve E over Q. These are nonsingular intersections of two quadrics in P3 that are locally soluble. The 8-descent determines whether such a curve has any 2-coverings (in the sense of 2-descent) that are locally soluble everywhere.

The routine can therefore be used to prove, in many cases, that a given 4-covering of E is in fact an element of order 4 in the Tate--Shafarevich group of E. It can also be used to find 8-coverings of E, and to verify these are elements of the 8-Selmer group.

The 8-coverings are given as genus one normal curves of degree 8 in P8. They are minimised and reduced, so are useful in searching for points on E.

The algorithm and implementation (from Magma 2.17) are due to Tom Fisher; this implementation partly incorporates and partly replaces an earlier one by Sebastian Stamminger.

EightDescent(C : parameters) : Crv -> [ Crv ], [ MapSch ]
    BadPrimesHypothesis: BoolElt        Default: false
    DontTestLocalSolvabilityAt: { RngIntElt } Default: { }
    StopWhenFoundPoint: BoolElt         Default: false
    SetVerbose("EightDescent", n):      Maximum: 4
For a curve C obtained from FourDescent on some elliptic curve E over Q, this performs a further 2-descent on C. It returns a sequence of curves D, together with a sequence containing maps D -> C from each of these curves to C. The curves returned are precisely the 8-descendants of E that lie above C and are locally soluble at all places.

When the optional argument StopWhenFoundPoint is set to true, the computation will stop if it happens to find a rational point on C, and immediately return the point instead of continuing to computing the 8-coverings.

In some cases local solubility testing (at large primes which may arise due to choices made in the algorithm) can be time-consuming. Testing at specified primes may be skipped by setting the optional argument DontTestLocalSolvabilityAt to the desired set of prime integers, or by setting BadPrimesHypothesis to be true. In that case, certain primes are omitted from the set of bad primes (namely those primes at which the intersection of C with an auxiliary third quadric has bad reduction, and which are not bad primes for any other reason).

The algorithm involves class group and unit computations in a number field of degree 4 (and sometimes also 8). It is recommended to set the bounds to be used in all such computations before calling EightDescent, via SetClassGroupBounds.

Verbose output: For a readable summary of the computation, set the verbose level to 1 by entering SetVerbose("EightDescent",1). For full information about all the time-consuming steps in the process, set the verbose level to 3. For additional information about solving the conic, set the verbose level for "Conic" to 1.

Three-Descent and Five-Descent

Three descent is implemented for elliptic curves over the rationals. This involves computing the 3-Selmer group of the curve, and then representing the elements as plane cubics. The functions related to 5-descent take a very similar form to those for 3-descent, although they are not listed in the handbook.

There is also a separate implementation of "descent by three isogenies", for elliptic curves over the rationals which admit a Q-rational isogeny of degree 3.

The main application of full three-descent is in studying elements of order 3 in Tate--Shafarevich groups. For the problem of determining the Mordell--Weil group, three-descent has no advantage over four descent except in special cases: the cost is greater (three-descent requires computing the class group and S-units in a degree 8 number field, compared with degree 4 for four-descent), and the reward is smaller (a point on a 3-coverings has height 1/6 as large as its image on the elliptic curve, while with four-descent the ratio is 1/8). However three-descent can be useful when there are elements of order 4 in the Tate--Shafarevich group, which four-descent cannot deal with.

On the other hand, for a curve with a Q-rational isogeny of degree 3, descent by 3-isogenies is likely to be the most efficient way to bound the Mordell--Weil rank, because it only requires class group and S-unit computations in quadratic fields.

There are two steps to the 3-descent process: firstly, computing the 3-Selmer group as a subgroup of H1(Q, E[3]) (explicitly, as a subgroup of A x /(A x )3 for a suitable algebra A), and secondly, expressing the elements as genus one curves with covering maps to E. The elements of the 3-Selmer group are given as plane cubics, and the process of obtaining these cubics is far from trivial. (Note that in general, an element of H1(Q, E[3]) can only be given as a curve of degree 9 rather than degree 3). The main commands are ThreeSelmerGroup(E), which performs the first step, and ThreeDescent(E), which performs both steps together, while ThreeDescentCubic performs the second step for a given element of 3-Selmer group.

The algorithm for the first step is presented in [SS04], while the theory and algorithms for the second step are developed in the forthcoming series of papers [CFO+08], [CFO+09], [CFO+]. The bulk of the code was written by Michael Stoll and Tom Fisher (however, responsibility for the final version rests with Steve Donnelly).

The following verbose flags provide information about various stages of the three descent process: Selmer, ThreeDescent, CSAMaximalOrder, Minimise and Reduce. For instance, to see what ThreeSelmerGroup is doing while it is running, first enter SetVerbose("Selmer",2);. The verbose levels range from 0 to 3.

ThreeDescent(E : parameters) : CrvEll -> [ Crv ], List
    Method: MonStgElt                   Default: "HessePencil"
    SetVerbose("Selmer", n):            Maximum: 3
    SetVerbose("ThreeDescent", n):      Maximum: 3
Given an elliptic curve over the rationals, this function returns the elements of the 3-Selmer group as projective plane cubic curves C, together with covering maps C -> E. Two objects are returned: a sequence containing one curve for each inverse pair of nontrivial elements in the 3-Selmer group, and a corresponding list of maps from these curves to E. (Note that a pair of inverse elements in the 3-Selmer group both correspond to the same cubic curve C, and their covering maps C -> E differ by composition with the negation map E -> E.)

The function is equivalent to calling ThreeSelmerGroup(E), and then calling ThreeDescentCubic on each of the Selmer elements.

For more information see the description of ThreeDescentCubic below.

Example CrvEllQNF_selmer-famous-example (H130E37)

Here is Selmer's famous example 3x3 + 4y3 + 5z3 = 0, which is an element of order 3 in the Tate--Shafarevich group of its Jacobian, the elliptic curve x3 + y3 + 60z3 = 0.

> Pr2<x,y,z> := ProjectiveSpace(Rationals(),2);
> J := x^3 + y^3 + 60*z^3;
> E := MinimalModel(EllipticCurve(Curve(Pr2,J)));
> cubics, mapstoE := ThreeDescent(E);
> cubics;
[
    Curve over Rational Field defined by 2*x^3 + 30*y^3 - z^3,
    Curve over Rational Field defined by x^3 + 5*y^3 - 12*z^3,
    Curve over Rational Field defined by 6*x^3 + 5*y^3 - 2*z^3,
    Curve over Rational Field defined by 3*x^3 + 5*y^3 - 4*z^3
]
The 3-Selmer group of E is isomorphic to Z/(3Z) direct-sum Z/(3Z), and one element for each (nontrivial) inverse pair is returned. (Note: 3x3 + 4y3 + 5z3 will not necessarily appear; due to random choices in the program, an equivalent model may appear instead.)

The covering maps from these curves to E have degree 9, and are given by forms of degree 9 in x, y, z. For example, the map from the first curve 2x3 - 3y3 + 10z3 to E is given by:

> DefiningEquations(mapstoE[1]);
[
    -1377495072000*x*y^7*z + 4591650240000*x*y^4*z^4 - 15305500800000*x*y*z^7,
    24794911296000*y^9 - 123974556480000*y^6*z^3 - 413248521600000*y^3*z^6 +
    918330048000000*z^9,
    -4251528000*x^3*y^3*z^3
]
Since E has trivial Mordell--Weil group, we should not find any rational points on these curves! (In fact they are all nontrivial in the Tate--Shafarevich group.) Here we search for rational points on the first cubic, up to height roughly 104:
> time PointSearch( cubics[1], 10^4);
[]
Time: 0.490

An extended example, concerning "visible" 3-torsion in a Tate--Shafarevich group, can be found at the end of Chapter MODELS OF GENUS ONE CURVES.

ThreeSelmerGroup(E : parameters) : CrvEll -> GrpAb, Map
    ThreeTorsPts: Tup                   Default: 
    SetVerbose("Selmer", n):            Maximum: 3
Given an elliptic curve E over the rationals, this function returns the 3-Selmer group as an abelian group, together with a map to the natural affine algebra.

When the optional parameter ThreeTorsPts is given, this determines the number fields used in the computation, and also the affine algebra.

Typically much of the computation time is spent on class group and unit group computations. In many instances it will not be feasible to do these calculations rigorously -- in this situation the user must request a heuristic class group computation. The recommended way to do this is (in advance): SetClassGroupBounds("GRH"). See Section Setting the Class Group Bounds for details. An alternative way is to precompute class groups (and possibly units) for the fields of the ThreeTorsPts.

The algorithm is described in [SS04].

ThreeDescentCubic(E, α : parameters) : CrvEll, Tup -> Crv, MapSch
    ThreeTorsPts: Tup                   Default: 
    Method: MonStgElt                   Default: "HessePencil"
    SetVerbose("ThreeDescent", n):      Maximum: 3
Given an elliptic curve E over the rationals, and an element α in the 3-Selmer group of E, the function returns a projective plane cubic curve C, together with a map of schemes C -> E. The cubic is a principal homogeneous space for E, and the covering map C -> E represents the same Selmer element as either α or 1/α (and α can be recovered, up to inverse, by calling ThreeSelmerElement of the cubic).

The 3-Selmer element α is given as an element of the algebra associated to the 3-Selmer group (the algebra is the codomain of the map returned by ThreeSelmerGroup, as in S3, S3toA := ThreeSelmerGroup(E)). In this situation, where α is S3toA(s) for some s, there is no need to specify the optional parameter ThreeTorsPts.

The algorithm comes from the series of papers cited in the introduction. There are three alternative ways to perform the final step of computing a ternary cubic. All three ways are implemented, and the optional parameter Method may be "HessePencil" (default), "FlexAlgebra" or "SegreEmbedding". However, the choice of Method is not expected to make a big difference to the running time.

The optional parameter ThreeTorsPts is a tuple containing one representative from each Galois orbit of E[3] - O. Its purpose is to fix an embedding of the 3-Selmer group in A x /(A x )3 (otherwise there is ambiguity when the fields involved have nontrivial automorphisms, or occur more than once). When ThreeTorsPts is not specified, ThreeTorsionPoints(E) is called (its value is stored internally and used throughout the Magma session).

ThreeIsogenyDescent(E : parameters) : CrvEll -> [ Crv ], List, [ Crv ], List, MapSch
    Isog: MapSch                        Default: 
    SetVerbose("Selmer", n):            Maximum: 3
    SetVerbose("ThreeDescent", n):      Maximum: 3
Given an elliptic curve E over Q that admits a Q-rational isogeny E -> E1 of degree 3, the function performs "descent by 3-isogenies" on E. This involves computing the Selmer groups attached to the isogeny and its dual, and representing the elements of both Selmer groups as plane cubics, with covering maps of degree 3 to E1 or E respectively. One cubic is given for each nontrivial pair of inverse Selmer elements, and one covering map is given for each cubic (the other covering map, which can be obtained by composing with the negation map on the elliptic curve, would correspond to the inverse Selmer element.)

There are five returned values, in the following order: a list of curves for Sel(E -> E1), a corresponding list of covering maps to E1, a list of curves for the dual isogeny Selmer group Sel(E1 -> E), a corresponding list of covering maps to E, and finally the isogeny E -> E1.

This function works simply by calling ThreeIsogenySelmerGroups(E), and then calling ThreeIsogenyDescentCubic for each Selmer element.

The isogeny E -> E1 may be passed in as Isog. If Isog is not specified, and E admits more than one such isogeny, then this is chosen at random.

ThreeIsogenySelmerGroups(E : parameters) : CrvEll -> GrpAb, Map, GrpAb, Map, MapSch
    Isog: MapSch                        Default: 
    SetVerbose("Selmer", n):            Maximum: 3
Given an elliptic curve E over the rationals that admits a Q-rational isogeny E -> E1 of degree 3, the function computes the Selmer groups associated to the isogeny, and to its dual isogeny E1 -> E. The Selmer groups are returned as abstract groups, together with maps to the relevant algebra. There are five returned values, in the following order: the group, and the map, for E -> E1, the group, and the map, for E1 -> E, and finally the isogeny E -> E1.

A bound for the rank of E(Q) can be deduced, by taking the sum of the ranks of the Selmer groups for the two isogenies, and subtracting 1 if the kernel of one of the isogenies consists of rational points.

The isogeny E -> E1 may be passed in as Isog. If Isog is not specified, and E admits more than one such isogeny, then this is chosen at random.

The algebra in which the Selmer group of a particular isogeny is exhibited is the etale algebra corresponding to the nontrivial points in the kernel of the dual isogeny; it is either a quadratic field, or a Cartesian product of two copies of Q.

ThreeIsogenyDescentCubic(φ, α) : MapSch, Any -> Crv, MapSch
    SetVerbose("ThreeDescent", n):      Maximum: 3
Given an isogeny φ of degree 3 between elliptic curves over Q, and any element α of H1(Q, E[φ]), this function returns a plane cubic curve C representing α, together with a covering map C -> E of degree 3.

The element α is given as an element in the algebra A associated to the Selmer group of φ; the algebra can be obtained from ThreeIsogenySelmerGroups. H1(Q, E[φ]) is represented as the subgroup of A x /(A x )3 consisting of elements whose norm is a cube.

ThreeDescentByIsogeny(E) : CrvEll -> [ Crv ], [ Map ]
    SetVerbose("Selmer", n):            Maximum: 3
This performs a full 3-descent, returning models for the nontrivial inverse pairs in the 3-Selmer group and maps to E making them into 3-coverings. The only difference with ThreeDescent is that the computation is by first and second 3-isogeny descents. This restricts the number fields used to cubic extensions, rather than the sextic fields which may be needed for the generic ThreeDescent routine. The advantage is noticeable for larger examples.

Example CrvEllQNF_ThreeDescentByIsogeny (H130E38)

> E := EllipticCurve([0,0,0,0,131241]);
> G,m := TorsionSubgroup(E);
> #G;
1
> Rank(E);
2
> S1,_,S2 := ThreeIsogenyDescent(E);
> #S1,#S2;
0 4

This shows that there is nontrivial 3-torsion in Sha on some isogenous curve. Without computing the full 3-Selmer group of E it is impossible to tell if there is any nontrivial 3-torsion in Sha(E/Q).

> time Sel3 := ThreeDescentByIsogeny(E);
Time: 5.280

This shows that Sha(E/Q)[3] = 0 (since we know the rank is 2). Alternatively one could get the same by calling ThreeDescent. This requires computing the class group and unit group information in the sextic field shown below.

> E3reps := ThreeTorsionPoints(E);
> Parent(E3reps[2,1]);
Number Field with defining polynomial x^6 + 14174028 over the Rational Field
> SetClassGroupBounds("GRH");
> time Sel3 := ThreeDescent(E);
Time: 14.700
Jacobian(C) : RngMPolElt -> CrvEll
Given the equation of a nonsingular projective plane cubic curve C over the rationals, this function returns the Jacobian of C as an elliptic curve.
ThreeSelmerElement(E, C) : CrvEll, RngMPolElt -> Tup
ThreeSelmerElement(E, C) : CrvEll, Crv -> Tup
ThreeSelmerElement(C) : RngMPolElt -> Tup
ThreeSelmerElement(C) : Crv -> Tup
Given an elliptic curve E over the rationals, and a plane cubic C with the same invariants as E (for instance, with E equal to Jacobian(C)) the function returns an element α in the algebra A associated to the 3-Selmer group of E. This α represents the same element of H1(Q, E[3]) that is represented by a covering C -> E that takes the flex points of C to O. Note that α is only determined up to inverse in H1(Q, E[3]).

In particular, if we have computed S3, S3toA := ThreeSelmerGroup(E), and if C is an everywhere locally soluble covering corresponding to the element s in S3, then α equals either S3toA(s) or S3toA(-s) in A x /(A x )3.

AddCubics(cubic1, cubic2 : parameters) : RngMPolElt, RngMPolElt -> RngMPolElt
    E: CrvEll                           Default: 
    ReturnBoth: BoolElt                 Default: false
Given equations of two plane cubics over the rationals with the same invariants (in other words, they are homogeneous spaces for the same elliptic curve E, which is their Jacobian, over the rationals), the function computes the sum of the corresponding elements of H1(Q, E[3]). The sum is returned as another plane cubic, if possible (and otherwise an error results).

An element of H1(Q, E[3]) may be expressed as a plane cubic when it has index 3, equivalently when the so-called "obstruction" is trivial. This is always the case for elements that are everywhere locally soluble. In particular, the function will always succeed when the two given cubics are everywhere locally soluble (in other words, when they belong to the 3-Selmer group). The computation is done by converting the cubics to elements of H1(Q, E[3]) as given by ThreeSelmerElement, adding the cocycles, and then converting the result to a cubic.

Note that a cubic only determines an element of H1(Q, E[3]) up to taking inverse, so the sum is not well defined; if the function is called with ReturnBoth := true, it returns both of the possible cubics.

ThreeTorsionType(E) : CrvEll -> MonStgElt
For an elliptic curve E over the rationals, this function classifies the Galois action on E[3]. The possibilities are "Generic", "2Sylow", "Dihedral", "Generic3Isogeny", "Z/3Z-nonsplit", "mu3-nonsplit", "Diagonal" and "mu3+Z/3Z".
ThreeTorsionPoints(E : parameters) : CrvEll -> Tup
    OptimisedRep: BoolElt               Default: true
For an elliptic curve E over the rationals, this function returns a tuple containing one representative point from each set of Galois conjugates in E[3] - O.

Each point belongs to a point set E(L), where L is the field generated by the coordinates of that point.

If OptimisedRep is set to false, then optimised representations of the fields will not be computed, in general.

ThreeTorsionMatrices(E, C) : CrvEll, RngMPolElt -> Tup
Given an elliptic curve E over the rationals, and a plane cubic with the same invariants as E (in other words, a principal homogeneous space for E of index 3), the function returns a tuple of matrices. The matrices Mi correspond to the points Ti in ThreeTorsionPoints(E), and have the corresponding base fields. Each matrix describes the action-by-translation on C of the corresponding point: the action of Pi on C is the restriction to C of the automorphism of the ambient projective space P2 given by the image of Mi in PGL3.

Note that only the images in PGL3 of the matrices are well-determined.

Six and Twelve Descent

If a 3-descent has been performed, the results can be used in conjunction with a 2-descent or a 4-descent to obtain coverings of degree 6 or 12 respectively. These "combined" coverings can be useful for finding Mordell-Weil generators of large height on the underlying elliptic curve.

The coverings are given as genus one normal curves (of degree 6 in P5, and of degree 12 in P11, respectively).

The algorithms are described in [Fis08].

SixDescent(C2, C3) : CrvHyp, Crv -> Crv, MapSch
SixDescent(model2, model3) : ModelG1, ModelG1 -> Crv, MapSch
Given a 2-covering and a 3-covering of an elliptic curve E (either as curves or as genus one models), this returns the 6-covering that represents their sum in the 6-Selmer group. The covering map C6 -> C3 is also returned.
TwelveDescent(C3, C4) : Crv, Crv -> SeqEnum, MapSch
TwelveDescent(model3, model4) : ModelG1, ModelG1 -> SeqEnum, MapSch
Given a 3-covering and a 4-covering of an elliptic curve E (either as curves or as genus one models), this returns the two 12-coverings that represent their sum and difference in the 12-Selmer group. The covering maps to C12 -> C4 are also returned.

Nine-Descent

A nine-descent is performed on an everywhere locally solvable plane cubic curve. The cubic represents a class in the 3-Selmer group of its Jacobian (up to sign). A nine-descent computes the fibre above this class under the map from the 9-Selmer group to the 3-Selmer group induced by multiplication by 3. This fibre is the set of everywhere locally solvable 3-coverings of the cubic. These coverings are given as intersections of 27 quadrics in P8. As with four-descents the terminology "nine-descent" is slightly incorrect, as Magma performs a second 3-descent on a specific 3-covering and does not try to combine such information from all 3-coverings to form the 9-Selmer group.

The algorithm was developed in the PhD thesis of Brendan Creutz [Cre10]. Typically most of the computation time is spent on class group and unit group computations in the constituent fields of the degree 9 etale algebra associated to the flex points on the cubic. The primary use is to obtain information on the 3-primary part of the Shafarevich--Tate group. It is only in very rare circumstances that a nine descent is required (in addition to the other descent machinery) to determine the Mordell--Weil rank (e.g. if there were elements of order 24 in Sha).

NineDescent(C : parameters) : Crv -> SeqEnum, List
    ExtraReduction: RngIntElt           Default: 10
    SetVerbose("NineDescent", n):       Maximum: 3
Given a plane cubic curve C over Q this returns a sequence of curves in P8 defined by 27 quadrics and a list of degree 9 maps making these curves into 3-coverings of C. This is the 3-Selmer set of C (i.e. the set of everywhere locally solvable 3-coverings of C). If there are no coverings, then C(Q) = emptyset and the class of C in the Shafarevich-Tate group of its Jacobian is not divisible by 3. Otherwise the coverings returned are lifts of C to the 9-Selmer group.

The coverings returned are minimised and reduced in an ad hoc fashion. If ExtraReduction is set to a larger value, more time will be spent reducing possibly resulting in smaller models. The current implementation requires that Galois act transitively on the flex points. If this is not the case, then one can use pIsogenyDescent instead.

NineSelmerSet(C) : Crv -> RngIntElt
    SetVerbose("NineDescent", n):       Maximum: 3
Computes the 3-rank of the 3-Selmer set of plane cubic curve C defined over Q. The value -1 is returned when the 3-Selmer set is empty. In this case C(Q) = emptyset and the class of C in the Shafarevich-Tate group of its Jacobian is not divisible by 3. If the 3-Selmer set is nonempty, its 3-rank is the same as that of the 3-Selmer group of the Jacobian. In this case the class of C in the Shafarevich-Tate group of the Jacobian is divisible by 3.

Higher 2-power Isogeny Descents

Given an elliptic curve E/Q with a rational 2-torsion point T ∈E(Q)[2], there is an degree-2 isogeny φ : E to E' with kernel {0, T}. Computing the Selmer groups attached to φ and the dual isogeny widehat(φ) : E' to E gives an upper bound for the rank of E(Q). In many cases this upper bound may be improved by performing higher descents. These higher descents can also help find generators of E(Q) of large height. See for example the paper of Bremner and Cassels [BC84] on the elliptic curves Y2 = X(X2 + p) where p is a prime with p ≡ 5 mod (8).

The function below applies these methods, together with use of the Cassels-Tate pairing and other refinements. The algorithm is fully described in [Fis]. No class group and unit calculations are required; instead the global parts of the calculation involve solving quadratic forms of ranks 3 and 4 over Q.

The same information is obtained by calling this for (E, T) and for the isogenous (E', T'). In fact, the output and the verbose printing will be the same, but in the opposite order, for the two computations.

TwoPowerIsogenyDescentRankBound(E, T : parameters) : CrvEll[FldRat], PtEll[FldRat] ) -> RngIntElt, SeqEnum, SeqEnum
TwoPowerIsogenyDescentRankBound(E : parameters) : CrvEll[FldRat], PtEll[FldRat] ) -> RngIntElt, SeqEnum, SeqEnum
    Cutoff: RngIntElt                   Default: 2
    MaxSteps: RngIntElt                 Default: 5
    ReturnFourCoverings: BoolElt        Default: false
    SetVerbose("cbrank", n):            Maximum: 3
This calculates an upper bound on the Mordell-Weil rank of the elliptic curve E/Q. The second argument T must be a Q-rational 2-torsion point on E, specifying which 2-isogeny is to be used. When there is only one 2-torsion point, the second argument can be omitted.

Let φ : E to E' be the isogeny with kernel generated by T, and widehat(φ) : E' to E the dual isogeny, with kernel generated by T'. Let φm and widehat(φ)m be the isogenies of degree 2m obtained by composing φ and widehat(φ) a total of m times. Then the rank bound after m steps is that obtained by computing the images of the Selmer groups attached to φm and widehat(φ)m in the Selmer groups attached to φ and widehat(φ). The dimensions of these images are also returned. At each step, the rank bound improves by an even integer (or stays the same).

A summary table is printed after each step, if the verbose flag cbrank is set to 1, which displays the rank bounds obtained so far.

If the current rank bound is strictly less than the Cutoff, then the program returns immediately without performing any further descents. By default the Cutoff is 2, so the program ends if a bound of 0 or 1 is obtained (since no stronger bound can then be obtained).

The maximum number of descent steps carried out can be controlled by specifying MaxSteps (5 by default). For example, if MaxSteps is 1, then the program carries out a descent by 2-isogeny. If MaxSteps is 2, then the upper bound on the rank is at least as good as that obtained by carrying out a 2-descent on either of the curves E or E'. In cases where E or E' has full rational 2-torsion, a 6th step, corresponding to 8-descent, is also possible. Note that this is not done by default, but only when MaxSteps is set to 6.

If ReturnFourCoverings is true, then the function also returns a list of quadric intersections (i.e. genus one models of degree 4). These may be used in the same way as those returned by FourDescent, to search for rational points of large height on E. A total of 2d quadric intersections are returned, where d is the dimension of the image of the 4-Selmer group of E in the 2-Selmer group of E. To obtain from these a complete list of quadric intersections (i.e. one for each element of the 4-Selmer group) the functions TwoDescent and AddCovers should be used. If ReturnFourCoverings is true, the descent steps done are the minimum necessary to get this set of 4-coverings (that is, 4 steps for E and 3 steps for E'), and the values of Cutoff and MaxSteps are ignored.

p-Isogeny Descent

Given an isogeny φ: E1 -> E2 of elliptic curves, one may define the φ-Selmer group of E2 to be the set of everywhere locally solvable φ-coverings of E2. Given a genus one curve C with Jacobian E2, one may define its φ-Selmer set to be the set of everywhere locally solvable φ-coverings of C. A φ-isogeny descent computes the φ-Selmer group (or φ-Selmer set).

We denote the dual isogeny by φv. In the case of elliptic curves, performing φ- and φv-descents can be used to bound the Mordell-Weil rank and get information on Sha. For general genus one curves descent by isogeny can be used to rule out divisibility in Sha and consequently prove that there are no rational points.

In practice it is often easier to compute a `fake' Selmer set. This is a set parameterising everywhere locally solvable unions of φ-coverings, with the property that every φ-covering lies in exactly one such union. Any locally soluble φ-covering gives rise to a locally soluble union, hence there is a map from the Selmer set to the fake Selmer set. In general this map may be neither surjective nor injective. However, if the fake Selmer set is empty, then this is also true of the Selmer set.

Current functionality allows one to compute φ-Selmer groups for an isogeny φ of prime degree in a number of situations. For isogenies of degree 2 or 3, they may be computed using TwoIsogenyDescent and ThreeIsogenyDescent. When φ is the quotient by a subgroup generated by a Q-rational point of order p ∈{5, 7} the dimensions of the φ- and φv-Selmer groups can be computed using an algorithm of Fisher [Fis00] and [Fis01]. This method also produces models for the everywhere locally solvable φv-coverings of E.

Given a genus one normal curve C of prime degree p produced by a φ-isogeny descent on an elliptic curve, the φv-Selmer set of C can be computed using an algorithm of Creutz described in [Cre10] and [CM12]. Computing the φv-Selmer sets of all elements in the φ-Selmer group yields information that is equivalent to that given by the φvφ-Selmer group.

Current functionality allows one to perform these second isogeny descents when φ has degree p = 3 or when p ∈{ 5, 7} and the flex points of C lie on the coordinate hyperplanes in Pp - 1. If the kernel of the isogeny is generated by a Q-rational point of order p, then such a model always exists. Moreover, the models returned by the algorithm of Fisher have this property. For p = 7, computation of the coverings is not practical and only a `fake'-Selmer set can be computed (see [CM12]).

pIsogenyDescent(E,P) : CrvEll, PtEll -> RngIntElt, RngIntElt, SeqEnum, CrvEll
pIsogenyDescent(E,p) : CrvEll, RngIntElt -> RngIntElt, RngIntElt, SeqEnum, CrvEll
pIsogenyDescent(lambda,p) : FldRatElt, RngIntElt -> RngIntElt, RngIntElt, SeqEnum, CrvEll, CrvEll
This performs a φ-descent on an elliptic curve over Q using the algorithm of Fisher. The descent requires an isogeny φ whose kernel is generated by a Q-rational point of order p ∈{5, 7}.

The input can be specified in one of three ways: (1) by giving an elliptic curve and a point of order p on the curve; (2) by giving an elliptic curve containing a point of order p and specifying p; or (3) by specifying p and a Q-rational point on the modular curve X1(p ). In the final case the choice for the coordinate λ on X1(p )(Q) is as described in [Fis00].

The return values are the p-ranks of the φ- and φv-Selmer groups, a sequence of genus one normal curves of degree p representing the inverse pairs of nontrivial elements of the φv-Selmer group modulo the image of the subgroup generated by the p-torsion point, and the isogenous elliptic curve. If the input is a coordinate on X1(p ), the curve E is also returned.

pIsogenyDescent(C,phi) : Crv, MapSch -> SeqEnum, List
pIsogenyDescent(C,E1,E2) : Crv, CrvEll, CrvEll -> SeqEnum, List
pIsogenyDescent(C,P) : Crv, PtEll -> SeqEnum, List
    SetVerbose("Selmer", n):            Maximum: 3
This performs an isogeny descent on a genus one normal curve C over Q of degree p ∈{3, 5}, as described in [CM12]. The curve C must be a projective plane cubic (in case p = 3) or an intersection of 5 quadrics in P4, with the additional requirement that the flex points of C lie on the coordinate hyperplanes. For the descent one must specify: (1) the isogeny φ; (2) the domain E1 and the codomain E2 of the isogeny; or (3) a Q-rational point P of order p on an elliptic curve E which generates the kernel of the isogeny.

The return values are a sequence consisting of genus one normal curves of degree p representing the elements of the φ-Selmer set and a list of maps making these into φ-coverings of C.

FakeIsogenySelmerSet(C,phi) : Crv, MapSch -> RngIntElt
FakeIsogenySelmerSet(C,E1,E2) : Crv, CrvEll, CrvEll -> RngIntElt
FakeIsogenySelmerSet(C,P) : Crv, PtEll -> RngIntElt
    SetVerbose("Selmer", n):            Maximum: 3
This determines the Fp-dimension of the `fake'-φ-Selmer set of the genus one normal curve C of degree p ∈{3, 5, 7} (see [CM12] for the definition). By convention the empty set has dimension -1. The input is exactly as for pIsogenyDescent, however coverings are not produced. This makes the computations feasible as well for p = 7.

Example CrvEllQNF_pIsogenyDescent (H130E39)

We use a 5-isogeny descent to show that the elliptic curve with Cremona reference 570l3 has rank 0 and that there are nontrivial elements of order 5 in its Shafarevich-Tate group.
> lambda := 48/5;
> r_phiSel,r_phidualSel,Sha,E1,E2 := pIsogenyDescent(lambda,5);
> CremonaReference(E1);
570l1
> CremonaReference(E2);
570l3
> TorsionSubgroup(E1);
Abelian Group isomorphic to Z/10
Defined on 1 generator
Relations:
    10*$.1 = 0
> r_phiSel;
0
> r_phidualSel;
3

This shows that E2(Q)/φ(E1(Q)) simeq 0, while the φv-Selmer group gives an exact sequence: 0 -> E2(Q)/φv(E1(Q)) ⊂(Z/5Z)3 -> Sha(E2/Q)[φv] -> 0. From this we conclude that the rank (for both curves) is 0, and so Sha(E2/Q)[φv] has F5-dimension 2. Representatives for the inverse pairs of nontrivial elements are given by the third return value.

> #Sha*2 + 1;
25
> C := Sha[1];
> CremonaReference(Jacobian(GenusOneModel(C)));
570l3

The above computation does not conclusively show that Sha(E1/Q) has no nontrivial 5-torsion. For this we need a second isogeny descent. Namely we show that the C is not divisible by φ in Sha.

> time DimSelC := FakeIsogenySelmerSet(C,E1,E2);
Time: 2.950
> DimSelC;
-1

Example CrvEllQNF_pIsogenyDescent2 (H130E40)

Now we use a full 5-descent to find a large generator.
> r1,r2,SelModTors,E,EE := pIsogenyDescent(326/467,5);
> r1,r2;
0 2
> E5,m := TorsionSubgroup(E);
> E5;
Abelian Group isomorphic to Z/5
Defined on 1 generator
Relations:
    5*E5.1 = 0
> time ConjecturalRegulator(E);
242.013813460415708000138268958 1
Time: 70.180
> Conductor(E);
271976526950
> ThreeTorsionType(E);
Generic
This shows that E(Q) simeq Z x Z/5Z and that (assuming Sha(E/Q) is trivial) that the regulator is 242.01... This means one probably needs more than a 4-descent to find the generator. The conductor is too large for Heegner point techniques and the 3-torsion on E is generic, meaning 6- or 12-descent will be very slow (even if they are performed nonrigorously). We can do a further isogeny descent to obtain a full 5-covering.
> P := m(E5.1);
> C := Curve(Minimize(GenusOneModel(SelModTors[2])));
> time Ds,Pis := pIsogenyDescent(C,P);
7.880
> D := Ds[1];
> pi := Pis[1];
> time rp := PointSearch(D,10^10 :
>     Dimension := 1, OnlyOne := true, Nonsingular := true);
Time: 39.410
> Q := rp[1];
> Q;
(-11610740223/2573365369 : 1350220049/2573365369 :
-110993809/2573365369 : -3970329088/2573365369 : 1)
> piQ := pi(Q); // gives the point on C
> Dnew,Enew,FiveCovering := nCovering(GenusOneModel(D));
> Qnew := Dnew(Rationals())!Eltseq(Q);
> Ecan,EnewtoEcan := MinimalModel(Enew);
> P2 := EnewtoEcan(FiveCovering(Qnew));
> P2;
(18742046893875394386310714878805837118945751672332464430219783625592
23533610794664163106345898123969229661/991466716729115905824131485387
000945412007497180441812893340644055454270710030810641619997008843128
1 : 71245662543288432230853647434377610311616709098508077082874898143
715069493690489458124709392518651254352942841744887961253603235705564
184725054480767436761578/98722742040021206194215985208166099089985806
405143789926209543140373470096170812446567353837866650186446834616709
6101096776119973657047069330277618071 : 1)
> CanonicalHeight(P2);
242.013813460415708000138268957

Example CrvEllQNF_pIsogenyDescent3 (H130E41)

Finally we give an example which shows that the map from the genuine Selmer set to the fake Selmer set need not be surjective.
> E1 := EllipticCurve("254a1");
> E2 := EllipticCurve("254a2");
> bool, phi := IsIsogenous(E1,E2);
> phicoveringsofE2,_,phidualcoveringsofE1,_,phi := ThreeIsogenyDescent(E1);
> C := phicoveringsofE2[1];
> C;
x^3 - x^2*y - x^2*z - 2*x*y^2 + 3*x*y*z - 2*x*z^2 + 2*y^2*z
> phidual := DualIsogeny(phi);
> MinimalModel(Codomain(phidual)) eq MinimalModel(Jacobian(C));
true
> time FakeIsogenySelmerSet(C,phidual);
2
Time: 0.620
> time SelC := pIsogenyDescent(C,phidual);
Time: 1.160
> Ilog(3,#SelC);
1
V2.28, 13 July 2023