Computing twisted Hodge diamonds for Hilbert schemes of points on surfaces¶
Compute twisted Hodge numbers for Hilbert schemes of points
We implement the twisted Hodge number formula for Hilbert schemes of points on surfaces, as
stated in Conjecture E of [2309.06244],
proven in [Fu].
It reads
Here, $L$ is a line bundle on a smooth projective surface $S$ (or a compact complex surface), $\operatorname{Hilb}^nS$ is the Hilbert scheme of $n$ points on $S$, and $L_n$ is the induced line bundle on the Hilbert scheme. One is referred to [Fu] for more details.
This formula computes the twisted Hodge numbers of $L_n$ on the Hilbert scheme, i.e.,
An interesting example where things can be computed also using an explicit description of the Hilbert scheme is $\operatorname{Hilb}^2\mathbb{P}^2$, where the Hochschild cohomology (or rather, Hochschild–Kostant–Rosenberg decomposition) is computed, which corresponds to the twisted Hodge diamond using the anticanonical line bundle, cf. [Section 4.2, 2309.06244]:
sage: from twisted_hilbert import *
sage: S = CompleteIntersectionSurface([], 3) # anticanonical twist
sage: TwistedHilbertSchemeDiamond(S, 2).as_parallelogram()
1
0 8
0 10 38
0 0 35 80
0 0 0 28 55
0 0 0 0
0 0 0
0 0
0
[2309.06244] Pieter Belmans, Lie Fu, Andreas Krug, Hochschild cohomology of Hilbert schemes of points on surfaces arXiv:2309.06244
[Fu] Lie Fu: Twisted Hodge numbers and deformation theory of Hilbert schemes of points on surfaces via Hodge modules
AUTHORS:
Pieter Belmans (2024-12-12): initial version
Twisted Hodge diamonds¶
- class twisted_hilbert.TwistedHilbertSchemeDiamond(S: TwistedSurfaceDiamonds, n)[source]¶
Construct twisted Hodge diamond Hilbert schemes of $n$ points on $S$
INPUT:
S
– twisted Hodge diamonds for powers of a line bundlen
– number of points
EXAMPLES:
Anticanonically twisted Hodge diamond of $\operatorname{Hilb}^2\mathbb{P}^2$:
sage: from twisted_hilbert import * sage: S = CompleteIntersectionSurface([], 3) sage: H = TwistedHilbertSchemeDiamond(S, 2) sage: H twisted Hodge diamond for Hilb^2 S sage: H.pprint() 0 0 0 0 0 0 0 0 0 0 1 10 0 0 0 8 35 0 0 38 28 0 80 0 55
Anticanonically twisted Hodge diamond of $\operatorname{Hilb}^2S$ where $S$ is a bielliptic surface with canonical bundle of order 2:
sage: TwistedHilbertSchemeDiamond(BiellipticSurface(2), 2).pprint() 0 0 0 0 2 0 1 4 4 1 1 3 8 3 1 1 4 4 1 0 2 0 0 0 0
Anticanonically twisted Hodge diamond of $\operatorname{Hilb}^2S$ where $S$ is a bielliptic surface with canonical bundle of order 3:
sage: TwistedHilbertSchemeDiamond(BiellipticSurface(3), 2).pprint() 0 0 0 0 0 0 1 1 1 0 1 2 2 1 0 1 1 1 0 0 0 0 0 0 0
- twisted_hilbert.twisted_hilbert.HilbertSchemeDeformations(HKR: TwistedHodgeDiamond)[source]¶
The degree 0, 1 and 2 cohomology of the tangent bundle of a Hilbert scheme
This implements Theorem 1.5 of [Fu]. It it expected that the user inputs the anticanonical Hodge diamond, describing the Hochschild cohomology of the surface.
For this one doesn’t have to be able to compute all the twisted Hodge diamonds required to describe the twisted Hodge diamond giving all of the Hochschild cohomology of the Hilbert scheme, a single twisted Hodge diamond, for the anticanonical twist, suffices.
EXAMPLES:
Our favourite example is still $\operatorname{Hilb}^2\mathbb{P}^2$:
sage: from twisted_hilbert import * sage: HilbertSchemeDeformations(CompleteIntersectionSurface([], 3)[1]) [8, 10, 0]
- class twisted_hilbert.TwistedHodgeDiamond(parent, M)[source]¶
Container structure for twisted Hodge diamonds.
EXAMPLES:
The twisted Hodge diamond for the projective plane and anticanonical bundle:
sage: from twisted_hilbert import * sage: H = TwistedHodgeDiamond.from_matrix([[10, 0, 0], [8, 0, 0], [1, 0, 0]]) sage: H twisted Hodge diamond sage: H.pprint() 0 0 0 1 0 0 8 0 10
Notice how (twisted) Hodge diamond are printed in a funny way, with $\mathrm{h}^{0,0}$ at the bottom.
- __init__(parent, M)[source]¶
Constructor for a TwistedHodgeDiamond (not to be called directly)
INPUT:
M
– matrix encoding twisted Hodge diamond
This function should not be called directly, use the class method
TwistedHodgeDiamond.from_matrix()
instead.
- classmethod from_matrix(M)[source]¶
Construct a twisted Hodge diamond from a matrix
INPUT:
M
– square matrix encoding twisted Hodge diamond
EXAMPLES:
The twisted Hodge diamond for the projective plane and anticanonical bundle:
sage: from twisted_hilbert import * sage: H = TwistedHodgeDiamond.from_matrix([[10, 0, 0], [8, 0, 0], [1, 0, 0]]) sage: H.pprint() 0 0 0 1 0 0 8 0 10
- dimension()[source]¶
Dimension of the variety underlying the twisted Hodge diamond
EXAMPLES:
sage: from twisted_hilbert import * sage: EnriquesSurface()[0].dimension() 2 sage: TwistedHilbertSchemeDiamond(EnriquesSurface(), 3).dimension() 6
- pprint()[source]¶
Pretty print the twisted Hodge diamond
EXAMPLES:
The twisted Hodge diamond for the projective plane and anticanonical bundle:
sage: from twisted_hilbert import * sage: H = TwistedHodgeDiamond.from_matrix([[10, 0, 0], [8, 0, 0], [1, 0, 0]]) sage: H.pprint() 0 0 0 1 0 0 8 0 10
- as_parallelogram()[source]¶
Return the twisted Hodge diamond as polyvector parallelogram
It is up to the user to make sure that the twisted Hodge diamond is computed using the anticanonical bundle.
EXAMPLES:
Our favourite example is still $\operatorname{Hilb}^2\mathbb{P}^2$:
sage: from twisted_hilbert import * sage: H = TwistedHilbertSchemeDiamond(CompleteIntersectionSurface([], 3), 2) sage: H.as_parallelogram() 1 0 8 0 10 38 0 0 35 80 0 0 0 28 55 0 0 0 0 0 0 0 0 0 0
- __str__()[source]¶
Pretty print a twisted Hodge diamond
This gets called when you specifically print the object.
EXAMPLES:
The twisted Hodge diamond for the projective plane and anticanonical bundle:
sage: from twisted_hilbert import * sage: H = TwistedHodgeDiamond.from_matrix([[10, 0, 0], [8, 0, 0], [1, 0, 0]]) sage: print(H) 0 0 0 1 0 0 8 0 10
- __eq__(other)[source]¶
Compare two twisted Hodge diamonds
INPUT:
other
– the other twisted Hodge diamond
EXAMPLES:
Twisted Hodge diamonds for bielliptic surfaces are (not) the same:
sage: from twisted_hilbert import * sage: BiellipticSurface(2)[0] == BiellipticSurface(3)[0] True sage: BiellipticSurface(2)[1] == BiellipticSurface(3)[1] False
- __getitem__(key)[source]¶
Return $\mathrm{h}^{p,q}(X,L)$
This is
\[\dim\mathrm{H}^q(X,\Omega_X^p\otimes L)\]corresponding to the entry indexed by $p$ and $q$ in the matrix, where we take key=(p,q).
INPUT:
key
: tuple of indices for the twisted Hodge diamond
EXAMPLES:
The twisted Hodge diamond for the projective plane and anticanonical bundle:
sage: from twisted_hilbert import * sage: H = TwistedHodgeDiamond.from_matrix([[10, 0, 0], [8, 0, 0], [1, 0, 0]]) sage: H[0, 0] 10 sage: H[1, 0] 8
- __hash__ = None¶
- __weakref__¶
list of weak references to the object
Surfaces¶
- class twisted_hilbert.TwistedSurfaceDiamonds[source]¶
Encodes twisted Hodge diamonds of surface and powers of a line bundle
This makes it possible to implement both a class that knows all about a surface and one that only contains a finite amount of data.
- classmethod from_list(diamonds)[source]¶
Construct a
TwistedSurfaceDiamonds
object from a list of matricesThis is the basic approach, and limits the calculation of twisted Hodge numbers to however many entries are provided.
INPUT:
diamonds
– list of 3x3 matrices with twisted Hodge numbers
EXAMPLES:
Twisted Hodge numbers of the projective plane:
sage: from twisted_hilbert import * sage: P2 = [None, None, None] sage: P2[0] = matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) sage: P2[1] = matrix([[10, 0, 0], [8, 0, 0], [1, 0, 0]]) sage: P2[2] = matrix([[28, 0, 0], [35, 0, 0], [10, 0, 0]]) sage: S = TwistedSurfaceDiamonds.from_list(P2)
- __weakref__¶
list of weak references to the object
- class twisted_hilbert.BiellipticSurface(order)[source]¶
TwistedSurfaceDiamonds
for a bielliptic surfaceThe line bundle is the anticanonical line bundle
- __getitem__(k)[source]¶
Get the twisted Hodge diamond for the kth power of the anticanonical bundle
INPUT:
k
– power of the anticanonical bundle
The calculations are based on the basic results of Section 4.3 of [2309.06244], and provide an independent verification of the conclusions.
EXAMPLES:
The bigraded version of Lemma 4.7:
sage: from twisted_hilbert import * sage: BiellipticSurface(2)[1].as_parallelogram() 1 1 1 0 2 0 1 1 1 sage: BiellipticSurface(3)[1].as_parallelogram() 1 1 1 0 1 0 0 0 0 sage: BiellipticSurface(4)[1].as_parallelogram() 1 1 1 0 1 0 0 0 0 sage: BiellipticSurface(6)[1].as_parallelogram() 1 1 1 0 1 0 0 0 0
The bigraded version of Proposition 4.9:
sage: S = BiellipticSurface(2) sage: TwistedHilbertSchemeDiamond(S, 2).as_parallelogram() 1 1 1 0 3 0 0 4 4 0 0 2 8 2 0 0 4 4 0 0 3 0 1 1 1 sage: S = BiellipticSurface(3) sage: TwistedHilbertSchemeDiamond(S, 2).as_parallelogram() 1 1 1 0 2 0 0 1 1 0 0 0 2 0 0 0 1 1 0 0 1 0 0 0 0 sage: S = BiellipticSurface(4) sage: TwistedHilbertSchemeDiamond(S, 2).as_parallelogram() 1 1 1 0 2 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 sage: S = BiellipticSurface(6) sage: TwistedHilbertSchemeDiamond(S, 2).as_parallelogram() 1 1 1 0 2 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
- class twisted_hilbert.CompleteIntersectionSurface(d, i=1)[source]¶
TwistedSurfaceDiamonds
for a complete intersectionIt is possible to vary the line bundle being used to any power of $\mathcal{O}(1)$
- __init__(d, i=1)[source]¶
Construct a complete intersection
The twisted Hodge numbers for complete intersection surfaces are computed using [twisted-hodge-ci].
[twisted-hodge-ci] Twisted Hodge numbers for complete intersections twisted-hodge-ci
INPUT:
d
– degree, or list of degreesi
(default: 1) – power of $\mathcal{O}(1)$ to be used
EXAMPLES:
Anticanonically twisted projective plane:
sage: from twisted_hilbert import * sage: CompleteIntersectionSurface([], 3)[1].pprint() 0 0 0 1 0 0 8 0 10
Quadric surface with default twist:
sage: CompleteIntersectionSurface(2)[1].pprint() 0 0 0 0 0 0 0 0 4
del Pezzo surface of degree 4 with default (and anticanonical) twist:
sage: CompleteIntersectionSurface([2, 2])[1].pprint() 0 0 0 1 2 0 0 0 5
- class twisted_hilbert.EnriquesSurface[source]¶
TwistedSurfaceDiamonds
for an Enriques surfaceThe line bundle is the (anti)canonical line bundle
EXAMPLES:
The following is Appendix B of [AJM.2017.v21.n6.a4]:
sage: from twisted_hilbert import * sage: TwistedHilbertSchemeDiamond(EnriquesSurface(), 2)[3, 1] 10 sage: TwistedHilbertSchemeDiamond(EnriquesSurface(), 2).pprint() 0 0 0 0 1 0 0 0 0 0 1 10 66 10 1 0 0 0 0 0 1 0 0 0 0
[AJM.2017.v21.n6.a4] Taro Hayashi, Universal covering Calabi–Yau manifolds of the Hilbert schemes of points of Enriques surfaces AJM.2017.v21.n6.a4
- class twisted_hilbert.ProductSurface(g, h)[source]¶
TwistedSurfaceDiamonds
for the product of two curvesThe line bundle is the anticanonical bundle.
- __getitem__(k)[source]¶
Get the twisted Hodge diamond for the kth power of the anticanonical bundle
k
– power of the anticanonical bundle
EXAMPLES:
The quadric is the product of two curves of genus 0:
sage: from twisted_hilbert import * sage: S = ProductSurface(0, 0) sage: T = CompleteIntersectionSurface(2, 2) sage: T[0] == S[0] True sage: T[3] == S[3] True sage: T[-5] == S[-5] True