Methods for calculations with elements of a ChowRing

Provide methods for calculations with elements of a ChowRing. For example, suppose we work with the ChowRing of the projective plane blown up in a point \(\widehat{\mathbb{P}^2}\) and consider the special element \(x = (2*H - E)^2 + E\):

sage: A.<H,E> = ChowRing(['H', 'E'], [1, 1], ['E*H', 'E^2+H^2'])
sage: x = (2 * H - E)^2 + E; x
-3*E^2 + E

Compute the decomposition of x in the graded ring A and return its part in degree equal to the dimension:

sage: x.by_degrees()
[0, E, -3*E^2]

The codimension is the top degree of an element:

sage: x.codimension()
2
sage: (E + H).codimension()
1

Compute the integral of x with respect to the point class \(H^2\):

sage: A.set_point_class(H^2)        # Need to set the point class first.
sage: x.integral()
3

The other methods are related to the elements defined as the Chern character of a vector bundle. Recall that if \(X\) is a smooth algebraic variety, then the Chern character gives an isomorphism

\[ch: K_{0}(X)\otimes\QQ\longrightarrow A^{*}(X)\otimes\QQ\]

In our example if \(T\) is the tangent bundle on \(\mathbb{P}^2\) then \(T\) is of rank \(2\) with Chern classes \([1, 3*H - E, 4*H^2]\) and its Chern character is \(t = 2 - E + 3 * H\):

sage: A.set_dimension(2)    # Need to set the dimension first.
sage: t = 2 - E + 3 * H
sage: t._expp()
-4*E^2 + 3*H - E + 1
sage: t.wedge(2)._expp()
3*H - E + 1
sage: t.symm(2)._expp()
-32*E^2 + 9*H - 3*E + 1

AUTHORS:

  • Manfred Lehn (2013)
  • Christoph Sorger (2013)
class sage.schemes.chow.ring_element.ChowRingElement(parent, rep)

Bases: sage.rings.quotient_ring_element.QuotientRingElement

Class representing the elements of a ChowRing.

adams(k)

Return the result of the k-th Adams operator applied to this Chow ring element.

INPUT :

  • k– an integer

EXAMPLE:

sage: A.<c1, c2, c3> = ChowRing(['c1', 'c2', 'c3'], [1, 2, 3])
sage: (1 + c1 + c2).adams(2)
4*c2 + 2*c1 + 1
by_degrees()

Returns this Chow ring element as a list \([e_0,\dots,e_{d}]\) where \(e_k\) has degree \(k\).

EXAMPLES:

sage: A.<H,E> = ChowRing(['H', 'E'], [1, 1], ['E*H', 'E^2+H^2'])
sage: (-2 - E + 3*H - 4*H^2).by_degrees()
[-2, 3*H - E, 4*E^2]
sage: (-E + 3*H - 4*H^2).by_degrees()
[0, 3*H - E, 4*E^2]
sage: (-2 - E + 3*H).by_degrees()
[-2, 3*H - E]
codimension()

Return the codimension of this Chow ring element.

EXAMPLES:

sage: A.<H> = ChowRing('H', 1, 'H^5')
sage: H.codimension()
1
sage: (H + H^2).codimension()
2
integral()

Return the integral of this Chow ring element with respect to the parents point_class.

EXAMPLES:

sage: A.<H,E> = ChowRing(['H', 'E'], [1, 1], ['E*H', 'E^2+H^2'])
sage: A.set_point_class('H^2')
sage: x = (2*H-E)^2; x.integral()
3
symm(p)

Return the p-th symmetric power of this Chow ring element. Truncate above degree d.

INPUT:

  • p– an integer
  • d– an integer

OUTPUT:

  • A Chow ring element.

EXAMPLES:

sage: A.<h> = ChowRing('h', 1, 'h^3')  # P2
sage: A.set_dimension(2)
sage: t = 1/2*h^2 + h + 1  # ch(O(1))
sage: t._expp()
h + 1
sage: t.symm(0)._expp()
1
sage: t.symm(1)._expp()
h + 1
sage: t.symm(2)._expp()
2*h + 1
sage: t.symm(5) == t^5  # t corresponds to a line bundle.
True
todd()

Return the todd class of this Chow ring element.

OUTPUT:

  • An element of the parent Chow ring.

EXAMPLE:

sage: A.<c1, c2, c3> = ChowRing(['c1', 'c2', 'c3'], [1, 2, 3])
sage: A.set_dimension(3)
sage: x = 1 + c1 + 1/2*c1^2 + 1/6*c1^3

sage: x._expp()  # Check that x=ch(L) with L l.b. c1(L)=c1
c1 + 1
sage: x.todd()
1/12*c1^2 + 1/2*c1 + 1
truncate(a=0, b=0)

Return this Chow ring element truncated in degrees below a and above b (strictly).

INPUT:

  • a – an optional integer (defaults to 0)
  • b – an optional integer (defaults to 0)

OUTPUT:

  • a Chow ring element.

EXAMPLES:

sage: A.<H,E> = ChowRing(['H', 'E'], [1, 1], ['E*H', 'E^2+H^2'])
sage: x = -2 - E + 3*H - 4*H^2; x.by_degrees()
[-2, 3*H - E, 4*E^2]
sage: x.truncate()
-2
sage: x.truncate(0, 1)
3*H - E - 2
sage: x.truncate(0, 2)
4*E^2 + 3*H - E - 2
sage: x.truncate(1, 2)
4*E^2 + 3*H - E
wedge(p)

Return the p-th exterior power of this Chow ring element. Truncate above degree d.

INPUT:

  • p– an integer

By convention, \(0\) is returned for negative values of p.

EXAMPLES:

sage: A.<h> = ChowRing('h', 1, 'h^3')  # P2
sage: A.set_dimension(2)
sage: t = 3/2*h^2 + 3*h + 2  # ch(TP^2)
sage: t._expp()
3*h^2 + 3*h + 1
sage: t.wedge(0)._expp()
1
sage: t.wedge(1)._expp()
3*h^2 + 3*h + 1
sage: t.wedge(2)._expp()
3*h + 1
sage: t.wedge(3)._expp()
Traceback (most recent call last):
...
ValueError: Wedge for powers outside 0..rank not allowed.