# Isomorphisms

Isomorphisms and automorphisms of plane quartics have been implemented following the covariant method due to van Rijnswou [[van Rijnswou, 2001](../../references.md#cite-vanrijnswou01)] that is also used in another form in the reconstruction algorithms. Let $C_1$ and $C_2$ be two plane quartic curves over a field $k$. The present algorithm first checks for equality of normalized Dixmier–Ohno invariants of $C_1$ and $C_2$, since if this equality does not hold, no isomorphisms can exist.

If this condition is satisfied, the algorithms first try to find the actual isomorphisms $C_1 \to C_2$ under the assumption that $I_{12} \neq 0$. In this case, [[van Rijnswou, 2001](../../references.md#cite-vanrijnswou01)] shows that the use of a suitable covariant reduces this question to finding transformations between certain binary forms associated to $C_1$ and $C_2$, which leads us to the same computation of elements in ${\rm GL}_2 (k)$. In non-generic cases, a direct Gröbner basis method due to Michael Stoll is used.

Once again the algorithms admit both a version over the base field and a geometric version, with the latter finding the isomorphisms over the algebraic closure of $k$. Both versions are very efficient over finite fields, and the version over the base field is also reasonably fast for $k = {\mathbb{Q}}$. By contrast, finding geometric isomorphisms between plane quartic curves over the rationals can still take a fair amount of time. For more general fields, the implementation still takes too long, and our functions therefore restrict considerations to the cases where $k$ is either finite or the rational field.

## `IsIsomorphicPlaneQuartics(X1, X2): CrvPln, CrvPln -> BoolElt, SeqEnum`

## `IsIsomorphicTernaryQuartics(f1, f2): RngMPolElt, RngMPolElt -> BoolElt, SeqEnum`

```magma
geometric: BoolElt                    Default: false
```

Determine if the plane quartic curves $X_1$ and $X_2$ or the ternary quartics $f_1$ and $f_2$ are isomorphic, and return the isomorphism between them. If the flag `geometric` is set to `true`, then test is performed over the algebraic closure of the base field, over which the isomorphisms are then determined as well.

## `IsomorphismsOfPlaneQuartics(X1, X2): CrvPln, CrvPln -> SeqEnum`

## `IsomorphismsOfTernaryQuartics(f1, f2): RngMPolElt, RngMPolElt -> SeqEnum`

```magma
geometric: BoolElt                    Default: false
```

Return the isomorphisms between the plane quartic curves $X_1$ and $X_2$ or between then ternary quartic forms $f_1$ and $f_2$. If the flag `geometric` is set to `true`, then the isomorphisms over the algebraic closure of the base field are returned.

## `AutomorphismsOfPlaneQuartic(X): CrvPln -> SeqEnum`

## `AutomorphismsOfTernaryQuartic(f): RngMPolElt -> SeqEnum`

```magma
geometric: BoolElt                    Default: false
```

Return the automorphisms of the plane quartic curve $X$ or the ternary quartic form $f$ as matrices. If the flag `geometric` is set to `true`, then the automorphisms over the algebraic closure of the base field are returned.

## `AutomorphismGroupOfPlaneQuartic(X): CrvPln -> GrpPerm, Map`

## `AutomorphismGroupOfTernaryQuartic(f): RngMPolElt -> GrpPerm, Map`

```magma
geometric: BoolElt                    Default: false
explicit : BoolElt                    Default: false
```

Return the automorphisms of the plane quartic curve $X$ or the ternary quartic form $f$ as an abstract group, along with a map from said group to a matrix group if the flag `explicit` is set to `true`. If the flag `geometric` is set to `true`, then the automorphisms over the algebraic closure of the base field are returned.

## `Example: Auts Ex (ex-153f49)`

We determine the automorphisms of a plane quartic over the rationals.

```magma
> P<x,y,z> := PolynomialRing(Rationals(), 3);
> PP := ProjectiveSpace(P);
> C := Curve(PP, x^3*y+y^3*z+z^3*x);
> aut, phi := AutomorphismGroupOfPlaneQuartic(C : geometric:=true,
>                  explicit := true);
> aut;
Permutation group aut acting on a set of cardinality 8
Order = 168 = 2^3 * 3 * 7
    (2, 3, 4)(5, 8, 7)
    (2, 4, 5)(3, 6, 7)
    (1, 2)(3, 7)(4, 5)(6, 8)
> GroupName(aut);
PSL(2,7)
> [phi(aut.i) : i in [1..Ngens(aut)]];
[
    [0 0 1]
    [1 0 0]
    [0 1 0],

    [0 0 -r1^5 - r1^4 - r1^3 - r1^2 - r1 - 1]
    [1 0 0]
    [0 r1^4 0],

    [1 r1^2 + r1 -r1^5 - r1^4 - r1^3]
    [-r1^4 - r1^3 - r1^2 - r1 - 1 r1^5 + r1^4 + r1^3 + r1^2 -r1^5 - r1^4 - r1^3
        - r1^2 - r1 - 1]
    [-r1^4 - r1^3 - r1^2 r1 r1^4 + r1^3]
]

```

## `AutomorphismGroupOfPlaneQuartic(X, Autos): CrvPln, SeqEnum -> GrpPerm, Map`

## `AutomorphismGroupOfTernaryQuartic(f, Autos): RngMPolElt, SeqEnum -> GrpPerm, Map`

```magma
explicit: BoolElt                    Default: false
```

Return the automorphisms Autos of the plane quartic curve $X$ or the ternary quartic form $f$ as an abstract group, along with a map from said group to a matrix group if the flag `explicit` is set to `true`.

## `GeometricAutomorphismGroup(C): Crv -> GrpPerm`

Compute the geometric automorphism group of the elliptic, hyperelliptic, or plane quartic curve $C$.
