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. Secondly, it 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 nice equations. The general strategy is described in Section Minimization and Reduction of Surfaces.
Here, we describe the routines for the minimization of plane quartic curves and the reduction for plane curves of degree at least 3. The reduction is done by constructing a cluster of special points on the curve. Thus, we start with this.
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. 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.
The algorithm is due to Stoll (see [Sto11]).
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.
Here f is a homogeneous polynomial in 3 variables of degree > 2 with integral or rational coefficients. A new polynomial and the transformation matrix applied are retured.The routine computes the intersection points of f with its hessian. Then the cluster reduction is applied to this point set.
SetVerbose("PlaneQuartic", n): Maximum: 1
Given a plane quartic defined by the polynomial f with integer coefficients this routine computes an at p minimized model of the quartic. The new quartic and the transformation used are returned.
SetVerbose("PlaneQuartic", n): Maximum: 1
Given a smooth plane quartic curve defined by the polynomial f with integer coefficients this routine computes a minimized and reduced model of the curve. The transformation matrix returned applied to f will evaluate to a scalar multiple of the returned polynomial.For the reduction step, ReducePlaneCurve is used.
> _<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 > MinimizeReducePlaneQuartic(C2); 6*x^4 - 6*x^3*y + 4*x^3*z - 9*x^2*y^2 + 5*x^2*y*z - 3*x^2*z^2 - 2*x*y^3 + 9*x*y^2*z - 7*x*y*z^2 + 5*x*z^3 - 3*y^4 + 7*y^3*z + 6*y^2*z^2 + 10*y*z^3 - 3*z^4 [ 14878 4611976 -21564104] [ -1935 148866 2804580] [ 3330 -256188 1197852]We do not get the initial curve, but we get a curve with coefficients of the same size.