Sheaves on ChowSchemes¶
A sheaf on a ChowScheme \(X\) is an element of the Grothendieck ring \(G(X)\) of coherent sheaves on \(X\) with the rational coefficients. In view of the ring isomorphism given by the Chern character:
a sheaf will be represented by its Chern character.
The class Sheaf
implements most of the common operations on sheaves.
Note that in view of the above all these operations should be understood
as “virtual”. For example, the tensor product of two sheaves \(E\) and \(F\)
returns the alternating sum of the \(\text{Tor}_i(E,F)\) and \(\text{SHom}(E,F)\)
the alternating sum of the \(\text{Ext}^i(E,F)\). Similarly, if \(f\) is a proper
morphism of ChowSchemes, \(f_*\) of a sheaf \(E\) returns the alternating sum
of the higher direct images \(R^if_*E\).
A sheaf on a ChowScheme \(X\) may be specified either by its Chern character or its rank \(r\) and Chern classes \(c_1, \dots, c_r\). Typically, for example in order to define a rank \(2\) sheaf with Chern classes \(c_1=0\) and \(c_2=4\) on \(\mathbb{P}^{2}\) one writes
sage: P2.<h> = Proj(2, 'h', name='P2')
sage: E = Sheaf(P2, 2, [1, 0, 4*h^2]); E
Sheaf(P2, 2, [1, 0, 4*h^2])
Note that if one wants to emphasize that \(E\) is actually a bundle, one may
use the module bundle
:
sage: E = Bundle(P2, 2, [1, 0, 4*h^2]); E
Bundle(P2, 2, [1, 0, 4*h^2])
The class :class`bundle.Bundle` derives from Sheaf
and may have some
additional methods in future versions which apply only for vector bundles.
Also tensor products, etc. of bundles return bundles.
AUTHORS:
- Manfred Lehn (2013)
- Christoph Sorger (2013)
-
sage.schemes.chow.sheaf.
SEnd
(E)¶ Return the sheaf of endomorphisms of \(E\).
INPUT:
E
- a sheaf
OUTPUT:
A sheaf.
EXAMPLES:
sage: P2 = Proj(2, 'h') sage: SEnd(P2.tangent_bundle()) Bundle(Proj(2, 'h'), 4, [1, 0, 3*h^2])
-
sage.schemes.chow.sheaf.
SHom
(E, F)¶ Return the sheaf of homomorphisms from \(E\) to \(F\).
INPUT:
E
- a sheafF
- a sheaf
OUTPUT:
A sheaf.
EXAMPLES:
sage: P2 = Proj(2, 'h') sage: SHom(P2.sheaves['universal_sub'], P2.sheaves['universal_quotient']) Bundle(Proj(2, 'h'), 2, [1, 3*h, 3*h^2]) sage: P2.tangent_bundle() Bundle(Proj(2, 'h'), 2, [1, 3*h, 3*h^2])
-
class
sage.schemes.chow.sheaf.
Sheaf
(X, r=None, cc=None, ch=None, name=None, latex_name=None)¶ Bases:
sage.structure.sage_object.SageObject
A sheaf is an element of the Grothendieck ring of coherent sheaves on a ChowScheme (tensored with \(\QQ\)) and represented by its Chern character. This class provides operations on sheaves to be understood as virtual, e.g. in the Grothendieck ring.
-
adams
(k)¶ Return the k-th Adams operator applied to this sheaf.
EXAMPLES:
sage: X.<c1, c2> = ChowScheme(2, ['c1', 'c2'], [1, 2], name='X') sage: E = Bundle(X, 1, [1, c1]) sage: all([(E.adams(n) == E^n) for n in range(-2,3)]) True sage: F = Bundle(X, 2, [1, c1, c2]) sage: all([E.adams(k) + F.adams(k) == (E + F).adams(k) for k in range(-2, 3)]) True sage: F.adams(2).adams(3) == F.adams(2*3) True
-
chern_character
()¶ Return the Chern character of this Sheaf.
OUTPUT:
- an element of the underlying Chow ring of this Sheaf.
EXAMPLE:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: S = Sheaf(X, 3, [1, c1, c2, c3]) sage: ch = S.chern_character(); ch.by_degrees() [3, c1, 1/2*c1^2 - c2, 1/6*c1^3 - 1/2*c1*c2 + 1/2*c3]
-
chern_classes
()¶ Return the Chern classes of this Sheaf
OUTPUT:
- a list of elements of the underlying Chow ring of this Sheaf.
EXAMPLE:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: ch = 3 + c1 + (1/2*c1^2 - c2) + (1/6*c1^3 - 1/2*c1*c2 + 1/2*c3) sage: S = Sheaf(X, ch=ch) sage: S.chern_classes() [1, c1, c2, c3]
-
chowscheme
()¶ Return the underlying ChowScheme.
OUTPUT:
- a ChowScheme
EXAMPLE:
sage: X = ChowScheme(4, 'h', 1, 'h^5') sage: S = Sheaf(X, 1, [1]) sage: S.chowscheme() ChowScheme(4, 'h', 1, 'h^5')
-
det
()¶ Return the determinant of this sheaf. Synonym for determinant().
-
determinant
()¶ Return the determinant of this sheaf. Synonym for determinant().
EXAMPLES:
sage: X.<c1, c2> = ChowScheme(2, ['c1', 'c2'], [1, 2], name='X') sage: E = Sheaf(X, 2, [1, c1, c2], name='E') sage: E.det() Sheaf(X, 1, [1, c1])
-
dual
()¶ Return the dual of this Sheaf. If the sheaf is a bundle, this is the dual bundle. In general, the result is virtual.
OUTPUT:
- a sheaf (or a bundle this sheaf is a bundle)
-
euler_characteristic
()¶ Return the euler-characteristic of this sheaf using Hirzebruch-Riemann-Roch. Requires the underlying ChowScheme to be a point.
EXAMPLES:
sage: P3 = Proj(3) sage: P3.o(-4).euler_characteristic() -1
-
rank
()¶ Return the rank of this Sheaf.
OUTPUT:
- an integer.
EXAMPLE:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: S = Sheaf(X, 3, [1, c1, c2, c3]) sage: S.rank() 3
-
sans_denominateurs
(E)¶ Returns the expression P(self,E) (see Fulton 296-297, Lemma 15.3).
EXAMPLES:
sage: P2 = Proj(2) sage: P5 = Proj(5, 'k') sage: f = P2.hom(['2*h'], P5) sage: N = f.upperstar(P5.tangent_bundle()) - P2.tangent_bundle(); N Sheaf(Proj(2, 'h'), 3, [1, 9*h, 30*h^2]) sage: N.sans_denominateurs(P2.tangent_bundle()) [4, 36*h, 240*h^2]
-
segre_classes
()¶ Returns \([s_0, ..., s_r]\) where the \(s_i\) are the Segre classes.
Nota Bene: We use the convention that \(s_t(E)*c_t(E^*) = 1\) (in Fulton’s book, \(s_t(E)*c_t(E) = 1\) is used).
OUTPUT:
- a list of elements of the underlying Chow ring of this Sheaf.
EXAMPLE:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: S = Sheaf(X, 3, [1, c1, c2, c3]) sage: S.segre_classes() [1, c1, c1^2 - c2, c1^3 - 2*c1*c2 + c3]
-
symbolic_chern_polynomial
(var_name='t')¶ Return the symbolic Chern polynomial of this Sheaf.
INPUT:
var_name
– a (optional) string representing the formal variable.
OUTPUT:
- a symbolic polynomial in
var_name
.
EXAMPLE:
sage: X.<c1, c2> = ChowScheme(3, ['c1', 'c2'], [1, 2], name='X') sage: S = Sheaf(X, 2, [1, -c1, c2]) sage: S.symbolic_chern_polynomial() 1 - c1*t + c2*t^2
-
symbolic_segre_polynomial
(var_name='t')¶ Return the symbolic Segre polynomial \(s_t\).
Nota Bene: We use the convention that \(s_t(E)*c_t(E^*) = 1\) (in Fulton’s book, \(s_t(E)*c_t(E) = 1\) is used).
INPUT:
var_name
– a (optional) string representing the formal variable.
OUTPUT:
- a symbolic polynomial in
var_name
.
EXAMPLES:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: S = Sheaf(X, 3, [1, c1, c2, c3]) sage: S.symbolic_segre_polynomial() 1 + c1*t + (c1^2 - c2)*t^2 + (c1^3 - 2*c1*c2 + c3)*t^3
-
symm
(p)¶ Return the p-th symmetric power of this sheaf.
EXAMPLES:
sage: X.<c1, c2> = ChowScheme(2, ['c1', 'c2'], [1, 2], name='X') sage: F = Bundle(X, 2, [1, c1, c2]) sage: F.adams(2) == (F.symm(2) - F.wedge(2)) True
-
todd_class
()¶ Returns the todd class of this sheaf.
EXAMPLES:
sage: P3 = Proj(3) sage: P3.todd_class() h^3 + 11/6*h^2 + 2*h + 1 sage: P3.todd_class() == P3.tangent_bundle().todd_class() True
-
total_chern_class
()¶ Return the total Chern class of this Sheaf
OUTPUT:
- an element of the underlying Chow ring of this Sheaf.
EXAMPLE:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: S = Sheaf(X, 3, [1, c1, c2, c3]) sage: S.total_chern_class() c3 + c2 + c1 + 1
-
total_segre_class
()¶ Return the total Segre class of this Sheaf.
Nota Bene: We use the convention that \(s_t(E)*c_t(E^*) = 1\) (in Fulton’s book, \(s_t(E)*c_t(E) = 1\) is used).
OUTPUT:
- an element of the underlying Chow ring of this Sheaf.
EXAMPLES:
sage: X.<c1, c2, c3> = ChowScheme(3, ['c1', 'c2', 'c3'], [1, 2, 3]) sage: S = Sheaf(X, 3, [1, c1, c2, c3]) sage: S.total_segre_class() c1^3 - 2*c1*c2 + c3 + c1^2 - c2 + c1 + 1
-
wedge
(p)¶ Return the p-th exterior power of this sheaf.
EXAMPLES:
sage: X.<c1, c2> = ChowScheme(2, ['c1', 'c2'], [1, 2], name='X') sage: F = Bundle(X, 2, [1, c1, c2]) sage: F.wedge(2) == F.det() True
-
-
sage.schemes.chow.sheaf.
is_sheaf
(x)¶ Test whether
x
is a sheaf.INPUT:
x
– anything.
OUTPUT:
Boolean. Return
True
ifx
is a Sheaf, False otherwise.
-
sage.schemes.chow.sheaf.
sans_denominateurs_p
(n, d, e)¶ Return the expression \(P(D,E)\) (see Fulton 296-297, Lemma 15.3) where \(D\) and \(E\) are bundles of ranks \(d\) and \(e\) respectively on a variety \(V\) of dimension \(n\).
Note that we compute up to dimension \(n + d\) as in applications \(D\) is generally the normal bundle of an embedding \(V\rightarrow W\).
INPUT:
n
– the dimension of \(V\)d
– the rank of \(D\)e
– the rank of \(E\)
OUTPUT:
A tuple \((A, [p_O,\dots,p_{n+d}])\) of a ring of coefficients \(A\) and a list of coefficients \(p_i\) such that \(P(D,E)=\sum p_i\).
EXAMPLES:
sage: from sage.schemes.chow.sheaf import sans_denominateurs_p sage: A, P = sans_denominateurs_p(3, 1, 1); P [1, d1 - e1, d1^2 - 2*d1*e1 + e1^2, d1^3 - 3*d1^2*e1 + 3*d1*e1^2 - e1^3] sage: A, P = sans_denominateurs_p(3, 1, 4); P [4, 10*d1 - e1, 20*d1^2 - 5*d1*e1 + e1^2 - 2*e2, 35*d1^3 - 15*d1^2*e1 + 6*d1*e1^2 - e1^3 - 11*d1*e2 + 3*e1*e2 - 3*e3] sage: A, P = sans_denominateurs_p(2, 2, 4); P [-4, -4*d1 + 2*e1, -4*d1^2 + 10*d2 + 3*d1*e1 - 3*e1^2 + 6*e2] sage: A, P = sans_denominateurs_p(1, 3, 4); P [8, 12*d1 - 6*e1]