# Chern number computations

We gather some Chern numbers related computations here.

## Cobordism ring

Let $\Omega$ be the (complex) cobordism ring with rational coefficients. Milnor showed that $\Omega$ is a polynomial ring freely generated by cobordism classes of projective spaces. We implemented the interface CobordRing and CobordRingElem to model $\Omega$ and its elements. The main application will be the computation of Chern numbers for Hilbert schemes of points on a surface and for generalized Kummer varieties.

julia> Ω = cobordism_ring()
Cobordism Ring

julia> Ω[1]
[P1]

julia> (1 + Ω[1])^2 + Ω[2]
1 + 2*[P1] + [P1]^2 + [P2]

julia> Nemo.PolynomialRing(Ω, ["z"])[1]
Multivariate Polynomial Ring in z over Cobordism Ring

The letter $\Omega$ can be typed using \Omega[tab] in Julia, and of course one can use other letters.

We can plug in an AbsVariety or a TnVariety to construct the cobordism class.

julia> K3 = complete_intersection(proj(3), 4)
AbsVariety of dim 2

julia> Ω(K3)
18*[P1]^2 - 16*[P2]

julia> cobordism_class(K3)
18*[P1]^2 - 16*[P2]

julia> Ω(flag(1,2,3,bott=true))
-3//2*[P1]^3 + 4*[P1]*[P2] - 3//2*[P3]

Each cobordism class is uniquely determined by its Chern numbers and vice versa, so we can perform conversions between a cobordism class and a dictionary of Chern numbers.

IntersectionTheory.chern_numbersMethod
chern_numbers(x::CobordRingElem)
chern_numbers(x::CobordRingElem, P::Vector{<:Partition})
chern_numbers(x::CobordRingElem; nonzero::Bool)

Compute all the Chern numbers of a cobordism class $[X]$ as a dictionary of $\lambda\Rightarrow c_\lambda(X)$, or only those corresponding to partitions in a given vector. Use the argument nonzero=true to display only the non-zero ones.

source
julia> chern_numbers(Ω(K3))
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 2 entries:
1₂ => 0
2₁ => 24

julia> Ω(chern_numbers(K3))
18*[P1]^2 - 16*[P2]

For a top-degree expression in terms of the Chern classes, its integral depends only on the Chern numbers, hence we can perform integration against a cobordism class. We also show the usual integration in Chow ring as a comparison.

julia> integral(Ω[4], todd(4)),                     integral(todd(proj(4)))
(1, 1)

julia> integral(Ω[2]^2, sqrt(todd(4))),             integral(sqrt(todd(proj(2)*proj(2))))
(49//1024, 49//1024)

julia> integral(Ω(flag(1,2,3)), ch(variety(3).T)),  integral(ch(flag(1,2,3).T))
(-1, -1)

## Genus on the cobordism ring

An $R$-valued genus $\phi$ is a ring morphism from $\Omega$ to another ring $R$. The Todd genus is a such example with $R=\mathbf Q$, which maps each generator $[\mathbf P^k]$ to 1. Milnor showed that genera are in one-to-one correspondence with formal power series in $R[[z]]$ with constant coefficient 1: for an $n$-dimensional complex manifold $X$, write $\gamma_i$ with $1\le i\le n$ for the Chern roots of the tangent bundle of $X$, then the power series $f_\phi\in R[[z]]$ satisfies

$$$\phi([X]) = \int_X\prod_{i=1}^nf_\phi(\gamma_i).$$$

For example, the power series for the Todd genus is the Taylor expansion of $\frac{z}{1-\exp(-z)}$. One can also expand the product in the integrand in terms of Chern classes of $X$: this gives one expression in each degree $n$. We will refer to the sum of these expressions as the total class of the genus. For Todd genus, we get the familiar

$$$1+\tfrac12c_1+\tfrac1{12}(c_1^2+c_2)+\cdots$$$

which we can also obtain using todd(n).

IntersectionTheory.universal_genusFunction
universal_genus(n::Int; twist::Int=0)
universal_genus(n::Int, phi::Function; twist::Int=0)

Compute the total class of the universal genus up to degree $n$, possibly with a twist $t$, in terms of the Chern classes.

One can also compute the total class of an arbitrary genus, by specifying the images of the projective spaces using a function phi.

source

One particularly interesting genus is the identity $\mathrm{id}:\Omega \to \Omega$, which we will call the universal genus. One would get a formal power series $f_{\mathrm{id}}$ in $\Omega[[z]]$. We can compute the first terms of this power series, as well as the total class of the genus. We also verify that by taking the integral we indeed get the identity.

julia> IntersectionTheory._taylor(4)
5-element Vector{IntersectionTheory.CobordRingElem}:
1
1//2*[P1]
-1//4*[P1]^2 + 1//3*[P2]
1//4*[P1]^3 - 1//2*[P1]*[P2] + 1//4*[P3]
-5//16*[P1]^4 + 5//6*[P1]^2*[P2] - 1//2*[P1]*[P3] - 2//9*[P2]^2 + 1//5*[P4]

julia> universal_genus(2)
1 + 1//2*[P1]*c₁ + (-1//4*[P1]^2 + 1//3*[P2])*c₁^2 + (3//4*[P1]^2 - 2//3*[P2])*c₂

julia> integral(Ω[2], universal_genus(2))
[P2]

One way to see the universality is to replace each cobordism class in the total class by its Todd genus, then we recover the total Todd class given above. More generally, one can compute the total class for an arbitrary genus in this way.

julia> universal_genus(2, k -> QQ(1))
1 + 1//2*c₁ + 1//12*c₁^2 + 1//12*c₂

One can also twist a genus $\phi$ using the first Chern class $c_1$, and obtain a new genus $\phi_t$

$$$\phi_t([X]) := \int_X e^{t\cdot c_1(X)}\prod_{i=1}^nf_\phi(\gamma_i).$$$

Here we compute the total class for the twisted genus $\mathrm{id}_1$.

julia> universal_genus(2, twist=1)
1 + (1 + 1//2*[P1])*c₁ + (1//2 + 1//2*[P1] - 1//4*[P1]^2 + 1//3*[P2])*c₁^2 + (3//4*[P1]^2 - 2//3*[P2])*c₂

## Chern numbers of the Hilbert scheme of a surface

Let $S$ be a smooth projective surface. Ellingsrud–Göttsche–Lehn showed that the cobordism class of the Hilbert scheme $S^{[n]}$ of $n$ points on $S$ depends only on the cobordism class of $S$. In other words, the Chern numbers of $S^{[n]}$ only depends on the Chern numbers of $S$, $c_1(S)^2$ and $c_2(S)$. One can therefore consider the generating series

$$$H([S])=H(S):=\sum_{n=0}^\infty\big[S^{[n]}\big]z^n\in\Omega[[z]].$$$

Moreover, it is shown that

$$$H(a_1[S_1]+a_2[S_2]) = H(S_1)^{a_1}\cdot H(S_2)^{a_2}.$$$

On the other hand, the cobordism classes of surfaces are linearly generated by $[\mathbf P^2]$ and $[\mathbf P^1\times \mathbf P^1]$, hence it will suffice to compute only two generating series. For these two surfaces, their Hilbert schemes admit natural torus actions, so the Chern numbers can be readily computed using Bott's formula.

We provide the constructors for $(\mathbf P^2)^{[n]}$ and $(\mathbf P^1\times \mathbf P^1)^{[n]}$ as TnVariety, which will allow the computation of their Chern numbers using Bott's formula. Then we implement a function that computes the cobordism class of $S^{[n]}$ for an arbitrary cobordism class $[S]$ specified by its two Chern numbers $c_1^2$ and $c_2$, using the strategy described above.

### Examples

julia> X = hilb_P2(2)
TnVariety of dim 4

julia> chern_numbers(X)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 5 entries:
1₄   => 243
4₁   => 9
2₁1₂ => 162
3₁1₁ => 54
2₂   => 90

julia> hilb_surface(2, 0, 24)
36*[P1]^4 + 36*[P1]^2*[P2] - 225*[P1]*[P3] + 84*[P2]^2 + 72*[P4]

julia> hilb_K3(2)
36*[P1]^4 + 36*[P1]^2*[P2] - 225*[P1]*[P3] + 84*[P2]^2 + 72*[P4]

julia> chern_numbers(hilb_K3(2), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 2 entries:
4₁ => 324
2₂ => 828

julia> integral(hilb_K3(2), sqrt(todd(4)))
25//32

We record the following Chern numbers, since these are not found in the literature (click to expand).

$\mathrm{K3}^{[5]}$
julia> chern_numbers(hilb_K3(5), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 7 entries:
10₁  => 176256
6₁4₁ => 5075424
6₁2₂ => 12168576
8₁2₁ => 1774080
4₁2₃ => 52697088
2₅   => 126867456
4₂2₁ => 21921408

$\mathrm{K3}^{[6]}$
julia> chern_numbers(hilb_K3(6), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 11 entries:
6₁4₁2₁ => 392090040
8₁4₁   => 59314272
8₁2₂   => 139942280
12₁    => 1073720
6₁2₃   => 927397840
10₁2₁  => 14450680
4₃     => 697106648
2₆     => 9277276480
4₁2₄   => 3910848640
4₂2₂   => 1650311720
6₂     => 93495320

$\mathrm{K3}^{[7]}$
julia> chern_numbers(hilb_K3(7), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 15 entries:
8₁6₁   => 1296158976
10₁4₁  => 569044224
10₁2₂  => 1324608768
6₁2₄   => 79324710912
6₁4₂   => 14528215296
8₁4₁2₁ => 5296568832
6₁4₁2₂ => 33935583744
4₃2₁   => 59674012416
2₇     => 765374164992
4₁2₅   => 326732507136
6₂2₁   => 8273055744
4₂2₃   => 139582386432
12₁2₁  => 102477312
8₁2₃   => 12357114624
14₁    => 5930496

$\mathrm{K3}^{[8]}$
julia> chern_numbers(hilb_K3(8), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 22 entries:
10₁2₃   => 133823975040
8₁2₄    => 1205400258720
4₂2₄    => 13094639681760
8₁4₂    => 225987046020
2₈      => 70277256403200
14₁2₁   => 649511820
4₁2₆    => 30327407026560
8₂      => 21049285275
6₁2₅    => 7517275416000
8₁6₁2₁  => 130128762960
10₁4₁2₁ => 58033047240
6₁4₂2₁  => 1405173296520
6₂4₁    => 349760996280
12₁4₁   => 4678568010
12₁2₂   => 10767198960
16₁     => 30178575
4₄      => 2445207931980
8₁4₁2₂  => 521787430080
6₁4₁2₃  => 3249219677760
6₂2₂    => 807925003200
10₁6₁   => 14525621460
4₃2₂    => 5657019716880

$\mathrm{K3}^{[9]}$
julia> chern_numbers(hilb_K3(9), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 30 entries:
8₁4₂2₁  => 24530800855040
6₁4₂2₂  => 148696308725760
10₁2₄   => 14747557928960
6₁4₁2₄  => 340787113328640
8₂2₁    => 2360786818560
14₁4₁   => 33938470560
14₁2₂   => 77346804480
16₁2₁   => 3748665600
10₁4₂   => 2821199089280
10₁8₁   => 273089658720
6₁2₆    => 781347805921280
6₃      => 9553579524480
2₉      => 7105044485242880
8₁4₁2₃  => 56155350159360
4₁2₇    => 3095054052884480
8₁6₁4₁  => 6227441933120
18₁     => 143184000
6₂4₁2₁  => 37660572692480
4₄2₁    => 256482451425280
12₁4₁2₁ => 539392972800
6₁4₃    => 64907421320960
12₁6₁   => 137685310240
4₃2₃    => 588050734243840
8₁2₅    => 128601459097600
12₁2₃   => 1231467509760
6₂2₃    => 86242390425600
10₁6₁2₁ => 1640647441920
4₂2₅    => 1348811566120960
8₁6₁2₂  => 14244457018880
10₁4₁2₂ => 6448976952320

$\mathrm{K3}^{[10]}$
julia> chern_numbers(hilb_K3(10), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 42 entries:
6₂2₄     => 9985643035208064
12₁6₁2₁  => 17364913158312
4₅       => 12856151785953456
2₁₀      => 784015765747670016
8₁6₂     => 191775038293488
6₁4₁2₅   => 38843392796682624
6₃2₁     => 1131809390142912
10₁2₅    => 1758703316056704
6₂4₁2₂   => 4394286954851616
12₁4₁2₂  => 67076166081096
8₁4₃     => 1269802518792480
12₁2₄    => 152045432439552
12₁4₂    => 29600340453792
4₁2₈     => 344349868718803968
12₁8₁    => 2965017020340
8₁6₁4₁2₁ => 743198906501136
4₂2₆     => 151292288348880768
4₄2₂     => 29232974793607632
20₁      => 639249300
6₁4₃2₁   => 7515004051819440
10₁6₁2₂  => 200033938656144
6₂4₂     => 1934365074963120
8₂4₁     => 126041828580756
10₁4₂2₁  => 341463574094256
14₁4₁2₁  => 4384872164952
16₁4₁    => 221782223484
16₁2₂    => 501196808844
14₁6₁    => 1138643559096
10₁8₁2₁  => 34013661979068
6₁4₂2₃   => 17082588734970336
6₁2₇     => 88352799453985536
4₃2₄     => 66492814703915520
8₁6₁2₃   => 1687307749020288
10₁4₁2₃  => 774819641550240
10₂      => 4065174516348
8₁4₁2₄   => 6551210934127872
8₁4₂2₂   => 2883767951787984
18₁2₁    => 19976926140
10₁6₁4₁  => 88209449234208
8₂2₂     => 285897881921148
14₁2₃    => 9924722506512
8₁2₆     => 14887462352860800

## Chern numbers of the generalized Kummer varieties

By results of Nieper-Wißkirchen, the cobordism classes of generalized Kummer varieties can be obtained using the generating series $H(S)$ for one surface $S$ with $c_1(S)^2\ne0$, along with the values of $H(S)$ under the twisted genus $\mathrm{id}_1$ and $\mathrm{id}_{-1}$. We take $S$ to be the projective plane $\mathbf P^2$.

### Examples

julia> generalized_kummer(2)
-378*[P1]^4 + 972*[P1]^2*[P2] - 675*[P1]*[P3] - 132*[P2]^2 + 216*[P4]

julia> chern_numbers(generalized_kummer(2), nonzero=true)
Dict{AbstractAlgebra.Generic.Partition{Int64}, Nemo.fmpq} with 2 entries:
4₁ => 108
2₂ => 756

## A polynomial defined by Libgober–Wood

Libgober–Wood defined a universal polynomial with coefficients in Chern numbers of an $n$-dimensional compact Kähler manifold, which can be used to obtain restrictions on certain topological invariants. They are computed up to dimension 9 in this survey.

We have a function to compute this polynomial. The dimension-10 one can be computed in less than 1 second, and the dimension-16 one in about 1 minute.

Of course one can also compute the value of this polynomial for a specific variety.

### Examples

julia> libgober_wood_polynomial(3)
-1//24*c₁*c₂*z^3 + (1//12*c₁*c₂ + 1//2*c₃)*z^2 - 3//2*c₃*z + c₃

julia> libgober_wood_polynomial(proj(6))
z^6 - 7*z^5 + 21*z^4 - 35*z^3 + 35*z^2 - 21*z + 7

The degree-2 term is shown to depend on only two Chern numbers.

julia> [Nemo.coeff(libgober_wood_polynomial(n), 2) for n in 1:10]
10-element Vector{IntersectionTheory.ChRingElem}:
0
1//12*c₁^2 + 1//12*c₂
1//12*c₁*c₂ + 1//2*c₃
1//12*c₁*c₃ + 7//6*c₄
1//12*c₁*c₄ + 25//12*c₅
1//12*c₁*c₅ + 13//4*c₆
1//12*c₁*c₆ + 14//3*c₇
1//12*c₁*c₇ + 19//3*c₈
1//12*c₁*c₈ + 33//4*c₉
1//12*c₁*c₉ + 125//12*c₁₀

We observe that there should be similar results for the degree-4 term.

julia> [Nemo.coeff(libgober_wood_polynomial(n), 4) for n in 1:10]
10-element Vector{IntersectionTheory.ChRingElem}:
0
0
0
-1//720*c₁^4 + 1//180*c₁^2*c₂ + 1//240*c₂^2 + 1//720*c₁*c₃ - 1//720*c₄
-1//720*c₁^3*c₂ + 1//240*c₁*c₂^2 + 1//720*c₁^2*c₃ + 29//720*c₁*c₄ + 1//24*c₅
-1//720*c₁^3*c₃ + 1//240*c₁*c₂*c₃ + 1//720*c₁^2*c₄ - 1//240*c₃^2 + 1//240*c₂*c₄ + 23//240*c₁*c₅ + 31//120*c₆
-1//720*c₁^3*c₄ + 1//240*c₁*c₂*c₄ + 1//720*c₁^2*c₅ - 1//240*c₃*c₄ + 1//240*c₂*c₅ + 31//180*c₁*c₆ + 301//360*c₇
-1//720*c₁^3*c₅ + 1//240*c₁*c₂*c₅ + 1//720*c₁^2*c₆ - 1//240*c₃*c₅ + 1//240*c₂*c₆ + 97//360*c₁*c₇ + 81//40*c₈
-1//720*c₁^3*c₆ + 1//240*c₁*c₂*c₆ + 1//720*c₁^2*c₇ - 1//240*c₃*c₆ + 1//240*c₂*c₇ + 31//80*c₁*c₈ + 331//80*c₉
-1//720*c₁^3*c₇ + 1//240*c₁*c₂*c₇ + 1//720*c₁^2*c₈ - 1//240*c₃*c₇ + 1//240*c₂*c₈ + 379//720*c₁*c₉ + 1087//144*c₁₀