Cyclic Covers of P1

A q-cyclic cover of the projective line is a curve C which admits a degree q morphism to P1 such that the associated extension of function fields is (geometrically) cyclic. By Kummer theory, such a curve has an affine model of the form yq = f(x) (at least when the base field contains the q-th roots of unity). This class of curve includes hyperelliptic curves. Current functionality for cyclic covers includes testing local solubility, searching for points and performing descents on curves and their Jacobians when they are defined over a number field.

Most functionality is implemented in the cases where f(x) is a separable polynomial of arbitrary degree and q is prime. One notable exception is that the method of descent on the curve is available for any f(x) that is q-th power free.

Contents

Points

A point on a cyclic cover C : yq = fdxd + fd - 1xd - 1 + ... + f0 is specified by a triple representing a point in the appropriate weighted projective plane.

When d = Degree(f(x)) is divisible by q, we consider points the weighted projective plane P2(1:d/q:1). In this case a point is represented by a triple [X, Y, Z] satisfying Yq = fdXd + fd - 1Xd - 1Z + ... + f0Zd.

When d = Degree(f(x)) is not divisible by q, we consider points in the weighted projective plane P2(q:d:1). In this case a point is represented by a triple [X, Y, Z] satisfying Yq = fdXd + fd - 1Xd - 1Zq + ... + f0Zdq.

RationalPoints(f,q) : RngUPolElt, RngIntElt -> SetIndx
Points(f,q) : RngUPolElt, RngIntElt -> SetIndx
    Bound: RngIntElt                    Default: 0
    DenominatorBound: RngIntElt         Default: 0
    NPrimes: RngIntElt                  Default: 0
For a polynomial f defined over a number field (or Q), this searches for rational points on the curve yq = f(x). The search region is controlled by the parameters Bound (which must be specified) and DenominatorBound. The function returns a set of triples (x, y, z) satisfying yq = F(x, z) where F(x, z) is the homogenisation of f(x) taking x to have weight LCM(q,Degree(f(x)))/Degree(f(x)).

The algorithm, and the parameters, are the same as for RationalPoints of a hyperelliptic curve.

HasPoint(f,q,v) : RngUPolElt, RngIntElt, RngIntElt -> BoolElt, SeqEnum
HasPoint(f,q,v) : RngUPolElt, RngIntElt, RngOrdIdl -> BoolElt, SeqEnum
For a polynomial f defined over a number field k, this checks if the curve defined by yq=f(x) has any points over the completion kv. The second return value is a triple of elements in the completion of k at v giving a point on the curve. The triple (x, y, z) returned satisfies yq = F(x, z) where F(x, z) is the homogenisation of f(x) taking x to have weight LCM(q,Degree(f(x)))/Degree(f(x)).

The current implementation for testing local solubility of cyclic covers is polynomial time in the cardinality of the residue field, making it somewhat impractical for larger primes.

HasPointsEverywhereLocally(f,q) : RngUPolElt, RngIntElt -> BoolElt
For a polynomial f defined over a number field k, this returns true if and only if the curve yq=f(x) has points over all nonarchimedean completions of k.

Descent

Let C be a curve with Jacobian J and suppose ψ: A -> J is an isogeny of abelian varieties. We say that a morphism of curves π : D -> C is a ψ-covering of C if, over an algebraic closure, π is isomorphic as a cover to the pull-back of an embedding of C into J along ψ.

Now suppose that C : yq = f(x) is a q-cyclic cover of the projective line defined over a number field k. Any primitive q-th root of unity ζ gives rise to an automorphism: ι sending a point (x, y) to (x, ζ y). This induces an automorphism of the Jacobian. Hence the endomorphism ring of the Jacobian contains the cyclotomic ring Z[ζ], and in particular the endomorphism φ = 1 - ζ. The φ-Selmer set of C classifies isomorphism classes of φ-coverings of C which are everywhere locally soluble. There is an action of ι on these coverings. The quotient by this action is known as the fake φ-Selmer set of C. If this set is empty, then C has no k-rational points. This can happen even if C itself has points everywhere locally. Even when this set is non-empty, it gives information about rational points on C. When q = 2, φ is multiplication by 2, in which case the φ-Selmer set is the same as the 2-Selmer set described in TwoCoverDescent.

qCoverDescent(f,q) : RngUPolElt, RngIntElt -> Set, Map
    PrimeBound: RngIntElt               Default: 0
    PrimeCutOff: RngIntElt              Default: 0
    KnownPoints: Set                    Default: 
    SetVerbose("CycCov", n):            Maximum: 3
Computes the fake φ-Selmer set of the cyclic cover C: yq=f(x) as an abstract set. The first return value is the fake φ-Selmer set given as a subset of the cartesian product of number fields having defining polynomials the irreducible factors of f. The map returned is from this cartesian product into the abstract group A(S, q) involved in the computation (the unramified outside S subgroup of the quotient of the etale algebra associated to the ramification points of C by the subgroup generated by scalars and q-th powers).

The input f must be a q-th power free polynomial defined over a number field k with class number 1.

The optional parameters PrimeBound and PrimeCutoff have the same meaning as those used the TwoCoverDescent for hyperelliptic curves. Only good primes up to PrimeBound and bad primes up to PrimeCutoff will be considered in the local computations. If either of these parameters is not set to default, the set returned might be strictly larger than the fake φ-Selmer set.

One can obtain a lower bound for the size of the φ-Selmer set by considering the images of known global points on C. This often speeds up the computation considerably as the first few primes might be sufficient to show that the φ-Selmer set is equal to the set of images of the known rational points. A set of known points may be passed in using the parameter KnownPoints. These should be given as triples of the type returned by RationalPoints.

Example CrvHyp_qcoverdescent (H134E39)

The following computation shows that the genus 15 curve defined by the equation y7=2x7 + 6 has no rational points even though it is everywhere locally solvable.
> _<x> := PolynomialRing(Rationals());
> RationalPoints(3*x^7+6,7 : Bound := 1000);
{@ @}
> HasPointsEverywhereLocally(3*x^7+6,7);
true
> time Sel := qCoverDescent(3*x^7+6,7 : PrimeBound := 1000);
Time: 0.450
> Sel;

Monic Models

Some of the descent algorithms described below must work with a cyclic cover yq = f(x) where f(x) is of the form c.h(x) where h is a monic integral polynomial and c is a constant (equal to 1 in the case that the degree d of f is not divisible by q). Such an model can be obtained using the intrinsic MonicModel described below. If the input is not of the required form, MonicModel will be called automatically.

MonicModel(f, q) : RngUPolElt, RngIntElt -> RngUPolElt, SeqEnum
Returns a polynomial g(x) of the form c.h(x) where h is monic and integral and c lies in the base ring of the input polynomial, f. If the degree of the input polynomial is not divisible by q then g will itself be monic and integral. The second return value is a pair of polynomials a(x), b(y) giving a change of variables which determine an isomorphism between the cyclic covers yq = f(x) and yq = g(x).

Descent on the Jacobian

Suppose J is the Jacobian of the cyclic cover C defined by yq=f(x) over a field k containing the q-th roots of unity. If k is a number field, then the φ-Selmer group of J is a finite group which contains J(k)/φ(J(k)). Computing the φ-Selmer group can be used to give an upper bound for the rank of J(k). In the case q = 2, this reduces to the 2-Selmer group computed with TwoSelmerGroup.

For q prime the φ-Selmer group may be computed using an algorithm of Poonen-Schaefer [PS97]. Their algorithm actually computes a fake Selmer group, which is a quotient of the true Selmer group by a subgroup of order dividing q.

When the base field does not contain the q-th roots of unity, one still obtains information by computing the φ-Selmer group over the cyclotomic extension. For details see [PS97], or consider the example below.

PhiSelmerGroup(f,q) : RngUPolElt, RngIntElt -> GrpAb, Map
    ReturnRawData: BoolElt              Default: false
    SetVerbose("Selmer", n):            Maximum: 3
For a polynomial f over a number field k, this computes the (fake) φ-Selmer group of the Jacobian of the curve yq = f(x) over the field k(μq) obtained by adjoining the q-th roots of unity to k. The polynomial f(x) must be separable and q must be prime.

There are two steps in the algorithm which may require a significant amount of time: the first is the computation of class groups of the extensions of k(μq) given by the irreducible factors of f(x); the second is the computation of the local images of the descent map at the prime(s) above q.

The (fake) Selmer group is returned as a finite abelian group S, together with a map from S to some affine algebra A, which represents the standard map from the Selmer group to A * /k * (A * )q or to A * /(A * )q correspondingly as the degree of f(x) is or is not divisible by q.

When called with ReturnRawData the program will yield three additional return values, expvecs, factorbase and selpic1. The first two are used to specify the images in A * /k * (A * )q of the (fake) Selmer group generators (in unexpanded form). This is done exactly as for TwoSelmerGroup. selpic1 is an element of the supergroup containing the (fake) Selmer group, or it is the empty set. This specifies the coset of the (fake) Selmer group corresponding to the (fake) Selmer set of the Pic1 torsor as described in [Cre12]. When the curve has points everywhere locally this determines whether or not the torsor is divisible by φ in Sha, which in turn yields more information on the rank.

Note: this function calls PicnDescent and repackages the information.

PicnDescent(f,q) : RngUPolElt, RngIntElt -> RngIntElt, GrpAb, Tup, RngIntElt, Map, GrpAb
    Safety: RngIntElt                   Default: 0
    Fields: SetEnum                     Default: {{ }}
    SetVerbose("Selmer", n):            Maximum: 3
This function returns information at a slightly lower level than PhiSelmerGroup. It returns eight values, which we will call dimSel, SelfakeJ, SelfakePic1, ranktorsglobal, ASqmodktoA, muJktors, toVec, FB.

The return value ASqmodktoA is a map m:G -> A, where A = k[x]/f(x) and G is an elementary abelian q-group. The group G is isomorphic to the unramified outside S subgroup of A * modulo q-th powers and scalars. (Here S is the set of bad primes used for the computation.) The value dimSel is an upper bound for the rank of the φ-Selmer group of J/k. It is not always sharp. It tries to determine the kernel of the map from Selmer to fake Selmer but doesn't always succeed. SetVerbose("Selmer",1) should give some details about this. The group SelfakeJ is the subgroup of G corresponding to the fake-φ-Selmer group of J/k. The return value SelfakePic1 is <SelfakeJ,g> with g in G such that the coset (g + (SelfakeJ)) in G corresponds to the fake-φ-Selmer set of Pic1/k. The value ranktorsglobal is a lower bound for rank of J(k)[φ] (just coming from factorization of f over k, so not sharp in all cases). The group muJktors is the subgroup of G corresponding to the image under the descent map of the part of J(k)[φ] computed above. The return values toVec and FB are similar to expvecs and factorbase returned by TwoSelmerGroup.

There are optional parameters which have the following roles. The local images are determined by computing images of random points until they generate a group that is large enough. Setting Safety := N will force it to compute the images of N extra random points (and throw an error if they generate a larger group). The parameter Fields has the same role as in TwoSelmerGroup.

RankBound(f,q) : RngUPolElt, RngIntElt -> RngIntElt
RankBounds(f,q) : RngUPolElt, RngIntElt -> RngIntElt, RngIntElt
    ReturnGenerators: BoolElt           Default: false
    SetVerbose("Selmer", n):            Maximum: 3
An upper (or a lower and upper) bound for the rank of the Jacobian of the cyclic cover defined by yq = f(x). The upper bound is obtained by performing a descent as described above and incorporates the information on the Pic1 torsor thus obtained. The lower bound is obtained by a naive (and rather inefficient) search for divisors on the curve.

If the optional parameter ReturnGenerators is set to true, then a third value will be returned. This will be a list of univariate polynomials defining divisors on P1 that lift to divisors on the curve. The images of these in the Mordell-Weil group generate a subgroup of rank at least as large as the lower bound provided. Independence of these points is determined by considering their images in the (fake) Selmer group.

Example CrvHyp_qcoverdescent (H134E40)

In this example we use descents to determine both the rank of the Mordell-Weil group and the 3-primary part of Sha for the Jacobian J of a genus 4 curve C over the rationals.
> _<x> := PolynomialRing(Rationals());
> f := 3*(x^6 + x^4 + 4*x^3 + 2*x^2 + 4*x + 3);
> k := CyclotomicField(3);
> IsIrreducible(PolynomialRing(k)!f);
true
> SelJ,m,expvecs,fb,SelPic1 := PhiSelmerGroup(f,3 : ReturnRawData);
> Ilog(3,#SelJ);
2
In this example the map from the genuine Selmer group to the fake Selmer group has a kernel of order 3. This is because f has degree divisible by q = 3 and is irreducible. Hence the φ-Selmer group has 3-rank 3. The fact that f is irreducible also implies that there is no nontrivial φ-torsion on J defined over k. Thus the φ-Selmer group gives an upper bound of 2 * 3 = 6 for the rank of J over k and an upper bound of 3 for the rank over Q (see [PS97]). We can use the information about the Pic1 torsor to get a better bound
> HasPointsEverywhereLocally(f,3);
true
> SelPic1;
This means that the Pic1 torsor represents a φ-torsion class in the Shafarevich-Tate group of J that is not divisible by φ. In particular it is nontrivial, and because the Cassels-Tate pairing is alternating this implies the φ-torsion subgroup of Sha contains a nontrivial subgroup with even 3-rank. Hence, we deduce that J(k)/φ(J(k)) has 3-rank at most 3 - 2 = 1, and consequently that J(Q) has rank ≤1. Calling RankBounds will deduce these bounds, and search for generators to obtain a lower bound.
> r_l, r_u, gens := RankBounds(f,3 : ReturnGenerators);
> [r_l,r_u];
[1,1]
> gens;
[*
    x^3 - x^2 + 4*x + 4
*]
This polynomial defines a divisor on P1 that lifts to a degree 3 divisor D on C : y3 = f(x). One way to verify this is the following:
> K := NumberField(gens[1]);
> IsPower(Evaluate(f,K.1),3);
true 1/4*(-3*K.1^2 + 9*K.1 + 6)
Let D0 denote the pullback of some point P ∈P1 under the degree 3 map C -> P1. Then D - D0 is a degree 0 defined over the rationals. According to RankBounds its class has infinite order in J(Q). This was determined by considering its image under the composition, J(Q) -> J(k) -> Selφ(J/k). Since there is no nontrivial φ-torsion, this amounts to saying that the image is nontrivial. We can verify this with the following computations (carried out internally by RankBounds).
> A<theta> := Domain(m); // the algebra representing Sel
> D := Evaluate(gens[1],theta);
> imD := m(D);
> assert imD ne SelJ!0;
> assert imD in SelJ;
Since the rank over Q has been computed unconditionally it follows that the φ-torsion subgroup of Sha is isomorphic to (Z/3)2, and since it contains a element not divisible by φ in Sha one can deduce that the 3-primary part of Sha is also isomorphic to (Z/3)2.

Partial Descent

The (fake) φ-Selmer set of the curve C : yq = f(x) defined over a number field k is computed using a map which sends a point (x, y) of C to x - θ, where θ is a generic root of f. This map takes values in the product of the extensions of k defined by the irreducible factors of f(x). More generally one can specify a partial descent map as follows. For each irreducible factor fi(x) of f(x), fix an extension Ki/k and an irreducible factor hi(x) ∈Ki[x] of fi(x). The map sending (x, y) to (h1(x), ..., hn(x)) induces a well defined map from C(k) to an appropriate quotient of the units in the product of the Ki. A partial descent computes the set of elements which restrict into the image of C(kv) for every prime v of k. This set gives information on the set of rational points of C. If it is empty, then the curve has no rational points.

Geometrically this set can be understood as follows. The coverings parameterised by the φ-Selmer set are Galois covers of C with group isomorphic (as a Galois module) to the φ-torsion subgroup of the Jacobian. By Galois theory, any Galois submodule gives rise to intermediate coverings. A partial descent computes a set of everywhere locally solvable intermediate coverings corresponding to some Galois submodule of J[φ].

qCoverPartialDescent(f,factors,q) : RngUPolElt, [* RngUPolElt *], RngIntElt -> Set, Map
    PrimeBound: RngIntElt               Default: 0
    PrimeCutoff: RngIntElt              Default: 0
    KnownPoints: Set                    Default: 
    SetVerbose("CycCov", n):            Maximum: 3
Performs a partial descent on the curve yq = f(x) with respect to the descent map given by factors. The map returned is from this cartesian product into the abstract group A(S, q) involved in the computation (the unramified outside S subgroup of the quotient of the etale algebra associated to the orbits of ramification points of C determined by factors by the subgroup generated by scalars and q-th powers).

The input f must be a separable polynomial defined over a number field k with class number 1. For each irreducible factor hi ∈k[x] of f, the list factors must contain an irreducible factor of hi defined over some (possibly trivial) extension of k. The optional parameters are the same as for qCoverDescent.

Example CrvHyp_qcoverpartialdescent (H134E41)

Consider the cyclic cover D : y3=3(x2 + 1)(x2 + 17)(x2 - 17).

> _<x>:=PolynomialRing(Rationals());
> f := 3*(x^2+1)*(x^2+17)*(x^2-17);
> pts := RationalPoints(f,3 : Bound:=100);
> pts;
{@
    [ -1, -12, 1 ],
    [ 1, -12, 1 ]
@}

So this appears to have only two rational points. We now apply partial descent by only factorising the third factor as follows:

> K<th> := NumberField(x^2-17);
> factor := Factorisation(x^2-17,K)[1,1];
> time selmerset, algebra:=qCoverPartialDescent(
>  3*(x^2+1)*(x^2+17)*(x^2-17),[*x^2+1,x^2+17,factor*],3
> : KnownPoints := pts, PrimeBound := 1000 );
Time: 0.530
> selmerset;
{
    <1, 9, $.1 + 9>,
    <1, 9, 2*$.1 + 2>
}
> delta := <1,9,2+2*th>;

Each element of selmerset corresponds to a covering of D and every rational point on D lifts to one of these two coverings. For example δ corresponds to a covering Yδ of D with defining equations λ2y13=x2 + 1, 9λ2y23=x2 + 17, (2θ + 2)λ y33= x - θ, where θ is a square root of 17. This covering of D also evidently covers the genus one curve defined over Q(θ), C : (2θ + 2)v3 = (x2 + 1)(x - θ) . One can now use the method of Elliptic Curve Chabauty to find all points of Yδ(K) which map to points of D(Q). Namely any such point gives rise to a point of C(K) with x-coordinate in Q. Provided we can obtain generators for C(K), such points can be determined using Chabauty.

> P2<x,v,w>:=ProjectivePlane(K);
> C:=Curve(P2, -(delta[3])*v^3 + (x^2+w^2)*(x-th*w) );
> E,CtoE:=EllipticCurve(C);
> twotors := TorsionSubgroup(E);
> #twotors;
1
> covers,coverstoE:=TwoDescent(E);
> #covers;
1
> cover:=covers[1];
> covertoE:=coverstoE[1];
> pts:={@pt@covertoE : pt in RationalPoints(cover : Bound:=100)@};
> pts;
{@ (1/128*(-153*th + 1377) : 1/1024*(-8109*th + 28917) : 1),
(1/128*(-153*th + 1377) : 1/1024*(6885*th - 17901) : 1),
(1/194688*(-171346689*th + 708942857) : 1/60742656*(-4566609746937*th
    + 18826158509345) : 1), (1/194688*(-171346689*th + 708942857) :
1/60742656*(4566537140481*th - 18825505051241) : 1) @}
> gen := pts[1];

This shows that E(K) simeq Z, so gen generates a finite index subgroup.

> A:=FreeAbelianGroup(1);
> AtoE:=map<A -> E | elt :-> Eltseq(elt)[1]*gen >;

To apply Chabauty, we want to use a map E -> P1 such that the composition C -> E -> P1 sends (x, v, w) to x.

> P1:=ProjectiveSpace(Rationals(),1);
> CtoE;
Mapping from: CrvPln: C to CrvEll: E
with equations :
1/16*(9*th - 153)*v
1/128*(-729*th + 1377)*x
-1/17*th*x + w
and inverse
th*$.2
1/16*(-9*th + 153)*$.1
$.2 + 1/128*(1377*th - 12393)*$.3
> EtoP1:=map<E -> P1 | [th*E.2,E.2 + 1/128*(1377*th - 12393)*E.3]>;
> Chabauty(AtoE,EtoP1);
{
    -A.1
}
126
> Chabauty(AtoE,EtoP1 : IndexBound:=126);
{
    -A.1
}
126
> pointC:= (-A.1)@AtoE@@CtoE;
> pointC;
(-1 : -1 : 1)

Any preimage of this point on Yδ has x = - 1, and as such must lie above ( - 1, - 12) ∈D(Q). A similar argument proves that the only rational point coming from the other element of the partial Selmer set is (1, - 12), proving D(Q) = { (1, 12), ( - 1, - 12)}.

V2.28, 13 July 2023