[Next][Prev] [Right] [Left] [Up] [Index] [Root]
Subsections
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) : 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.
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, 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.
Returns the hyperelliptic curve C corresponding to the elliptic
curve E, followed by the map from E to C.
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.
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.
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)
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.
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.
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.
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).
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.
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'.
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'.
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.
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, 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, 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, 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.
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.
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.
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).
Returns true if the hyperelliptic curve C is of the form y2 = f(x).
Given a hyperelliptic curve C, the function returns true
if C has integral coefficients, and false otherwise.
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, 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, 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).
There are standard functions for quadratic twists of hyperelliptic curves
in characteristic not equal to 2. In addition, from the new package of
Lercier and Ritzenthaler (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.
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.
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.
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.
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.
Twists(GI) : SeqEnum[FldFin] -> SeqEnum[CrvHyp], GrpFP
For C a genus 2 hyperelliptic curve over a finite field k of any
characteristic, returns the sequence of all twists of C
(ie, a set of representatives of all isomorphism classes of
curves over k isomorphic to C over bar(k)) along with the
geometric automorphism group of C (and all of its twists) as a
finitely-presented group.
There is also a version where the argument is GI, the sequence of
Cardona-Quer-Nart-Pujola invariants of a genus 2 curve over a finite
field (see Section Igusa Invariants) which returns the
full set of isomorphism classes (twists) of curves over k with the
given invariants.
These functions are part of the package contributed by Lercier and
Ritzenthaler which is more fully described in the Igusa invariants
section.
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
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)
We find all the twists of a supersingular genus 2 curve over F2.
> P<x> := PolynomialRing(GF(2));
> C := HyperellipticCurve(x^5,P!1);
> C;
Hyperelliptic Curve defined by y^2 + y = x^5 over GF(2)
> tws,auts := Twists(C);
> tws;
[
Hyperelliptic Curve defined by y^2 + y = x^5 over GF(2),
Hyperelliptic Curve defined by y^2 + y = x^5 + x^4 over GF(2),
Hyperelliptic Curve defined by y^2 + y = x^5 + x^4 + 1 over GF(2)
]
> #auts; // auts is the geometric automorphism group of C
160
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.
[Next][Prev] [Right] [Left] [Up] [Index] [Root]
|