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 1 variable 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.QQFieldElem} 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.

AbstractAlgebra.integralMethod
integral(x::CobordRingElem, t::ChRingElem)

Compute the integral of an expression in terms of the Chern classes over a cobordism class.

source
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.

IntersectionTheory.hilb_surfaceFunction
hilb_surface(n::Int, c₁², c₂)

Construct the cobordism class of the Hilbert scheme of $n$ points on a surface with given Chern numbers $c_1^2$ and $c_2$.

source

Examples

julia> X = hilb_P2(2)
TnVariety of dim 4 with 9 fixed points

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

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.QQFieldElem} with 2 entries:
  2₂ => 828
  4₁ => 324

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.QQFieldElem} with 2 entries:
  2₂ => 756
  4₁ => 108

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₁₀