Curves over Global Fields

Contents

Finding Rational Points

There are also various point search routines for more general schemes.

PointsCubicModel(C, B : parameters) : Crv, RngIntElt -> SeqEnum
    OnlyOne: BoolElt                    Default: false
    ExactBound: BoolElt                 Default: false
    SetVerbose("CubicModelSearch", n):  Maximum: 1
Given a plane cubic over the rationals, this function searches, by a reasonably efficient method due to Elkies [Elk00], for a point on C of naïve height up to B --- the asymptotic running time is O(B).

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 co-ordinates 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.

Example Crv_points-cubic-model (H121E40)

> P<x,y,z>:=ProjectiveSpace(Rationals(),2);
> C:=Curve(P,x^3+9*y^3+73*z^3);
> time PointsCubicModel(C,10^4);
[ (31/2 : -15/2 : 1), (-353/824 : -1655/824 : 1), (-463/106 : 111/106
: 1), (-1 : -2 : 1), (-2347/526 : 635/526 : 1), (-206/5 : 99/5 : 1),
(22/5 : -13/5 : 1), (-43/16 : -29/16 : 1), (-25 : 12 : 1), (-4493/1076
: -299/1076 : 1), (-215/47 : 64/47 : 1), (-631/151 : -22/151 : 1), (-4
: -1 : 1), (278/193 : -393/193 : 1), (-328/55 : 137/55 : 1), (311/88 :
-207/88 : 1), (145/71 : -148/71 : 1) ]
Time: 2.790

Regular Models of Arithmetic Surfaces

Let F be a global field (the rationals, a number field or a function field) with ring of integers OF. Given a curve C over F with integral defining equations, the associated arithmetic surface is the scheme of relative dimension 1 over (Spec) OF defined by the same equations. In Magma, one can compute a regular model of the arithmetic surface locally at a given prime of OF, and extract information from it. The `model' is a data structure which contains several affine patches with maps between them, as well as the components of the special fibre, and other data. This raw data is quite bulky; the interesting information is accessed via the functions described in this section. This functionality may be expanded (on request) in later versions.

The Magma category for these data structures is CrvRegModel.

Caveat: in the initial implementation there are some restrictions on which curves, and which fields, can be handled. These restrictions are not documented here, and may be lifted in the near future.

Creation of Regular Models
RegularModel(C, P) : Crv, Any -> CrvRegModel
    SetVerbose("RegularModel", n):      Maximum: 2
This computes a regular model of the curve C at the prime P. Here C is a curve over a field F (the rationals, a number field or a univariate rational function field), and P is a prime of the maximal order OF of F (given as an element or as an ideal). The defining equations of C must have integral coefficients, and the reduction of C modulo P must have dimension 1.

The function returns a model of C: this consists of several affine patches, given by integral equations, which together describe a scheme over OF whose generic fibre is isomorphic to C. (The gluing maps, and the isomorphism to C, are part of the stored data). The model is regular on the special fibre above P. However it is not necessarily a minimal model.

In some cases, the function may replace F by a finite extension L/F in which P is unramified, and return a regular model for the base change CL. (This occurs when there is a non-regular point or component in the special fibre that is not geometrically irreducible over the residue field.) When this occurs, a warning message is printed.

Using Regular Models
IntersectionMatrix(M) : CrvRegModel -> Mtrx
Given a regular model, this returns a matrix whose entries are the intersection multiplicities of the (reduced, irreducible) components of the special fibre.
Multiplicities(M) : CrvRegModel -> SeqEnum
Given a regular model, this returns a sequence giving the multiplicities of the components. The components of the model always come in the same order.
ComponentGroup(M) : CrvRegModel -> GrpAb
Given a regular model of a curve C at a prime P, this returns (as an abstract abelian group) the group of components of the Neron model of the Jacobian of C over the completion at P. (This is computed from the IntersectionMatrix of the model.)
PointOnRegularModel(M, x) : CrvRegModel, Pt -> SeqEnum, SeqEnum, Tup
Given a regular model of a curve C over a global field F, and a point x ∈C(F), this lifts x to a point on the regular model. More precisely, it finds a patch of the model, and a point on the generic fibre of that patch which maps to x (under the isomorphism between the generic fibres of M and C).

Three objects are returned: a sequence giving coordinates of the point, a sequence containing the equations of the relevant patch, and (for internal use) the `index' of the patch.

Minimization and Reduction for Plane Curves

Minimization and reduction is a search for a linear transformation, that leads to a nice equation. The first step is called minimization. It searches for linear changes of the coordinates that result in models with smaller invariants. This is done locally for each prime of sufficiently bad reduction. Then the reduction step searches for a unimodular transformation that results in smaller coefficients.

Here, we describe the routines for the minimization and reduction for plane curves of degree at least 3.

MinRedTernaryForm(F) : RngMPolElt -> RngMPolElt, AlgMatElt, FldRatElt
MinimizeReduce(C) : CrvPln -> CrvPln, AlgMatElt
    AdHocOnly: BoolElt                  Default: false
Given a plane curve C or equivalently a ternary form F, this function returns an isomorphic model with small coefficients and the transformation matrix used. The computation is done by calling the minimization and the reduction function described in this section.
Minimization for Plane Curves
MinimizeTernaryFormAtp(F,p) :RngMPolElt, RngIntElt -> RngMPolElt, AlgMatElt, RngIntElt
    SetVerbose("Minimisation", n):      Maximum: 3
Given a plane curve represented by a ternary form, this function returns a form representing a p-minimal model of the curve and the transformation matrix used.
MinimizeTernaryForm(F) : RngMPolElt -> RngMPolElt, AlgMatElt, RngIntElt
    AdHocRed: BoolElt                   Default: false
Given a plane curve represented by a ternary form, this function returns a form representing a model of the curve that is p-minimal for all primes p and the transformation matrix used. If AdHocRed is set, the function applies a reduction steps to intermediate results.
Reduction for Plane Curves
ReducePlaneCurve(C) : Crv -> Crv, Mtrx
ReducePlaneCurve(f) : MPolElt -> RngMPolElt, Mtrx
ReduceTernaryForm(f) : MPolElt -> RngMPolElt, Mtrx
    AdHocOnly: BoolElt                  Default: false
    SetVerbose("Reduction", n):         Maximum: 3
Given a ternary form f or a plane curve C of degree > 2 with integer or rational coefficients. A new form or curve with smaller coefficients and the unimodular transformation matrix used are returend.

If AdHocOnly is set, only a quick and simple reduction is done. Otherwise, the routine computes a covariant cluster and applies cluster reduction to it.

Reduction of Point Clusters

The reduction of point clusters can be called directly as follows:

ReduceCluster(X) : SeqEnum -> SeqEnum, Mtrx, Mtrx
ReduceCluster(C) : Clstr -> Clstr, Mtrx, Bool
    eps: FldReElt                       Default: 1e - 6
    c: FldReElt                         Default: 1
    SetVerbose("ClusterReduction", n):  Maximum: 3
Here X is a sequence of n-dimensional vectors of complex numbers or C is a cluster of points in projective space. The routine returns the cluster in a better embedded form, the transformation matrix applied and its inverse.

Optional arguments: eps is the bound used to decide whether a floating point number is zero, and c is the initial value of the acceleration factor.

This routine can be used for reduction of any variety that has a finite and stable set of special points, by using the transformation that reduces the point set. The algorithm is due to Stoll (see [Sto11]).

Example Crv_minredplanequartic (H121E41)

Here we test the code by taking a bad embedding and a of curve.
> _<x,y,z> := PolynomialRing(Integers(), 3);
> C := -3*x^4 + 7*x^3*y - 2*x^3*z + 6*x^2*y^2 + 9*x^2*y*z - 9*x^2*z^2
>       + 10*x*y^3 - 7*x*y^2*z + 5*x*y*z^2 - 6*x*z^3 - 3*y^4 + 5*y^3*z
>       - 3*y^2*z^2 + 4*y*z^3 + 6*z^4;
> C2 := Evaluate(C,[45*x+346*y,74*y+43*z,62324*z+3462*x]);
> C2;
850482855369981*x^4 - 77028319604430*x^3*y + 61459466820119559*x^3*z -
11625449190228*x^2*y^2 - 4102113209795298*x^2*y*z + 1665400384362332772*x^2*z^2
- 62468022936*x*y^3 - 417499281622764*x*y^2*z - 72808467360772908*x*y*z^2 +
20055880711976359332*x*z^3 - 16293798512*y^4 - 875035770696*y^3*z -
3749491014537304*y^2*z^2 - 430694749052979580*y*z^3 + 90567449117290511049*z^4
> MinRedTernaryForm(C2);
-3*x^4 + 10*x^3*y + 5*x^3*z + 6*x^2*y^2 - 7*x^2*y*z - 3*x^2*z^2 + 7*x*y^3 +
    9*x*y^2*z + 5*x*y*z^2 + 4*x*z^3 - 3*y^4 - 2*y^3*z - 9*y^2*z^2 - 6*y*z^3 +
    6*z^4
[-21564104   4611976     14878]
[  2804580    148866     -1935]
[  1197852   -256188      3330]
4503096885342604502174706246410496
We do not get the initial curve, but we get a curve with coefficients of the same size.
V2.28, 13 July 2023