There are also various point search routines for more general schemes.
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.
> 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
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.
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.
Given a regular model, this returns a matrix whose entries are the intersection multiplicities of the (reduced, irreducible) components of the special fibre.
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.
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.)
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 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.
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.
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.
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.
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.
The reduction of point clusters can be called directly as follows:
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]).
> _<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] 4503096885342604502174706246410496We do not get the initial curve, but we get a curve with coefficients of the same size.