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
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 \(\langle [a,b,c,d],e,u \rangle\) 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.
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: Transformation (ex-9a2a7d)#
We create the hyperelliptic curve \(y^2=x^5-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)
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 genus 2 part of [Lercier et al., 2021] 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.
The genus 3 part of [Lercier et al., 2021] provides the same for genus 3 hyperelliptic curves, working with Shioda invariants. Here, the characteristic has to be \(0\) or greater than \(7\).
It is also possible to compute (geometric, reduced) isomorphisms and automorphisms by a fast direct computation in all characteristic different from \(2\) and all genus \(>1\).
- IsIsomorphic(C1, C2): CrvHyp, CrvHyp -> BoolElt, MapIsoSch#
verbose: CrvHypIso Default: Verbose : 3
This function returns
trueif and only if the hyperelliptic curves \(C1\) and \(C2\) are isomorphic as hyperelliptic curves (i.e., preserving the involution) 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 \times G \rightarrow C\).
- Example: Automorphism Group (ex-faec5d)#
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 a 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 \({\mathbb{F}}_3\):
> 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 \({\mathbb{F}}_3\), 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 \({\mathbb{Z}}/2{\mathbb{Z}}\), and in latter case the automorphism group is an extension (of the group of order \(12\)) by the abelian group isomorphic to \({\mathbb{Z}}/2{\mathbb{Z}}\times {\mathbb{Z}}/2{\mathbb{Z}}\).
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.
- IsIsomorphicHyperellipticCurves(X1, X2): CrvHyp, CrvHyp -> BoolElt, List#
- IsIsomorphicHyperellipticCurves(f1, f2): RngUPolElt, RngUPolElt -> BoolElt, List#
geometric : BoolElt Default: false commonfield: BoolElt Default: true covariant : BoolElt Default: true
Returns a boolean indicating whether a matrix \(T\) and a scalar \(e\) exist that induce an isomorphism \(X_1 \mapsto X_2\), or \(y^2 = f_1(x) \mapsto y^2 = f_2(x)\), as well as a full list of all such pairs.
If
geometricis set totrue, then the set of isomorphisms over the algebraic closure of the base field is returned. Ifcommonfieldis set tofalse, then the isomorphisms that are returned may be defined over different fields. Ofcovariantis set tofalse, then the calculation of the isomorphisms is performed by a direct methods instead of applying the usual covariant reduction.
- Example: Is Isomorphic Hyperelliptic Curves (ex-83144d)#
We determine the isomorphisms \(C_1 \to C_2\) for \(C_1 : y^2 = x^{12} - 1\) and \(C_2 : y^2 = x^{12} + 1\). The code and the resulting output are as follows.
> P<x> := PolynomialRing(Rationals()); > C1 := HyperellipticCurve(x^12 - 1); > C2 := HyperellipticCurve(x^12 + 1); > test, _ := IsIsomorphicHyperellipticCurves(C1, C2); > test; false > test, _ := IsIsomorphicHyperellipticCurves(C1, C2 : geometric := true); > test; true
- IsomorphismsOfHyperellipticCurves(X1, X2): CrvHyp, CrvHyp -> List#
- IsomorphismsOfHyperellipticCurves(f1, f2): RngUPolElt, RngUPolElt -> List#
geometric : BoolElt Default: false commonfield: BoolElt Default: true covariant : BoolElt Default: true
Returns a full list of pairs of matrices \(T\) and scalars \(e\) that induce an isomorphism \(X_1 \mapsto X_2\), or \(y^2 = f_1(x) \mapsto y^2 = f_2(x)\).
If
geometricis set totrue, then the set of isomorphisms over the algebraic closure of the base field is returned. Ifcommonfieldis set tofalse, then the isomorphisms that are returned may be defined over different fields. Ofcovariantis set tofalse, then the calculation of the isomorphisms is performed by a direct methods instead of applying the usual covariant reduction.For more details, see [Lercier et al., 2012].
- AutomorphismsOfHyperellipticCurve(X): CrvHyp -> List#
- AutomorphismsOfHyperellipticCurve(f): RngUPolElt -> List#
geometric : BoolElt Default: false commonfield: BoolElt Default: true covariant : BoolElt Default: true
Returns a full list of pairs of matrices \(T\) and scalars \(e\) that induce an automorphism of the curve \(X\), or the curve \(y^2 = f(x)\).
If
geometricis set totrue, then the set of isomorphisms over the algebraic closure of the base field is returned. Ifcommonfieldis set tofalse, then the isomorphisms that are returned may be defined over different fields. Ofcovariantis set tofalse, then the calculation of the isomorphisms is performed by a direct methods instead of applying the usual covariant reduction.
- AutomorphismGroupOfHyperellipticCurve(X, Autos): CrvHyp, List -> GrpPerm, Map#
- AutomorphismGroupOfHyperellipticCurve(f, Autos): RngUPolElt, List -> GrpPerm, Map#
explicit: BoolElt Default: false
Return the automorphisms group defined by the sequence \(Autos\), as a permutation group (and its representation as automorphisms of the curve if
explicitis set totrue).
- AutomorphismGroupOfHyperellipticCurve(X): CrvHyp -> GrpPerm, Map#
- AutomorphismGroupOfHyperellipticCurve(f): RngUPolElt -> GrpPerm, Map#
geometric: BoolElt Default: false explicit : BoolElt Default: false
Return the automorphisms group of the curve \(X\) or \(y^2 = f(x)\), as a permutation group (and its representation if explicit is set to true).
If
geometricis set totrue, then the set of isomorphisms over the algebraic closure of the base field is returned.
- Example: Automorphism Group Of HyperellipticCurve (ex-aab802)#
We determine automorphism group of the curve \(C_1 : y^2 = x^{12} - 1\) over the finite field \({\mathbb{F}}_{11}\).
> P<x> := PolynomialRing(GF(11)); > C := HyperellipticCurve(x^12 - 1); > aut, phi := AutomorphismGroupOfHyperellipticCurve(C : geometric := true, > explicit := true); > aut; Permutation group aut acting on a set of cardinality 2640 Order = 2640 = 2^4 * 3 * 5 * 11 > GroupName(aut); C2.PSL(2,11).C2 > [phi(aut.i) : i in [1..Ngens(aut)]]; [ < [ 1 0] [ 0 1], 10 >, < [ 1 $.1^27] [ $.1^77 $.1^20], 4 >, < [ 1 $.1^98] [ $.1^28 $.1^30], 8 >, < [ 1 $.1^115] [ $.1^5 10], $.1^6 >, < [ 1 $.1^85] [ $.1^35 10], $.1^6 > ]
- GeometricAutomorphismGroup(C): CrvHyp -> GrpPerm#
- GeometricAutomorphismGroupFromIgusaInvariants(GI): SeqEnum -> SeqEnum, SeqEnum#
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 [Shaska and Völklein, 2001] and [Cardona and Quer, 2005] for the odd (and 0) characteristic case and [Cardona et al., 2005] 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 \(\ge 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 the package [Lercier et al., 2021] contributed by Reynald Lercier, Christophe Ritzenthaler, and Jeroen Sijsling. For more details, see [Lercier et al., 2012, Magaard et al., 2002].
- 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: Geometric Automorphism Group (ex-37ebfa)#
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
AutomorphismGroupcan 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 belong to the genus 2 part of [Lercier et al., 2021] and is based on the classification analysis in [Cardona, 2003] and [Cardona et al., 2005].
- GeometricAutomorphismGroupGenus3Classification(F): FldFin -> SeqEnum, SeqEnum#
Given a finite field \(F\) of characteristic \(\ge 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 belongs to the genus 3 part of [Lercier et al., 2021]. For more details, see also [Lercier et al., 2012].
- Example: Aut Class (ex-56c040)#
We determine the possible (geometric) automorphism groups for genus 2 curves over \({\mathbb{F}}_2\).
> gps,ncls := GeometricAutomorphismGroupGenus2Classification(GF(2)); > [#gp : gp in gps]; [ 2, 12, 32, 160 ] > ncls; [ 5, 1, 1, 1 ]
Twisting Hyperelliptic Curves#
- TwistsOfHyperellipticPolynomials(f: parameters): RngUPolElt -> SeqEnum[RngUPolElt], GrpPerm#
- TwistsOfHyperellipticPolynomials(fh): SeqEnum[RngUPolElt] -> SeqEnum, GrpPerm#
- TwistedHyperellipticPolynomialsFromShiodaInvariants(JI: parameters): SeqEnum[FldFinElt] -> SeqEnum, GrpPerm#
AutomorphismGroup: BoolElt Default: false
RationalModel: BoolElt Default: true
When \(f\) is a polynomial defining a hyperelliptic curve \(C: y^2=f(x)\) over a finite field, these functions return the list of polynomials \(g\) such that \(y^2=g(x)\) is a twist of \(C\) (i.e. a curve over \(k\) isomorphic to \(C\) over \(\bar{k}\)). Unless the genus of \(C\) is \(2\) or \(3\), the finite field is required to be of characteristic not \(2\), but in these cases it is also possible to compute the lists of twists of \(y^2+h(x)y=f(x)\) given \(f\) and \(h\). In all cases, the geometric reduced automorphism groups is returned as an abstract group.
There is also a version where the argument is \(JI\), the Shioda invariants of a genus 3 curve (see Section Shioda Invariants) over a finite field.
For more details, see [Cardona and Nart, 2007].
- Twists(C: parameters): CrvHyp -> SeqEnum[CrvHyp], GrpPerm#
- TwistsFromIgusaInvariants(JI: parameters): SeqEnum[FldFinElt] -> SeqEnum[CrvHyp], GrpPerm#
- TwistsFromG2Invariants(JI: parameters): SeqEnum[FldFinElt] -> SeqEnum[CrvHyp], GrpPerm#
- TwistsFromShiodaInvariants(JI: parameters): SeqEnum[FldFinElt] -> SeqEnum[CrvHyp], GrpPerm#
AutomorphismGroup: BoolElt Default: false
For \(C\) a hyperelliptic curve over a finite field of characteristic not \(2\) (unless the genus of \(C\) is \(2\) or \(3\)) or a smooth plane quartic over any finite field, the function Twists return the list of all twists of \(C\) and the reduced geometric automorphism group in the hyperelliptic case or the geometric automorphism group in the smooth plane quartic case, as an abstract group.
There is also a version where the argument is \(JI\), the sequence of Igusa or Cardona—Quer—Nart—Pujola invariants of a genus 2 curve (see Section Igusa Invariants) or the sequence of Shioda invariants of a genus 3 curve (see Section Shioda Invariants) over a finite field, which returns the full set of isomorphism classes (twists) of curves over \(k\) with the given invariants.
- Twists(C, Autos: parameters): Crv, SeqEnum -> SeqEnum[Crv], GrpPerm#
AutomorphismGroup: BoolElt Default: false
Compute the twists of a curve over a finite field with respect to a subgroup generated by geometric automorphisms (given by a list of \(N\) x \(N\) matrices) which act on it linearly.
- HyperellipticPolynomialsFromShiodaInvariants(JI): SeqEnum -> SeqEnum, GrpPerm#
Computes and returns all twists of a genus 3 hyperelliptic curve and its geometric automorphism group corresponding to a sequence of Shioda invariants \(JI\) (see Section Shioda Invariants) over a finite field of characteristic different from \(5\). In fact the first return value is a sequence of polynomials \(f(x)\) (or of couple \(f,h\) in characteristic \(2\)) of degree 7 or 8 such that the twisted curves correspond to \(y^2=f(x)\) (or to \(y^2+h(x)y=f(x)\) in characteristic \(2\)). The reason for this is that \(JI\) could be a singular set of invariants corresponding to polynomials \(f\) with discriminant zero. In that case, these do not correspond to hyperelliptic curves, but it might be useful to get the full set of twists anyway.
- Example: Twists (ex-d7106f)#
We determine the twists of the hyperelliptic curve \(C : y^2 = x^{12} - 1\) over the finite field \({\mathbb{F}}_{11}\).
> P<x> := PolynomialRing(GF(11)); > C := HyperellipticCurve(x^12 - 1); > Ts, Aut := Twists(C : AutomorphismGroup := true); > Ts; [ Hyperelliptic Curve defined by y^2 = x^12 + 10 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 10*x^11 + 5*x + 3 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 3*x^11 + 8*x + 8 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 6*x^11 + 3*x over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 5*x^11 + 7*x + 3 over GF(11), Hyperelliptic Curve defined by y^2 = 2*x^12 + 10*x^11 + 3*x + 6 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 7*x^11 + 5*x over GF(11), Hyperelliptic Curve defined by y^2 = x^11 + 10*x over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 3*x^11 + 7*x + 4 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 2*x^11 + 9*x + 5 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 4*x^11 + 9*x + 5 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 4*x^11 + 5*x + 4 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 4*x^11 + 2*x + 3 over GF(11), Hyperelliptic Curve defined by y^2 = x^12 + 7*x^11 + 7*x + 9 over GF(11) ] > Aut; Permutation group Aut acting on a set of cardinality 12 Order = 1320 = 2^3 * 3 * 5 * 11 (3, 4, 7, 5, 9)(6, 10, 8, 11, 12) (3, 6, 5, 11, 4, 10, 9, 12, 7, 8) (2, 3)(4, 5)(7, 12)(8, 10)(9, 11) (1, 2)(4, 9)(5, 7)(6, 8)(11, 12) > GroupName(Aut); PSL(2,11).C2
- Example: Quadratic Twists (ex-d1281d)#
We find all the twists of a supersingular genus 2 curve over \({\mathbb{F}}_2\).
> 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