[Next][Prev] [Right] [Left] [Up] [Index] [Root]

Isomorphisms and Transformations

A hyperelliptic curve isomorphism is defined by a linear fractional transformation t(x:z) = (ax + bz:cx + dz), a scale factor e, and a polynomial u(x) of degree at most g + 1, where g is the genus of the curve. This data defines the isomorphism of weighted projective points

(x : y : z) |-> (ax + bz : ey + tilde(u)(x, z) : cx + dz),

where tilde(u) is the degree g + 1 homogenization of u. When not specified, the values of e and u are by default taken to be 1 and 0, respectively.

An isomorphism can be created from the parent structures by coercing a tuple < [a, b, c, d], e, u > into the structure of isomorphisms between two hyperelliptic curves, or by creating it as a transformation of a given curve, i.e. creating the codomain curve together with the isomorphism from the given data.

Note that due to the projective weighting of the ambient space of the curve, two equal isomorphisms may have different representations.

Subsections

Creation of Isomorphisms

Aut(C) : CrvHyp -> PowAutSch
Given a hyperelliptic curve C, this returns the structure of all automorphisms of the curve.
Iso(C1, C2) : CrvHyp, CrvHyp -> PowIsoSch
Given hyperelliptic curves C1 and C2 of the same genus and base field, this returns the structure of all isomorphisms between them.
Transformation(C, t) : CrvHyp, [RngElt] -> CrvHyp, MapIsoSch
Transformation(C, u) : CrvHyp, RngUPolElt -> CrvHyp, MapIsoSch
Transformation(C, e) : CrvHyp, RngElt -> CrvHyp, MapIsoSch
Transformation(C, e, u) : CrvHyp, RngElt, RngUPolElt -> CrvHyp, MapIsoSch
Transformation(C, t, e, u) : CrvHyp, [RngElt], RngElt, RngUPolElt -> CrvHyp, MapIsoSch
Returns the hyperelliptic curve C' which is the codomain of the isomorphism from the hyperelliptic curve C specified by the sequence of ring elements t, the ring element e and the polynomial u, followed by the the isomorphism to the curve.

Example CrvHyp_Transformation (H125E10)

We create the hyperelliptic curve y2=x5 - 7 and apply a transformation to it.

> P<x> := PolynomialRing(Rationals());
> H1 := HyperellipticCurve(x^5-7);
> H2, phi := Transformation(H1, [0,1,1,0], 1/2, x^2+1);                   
> H2;
Hyperelliptic Curve defined by y^2 + (-2*x^2 - 2)*y = -7/4*x^6 - x^4 - 2*x^2 + 
    1/4*x - 1 over Rational Field
> phi;
(x : y : z) :-> (z : 1/2*y + x^2*z + z^3 : x)
> IsIsomorphic(H1, H2);                                                   
true (x : y : z) :-> (z : 1/2*y + x^3 + x*z^2 : x)

Arithmetic with Isomorphisms

Hyperelliptic curve isomorphisms can be evaluated, inverted, and composed on points as right operators. Note that the functional notation f(P) is not presently available for these maps of curves. However the available map syntax @ is more consistent with functions as operating on the right (which determines and is apparent from the way composition is defined).

f * g : MapIsoSch, MapIsoSch -> MapIsoSch
The composition of the maps f and g as right operators.
Inverse(f) : MapIsoSch -> MapIsoSch
The inverse of the hyperelliptic curve isomorphism f.
f in M : MapIsoSch, PowIsoSch -> BoolElt
Given an isomorphism of hyperelliptic curves f, and the structure of isomorphisms M between two hyperelliptic curves, this returns true if and only if they share the same domains and codomains.
P @ f : PtHyp, MapIsoSch -> PtHyp
Evaluate(f,P) : MapIsoSch, PtHyp -> PtHyp
Returns the evaluation of f at a point P in its domain. The same functions apply equally to points in the Jacobian of the domain curve and, in the case of genus 2, to points on the associated Kummer surface.
P @@ f : PtHyp, MapIsoSch -> PtHyp
Pullback(f,P) : MapIsoSch, PtHyp -> PtHyp
Returns the inverse image of the isomorphism f at a point P in its codomain. The same functions apply equally to points in the Jacobian of the codomain curve and, in the case of genus 2, to points on the associated Kummer surface.
f eq g : MapIsoSch, MapIsoSch -> BoolElt
Given isomorphisms f and g of hyperelliptic curves having the same domain and codomain, this function returns true if and only if they are equal. Note that two isomorphisms may be equal even if their defining data are distinct (see example below).

Invariants of Isomorphisms

Parent(f) : MapIsoSch -> PowIsoSch
The "parent structure" of an isomorphism between two hyperelliptic curves (which contains all isomorphisms with the same domain and codomain as the given isomorphism).
Domain(f) : MapIsoSch -> CrvHyp
The curve which is the domain of the given isomorphism.
Codomain(f) : MapIsoSch -> CrvHyp
The curve which is the target of the given isomorphism.

Automorphism Group and Isomorphism Testing

This section details the features for computing isomorphisms between two curves and determining the group of automorphisms. The function IsGL2Equivalent plays a central role in the isomorphism testing, and is documented here due to its central role in these computations.

The genus 2 package of Lercier and Ritzenthaler provides a function to determine the geometric automorphism group of a genus 2 curve in any characteristic by working with Cardona-Quer-Nart-Pujola invariants (see Subsection Igusa Invariants). This replaces the old function that only worked in odd (or 0) characteristics. They also provide a function that returns a list of all possible geometric automorphism groups for genus 2 curves over a given finite field and the number of isomorphism classes of curves with each possible group.

Lercier and Ritzenthaler's genus 3 package provides the same for genus 3 hyperelliptic curves, working with Shioda invariants. Here, the characteristic has to be 0 or ≥11.

IsGL2Equivalent(f, g, n) : RngUPolElt, RngUPolElt, RngIntElt -> BoolElt, SeqEnum
This function returns true if and only if f and g are in the same GL2(k)-orbit, where k is the coefficient field of their parent, modulo scalars. The polynomials are considered as homogeneous polynomials of degree n, where n must be at least 4. The second return value is the sequence of all matrix entries [a, b, c, d] such that g(x) is a constant times f((ax + b)/(cx + d)) (cx + d)n.
IsIsomorphic(C1, C2) : CrvHyp, CrvHyp -> BoolElt, MapIsoSch
    SetVerbose("CrvHypIso", n):         Maximum: 3
This function returns true if and only if the hyperelliptic curves C1 and C2 are isomorphic over their common base field. If the curves are isomorphic, an isomorphism is returned.
AutomorphismGroup(C) : CrvHyp -> GrpPerm, Map, Map
Given a hyperelliptic curve C of characteristic different from 2, the function returns a permutation group followed by an isomorphism to the group of automorphisms of the curve over its base ring. The curve must be of genus at least one, and the automorphism group is defined to consist of those automorphisms which commute with the hyperelliptic involution, i.e. which induce a well-defined automorphism of its quotient projective line. A third return value gives the action C x G -> C.

Example CrvHyp_Automorphism_Group (H125E11)

We give an example of the computation of the automorphism group of a genus one hyperelliptic curve.

> P<x> := PolynomialRing(GF(3));
> C1 := HyperellipticCurve(x^3+x);
> G1, m1 := AutomorphismGroup(C1);
> #G1;
> [ m1(g) : g in G1 ];
[
    (x : y : z) :-> (x : y : z),
    (x : y : z) :-> (x : -y : z),
    (x : y : z) :-> (z : y : x),
    (x : y : z) :-> (z : -y : x)
]
We note that due to the weighted projective space, the same map may have a non-unique representation, however the equality function is able to identify equivalence on representations.

> f := m1(G1.3);
> f;
(x : y : z) :-> (z : y : x)
> g := Inverse(f);
> g;
(x : y : z) :-> (2*z : y : 2*x)
> f eq g;
true
We see that the geometric automorphism group is much larger. By base extending the curve to a quadratic extension, we find the remaining automorphisms of the curve.

> K<t> := GF(3,2);
> C2 := BaseExtend(C1, K);
> G2, m2 := AutomorphismGroup(C2);
> #G2;
48
> O := C2![1,0,0];
> auts := [ m2(g) : g in G2 ];
> [ f : f in auts | O@f eq O ];
[
    (x : y : z) :-> (x : y : z),
    (x : y : z) :-> (x : -y : z),
    (x : y : z) :-> (x : t^2*y : 2*z),
    (x : y : z) :-> (x + t^6*z : t^2*y : 2*z),
    (x : y : z) :-> (x + t^6*z : y : z),
    (x : y : z) :-> (x + t^2*z : y : z),
    (x : y : z) :-> (x + t^2*z : t^2*y : 2*z),
    (x : y : z) :-> (x : t^6*y : 2*z),
    (x : y : z) :-> (x + t^6*z : t^6*y : 2*z),
    (x : y : z) :-> (x + t^6*z : -y : z),
    (x : y : z) :-> (x + t^2*z : -y : z),
    (x : y : z) :-> (x + t^2*z : t^6*y : 2*z)
]
> #$1;
12
Note that this curve is an example of a supersingular elliptic curve in characteristic 3. In the final computation we restrict to the automorphisms as an elliptic curve, i.e. those which fix the point at infinity --- the identity element of the group law.

In the context of hyperelliptic curves of genus one, the group of automorphisms must stabilize the ramification points of the hyperelliptic involution. These are precisely the 2-torsion elements as an elliptic curve. So we have an group extension by the 2-torsion elements, acting by translation. Converting to an elliptic curve, we find that there are two 2-torsion elements over F3:

> E1 := EllipticCurve(C1);
> A1 := AbelianGroup(E1);
> A1;
Abelian Group isomorphic to Z/4
Defined on 1 generator
Relations:
    4*$.1 = 0
We see that two of the 2-torsion elements are defined over F3, and the remaining ones appear over the quadratic extension. So in the former case the automorphism group is an extension of the elliptic curve automorphism group (of order 2) by Z/2Z, and in latter case the automorphism group is an extension (of the group of order 12) by the abelian group isomorphic to Z/2Z x Z/2Z.

Note that there exist other curve automorphisms given by translations by other torsion points (under the addition as an elliptic curve), but that do not commute with the hyperelliptic involution, hence do not enter into the hyperelliptic automorphism group.


GeometricAutomorphismGroup(C) : CrvHyp -> GrpFP
GeometricAutomorphismGroup(GI) : SeqEnum -> GrpFP
Given a hyperelliptic curve C of genus 2 or 3 the function returns a finitely-presented group isomorphic to the geometric automorphism group, i.e. the automorphism group of the curve over an algebraic closure of its base field.

The method used for genus 2 is to compute the Cardona-Quer-Nart-Pujola invariants (see Subsection Igusa Invariants) of C and use the classification of the possible automorphism groups in terms of the invariants. See [SV01] and [CQ05] for the odd (and 0) characteristic case and [CNP05] for characteristic 2.

The method used for genus 3 is to compute the Shioda invariants (see Subsection Shioda Invariants) of C and use the classification of the possible automorphism groups in terms of the invariants. For this case, the base field must have characteristic 0 or ≥11.

There is also a genus 2 version where the argument is the sequence GI of Cardona-Quer-Nart-Pujola invariants of a curve rather than the actual curve. This avoids actually constructing the curve, in case the user is starting from the invariants.

The functions are part of packages for genus 2 and 3 curves contributed by Reynald Lercier and Christophe Ritzenthaler.

GeometricAutomorphismGroupFromShiodaInvariants(JI) : SeqEnum -> GrpPerm
There is a variant of the last intrinsic for genus 3 curves where the argument is the sequence JI of Shioda invariants of a curve rather than the actual curve. This avoids actually constructing the curve, in case the user is starting from the invariants. The same restrictions on the characteristic of the base field apply.

Example CrvHyp_Geometric_Automorphism_Group (H125E12)

We give examples of the computation of the geometric automorphism group of a genus two and a genus three hyperelliptic curve.

> P<x> := PolynomialRing(RationalField());
> f := x^6+x^3+13;
> C := HyperellipticCurve(f);
> time GeometricAutomorphismGroup(C);
Permutation group acting on a set of cardinality 6
Order = 12 = 2^2 * 3
    (1, 2, 3, 4, 5, 6)
    (1, 6)(2, 5)(3, 4)
Time: 0.010
> f := x^8-1;
> C1 := HyperellipticCurve(f);
> GeometricAutomorphismGroup(C1);
GrpPC of order 32 = 2^5
PC-Relations:
    $.1^2 = $.4, 
    $.3^2 = $.5, 
    $.2^$.1 = $.2 * $.3, 
    $.3^$.1 = $.3 * $.5, 
    $.3^$.2 = $.3 * $.5
Note that AutomorphismGroup can be used to retrieve the same (and more!) information but this can be much slower.

> aut := AutomorphismGroup(C);
> aut;
Symmetric group aut acting on a set of cardinality 2
Order = 2
  (1, 2)
  Id(aut)
We need to extend the field!

> Qbar := AlgebraicClosure();
> Cbar := BaseChange(C, Qbar);
> time autbar := AutomorphismGroup(Cbar);
Time: 332.290
> autbar;
Permutation group autbar acting on a set of cardinality 12
Order = 12 = 2^2 * 3
  (1, 2)(3, 4)(5, 6)(7, 8)(9, 10)(11, 12)
  Id(autbar)
  (1, 3)(2, 4)(5, 7)(6, 8)(9, 11)(10, 12)
  (1, 5, 9)(2, 6, 10)(3, 11, 7)(4, 12, 8)
  (1, 7)(2, 8)(3, 9)(4, 10)(5, 11)(6, 12)
  (1, 9, 5)(2, 10, 6)(3, 7, 11)(4, 8, 12)
  (1, 11)(2, 12)(3, 5)(4, 6)(7, 9)(8, 10)
> IdentifyGroup(autbar);
<12, 4>

GeometricAutomorphismGroupGenus2Classification(F) : FldFin -> SeqEnum,SeqEnum
Given a finite field F (of any characteristic), the function returns two sequences. The first gives a list of all possible geometric automorphism groups for genus 2 curves defined over F and the second gives the corresponding number of isomorphism (over bar(F), the algebraic closure of F) classes of F-curves having the given automorphism group. The groups are represented as finitely-presented groups.

This function is part of a package for genus 2 curves contributed by Reynald Lercier and Christophe Ritzenthaler and is based on the classification analysis in [Car03] and [CNP05].

GeometricAutomorphismGroupGenus3Classification(F) : FldFin -> SeqEnum,SeqEnum
Given a finite field F of characteristic ≥11, the function returns two sequences. The first gives a list of all possible geometric automorphism groups for genus 3 curves defined over F and the second gives the corresponding number of isomorphism (over bar(F), the algebraic closure of F) classes of F-curves having the given automorphism group. The groups are represented as permutation groups.

This function is part of a package for genus 3 curves contributed by Reynald Lercier and Christophe Ritzenthaler.


Example CrvHyp_aut_class (H125E13)

We determine the possible (geometric) automorphism groups for genus 2 curves over F2.

> gps,ncls :=  GeometricAutomorphismGroupGenus2Classification(GF(2));
> [#gp : gp in gps];
[ 2, 12, 32, 160 ]
> ncls;
[ 5, 1, 1, 1 ]

 [Next][Prev] [Right] [Left] [Up] [Index] [Root]

Version: V2.19 of Wed Apr 24 15:09:57 EST 2013