Operations on Curves

Contents

Quadratic Twists

There are standard functions for quadratic twists of hyperelliptic curves in characteristic not equal to 2. In addition, from the new package [LRS21] (described in more detail in the next section) there are functions to return all twists of a genus 2 hyperelliptic curve over a finite field of any characteristic.

QuadraticTwist(C, d) : CrvHyp, RngElt -> CrvHyp
Given a hyperelliptic curve C defined over a field k of characteristic not equal to 2 and an element d that is coercible into k, return the quadratic twist of C by d.
QuadraticTwist(C) : CrvHyp -> CrvHyp
Given a hyperelliptic curve C defined over a finite field k, return the standard quadratic twist of C over the unique extension of k of degree 2. If the characteristic of k is odd, then this is the same as the twist of C by a primitive element of k.
QuadraticTwists(C) : CrvHyp -> SeqEnum
Given a hyperelliptic curve C defined over a finite field k of odd characteristic, return a sequence containing the non-isomorphic quadratic twists of C.
IsQuadraticTwist(C, D) : CrvHyp, CrvHyp -> BoolElt, RngElt
    SetVerbose("CrvHypIso", n):         Maximum: 3
Given hyperelliptic curves C and D over a common field k having characteristic not equal to two, return true if and only if C is a quadratic twist of D over k. If so, the twisting factor is returned as the second value.

Example CrvHyp_QuadraticTwists (H134E4)

We construct the quadratic twists of the hyperelliptic curve y2=x6 + x2 + 1 defined over GF(7).
> P<x> := PolynomialRing(GF(7));
> C := HyperellipticCurve(x^6+x^2+1);
> QuadraticTwists(C);
[
    Hyperelliptic Curve defined by y^2 = x^6 + x^2 + 1 over GF(7),
    Hyperelliptic Curve defined by y^2 = 3*x^6 + 3*x^2 + 3 over GF(7)
]
> IsIsomorphic($1[1],$1[2]);
false

Example CrvHyp_QuadraticTwists (H134E5)

We take a hyperelliptic curve over the rationals and form a quadratic twist of it.
> P<x> := PolynomialRing(Rationals());
> C := HyperellipticCurve(x^6+x);
> C7 := QuadraticTwist(C, 7);
> C7;
Hyperelliptic Curve defined by y^2 = 7*x^6 + 7*x over Rational Field

We now use the function IsIsomorphic to verify that C and C7 are nonisomorphic. We then extend the field of definition of both curves to Q(Sqrt(7)) and verify that the curves become isomorphic over this extension.

> IsIsomorphic(C, C7);
false
> K<w> := ext< Rationals() | x^2-7 >;
> CK := BaseChange(C, K);
> C7K := BaseChange(C7, K);
> IsIsomorphic(CK, C7K);
true (x : y : z) :-> (x : -1/7*w*y : z)

Elementary Invariants

HyperellipticPolynomials(C) : CrvHyp -> RngUPolElt, RngUPolElt
The univariate polynomials f(x), h(x), in that order, defining the hyperelliptic curve C by y2 + h(x)y = f(x).
Degree(C) : CrvHyp -> RngIntElt
Degree(C) : SetPtHyp -> RngIntElt
The degree of the hyperelliptic curve C or a pointset C of a hyperelliptic curve.
Discriminant(C) : CrvHyp -> RngElt
The discriminant of the hyperelliptic curve C.
Genus(C) : CrvHyp -> RngIntElt
The genus of the hyperelliptic curve C.
Conductor(C) : CrvHyp -> RngIntElt
Conductor of a hyperelliptic curve C defined over Q or a number field.
Conductor(C,p) : CrvHyp[FldRat], RngIntElt -> RngIntElt
Conductor(C,P) : CrvHyp[FldNum], RngOrdIdl -> RngIntElt
Conductor exponent of a hyperelliptic curve C/Q at a prime p or a curve over a number field at a prime ideal P.

Example CrvHyp_crvhyp-conductor-Q (H134E6)

> R<x>:=PolynomialRing(Rationals());
> C:=HyperellipticCurve(x^8+1,x); C;
Hyperelliptic Curve defined by y^2 + x*y = x^8 + 1 over Rational Field
> Factorization(Integers()!Discriminant(C));
[ <2, 4>, <109, 2>, <601, 2> ]
> Factorization(Conductor(C));                       // global
[ <2, 2>, <109, 2>, <601, 2> ]
> Conductor(C,2),Conductor(C,3),Conductor(C,5);      // local
2 0 0
ConductorExponent(C) : CrvHyp[FldPad] -> RngIntElt
Conductor(C) : CrvHyp[FldPad] -> FldPadElt
Conductor exponent and conductor ideal (uniformizer to the conductor exponent power) of a hyperelliptic curve over a p-adic field.

Example CrvHyp_crvhyp-conductor-padic (H134E7)

Here is a genus 4 example over Q3.
> K:=pAdicField(3,20);
> R<x>:=PolynomialRing(K);
> C:=HyperellipticCurve(x^9+1);
> ConductorExponent(C);
12
> Conductor(C);
3^12 + O(3^32)
EulerFactor(C,p) : CrvHyp[FldRat], RngIntElt -> RngUPolElt
EulerFactor(C,P) : CrvHyp[FldNum], RngOrdIdl -> RngUPolElt
EulerFactor(C) : CrvHyp[FldPad] -> RngUPolElt
    Degree: RngIntElt                   Default: ∞
The Euler factor (local polynomial) of a hyperelliptic curve defined over Q, a number field or a p-adic field at a prime p. If Degree is specified, it is computed only up to that degree.
EulerFactor(C,p) : CrvHyp[FldNum], RngIntElt -> RngUPolElt
    Degree: RngIntElt                   Default: ∞
The total Euler factor of a hyperelliptic curve defined over a number field over all primes above p. If Degree is specified, it is computed only up to that degree.

Example CrvHyp_crvhyp-eulerfactor (H134E8)

We consider the genus 2 curve C/Q: y2=x5 + x2 + 3 and compute its conductor at p=3, and over K=Q(root 5of 3) at the unique prime ideal P|3.
> R<x>:=PolynomialRing(Rationals());
> C:=HyperellipticCurve(x^5+x^2+3);
> EulerFactor(C,3);                     // local factor /Q at 3
-T + 1
> K:=NumberField(x^5-3);
> P:=Ideal(Decomposition(K,5)[1,1]);
> EulerFactor(BaseChange(C,K),P);       // local factor /K at P
25*x^4 - 5*x^3 - x + 1
> EulerFactor(BaseChange(C,Completion(K,P)));   // same, computed over K_P
25*x^4 - 5*x^3 - x + 1
> EulerFactor(BaseChange(C,K),2);       // total factor /K over all P|2
1

Base Ring

BaseField(C) : Sch -> Fld
BaseRing(C) : Sch -> Fld
CoefficientRing(C) : Sch -> Fld
The base field of the hyperelliptic curve C.
V2.28, 13 July 2023