The K3 Database

The K3 database in Magma is a collection of 24,099 K3 surfaces. Recall from Section K3 Surfaces the meaning of K3 surface in this context, and from Section Key Warning and Disclaimer the relationship between the Hilbert series, the weights and the (Hilbert) numerator.

We describe the set of K3 surfaces selected for inclusion in the database. For g= - 1, 0, 1, 2, all K3 surfaces of genus g are included, there being 4281, 6479, 6627 and 6628 surfaces, respectively. For higher genus, the data associated to the 6628 K3 surfaces of genus 2 propagates in a predictable way, so only those K3 surfaces with codimension at most 7 and genus in the range 3 to 9 have been included.

Data is held in blocks of surfaces indexed by the first five coefficients of their Hilbert series (excluding the constant term). Note that the t-coefficient of the Hilbert series is one more that the genus, and this defect holds for all genera. To determine the number of surfaces of genus 1, the intrinsics described below may be used. Note the genus argument is a sequence beginning with the integer 2: the sequence is arranged so that the user can ask a more precise question by including other leading genera (up to the first five), and the value 2 is to account for the genus--Hilbert coefficient defect.

> D := K3Database();
> NumberOfK3Surfaces(D,[2]);
6627

The database is fairly large, so naive searches take time. Specialised tools, described below, support much more efficient searches and should be used wherever possible. We demonstrate this point with timings for a typical search. The first searches the entire database for all K3 surfaces of genus 3 and takes over 2 minutes. It is much more efficient to use a function that looks up curves according to their genus, since this is the primary indexing property used by the database. The second search does this, and takes only a fraction of the time.

> time S := [ X : X in D | Genus(X) eq 3 ];
Time: 139.510
> time T := [K3Surface(D,[4],i) :i in [1..NumberOfK3Surfaces(D,[4])]];
Time: 0.500

Contents

Searching the K3 Database

In this section a simple example is presented of extracting a K3 surface with particular properties from the K3 database. Section Making New Databases provides much greater details and more examples: note, in particular, that only a few hundred of the surfaces that occur in small codimension have been confirmed to exist (even though the vast majority are believed to exist).

Example GrdRng_k3db-ex1 (H125E8)

We begin by defining D to be the K3 database.
> D := K3Database();
> D;
The database of K3 surfaces
It contains data associated to 24099 (families of) K3 surfaces.
> #D;
24099

There are several ways to access the K3 surfaces in the database. In the first place, the database is organised into blocks of K3 surfaces that have a common genus. These blocks are then subdivided into K3 surfaces that have a common 2-genus. The blocks having a common 2-genus are further subdivided right down to 5-genus, that is, the coefficient of t5 in the Hilbert series. These subdivisions are the natural indexing units of the database. One gets the third surface with genus 0 by

> X := K3Surface(D,0,3);
> X;
K3 surface no.3, genus 0, in codimension 1 with data
  Weights: [ 1, 6, 8, 9 ]
  Basket: 1/2(1,1), 1/3(1,2), 1/9(1,8)
  Degree: 1/18          Singular rank: 11
  Numerator: -t^24 + 1
  Projection to codim 1 K3 no.2 -- type I from 1/9(1,8)
  Unproj'n from codim 2 K3 no.4 -- type I from 1/10(1,9)
  Unproj'n from codim 2 K3 no.15 -- type IV from 1/5(2,3)
  Unproj'n from codim 3 K3 no.28 -- type II_1 from 1/4(1,3)
  Unproj'n from codim 4 K3 no.84 -- type II_2 from 1/3(1,2)
  Unproj'n from codim 6 K3 no.280 -- type II_5 from 1/2(1,1)
This printout displays a lot of information about this surface and its relationship to other surfaces. The minimal printing option may be use to obtain a concise description of this surface alone.
> X:Minimal;
K3 surface (g=0, no.3) in P^3(1,6,8,9)
  Basket: 1/2(1,1), 1/3(1,2), 1/9(1,8)
  Numerator: -t^24 + 1

When using several genera to access a surface, the genus arguments must be collected together in a sequence. For example, there are 282 K3 surfaces whose first three genera are p1 = 0, p2 = 1, p3 = 3; that is, have weights that are of the form [2, 3, 3, ... ].

> NumberOfK3Surfaces(D,[0,1,3]);
282

We get the first of these as follows. The arguments inside the sequence brackets are coefficients of the Hilbert polynomial, while the corresponding genus is one less than the coefficient. N.B. Note the offset by -1 between these arguments and the genera.

> K3Surface(D,[0,1,3],1);
K3 surface no.1130, genus -1, in codimension 4 with data
  Weights: [ 2, 3, 3, 3, 4, 4, 5 ]
  Basket: 2 x 1/2(1,1), 5 x 1/3(1,2)
  Degree: 1/3           Singular rank: 12
  Numerator: t^24 - ... + t^10 - t^9 - 2*t^8 - t^7 - t^6 + 1
  Projection to codim 1 K3 no.820 -- type II_2 from 1/3(1,2)
  Unproj'n from codim 5 K3 no.1131 -- type I from 1/5(2,3)
  Unproj'n from codim 6 K3 no.1145 -- type II_1 from 1/4(1,3)
  Unproj'n from codim 7 K3 no.1412 -- type II_2 from 1/3(1,2)
  Unproj'n from codim 8 K3 no.2176 -- type IV from 1/2(1,1)

The genus and number of a K3 surface identifies it uniquely in the database, so the same function may be used to see surface number 1131 which has projection to X.

> K3Surface(D,-1,1131) : Minimal;
K3 surface (g=-1, no.1131) in P^7(2,3,3,3,4,4,5,5)
  Basket: 1/2(1,1), 4 x 1/3(1,2), 1/5(2,3)
  Numerator: -t^29 + ... + 6*t^11 - 3*t^9 - 4*t^8 - t^7 - t^6 + 1

The projection is from the oneover(5)(2, 3) singularity, resulting in the extra oneover(2)(1, 1) and oneover(3)(1, 2) points.

There are also searches that do not use the primary indexing directly. For example, the following variation of K3Surface searches for a K3 surface with weights 2, 2, 3, 5, 7, 9, 11.

> K3Surface(D,[2,2,3,5,7,9,11]) : Minimal;
K3 surface (g=-1, no.1615) in P^6(2,2,3,5,7,9,11)
  Basket: 3 x 1/2(1,1), 1/11(2,9)
  Numerator: t^39 - ... + t^16 - t^13 - t^11 - t^9 + 1
K3Database() : -> DB
The database of K3 surfaces.
Number(D,X) : DB,GRK3 -> RngIntElt,GRK3
The integer n such that the K3 surface Y := K3Surface(D,Genus(X)+1,n) in the database D has the same Hilbert series as the K3 surface X. The second return value is the K3 surface Y. If there is no such K3 surface, the returned index value is zero.
Index(D,X) : DB,GRK3 -> RngIntElt,GRK3
The integer i such that the K3 surface Y := K3Surface(D,i) in the database D has the same Hilbert series as the K3 surface X. The second return value is the K3 surface Y. If there is no such K3 surface, the returned index value is zero.

Example GrdRng_gr-k3surface (H125E9)

The `Number' of a K3 surface in the database and its `Index' may differ: the K3 surfaces of any fixed genus are numbered separately, while the index runs over the whole database.

To illustrate this, consider the following K3 surface.

> X := K3Surface(1,[[2,1],[3,1],[4,1],[7,1],[8,1]]);
> X;
K3 surface in codimension 11 with data
  Weights: [ 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 6, 7, 8 ]
  Basket: 1/2(1,1), 1/3(1,2), 1/4(1,3), 1/7(1,6), 1/8(1,7)
  Degree: 613/168               Singular rank: 19
  Numerator: -t^47 + ... + 38*t^7 - 2*t^6 - 13*t^5 - 7*t^4 + 1
This surface has been calculated in isolation. The weights that have been assigned to it are just enough to make sense of the initial terms of the Hilbert series, and to make the singularities. By construction, the K3 database may have added weights to make simple projections work. So we search for X in the database using either `Index' or `Number'.
> D := K3Database();
> n,Y := Number(D,X);
> i,Y1 := Index(D,X);
> n,i;
1474 12234
This result means that X has the same Hilbert series as the 1474-th K3 surface in D of genus 1, which is the same as the 12234-th K3 surface in D.
> Y eq Y1;
true
> Y1 eq K3Surface(D,i);
true
One can see that Y is in much higher codimension than X, so that extra weights have been assigned to Y.
> Codimension(Y);
17

Working with the K3 Database

K3Surface(D,i) : DB,RngIntElt -> GRK3
The ith K3 surface in the K3 database D.
K3Surface(D,Q,i) : DB,SeqEnum,RngIntElt -> GRK3
The ith K3 surface in the K3 database D among those with index suite Q = [g1 + 1, g2 + 1, ...].
K3Surface(D,g,i) : DB,RngIntElt,RngIntElt -> GRK3
The ith K3 surface in the K3 database D among those with genus g ≥ - 1.
K3Surface(D,g1,g2,i) : DB,RngIntElt,RngIntElt,RngIntElt -> GRK3
The ith K3 surface in the K3 database D among those with genus g1≥ - 1 and 2-genus g2≥ - 1.
K3Surface(D,W) : DB,SeqEnum -> GRK3
The K3 surface in the K3 database D having the weights specified in the sequence W.
K3Surface(D,g,B) : DB,RngIntElt,GRBskt -> GRK3
K3Surface(D,g,B) : DB,RngIntElt,SeqEnum -> GRK3
The K3 surface in the K3 database D with genus g ≥ - 1 and basket of singularities B (as a basket type or in raw sequence format).
V2.28, 13 July 2023