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:

\[ch: G(X)\otimes_{\ZZ}\QQ\ \xrightarrow{\simeq}\ A(X)^{*}\otimes_{\ZZ}\QQ\]

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 sheaf
  • F - 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 if x 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]