Automorphism Groups of Curves

Magma now (from V2.13) contains functionality for computing the automorphism group of a (reduced and irreducible) curve over a variety of base fields. New structures have been added to aid the user in working with these groups. An automorphism group is of type GrpAutCrv and there may be several of these associated to a given curve: the full automorphism group or a subgroup generated by a given set of automorphisms. The automorphism group structure acts as a container for a permutation group representation of the group of curve automorphisms along with the map between the representing group and a list of the actual automorphisms stored in a compressed format.

Elements of the group are of type GrpAutCrvElt, a subtype of MapAutSch. For these, all of the usual scheme-map operations are available. However, a number of these are specially implemented for the new type and there are also several new operations. In particular, composition and powering of elements makes use of the internal group representation for speed and there are functions for the actions on points, places, divisors etc. which are more efficient than those for a general (finite) map between curves. There is also a function to compute the matrix representation of an automorphism group on the space of holomorphic differentials of the curve.

The full automorphism group is computed at function field level. The algebraic function field versions of some of the functions here are described in Section General Automorphisms.

It should be stressed that these groups are groups of birational automorphisms of a curve C, in the usual way. This means that they are correspond to actual automorphisms (ie, everywhere defined with an everywhere defined inverse) of the unique normalisation of C and the full automorphism group is the full automorphism group of this normalisation. However, if C is singular, then some of these automorphisms may not be defined at particular singular points.

There are also functions for computing isomorphisms between distinct curves.

All functions require C to have a function field, whether the full group of automorphisms is computed or not.

All of the functions computing the full set of automorphisms require the base field to be perfect (characteristic zero or finite).

Contents

Group Creation Functions

AutomorphismGroup(C) : Crv -> GrpAutCrv
Given a reduced, irreducible projective curve C, this function returns the full automorphism group of C over its base field. If the genus of C is less than 2, an error results unless the base field is finite. Note that the full automorphism group is cached so is only ever computed once.
AutomorphismGroup(C,auts) : Crv, SeqEnum -> GrpAutCrv
With C as above, this function returns the automorphism group of C generated by the sequence of automorphisms auts. The sequence auts can consist of either scheme automorphisms of C of type MapAutSch or GrpAutCrvElt elements lying in a previously constructed automorphism group of C. The same restrictions on the genus apply.
Automorphisms(C) : Crv -> SeqEnum
    Bound: RngIntElt                    Default: ∞
For C as above, this function computes at most Bound automorphisms of C over its base field and returns them as a sequence of scheme maps (type MapSch). If Bound is Infinity or at least the order of the full automorphism group, all automorphisms will be returned.
IsIsomorphic(C, D) : Crv, Crv -> BoolElt,MapSch
Given irreducible curves C and D this function returns true is C and D are isomorphic over their common base field. If so, it also returns a scheme map giving an isomorphism between them. The curves C and D must be reduced. Currently the function requires that the curves are not both genus 0 nor both genus 1 unless the base field is finite.
Isomorphisms(C, D) : Crv, Crv -> SeqEnum
    Bound: RngIntElt                    Default: ∞
Given reduced, irreducible curves C and D this function returns at most Bound isomorphisms from C to D over their common base field. These are returned as a sequence of scheme maps. The genus restrictions are as for IsIsomorphic.

Automorphisms

A . i : GrpAutCrv, RngIntElt -> GrpAutCrvElt
Let A be a group of automorphisms of curve C and let i be an integer such that -n ≤i ≤n, where n is the number of generators of A. This operator returns the i-th generator for A. A negative subscript indicates that the inverse of the generator is to be created. Finally, A.0 denotes the identity of A.

Note that if A is an automorphism group that was generated from a list of specified automorphisms, auts, then the generators of A will not necessarily be these "user" generators, but will be those coming from the permutation representation of A.

Identity(A) : GrpAutCrv -> GrpAutCrvElt
Id(A) : GrpAutCrv -> GrpAutCrvElt
A ! 1 : GrpAutCrv, RngIntElt -> GrpAutCrvElt
The identity element of the automorphism group A.
A ! f : GrpAutCrv, MapSch -> GrpAutCrvElt
A ! f : GrpAutCrv, GrpAutCrvElt -> GrpAutCrvElt
Let A be an automorphism group of a curve C. Given a scheme map f from C to C or an element of some (other) automorphism group of C, this function returns the GrpAutCrvElt element of A corresponding to f. An error will result if f is not in A.
Order(f) : GrpAutCrvElt -> RngIntElt
The order of the curve automorphism f.
Inverse(f) : GrpAutCrvElt -> GrpAutCrvElt
The inverse of the curve automorphism f.
f * g : GrpAutCrvElt, GrpAutCrvElt -> GrpAutCrvElt
The product of the curve automorphisms f and g in automorphism group A. If f and g are regarded as maps, this function returns their composite: first apply f, then apply g. Note that this composition uses the permutation representation of A and is generally performed faster than the usual scheme map composition.
f ^ n : GrpAutCrvElt, RngIntElt -> GrpAutCrvElt
The nth power of the curve automorphism f. The integer n may be positive or negative. Again, this uses the permutation representation of A, the parent of f.
g eq h : GrpAutoElt, GrpAutoElt -> BoolElt
Given curve automorphisms g and h belonging to automorphism groups of the same curve C, return true if g and h represent the same automorphism, false otherwise. Note that g and h do not have to belong to the same automorphism group.
g ne h : GrpAutoElt, GrpAutoElt -> BoolElt
The logical negation of the preceding function.
SchemeMap(f) : GrpAutCrvElt -> MapAutSch
It is sometimes useful for the user to convert a curve automorphism back to an object of plain scheme isomorphism type. This is a convenience function that simply returns the curve automorphism f as a MapAutSch.

Automorphism Group Operations

Curve(A) : GrpAutCrv -> Crv
The curve of which A is a group of automorphisms.
Order(A) : GrpAutCrv -> RngIntElt
The order of A.
FactoredOrder(A) : GrpAutCrv -> [ <RngIntElt, RngIntElt> ]
The factored order of A.
NumberOfGenerators(A) : GrpAutCrv -> RngIntElt
Ngens(A) : GrpAutCrv -> RngIntElt
The number of generators of A. If A was defined as the group generated by a given sequence of automorphisms, this sequence will not necessarily coincide with the set of generators, which is determined by the internal permutation representation.
Generators(A) : GrpAutCrv -> SeqEnum
The generators of A - a small set of GrpAutCrvElt elements of A, which generate it as a group - returned in a sequence.
PermutationGroup(A) : GrpAutCrv -> GrpPerm
The permutation group of A which gives the abstract group representation of the automorphism group.
PermutationRepresentation(A) : GrpAutCrv -> GrpPerm, Map
The permutation group representation of A consisting of the actual permutation group G and an invertible map which takes elements of G to the corresponding curve automorphism (as a GrpAutCrvElt element).
MatrixRepresentation(A) : GrpAutCrv -> Grpmat, Map, SeqEnum
For an automorphism group A on a curve C of genus at least 2, computes the matrix representation of A acting on the space of holomorphic differentials by pullback. The differentials are represented by row vectors with respect to a basis B and the matrix associated to g ∈A gives the pullback action of g by right multiplication of the row vectors. The (finite) matrix group image G is returned along with a map from A to G giving the representation and an enumerated sequence containing the basis of differentials B used.
a in A: GrpAutCrvElt, GrpAutCrv -> BoolElt
phi in A: MapSch, GrpAutCrv -> BoolElt
Returns whether a curve automorphism, given as a GrpAutCrvElt or MapSch, is equal to an automorphism lying in A.
A subset B: GrpAutCrv, GrpAutCrv -> BoolElt
Returns whether A is actually a subgroup of B as automorphism groups of the same curve.

Pullbacks and Pushforwards

For GrpAutCrvElt elements, pullbacks and pushforwards (images) of functions, places, divisors and differentials of the curve C are handled more directly than for general curve maps. The functions to perform these operations use the more direct f(x) and x @@ f syntax and these should be used in preference to the Pushforward and Pullback functions in Section Maps Induced by Morphisms.

In addition, the computation of images of points on C by a curve automorphism is handled slightly differently. If the point doesn't lie in the original domain of definition of the scheme map giving the automorphism, the image is still computed without extending the map (although for some singular points of the curve model, the image may still not exist for the "birational" automorphism).

f(X): GrpAutCrvElt, Pt -> Pt
f(X): GrpAutCrvElt, FldFunFracSchElt -> FldFunFracSchElt
f(X): GrpAutCrvElt, PlcCrvElt -> PlcCrvElt
f(X): GrpAutCrvElt, DivCrvElt -> DivCrvElt
f(X): GrpAutCrvElt, DiffCrvElt -> DiffCrvElt
X @ f: Pt, GrpAutCrvElt -> Pt
X @ f: FldFunFracSchElt, GrpAutCrvElt -> FldFunFracSchElt
X @ f: PlcCrvElt, GrpAutCrvElt -> PlcCrvElt
X @ f: DivCrvElt, GrpAutCrvElt -> DivCrvElt
X @ f: DiffCrvElt, GrpAutCrvElt -> DiffCrvElt
Given a curve automorphism f of curve C and a point, function, differential, place or divisor X on C, this function returns the image (or pushforward) of X under f.
X @@ f: FldFunFracSchElt, GrpAutCrvElt -> FldFunFracSchElt
X @@ f: PlcCrvElt, GrpAutCrvElt -> PlcCrvElt
X @@ f: DivCrvElt, GrpAutCrvElt -> DivCrvElt
X @@ f: DiffCrvElt, GrpAutCrvElt -> DiffCrvElt
Given a curve automorphism f of curve C and a function, differential, place or divisor X on C, this function returns the inverse image (or pullback) of X under f.

Example Crv_crv_autos (H121E19)

Here are some examples of the above functions applied to the genus 3 Fermat curve in characteristic 0.
> P<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P,x^4+y^4+z^4);
> L := Automorphisms(C);
> #L;
24
> // to get all automorphisms, we base change to Q(zeta_8)
> K := CyclotomicField(8);
> C1 := BaseChange(C,K);
> L1 := Automorphisms(C1);
> #L1;
96
> // next, we get the automorphism as a group
> G := AutomorphismGroup(C1);
> g := G!iso<C1 -> C1 | [y,z,x],[z,x,y]>;
> Gp,rep := PermutationRepresentation(G);
> Gp;
Permutation group Gp acting on a set of cardinality 12
Order = 96 = 2^5 * 3
    (2, 4)(3, 5)(6, 8)(7, 10)
    (2, 5, 10, 8, 4, 3, 7, 6)(11, 12)
    (1, 2, 3)(4, 5, 9)(6, 11, 7)(8, 12, 10)
> rep(g);
(1, 8, 4)(2, 9, 6)(3, 10, 11)(5, 7, 12)
> Inverse(rep)(Gp.2);
Mapping from: CrvPln: C1 to CrvPln: C1
with equations :
zeta_8^2*$.1^3*$.3
$.1^3*$.2
$.2^4 + $.3^4
and inverse
zeta_8^2*$.1^3*$.3
-zeta_8^2*$.1^3*$.2
$.2^4 + $.3^4
> $1 eq G.2;
true

Example Crv_crv-iso (H121E20)

In the next example we look at a superelliptic curve over GF(72) with isomorphism group a central extension of PGL2(F7) by a cyclic group of order 4.
> SetSeed(1);
> k := GF(7^2);
> A<x,y> := AffineSpace(k,2);
> C := ProjectiveClosure(Curve(A,y^4-x^7+x));
> G := AutomorphismGroup(C);
> Gp,rep := PermutationRepresentation(G);
> Gp;
Permutation group G acting on a set of cardinality 192
Order = 1344 = 2^6 * 3 * 7
> [Order(G.i) : i in [1..Ngens(G)]];
[ 7, 24, 2 ]
> Z := Centre(Gp); Z;
Permutation group Z acting on a set of cardinality 192
Order = 4 = 2^2
> (Z.1)@@rep;
Mapping from: CrvPln: C to CrvPln: C
with equations :
$.1
k.1^12*$.2
$.3
and inverse
$.1
k.1^36*$.2
$.3
> Gp1 := quo<Gp|Z>;
> boo := IsIsomorphic(Gp1,PGL(2,GF(7)));
> boo;
true
> // Find the representation on the 176 Weierstrass places.
> // Only need the action of the generators of Gp (or G)
> wpls := WeierstrassPlaces(C);
> wpls_perms := [[Index(wpls,g(w)) : w in wpls]: g in Generators(G)];
> G_wpls := SymmetricGroup(#wpls);
> weier_rep := hom<Gp->G_wpls|[G_wpls!p : p in wpls_perms]>;
> //Check that its faithful
> K := Kernel(weier_rep);
> #K;
1

Example Crv_crv-iso (H121E21)

The next example illustrates the use of IsIsomorphic in finding an isomorphism between the well-known plane model of genus 3 curve X(7) and a degree 6 model of it in P3. The isomorphism between C and D is only computed in one direction, but we can then use IsInvertible.

> P2<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P2,x^3*y+y^3*z+z^3*x);
> P3<a,b,c,d> := ProjectiveSpace(Rationals(),3);
> D := Curve(P3,[b^2-a*d,a*b*c+b*d^2+c^3]);
> boo,im := IsIsomorphic(C,D);
> boo;
true
> im;
Mapping from: CrvPln: C to Crv: D
with equations :
x^2
x*z
y*z
z^2
> _,imi := IsInvertible(im);
> Inverse(imi);
Mapping from: CrvPln: C to Crv: D
with equations :
x^2
x*z
y*z
z^2
and inverse
b
c
d

We now compute the automorphism group of C over GF(113) where the full set of 168 automorphisms exists (the group is isomorphic to PSL2(F7)) and generate some subgroups.

> P2<x,y,z> := ProjectiveSpace(GF(11^3),2);
> C := Curve(P2,x^3*y+y^3*z+z^3*x);
> G := AutomorphismGroup(C);
> Order(G);
168
> [Order(g) : g in Generators(G)];
[ 7, 3, 7 ]
> G1 := AutomorphismGroup(C,[G.1,G.2]);
> Order(G1);
21
> PermutationGroup(G1);
Permutation group acting on a set of cardinality 8
Order = 21 = 3 * 7
    (2, 4, 3, 7, 5, 8, 6)
    (3, 5, 4)(6, 8, 7)
> // can also find the normaliser of <G.3> via the
> // permutation rep
> Gp,rep := PermutationRepresentation(G);
> H := Normaliser(Gp,sub<Gp|Gp.3>);
> #H;
21
> Hgens := [g@@rep : g in Generators(H)];
> [Order(g) : g in Hgens];
[ 3, 7 ]
> h := Hgens[1];
> //check directly that h normalises <g> in G
> g := G.3;
> Index([g^i : i in [1..7]],h*g*(h^-1));
4

Quotients of Curves

For G an arbitrary group of automorphisms of a curve C of genus >= 2, the main intrinsic in this section computes a model of the quotient curve C/G along with the explicit projection map C -> C/G.

CurveQuotient(G): GrpAutCrv -> Crv, MapSch
The argument G is a group of automorphisms of a curve C/k, which must be of genus g >= 2. The function computes a projective, non-singular model of C/G, the scheme theoretic quotient of C by G. This is returned with the G-invariant projection map from C down to it.

If k(C) is the function field of C then C/G can be thought of as the curve with function field k(C)G * where G * is the group of field automorphisms of k(C)/k induced by G under function pull-back.

The implementation utilises Magma's Function Field and Invariant Theory functionality and uses a variety of methods. There is no restriction on the characteristic p and the function works in positive characteristic as long as the following assumption is true:

{C -> C/G is tamely ramified when genus(C/G) > 1}

This is equivalent to saying that, for all points P on (the non-singular, projective model of) C, the subgroup GP of G fixing P has order prime to p. In practise, this will only be a problem for very small p > 0 when p | #G.

The algorithm used is slightly different depending on gG, the genus of the quotient curve.

When gG >= 2 and the quotient is non-hyperelliptic, the canonical image of C/G is computed and this is the model returned. This uses function field functionality only.

The case gG >= 2 and the quotient is hyperelliptic is similar, only extra work is needed to find the "y-coordinate". Again everything is done purely with function fields. The model returned is a CrvHyp Weierstrass model if the quotient is hyperelliptic over k, or a bi-quadratic model in P3 if it is only geometrically hyperelliptic.

When gG is 0 or 1, the canonical map methodology used in the above cases fails and we use a combination of Invariant theory and function field methods instead.

For gG = 0, the model returned for C/G is either the projective line P1 or a conic in P2. In this case, the function does not automatically search for k-rational points so, if a conic is returned, the quotient may still be isomorphic to P1 over k.

For gG = 1, the model returned is a projectively normal embedding by quadrics in Pn, n >= 3, or a cubic in P2. Again, the function does not search for k-rational points in order to try to convert the quotient into elliptic curve form.

Example Crv_crv_quots (H121E22)

We start with our old friend the Klein quartic again - this time over Q. The quotient by an automorphism of order 3 is a genus 1 curve. We find this quotient and produce an isomorphism from this to an elliptic curve using the rational point that is the projection of (0:0:1).
> P2<x,y,z> := ProjectiveSpace(Rationals(),2);
> C := Curve(P2,x^3*y+y^3*z+z^3*x);
> phi := iso<C->C|[y,z,x],[z,x,y]>;
> // we will take the quotient by phi
> G := AutomorphismGroup(C,[phi]);
> CG,prj := CurveQuotient(G);
> CG;
Curve over Rational Field defined by
x[1]^2 - 13*x[1]*x[2] + 8*x[1]*x[3] + 10*x[2]*x[3] - 6*x[3]^2 + 15*x[1]*x[4] +
    3*x[2]*x[4] - 6*x[3]*x[4] - 6*x[4]^2,
x[1]^2 - 12*x[1]*x[2] + 3*x[2]^2 + 8*x[1]*x[3] + 12*x[1]*x[4]
> Genus(CG);
1
> // find a minimal elliptic Weierstrass model
> ptCG := prj(C![0,0,1]);
> E1, psi1 := EllipticCurve(CG,ptCG);
> E, psi := MinimalModel(E1);
> prj := Expand(prj * psi1 * psi); // get the composite map C -> E
> E;
Elliptic Curve defined by y^2 + x*y = x^3 - x^2 - 2*x - 1 over Rational Field
> prj;
Mapping from: CrvPln: C to CrvEll: E
with equations :
-2*x^2*y^8 + 2*x*y^8*z - 2*y^9*z - 2*x*y^7*z^2 - 2*x^2*y^5*z^3 + 2*x*y^6*z^3 -
    2*y^7*z^3 + 2*x^2*y^4*z^4 - 2*x^2*y^3*z^5 - 2*y^4*z^6 + 2*y^3*z^7 -
    2*y^2*z^8
4*x^2*y^8 - 2*x*y^9 - 2*x^2*y^7*z - 2*x*y^8*z + 4*y^9*z + 2*x^2*y^6*z^2 +
    4*x*y^7*z^2 - 2*y^8*z^2 + 2*x^2*y^5*z^3 - 4*x*y^6*z^3 + 4*y^7*z^3 -
    4*x^2*y^4*z^4 + 2*x*y^5*z^4 - 2*y^6*z^4 + 4*x^2*y^3*z^5 + 2*y^5*z^5 -
    2*x^2*y^2*z^6 + 2*y^4*z^6 - 4*y^3*z^7 + 4*y^2*z^8 - 2*y*z^9
2*x*y^8*z - 2*x^2*y^5*z^3 - 2*y^4*z^6
> Conductor(E);
49

In fact, C is the modular curve X(7) and E is X0(49). That C/G and E are isogenous elliptic curves also follows from modular form theory.

Example Crv_crv_quots (H121E23)

As a second example we consider the genus 4 modular curve X0(54) with the two commuting Atkin-Lehner involutions W2, W27. We compute the quotients by <W2>, <W27> and <W2, W27> which respectively have genera 2,1,0.
> P<[x]> := ProjectiveSpace(Rationals(),3);
> X054 := Curve(P,[
>   x[2]*x[3] - x[1]*x[4], 4*x[1]^2*x[2] + 2*x[1]*x[2]^2 +
>       x[2]^3 - x[3]^3 + x[3]^2*x[4] - x[3]*x[4]^2]);
> W2 := iso<X054->X054|[1/2*x[4],-x[3],-x[2],2*x[1]],
>                 [1/2*x[4],-x[3],-x[2],2*x[1]]>;
> W27 := iso<X054->X054|
> [
>     -1/3*x[1] - 1/3*x[2] - 1/3*x[3] - 1/3*x[4],
>     -2/3*x[1] - 2/3*x[2] + 1/3*x[3] + 1/3*x[4],
>     -2/3*x[1] + 1/3*x[2] - 2/3*x[3] + 1/3*x[4],
>     -4/3*x[1] + 2/3*x[2] + 2/3*x[3] - 1/3*x[4]
> ],
> [
>     -1/3*x[1] - 1/3*x[2] - 1/3*x[3] - 1/3*x[4],
>     -2/3*x[1] - 2/3*x[2] + 1/3*x[3] + 1/3*x[4],
>     -2/3*x[1] + 1/3*x[2] - 2/3*x[3] + 1/3*x[4],
>     -4/3*x[1] + 2/3*x[2] + 2/3*x[3] - 1/3*x[4]
> ]>;
> // 1. Quotient by <W2>
> G := AutomorphismGroup(X054,[W2]);
> CG,prj := CurveQuotient(G);
> CG;
Hyperelliptic Curve defined by y^2 + (-x^2 - 1)*y = 387*x^6 + 999*x^5 + 785*x^4
    + 294*x^3 + 58*x^2 + 6*x over Rational Field
> Genus(CG);
2
> // 2. Quotient by <W27>
> G := AutomorphismGroup(X054,[W27]);
> CG,prj := CurveQuotient(G);
> CG;
Curve over Rational Field defined by
1878243840*x[1]*x[2] - 68400*x[2]^2 - 680252400*x[1]*x[3] - 774110424*x[2]*x[3]
    + 246079248*x[3]^2 + 1252162560*x[1]*x[4] - 298086240*x[2]*x[4] -
    834823168*x[3]*x[4] - 2254334400*x[1]*x[5] - 447968988*x[2]*x[5] +
    18*x[3]*x[5] + 936*x[4]*x[5] + 346615560*x[1]*x[6] + 63486504*x[2]*x[6] -
    1620*x[5]*x[6] + 14787*x[6]^2,
-4225630080*x[1]*x[2] + 152304*x[2]^2 + 1530412160*x[1]*x[3] +
    1741572584*x[2]*x[3] - 553624072*x[3]^2 - 2817086720*x[1]*x[4] +
    670624096*x[2]*x[4] + 1878164832*x[3]*x[4] + 5071740600*x[1]*x[5] +
    1007828352*x[2]*x[5] - 1824*x[4]*x[5] - 779805580*x[1]*x[6] -
    142830348*x[2]*x[6] + 4*x[3]*x[6] + 3870*x[5]*x[6] - 33021*x[6]^2,
-14377204800*x[1]*x[2] + 512928*x[2]^2 + 5207031920*x[1]*x[3] +
    5925482424*x[2]*x[3] - 1883642044*x[3]^2 - 9584803200*x[1]*x[4] +
    2281707168*x[2]*x[4] + 6390228448*x[3]*x[4] + 64*x[4]^2 +
    17255963160*x[1]*x[5] + 3429009288*x[2]*x[5] - 5472*x[4]*x[5] -
    2653188900*x[1]*x[6] - 485962956*x[2]*x[6] + 14040*x[5]*x[6] -
    111537*x[6]^2,
762945840*x[1]*x[2] - 27648*x[2]^2 - 276319320*x[1]*x[3] - 314444676*x[2]*x[3] +
    99957860*x[3]^2 + 508630560*x[1]*x[4] - 121082832*x[2]*x[4] -
    339106480*x[3]*x[4] - 915713640*x[1]*x[5] - 181965582*x[2]*x[5] +
    360*x[4]*x[5] + 140795640*x[1]*x[6] + 25788312*x[2]*x[6] - 675*x[5]*x[6] +
    5985*x[6]^2,
559393920*x[1]*x[2] - 18864*x[2]^2 - 202594400*x[1]*x[3] - 230548712*x[2]*x[3] +
    73289896*x[3]^2 + 372929280*x[1]*x[4] - 88775136*x[2]*x[4] -
    248632672*x[3]*x[4] - 671395320*x[1]*x[5] - 133415856*x[2]*x[5] +
    103229820*x[1]*x[6] + 18907956*x[2]*x[6] + 16*x[4]*x[6] - 702*x[5]*x[6] +
    4167*x[6]^2,
488083680*x[1]*x[2] - 16272*x[2]^2 - 176767680*x[1]*x[3] - 201158520*x[2]*x[3] +
    63947136*x[3]^2 + 325389120*x[1]*x[4] - 77457888*x[2]*x[4] -
    216937408*x[3]*x[4] - 585806400*x[1]*x[5] - 116408124*x[2]*x[5] + 81*x[5]^2
    + 90070080*x[1]*x[6] + 16497576*x[2]*x[6] - 648*x[5]*x[6] + 3609*x[6]^2,
-103229280*x[1]*x[2] + 3456*x[2]^2 + 37386240*x[1]*x[3] + 42544872*x[2]*x[3] -
    13524760*x[3]^2 - 68819520*x[1]*x[4] + 16382304*x[2]*x[4] +
    45882080*x[3]*x[4] + 123897600*x[1]*x[5] + 24620220*x[2]*x[5] -
    19049760*x[1]*x[6] - 3489228*x[2]*x[6] + 135*x[5]*x[6] - 765*x[6]^2,
5219280*x[1]*x[2] - 216*x[2]^2 - 1890360*x[1]*x[3] - 2151168*x[2]*x[3] +
    683800*x[3]^2 + 3479520*x[1]*x[4] - 828384*x[2]*x[4] - 2319840*x[3]*x[4] -
    6264540*x[1]*x[5] - 1244862*x[2]*x[5] + 963210*x[1]*x[6] + 176418*x[2]*x[6]
    + 45*x[6]^2,
52200*x[1]*x[2] - 18900*x[1]*x[3] - 21510*x[2]*x[3] + 6840*x[3]^2 +
    34800*x[1]*x[4] - 8280*x[2]*x[4] - 23200*x[3]*x[4] - 62640*x[1]*x[5] -
    12447*x[2]*x[5] + 9630*x[1]*x[6] + 1764*x[2]*x[6]
> Genus(CG);
1
> // 3. Quotient by <W2,W27>
> G := AutomorphismGroup(X054,[W2,W27]);
> CG,prj := CurveQuotient(G);
> CG;
Curve over Rational Field defined by
0
> Ambient(CG);
Projective Space of dimension 1
Variables : $.1, $.2
V2.28, 13 July 2023