Cohomology of coherent sheaves¶
This module implements Maruyama’s method for computing the cohomology of
coherent sheaves on projective schemes. This module is internal, and is not
intended for direct use. Use cohomology()
method of coherent sheaves on
projective schemes.
Maruyama’s method is explained and proved in detail in [Kudo2017]. Here we summary the main results necessary to understand the implementation.
Let \(M\) be a graded module finitely generated over the homogeneous coordinate ring \(S\) of the projective \(r\)-space over a field \(k\). We aim for computing the cohomology groups \(H^q(\tilde M)\) for the coherent sheaf \(\tilde M\).
Let \(S=k[x_0,x_2,\dots,x_r]\). Then \(M\) is a quotient of the free module \(\bigoplus_{i=1}^{t}S\) by a submodule. Let
be a minimal free resolution of \(M\). Then it induces a complex of (top) cohomology groups
where \(i\) runs from \(1\) to \(r\). Now it holds that
for \(1\le q\le r - 1\) and
and \(\dim H^0(\tilde M)\) can be computed by the formula
in which the complex of (bottom) cohomology groups
where \(i\) runs from \(1\) to \(r\) is used.
The implemented algorithm works more generally for twisted coherent sheaves and accepts as input shifted graded module \(M(-n)\) with shift \(n\).
EXAMPLES:
We define the Fermat cubic surface (a curve in \(\PP^2\)) and compute its cohomology groups:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2)
sage: X = P2.subscheme([x^4 + y^4 + z^4])
sage: sh = X.structure_sheaf()
sage: sh.cohomology(1)
3
>>> from sage.all import *
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)])
>>> sh = X.structure_sheaf()
>>> sh.cohomology(Integer(1))
3
Internally the cohomology is computed by Maruyama’s method:
sage: sh._cohomology
Maruyama Method using S(0) <-- S(-4) <-- 0
sage: sh._cohomology.H(1)
Vector space quotient V/W of dimension 3 over Rational Field where
V: Vector space of degree 3 and dimension 3 over Rational Field
Basis matrix:
[1 0 0]
[0 1 0]
[0 0 1]
W: Vector space of degree 3 and dimension 0 over Rational Field
Basis matrix:
[]
sage: sh._cohomology.H(1).dimension() == sh.cohomology(1)
True
sage: sh.cohomology(2)
0
sage: sh._cohomology.H(2)
Vector space quotient V/W of dimension 0 over Rational Field where
V: Vector space of dimension 0 over Rational Field
W: Vector space of degree 0 and dimension 0 over Rational Field
Basis matrix:
[]
sage: sh._cohomology.H(2).dimension() == sh.cohomology(2)
True
>>> from sage.all import *
>>> sh._cohomology
Maruyama Method using S(0) <-- S(-4) <-- 0
>>> sh._cohomology.H(Integer(1))
Vector space quotient V/W of dimension 3 over Rational Field where
V: Vector space of degree 3 and dimension 3 over Rational Field
Basis matrix:
[1 0 0]
[0 1 0]
[0 0 1]
W: Vector space of degree 3 and dimension 0 over Rational Field
Basis matrix:
[]
>>> sh._cohomology.H(Integer(1)).dimension() == sh.cohomology(Integer(1))
True
>>> sh.cohomology(Integer(2))
0
>>> sh._cohomology.H(Integer(2))
Vector space quotient V/W of dimension 0 over Rational Field where
V: Vector space of dimension 0 over Rational Field
W: Vector space of degree 0 and dimension 0 over Rational Field
Basis matrix:
[]
>>> sh._cohomology.H(Integer(2)).dimension() == sh.cohomology(Integer(2))
True
The rather complicated form (as a quotient of vector spaces) of the \(r\)-th
cohomology group H(r)
reflects the internal representation of the
cohomology group in terms of the cohomology groups of twisted structure sheaves
of a projective space.
On the other hand, it is not clear how to represent \(H^0(\tilde M)\) in terms of twisted structure sheaves of a projective space. Hence it is merely created as a vector space over \(k\) with the correct dimension:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2)
sage: X = P2.subscheme([x^4 + y^4 + z^4])
sage: sh = X.structure_sheaf()
sage: sh.cohomology(0)
1
sage: sh._cohomology.H(0)
Vector space of dimension 1 over Rational Field
>>> from sage.all import *
>>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3)
>>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)])
>>> sh = X.structure_sheaf()
>>> sh.cohomology(Integer(0))
1
>>> sh._cohomology.H(Integer(0))
Vector space of dimension 1 over Rational Field
- class sage.schemes.projective.cohomology.CohomologyGroupBottom(S, shifts)[source]¶
Bases:
SageObject
Bottom cohomology group of the twisted structure sheaf of a projective space.
INPUT:
S
– a direct sum of copies of the coordinate ring of a projective spaceshifts
– shifts of the component rings ofS
This represents \(\bigoplus_{j=1}^{t_i}H^0(\OO_{\PP^r}(-m^{(i)}_j))\) for shifts \(m^{(i)}_j\).
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.cohomology_group_bottom(0) Bottom Cohomology Group of dimension 1
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.cohomology_group_bottom(Integer(0)) Bottom Cohomology Group of dimension 1
- class sage.schemes.projective.cohomology.CohomologyGroupTop(S, shifts)[source]¶
Bases:
SageObject
Top cohomology group of the twisted structure sheaf of a projective space.
INPUT:
S
– a direct sum of copies of the coordinate ring of a projective spaceshifts
– shifts of the component rings ofS
This represents \(\bigoplus_{j=1}^{t_i}H^r(\OO_{\PP^r}(-m^{(i)}_j))\) for shifts \(m^{(i)}_j\).
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.cohomology_group_top(0) Top Cohomology Group of dimension 0
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.cohomology_group_top(Integer(0)) Top Cohomology Group of dimension 0
- class sage.schemes.projective.cohomology.MaruyamaMethod(M, twist=0)[source]¶
Bases:
SageObject
This class implements Maruyama’s method to compute the cohomology group \(H^q(\tilde M(n))\) as a vector space over the base field \(k\) and \(h^q(\tilde M(n))=\dim_kH^q(\tilde M(n))\) where \(n\) denotes the twist.
INPUT:
M
– a quotient of a free module over \(S\) by a submodule, where \(S\) is a multi-variate polynomial ringtwist
– (default: 0) an integer
This class provides
H()
andh()
as public interface, and all other methods are internal.EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: sh = X.structure_sheaf(1) # twisted sheaf sage: sh._cohomology Maruyama Method using S(1) <-- S(-3) <-- 0
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> sh = X.structure_sheaf(Integer(1)) # twisted sheaf >>> sh._cohomology Maruyama Method using S(1) <-- S(-3) <-- 0
- H(q)[source]¶
Return the \(q\)-th cohomology group \(H^q(\tilde M)\).
INPUT:
q
– non-negative integer
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.H(1) Vector space quotient V/W of dimension 3 over Rational Field where V: Vector space of degree 3 and dimension 3 over Rational Field Basis matrix: [1 0 0] [0 1 0] [0 0 1] W: Vector space of degree 3 and dimension 0 over Rational Field Basis matrix: []
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.H(Integer(1)) Vector space quotient V/W of dimension 3 over Rational Field where V: Vector space of degree 3 and dimension 3 over Rational Field Basis matrix: [1 0 0] [0 1 0] [0 0 1] W: Vector space of degree 3 and dimension 0 over Rational Field Basis matrix: []
- cohomology_group_bottom(i)[source]¶
Return \(i\)-th bottom cohomology group \(\bigoplus_{j=1}^{t_i}H^0(\OO_{\PP^r}(-m^{(i)}_j))\)
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.cohomology_group_bottom(1) Bottom Cohomology Group of dimension 0
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.cohomology_group_bottom(Integer(1)) Bottom Cohomology Group of dimension 0
- cohomology_group_top(i)[source]¶
Return \(i\)-th top cohomology group \(\bigoplus_{j=1}^{t_i}H^r(\OO_{\PP^r}(-m^{(i)}_j))\)
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.cohomology_group_top(1) Top Cohomology Group of dimension 3
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.cohomology_group_top(Integer(1)) Top Cohomology Group of dimension 3
- differential_bottom(i)[source]¶
Return the \(i\)-th bottom differential map \(H^0(f_i)\).
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.differential_bottom(1) Vector space morphism represented as left-multiplication by the matrix: [] Domain: Vector space of dimension 0 over Rational Field Codomain: Vector space of dimension 1 over Rational Field
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.differential_bottom(Integer(1)) Vector space morphism represented as left-multiplication by the matrix: [] Domain: Vector space of dimension 0 over Rational Field Codomain: Vector space of dimension 1 over Rational Field
- differential_top(i)[source]¶
Return the \(i\)-th top differential map \(H^r(f_i)\).
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.differential_top(1) Vector space morphism represented as left-multiplication by the matrix: [] Domain: Vector space of dimension 3 over Rational Field Codomain: Vector space of dimension 0 over Rational Field
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.differential_top(Integer(1)) Vector space morphism represented as left-multiplication by the matrix: [] Domain: Vector space of dimension 3 over Rational Field Codomain: Vector space of dimension 0 over Rational Field
- h(q)[source]¶
Return the dimension \(h^q(\tilde M)\) of the \(q\)-th cohomology group \(H^q(\tilde M)\).
INPUT:
q
– non-negative integer
EXAMPLES:
sage: P2.<x,y,z> = ProjectiveSpace(QQ, 2) sage: X = P2.subscheme([x^4 + y^4 + z^4]) sage: c = X.structure_sheaf()._cohomology sage: c.h(1) 3
>>> from sage.all import * >>> P2 = ProjectiveSpace(QQ, Integer(2), names=('x', 'y', 'z',)); (x, y, z,) = P2._first_ngens(3) >>> X = P2.subscheme([x**Integer(4) + y**Integer(4) + z**Integer(4)]) >>> c = X.structure_sheaf()._cohomology >>> c.h(Integer(1)) 3