Creation Functions

Contents

Creation of a Hyperelliptic Curve

A hyperelliptic curve C given by a generalized Weierstrass equation y2 + h(x) y = f(x) is created by specifying polynomials h(x) and f(x) over a field K. The class of hyperelliptic curves includes curves of genus one, and a hyperelliptic curve may also be constructed by type change from an elliptic curve E. Note that the ambient space of C is a weighted projective space in which the one or two points at infinity are nonsingular.

HyperellipticCurve(f, h) : RngUPolElt, RngUPolElt -> CrvHyp
HyperellipticCurve(f, h) : RngElt, RngUPolElt -> CrvHyp
HyperellipticCurve(f, h) : RngUPolElt, RngElt -> CrvHyp
HyperellipticCurve(f) : RngUPolElt -> CrvHyp
HyperellipticCurve([f, h]) : [ RngUPolElt ] -> CrvHyp
Given two polynomials h and f ∈R[x] where R is a field or integral domain, this function returns the nonsingular hyperelliptic curve C: y2 + h(x)y = f(x). If h(x) is not given, then it is taken as zero. If R is an integral domain rather than a field, the base field of the curve is taken to be the field of fractions of R. An error is returned if the given curve C is singular.
HyperellipticCurve(P, f, h) : Prj, RngUPolElt, RngUPolElt -> CrvHyp
Create the hyperelliptic curve as described above using the projective space P as the ambient. The ambient P should have dimension 2.
HyperellipticCurveOfGenus(g, f, h) : RngIntElt, RngUPolElt, RngUPolElt -> CrvHyp
HyperellipticCurveOfGenus(g, f, h) : RngIntElt, RngElt, RngUPolElt -> CrvHyp
HyperellipticCurveOfGenus(g, f, h) : RngIntElt, RngUPolElt, RngElt -> CrvHyp
HyperellipticCurveOfGenus(g, f) : RngIntElt, RngUPolElt -> CrvHyp
HyperellipticCurveOfGenus(g, [f, h]) : RngIntElt, [RngUPolElt] -> CrvHyp
Given a positive integer g and two polynomials h and f ∈R[x] where R is a field or integral domain, this function returns the nonsingular hyperelliptic curve of genus g given by C: y2 + h(x)y = f(x). If h(x) is not given, then it is taken as zero. Before attempting to create C, the function checks that its genus will be g by testing various numerical conditions on f and g. If the genus is not correct, a runtime error is raised. If R is an integral domain rather than a field, the base field of C is taken to be the field of fractions of R. An error is returned if the curve C is singular.
HyperellipticCurve(E) : CrvEll -> CrvHyp, Map
Returns the hyperelliptic curve C corresponding to the elliptic curve E, followed by the map from E to C.

Creation Predicates

IsHyperellipticCurve([f, h]) : [ RngUPolElt ] -> BoolElt, CrvHyp
Given a sequence containing two polynomials h, f ∈R[x], where R is an integral domain, return true if and only if C: y2 + h(x)y = f(x) is a hyperelliptic curve. In this case, the curve is returned as a second value.
IsHyperellipticCurveOfGenus(g, [f, h]) : RngIntElt, [RngUPolElt] -> BoolElt, CrvHyp
Given a positive integer g and a sequence containing two polynomials h, f ∈R[x] where R is an integral domain, return true if and only if C: y2 + h(x)y = f(x) is a hyperelliptic curve of genus g. In this case, the curve is returned as a second value.

Example CrvHyp_Creation (H134E1)

Create a hyperelliptic curve over the rationals:

> P<x> := PolynomialRing(RationalField());
> C := HyperellipticCurve(x^6+x^2+1);
> C;
Hyperelliptic Curve defined by y^2 = x^6 + x^2 + 1 over Rational Field
> C![0,1,1];
(0 : 1 : 1)

Now create the same curve over a finite field:

> P<x> := PolynomialRing(GF(7));
> C := HyperellipticCurve(x^6+x^2+1);
> C;
Hyperelliptic Curve defined by y^2 = x^6 + x^2 + 1 over GF(7)
> C![0,1,1];
(0 : 1 : 1)

Changing the Base Ring

BaseChange(C, K) : Sch, Fld -> Sch
BaseExtend(C, K) : Sch, Fld -> Sch
Given a hyperelliptic curve C defined over a field k, and a field K which is an extension of k, return a hyperelliptic curve C' over K using the natural inclusion of k in K to map the coefficients of C into elements of K.
BaseChange(C, j) : Sch, Map -> Sch
BaseExtend(C, j) : Sch, Map -> Sch
Given a hyperelliptic curve C defined over a field k and a ring map j : k -> K, return a hyperelliptic curve C' over K by applying j to the coefficients of E.
BaseChange(C, n) : Sch, RngIntElt -> Sch
BaseExtend(C, n) : Sch, RngIntElt -> Sch
If C is a hyperelliptic curve defined over a finite field k and a positive integer n, let K denote the extension of k of degree n. This function returns a hyperelliptic curve C' over K using the natural inclusion of k in K to map the coefficients of C into elements of K.
ChangeRing(C, K) : Sch, Rng -> Sch
Given a hyperelliptic curve C defined over a field k, and a field K, return a hyperelliptic curve C' over K that is obtained from C by by mapping the coefficients of C into K using the standard coercion map from k to K. This is useful when there is no appropriate ring homomorphism between k and K (e.g., when k=Q and K is a finite field).

Example CrvHyp_BaseExtension (H134E2)

We construct a curve C over the rationals and use ChangeRing to construct the corresponding curve C1 over GF(101).

> P<x> := PolynomialRing(RationalField());
> C := HyperellipticCurve([x^9-x^2+57,x+1]);
> C1 := ChangeRing(C, GF(101));
> C1;
Hyperelliptic Curve defined by y^2 + (x + 1)*y = x^9 + 100*x^2 + 57
over GF(101)
> Q<t> := PolynomialRing(GF(101));
> HyperellipticPolynomials(C1);
t^9 + 100*t^2 + 57
t + 1
> C2, f := SimplifiedModel(C1);
> HyperellipticPolynomials(C2);
4*t^9 + 98*t^2 + 2*t + 27
0
> P1 := C1![31,30,1];
> P1;
(31 : 30 : 1)
> Q := P1@f; // evaluation
> Q;
(31 : 92 : 1)
> Q@@f; // pullback
(31 : 30 : 1)

An explanation of the syntax for isomorphisms of hyperelliptic curves and the functions for models is given below.

Models

SimplifiedModel(C) : CrvHyp -> CrvHyp, MapIsoSch
Given a hyperelliptic curve C defined over a field of characteristic not equal to 2, this function returns an isomorphic hyperelliptic curve C' of the form y2 = f(x), followed by the isomorphism C -> C'.
HasOddDegreeModel(C) : CrvHyp -> BoolElt, CrvHyp, MapIsoSch
Given a hyperelliptic curve C, this function returns true if C has a model C' of the form y2 = f(x), with f of odd degree. If so, C' is returned together with the isomorphism C -> C'.
IntegralModel(C) : CrvHyp -> CrvHyp, MapIsoSch
    Reduce: BoolElt                     Default: false
Given a hyperelliptic curve C defined over the rationals, this function returns an isomorphic curve C' given by polynomials with integral coefficients, together with the isomorphism C -> C'. If Reduce is set true, common divisors of the coefficients are eliminated as far as possible.
MinimalWeierstrassModel(C) : CrvHyp -> CrvHyp, MapIsoSch
    Bound: RngIntElt                    Default: 0
    SetVerbose("CrvHypMinimal", n):     Maximum: 3
Given a hyperelliptic curve C defined over the rationals, this function returns a globally minimal Weierstrass model C' of C. If Bound is set, it gives an upper bound for the bad primes that are checked. As this calculation uses trial division, Bound should not be set much larger than 107. The isomorphism C -> C' is returned as a second value.
pIntegralModel(C, p) : CrvHyp, RngIntElt -> CrvHyp, MapIsoSch
pIntegralModel(C, p) : CrvHyp, FldRatElt -> CrvHyp, MapIsoSch
pIntegralModel(C, p) : CrvHyp, RngUPolElt -> CrvHyp, MapIsoSch
pIntegralModel(C, p) : CrvHyp, FldFunRatUElt -> CrvHyp, MapIsoSch
pIntegralModel(C, p) : CrvHyp, Infty -> CrvHyp, MapIsoSch
    SetVerbose("CrvHypMinimal", n):     Maximum: 3
Given a hyperelliptic curve C defined over Q or a rational function field, this function returns a model C' of the curve that is integral at the place p given as an integer, rational, polynomial, rational function or ∞. The isomorphism C -> C' is returned as a second value.
pNormalModel(C, p) : CrvHyp, RngIntElt -> CrvHyp, MapIsoSch
pNormalModel(C, p) : CrvHyp, FldRatElt -> CrvHyp, MapIsoSch
pNormalModel(C, p) : CrvHyp, RngUPolElt -> CrvHyp, MapIsoSch
pNormalModel(C, p) : CrvHyp, FldFunRatUElt -> CrvHyp, MapIsoSch
pNormalModel(C, p) : CrvHyp, Infty -> CrvHyp, MapIsoSch
    SetVerbose("CrvHypMinimal", n):     Maximum: 3
Given a hyperelliptic curve C defined over Q or a rational function field, this function returns a model C' of the curve that is normal at the place p given as an integer, rational, polynomial, rational function or ∞. The isomorphism C -> C' is returned as a second value.
pMinimalWeierstrassModel(C, p) : CrvHyp, RngIntElt -> CrvHyp, MapIsoSch
pMinimalWeierstrassModel(C, p) : CrvHyp, FldRatElt -> CrvHyp, MapIsoSch
pMinimalWeierstrassModel(C, p) : CrvHyp, RngUPolElt -> CrvHyp, MapIsoSch
pMinimalWeierstrassModel(C, p) : CrvHyp, FldFunRatUElt -> CrvHyp, MapIsoSch
pMinimalWeierstrassModel(C, p) : CrvHyp, Infty -> CrvHyp, MapIsoSch
    SetVerbose("CrvHypMinimal", n):     Maximum: 3
Given a hyperelliptic curve C defined over Q or a rational function field, this function returns a Weierstrass model C' of the curve that is minimal at the place p given as an integer, rational, polynomial, rational function or ∞. The isomorphism C -> C' is returned as a second value.
ReducedModel(C) : CrvHyp -> CrvHyp, MapIsoSch
    Simple: BoolElt                     Default: false
    Al: MonStgElt                       Default: "Stoll"
    SetVerbose("CrvHypReduce", n):      Maximum: 3
Given a hyperelliptic curve C with integral coefficients, this computes a reduced model C'. If the Stoll algorithm is used (default) then the curve argument must have integral coefficients and reduction is performed with respect to the action of SL2(Z) on the (x, z)-coordinates. If the Wamelen algorithm is used, (Al := "Wamelen"), the curve must have genus 2. The isomorphism C -> C' is currently returned only for the algorithm of Stoll.
ReducedMinimalWeierstrassModel(C) : CrvHyp -> CrvHyp, MapIsoSch
    Simple: BoolElt                     Default: false
    SetVerbose("CrvHypMinimal", n):     Maximum: 3
    SetVerbose("CrvHypReduce", n):      Maximum: 3
Given a hyperelliptic curve C defined over the rationals, this function returns a globally minimal integral Weierstrass model C' of C that is reduced with respect to the action of SL2(Z), using Stoll's algorithm in ReducedModel. The isomorphism C -> C' is returned as a second value.
SetVerbose("CrvHypReduce", v) : MonStgElt, RngIntElt ->
This sets the verbose printing level for the curve reduction algorithms of Stoll and Wamelen. The second argument can take integral values in the interval [0, 3], or boolean values: false (equivalent to 0) and true (equivalent to 1).

Minimization and Reduction of Binary Forms

Intrinsics are provided to perform the minimization and reduction routines directly on binary forms over the rationals or integers. These are slightly more general, in that they apply to homogeneous forms whose associated polynomial may have repeated roots. In the case of non-square-free forms, the routines are applied to the square-free part and the reducing transformation is then applied to the original form.

SetVerbose("Minimize", v) : MonStgElt, RngIntElt ->
This sets the verbose printing level for the minimization phases of the following intrinsics. The second argument can take integral values in the interval [0, 2], or boolean values: false (equivalent to 0) and true (equivalent to 1).
MinimizeAtP(f, p) : RngMPolElt, RngIntElt -> RngMPolElt, AlgMatElt, RngIntElt
The first argument, f, should be a homogeneous polynomial in two variables either defined over the integer ring or defined over the rational field with integral coefficients. The second argument p should be a prime.

Computes a transformation f(x, y) |-> F(x, y)=p - rf(ax + by, cx + dy) with r ≥0 and a, b, c, d ∈Z, ad - bc ≠0, such that F still has integral coefficients but whose discriminant has minimal p-part amongst all integral forms GL2(Q)-equivalent to f.

Returns F, the transformation matrix (matrix( a & b
c & d
)), and the scaling factor s=pr.

MinRedBinaryForm(f) : RngMPolElt -> RngMPolElt, AlgMatElt, RngIntElt
The argument, f, should be a homogeneous polynomial in two variables defined over the rational field.

Computes a transformation f(x, y) |-> F(x, y)=s - 1f(ax + by, cx + dy) with 1 ≤s ∈Z and a, b, c, d ∈Z, ad - bc ≠0, such that F has integral coefficients and is minimized and reduced.

Here, if F0 is the square-free part of F, minimized means that the absolute value of the discriminant of F0 is minimal amongst all integral forms GL2(Q)-equivalent to the square-free part of f. Reduced means that F0 is reduced up to SL2(Z)-equivalence following Stoll's reduction algorithm, as for the ReducedModel intrinsic on hyperelliptic curves.

Returns F, the transformation matrix (matrix( a & b
c & d
)), and the scaling factor s.

Note that the CrvHypReduce verbose level should be set to obtain verbose output for the reduction phase of this intrinsic.

MinRedBinaryForm(f) : RngUPolElt -> RngUPolElt, AlgMatElt, RngIntElt
    degree: RngIntElt                   Default: Degree(f)
Variant of the previous intrinsic, taking a univariate polynomial over Q, f, and applying the minimization and reduction to the binary form fh which is the homogenisation of f, the homogenising variable being the second one. If the parameter degree is set to an integer d greater than Degree(f) (it's default is Degree(f)), then fh is taken as the degree d homogenisation.

The return values are the same as for the previous intrinsic, except that the first return value is the dehomogenised F computed for fh, i.e. F(x, 1).

Example CrvHyp_bin_form_min_red (H134E3)

> P<x,y> := PolynomialRing(Rationals(),2);
> f := 65537*x^8 + 131104*x^7*y + 115136*x^6*y^2 + 60928*x^5*y^3 +
> 35840*x^4*y^4 + 60928*x^3*y^5 + 115136*x^2*y^6 + 131104*x*y^7 + 65537*y^8;
> F,M,s := MinRedBinaryForm(f);
> F;M;s;
x^8 + y^8
[ 1  4]
[-4 -1]
2562890625
> s*F eq f^ChangeRing(M,Rationals());
true;

Predicates on Models

IsSimplifiedModel(C) : CrvHyp -> BoolElt
Returns true if the hyperelliptic curve C is of the form y2 = f(x).
IsIntegral(C) : CrvHyp -> BoolElt
Given a hyperelliptic curve C, the function returns true if C has integral coefficients, and false otherwise.
IspIntegral(C, p) : CrvHyp, RngIntElt -> BoolElt
IspIntegral(C, p) : CrvHyp, RngUPolElt -> BoolElt
IspIntegral(C, p) : CrvHyp, Infty -> BoolElt
Given a hyperelliptic curve C defined over Q or a rational function field, this function returns true if the given model of C is integral at the given place.
IspNormal(C, p) : CrvHyp, RngIntElt -> BoolElt
IspNormal(C, p) : CrvHyp, RngUPolElt -> BoolElt
IspNormal(C, p) : CrvHyp, Infty -> BoolElt
Given a hyperelliptic curve C defined over Q or a rational function field, this function returns true if the given model of C is normal at the given place.
IspMinimal(C, p) : CrvHyp, RngIntElt -> BoolElt, BoolElt
IspMinimal(C, p) : CrvHyp, RngUPolElt -> BoolElt, BoolElt
IspMinimal(C, p) : CrvHyp, Infty -> BoolElt, BoolElt
Given a hyperelliptic curve C defined over Q or a rational function field, this function decides whether the given model of C is minimal at the given place. The returned values as follows:
false, false if C is not an integral minimal model at the given place.

true, false if C is integral and minimal at the given place, but not the unique minimal model (up to transformations that are invertible over the local ring).

true, false if C is the unique integral minimal model at the given place, (up to transformations that are invertible over the local ring).

Type Change Predicates

IsEllipticCurve(C) : CrvHyp -> BoolElt, CrvEll, MapIsoSch, MapIsoSch
The function returns true if and only if C is a genus one hyperelliptic curve of odd degree, in which case it also returns an elliptic curve E isomorphic to C followed by the isomorphism C -> E and the inverse isomorphism E -> C.
V2.28, 13 July 2023