# Automorphism Groups of K3 surfaces

A complex K3 surface is a compact complex surface $X$ with vanishing irregularity $h^1(X, \mathcal{O}_X)=0$ and trivial canonical bundle $\mathcal{O}_X\cong \omega_X$.

Much of the theory of (complex) K3 surfaces is governed by its Hodge structure and the $\mathbb{Z}$-lattices $NS(X) \subseteq H^2(X, \mathbb{Z})$.

See Daniel Huybrechts (2016) for the theory of K3 surfaces.

## Automorphisms

`K3_surface_automorphism_group`

— Method`K3_surface_automorphism_group(S::ZLat [, ample_class]) -> generators, rational curves, chambers`

Compute the automorphism group of a very-general $S$-polarized K3 surface.

Further return representatives of the $\mathrm{Aut}(X)$-orbits of (-2)-curves on `X`

and a fundamental domain for the action of $\mathrm{Aut}(X)$ on the set of nef L|S chambers. This is almost a fundamental domain for $\mathrm{Aut}(X)$ on the nef cone.

Here very general means that $Num(X)$ is isomorphic to `S`

and the image of $\mathrm{Aut}(X) \to H^0(X,\Omega^2_X)$ is $ \pm 1$.

The function returns generators for the image of

\[f\colon \mathrm{Aut}(X) \to O(Num(X))\]

The output is represented with respect to the basis of `S`

.

Note that under our genericity assumptions the kernel of $f$ is of order at most $2$ and it is equal to $2$ if and only if $S$ is $2$-elementary. If an ample class is given, then the generators returned preserve it.

This kind of computation can be very expensive. To print progress information use `set_verbose_level(:K3Auto, 2)`

or higher.

**Input**

`S`

: a hyperbolic lattice`ample`

: a row matrix or a vector given with respect to the ambient space of S.

`borcherds_method`

— Function```
borcherds_method(S::ZLat, n::Integer; compute_OR=true, entropy_abort=false, max_nchambers=-1)
borcherds_method(L::ZLat, S::ZLat, w::QQMatrix; compute_OR=true, entropy_abort=false, max_nchambers=-1)
```

Compute the symmetry group of a Weyl chamber up to finite index.

**Arguments**

`w`

: initial Weyl row vector represented with respect to the basis of`L`

;`L`

: even, unimodular, hyperbolic lattice of rank n=10,18 or 26;`S`

: a primitive sublattice of`L`

;`compute_OR=true`

: if false take as`G`

all isometries of`S`

extending to`L`

;`max_nchambers`

: break the computation after`max_nchambers`

are found;`entropy_abort`

abort if an automorphism of positive entropy is found.

`K3Chamber`

— Type`K3Chamber`

The $L|S$ chamber induced from a Weyl vector in `L`

.

Let $L$ be an even, unimodular and hyperbolic lattice of rank $10$, $18$ or $26$ and $S$ be a primitive sublattice. Any Weyl vector $w$ of $L$ defines a Weyl chamber $C(w)$ in the positive cone of $L$. The Weyl chamber is a rational locally polyhedral cone with infinitely many facets, i.e. walls. It is the intersection of the positive half-spaces defined by $\Delta_L(w) = \{r \in L | r^2=-2, r.w = 1\}$. We have

\[C(w)=\{x \in \mathcal{P}_L | \forall r \in \Delta_L(w): x.r \geq 0\}\]

The Weyl chamber is a fundamental domain for the action of the Weyl group on the positive cone. We say that $S \otimes \mathbb{R} \cap C(w)$ is the $L|S$-chamber induced by $w$.

Note that two Weyl vectors induce the same chamber if and only if their orthogonal projections to $S$ coincide.

`chamber`

— Function`chamber(data::BorcherdsCtx, weyl_vector::ZZMatrix, [parent_wall::ZZMatrix, walls::Vector{ZZMatrix}])`

Return the $L|S$-chamber with the given Weyl vector.

The lattices $L$ and $S$ are stored in `data`

. Via the parent walls we can obtain a spanning tree of the chamber graph.

`weyl_vector`

— Method`weyl_vector(D::K3Chamber) -> ZZMatrix`

Return the Weyl vector defining this chamber.

`walls`

— Method`walls(D::K3Chamber) -> Vector{ZZMatrix}`

Return the walls of the chamber `D`

, i.e. its facets.

The corresponding half space of the wall defined by `v`

in `walls(D)`

is

\[\{x \in S \otimes \mathbb{R} | \langle x,v \rangle \geq 0\}.\]

`v`

is given with respect to the basis of `S`

and is primitive in `S`

.

Note that Ichiro Shimada (2015) follows a different convention and takes `v`

primitive in `S^\vee`

.

`inner_point`

— Method```
inner_point(L::ZLat, S::ZLat, w::QQMatrix)
inner_point(C::K3Chamber)
```

Return a reasonably small integer inner point of the given L|S chamber.

`rays`

— Method`rays(D::K3Chamber)`

Return the rays of the chamber `D`

.

They are represented as primitive row vectors with respect to the basis of `S`

.

`aut`

— Method`aut(E::K3Chamber) -> Vector{ZZMatrix}`

Return the stabilizer $\mathrm{Aut}_G(E)$ of $E$ in $G$.

The elements are represented with respect to the basis of $S$.

`hom`

— Method`hom(D::K3Chamber, E::K3Chamber) -> Vector{ZZMatrix}`

Return the set $\mathrm{Hom}_G(D, E)$ of elements of $G$ mapping `D`

to `E`

.

The elements are represented with respect to the basis of $S$.

`adjacent_chamber`

— Method`adjacent_chamber(D::K3Chamber, v::ZZMatrix) -> K3Chamber`

Return return the $L|S$ chamber adjacent to `D`

via the wall defined by `v`

.

`separating_hyperplanes`

— Method`separating_hyperplanes(S::ZLat, v::QQMatrix, h::QQMatrix, d)`

Return $\{x \in S | x^2=d, x.v>0, x.h<0\}$.

**Arguments**

`S`

: a hyperbolic lattice`d`

: a negative integer`v`

,`h`

: vectors of positive square

`has_zero_entropy`

— Function`has_zero_entropy(S::ZLat; rank_unimod=26) ->`

Compute if the symmetry group of a Weyl chamber is elliptic, parabolic or hyperbolic.

**Output**

`1`

- elliptic – the symmetry group is finite`0`

- parabolic – there is a unique cusp with infinite stabilizer`-1`

- hyperbolic – positive entropy

This calls `borcherds_method`

and breaks the computation as soon as a symmetry of a Weyl chamber with positive entrop is found.

## Contact

Please direct questions about this part of OSCAR to the following people:

You can ask questions in the OSCAR Slack.

Alternatively, you can raise an issue on github.