ChowSchemes

A ChowScheme is thought about as a smooth algebraic variety having a given Chow ring. A morphism between ChowSchemes is thought about as a morphism between these varieties represented by the induced morphism on the level of Chow rings.

As an example, consider \(\mathbb{P}^2\) and \(\mathbb{P}^5\) and the morphism \(f:\mathbb{P}^2\longrightarrow\mathbb{P}^5\) given by the Veronese embedding \([x:y:z]\mapsto [x^2:y^2:z^2:yz:xz:xy]\) which we encode as follows:

sage: P2 = ChowScheme(2, 'h', 1, 'h^3')
sage: P5 = ChowScheme(5, 'k', 1, 'k^6')
sage: f = P2.hom(['2*h'], P5)

In the first two lines, we define \(\mathbb{P}^2\) and \(\mathbb{P}^5\) by their (rational) Chow rings respectively \(A^*(\mathbb{P}^2)=\QQ[h]/(h^3)\) and \(A^*(\mathbb{P}^5)=\QQ[k]/(k^6)\). The Veronese embedding \(f\) induced on the level of Chow rings

\[f^*:\ A^*(\mathbb{P}^5)\ \longrightarrow\ A^*(\mathbb{P}^2)\]

is given by sending the generator \(k\) to \(2*h\) which explains the third line.

Actually the projective space is already defined in the libraries and one might code as follows:

sage: P2 = Proj(2)
sage: P5 = Proj(5, hyperplane_class='k')
sage: f = P2.hom(['2*h'], P5)

AUTHORS:

  • Manfred Lehn (2013)
  • Christoph Sorger (2013)
sage.schemes.chow.scheme.ChowScheme(dimension, generators=None, degrees=None, relations=None, point_class=None, names=None, name=None, latex_name=None)

Returns a ChowScheme, given its dimension and (optional) generators, degrees, relations, point_class, names, name, latex_name.

INPUT:

  • dimension – The dimension of the ChowScheme
  • generators – An optional (list of) strings, the generators
  • degrees – An optional (list of) integers, the degrees of the generators
  • relations – An optional (list of) strings, the relations between the generators
  • point_class – An optional point_class of the ChowScheme.
  • names – An optional (list of) strings, names of the generators in the ChowScheme
  • name – An optional string, the name of the ChowScheme
  • latex_name– An optional string, the latex representation of the ChowScheme

OUTPUT:

  • A ChowScheme

EXAMPLES:

sage: P2.<h> = ChowScheme(2, 'h', 1, 'h^3')
sage: h^3
0

Note that the optional name is not the unique string representation of the ChowScheme (as given by python’s \(:meth:repr()\)) but is rather used in the string representations of other objects as morphisms or bundles on the ChowScheme in order to simplify the output.

EXAMPLES:

sage: P2.<h> = ChowScheme(2, 'h', 1, 'h^3', 'h^2', name='P2'); P2
ChowScheme(2, 'h', 1, 'h^3', 'h^2')
sage: str(P2)
'P2'
sage: P2.<h> = Proj(2, name='P2'); P2
ChowScheme(2, 'h', 1, 'h^3', 'h^2')
sage: P2.o(-1)  # The Hopf bundle on P2
Bundle(P2, 1, [1, -h])
class sage.schemes.chow.scheme.ChowScheme_generic(R=None, name=None, latex_name=None)

Bases: sage.structure.parent.Parent

The base class for all ChowSchemes.

base()
Return the base ChowScheme of this ChowScheme. Synonym for
\(meth:base_chowscheme()\)

OUTPUT :

A ChowScheme.

Examples:

sage: G = Grass(4, 2)
sage: G.base()
PointChowScheme
sage: Q = G.sheaves["universal_quotient"]
sage: ProjQ = ProjBundle(Q.symm(2).dual())  # Proj(Q)->G
sage: ProjQ.base()
ChowScheme(4, ['c1', 'c2'], [1, 2], ['c2^3', 'c1*c2^2', 'c1^2*c2 - c2^2', 'c1^3 - 2*c1*c2'], 'c2^2')
base_change(f)

Return this ChowScheme with base changes to f.codomain().

INPUT:

  • f – a morphism from this ChowScheme to another ChowScheme

OUTPUT:

This ChowScheme based changed to f.codomain()

EXAMPLES:

sage: P4 = ChowScheme(4, 'w', 1, 'w^5')  # P4
sage: X = ChowScheme(6, ['e1', 'e2', 'w'], [1, 2, 1], ['w^5'])
sage: X.base()
PointChowScheme
sage: X = X.base_change(X.hom('w', P4))
sage: X.base()
ChowScheme(4, 'w', 1, 'w^5')
base_chowring()

Return the Chow Ring of the Base Chow Scheme of this ChowScheme.

EXAMPLES:

sage: P1 = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: P1.base_chowring()
Quotient of Multivariate Polynomial Ring in no variables over Rational Field by the ideal (0)
base_chowring_morphism()

Return the Chow Ring morphism from the Base Chow Ring to the Chow Ring

EXAMPLES:

sage: P1 = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: f = P1.base_chowring_morphism()
base_chowscheme()

Return the base ChowScheme of this ChowScheme.

OUTPUT:

A chowscheme.

EXAMPLES:

sage: P2 = Proj(2)
sage: P2.base_chowscheme()
PointChowScheme
base_morphism()

Return the structure morphism from self to its base chow scheme.

OUTPUT:

A ChowScheme morphism.

EXAMPLES:

sage: G = Grass(4, 3)
sage: Q = G.sheaves["universal_quotient"]
sage: PG = ProjBundle(Q.symm(2).dual())
sage: PG.base_morphism()
ChowScheme morphism:
  From: Proj(Bundle(Grass(4, 3), 6, [1, -4*c, 10*c^2, -20*c^3]))
  To:   Grass(4, 3)
  Defn: Structure map
base_ring()

Return the Chow ring of the base of this ChowScheme. Synonym of \(:meth:base_chowring()\).

EXAMPLES:

sage: P1 = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: P1.base_ring()
Quotient of Multivariate Polynomial Ring in no variables over Rational Field by the ideal (0)
betti_numbers()

Return the Betti number of this ChowScheme.

EXAMPLES:

sage: P2 = Proj(2) sage: P = PointChowScheme sage: f = P.hom([0], P2) sage: B = Blowup(f).codomain() # P2 blown up in a point sage: B.betti_numbers() [1, 2, 1]
canonical_class()

Return the canonical class of this ChowScheme.

EXAMPLES:

sage: P2 = Proj(2)
sage: P2.canonical_class()
-3*h
chowring()

Return the Chow Ring of this ChowScheme.

EXAMPLES:

sage: P1 = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: P1.chowring()
Quotient of Multivariate Polynomial Ring in h over Rational Field by the ideal (h^2)
deg(i=0)

Return the degree of the i-th generator of the Chow ring of this ChowScheme. If i is unspecified the degree of the first generator (eg i=0) is returned if exists.

INPUT:

  • i – an (optional) integer.

OUTPUT:

The degree of the i-th generator.

EXAMPLES:

sage: X = ChowScheme(1, 'h', 1, 'h^2', 'h')  # ChowScheme of P1
sage: X.deg()
1
sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.deg()
1
sage: X.deg(1)
2

CORNER CASE:

sage: X = PointChowScheme
sage: X.deg()
Traceback (most recent call last):
...
IndexError: tuple index out of range
degs()

Return the degrees of the generators of the Chow ring of this ChowScheme.

OUTPUT:

A tuple of integers representing the degrees of the generators.

EXAMPLES:

sage: X = ChowScheme(1, 'h', 1, 'h^2', 'h')  # ChowScheme of P1
sage: X.degs()
(1,)
sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.degs()
(1, 2)

CORNER CASE:

sage: X = PointChowScheme
sage: X.degs()
()
dimension()

Return the dimension of this ChowScheme.

OUTPUT:

An integer, the dimension of this ChowScheme

EXAMPLES:

sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.dimension()
2
euler_number()

Return the Euler number of this ChowScheme.

EXAMPLES:

sage: G = Proj(2) sage: G.euler_number() 3
gen(i=0)

Return the i-th generator for the Chow ring of this ChowScheme.

INPUT:

  • i – an (optional) integer

OUTPUT:

The element of the Chow ring of this ChowScheme corresponding to the i-th generator.

EXAMPLES:

sage: X = ChowScheme(2, [‘c1’, ‘c2’], [1, 2]) sage: X.gen(1) c2
gens()

Return the generators for the Chow ring of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(2, [‘c1’, ‘c2’], [1, 2]) sage: X.gens() (c1, c2)
gens_dict()

Return the dictionary variable_name – generator of the Chow ring of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: gens = X.gens_dict()
sage: [(key, gens[key]) for key in sorted(gens)]
[('c1', c1), ('c2', c2)]
gens_dict_recursive()

Return recursively the dictionary variable_name – generator of the Chow ring of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: gens = X.gens_dict_recursive()
sage: [(key, gens[key]) for key in sorted(gens)]
[('c1', c1), ('c2', c2)]
hom(x, Y=None, check=True)

Return the ChowScheme morphism from self to Y defined by x.

INPUT:

  • x – anything hat determines a ChowScheme morphism, typically the images of the generators of the ChowRing of Y in the ChowRing of X. If x is a scheme, try to determine a natural map to x.
  • Y – the codomain scheme (optional). If Y is not given, try to determine Y from context.
  • check – boolean (optional, default=``True``). Whether to check the defining data for consistency.

OUTPUT:

The ChowScheme morphism from self to Y defined by x.

EXAMPLES:

sage: P1.<h> = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: P3.<k> = ChowScheme(3, 'k', 1, 'k^4', 'k^3')
sage: f = P1.hom([3*h], P3)  # Twisted cubic
sage: f(k)
3*h
identity_morphism()

Return the identity morphism.

OUTPUT:

The identity morphism of the ChowScheme self.

EXAMPLES:

sage: X = ChowScheme(1, 'h', 1, 'h^2', name='P1')
sage: X.identity_morphism()
ChowScheme endomorphism of P1
  Defn: Identity map
is_point()

Return True if this ChowScheme corresponds to a point.

EXAMPLES:

sage: P2 = Proj(2)
sage: P2.base().is_point()
True
is_point_chowscheme()

Return True if this ChowScheme is the instance PointChowScheme

EXAMPLES:

sage: P2 = Proj(2)
sage: P2.is_point_chowscheme()
False
sage: P2.base().is_point_chowscheme()
True
ngens()

Return the number of generators for the Chow ring of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(2, [‘c1’, ‘c2’], [1, 2]) sage: X.ngens() 2
nrels()

Return the number of relations of the Chow ring of this ChowScheme.

OUTPUT:

An integer, the number of relations.

EXAMPLES:

sage: X = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: X.nrels()
1
sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.nrels()
0
o(n=0)

Return \(\mathcal{O}(n)\) for this ChowScheme.

INPUT:

  • n – an integer

EXAMPLES:

sage: G = Grass(4,3)
sage: G.o(1)
Bundle(Grass(4, 3), 1, [1, c])
sage: G.sheaves["universal_quotient"].determinant()
Bundle(Grass(4, 3), 1, [1, c])
point_class()

Return the point_class of this ChowScheme

OUTPUT:

The point_class of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(3, 'h', 1, 'h^4', 'h^3')  # ChowScheme of P3
sage: X.point_class()
h^3

sage: X = ChowScheme(1, 'h', 1, 'h^2')  # P1, no point_class
sage: X.point_class()
rel(i=0)

Return the i-th relation of the Chow ring of this ChowScheme. If i is unspecified the first relation (eg i=0) is returned if exists.

INPUT:

  • i – an (optional) integer.

OUTPUT:

The i-th relation.

EXAMPLES:

sage: X = ChowScheme(1, 'h', 1, 'h^2', 'h')  # P1
sage: X.rel()
h^2
relative_dimension()

Return the relative dimension of this ChowScheme.

EXAMPLES:

sage: G = Grass(4, 3)
sage: Q = G.sheaves["universal_quotient"]
sage: Q.symm(2).dual().rank()
6
sage: ProjG = ProjBundle(Q.symm(2).dual())
sage: ProjG.relative_dimension()
5
rels()

Return the relations of Chow ring of this ChowScheme.

OUTPUT:

A list of ring elements representing the relations.

EXAMPLES:

sage: X = ChowScheme(1, 'h', 1, 'h^2', 'h')
sage: X.rels()
[h^2]
sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.rels()
[]
set_point_class(value)

Set the point_class of this ChowScheme.

INPUT:

  • v – an element (or its string representation) of the point_class

EXAMPLES:

sage: X = ChowScheme(3, 'h', 1, 'h^4')  # ChowScheme of P3
sage: h = X.gen()
sage: X.set_point_class(h^3)

sage: X = ChowScheme(3, 'h', 1, 'h^4')  # ChowScheme of P3
sage: X.set_point_class('h^3')
sheaves

Return a dictionary with sheaves on this ChowScheme. The naming convention is to suppress the word “bundle” in the keys. For instance, the tangent bundle has the key ‘tangent’, the universal sub bundle the key ‘universal_sub’ and the universal quotient bundle the key ‘universal_quotient’.

EXAMPLES:

sage: P4 = Proj(4, name='P4')  # P4 in the sens of Grothendieck
sage: P4.sheaves["tangent"]
Bundle(P4, 4, [1, 5*h, 10*h^2, 10*h^3, 5*h^4])
sage: P4.sheaves["universal_sub"]
Bundle(P4, 4, [1, -h, h^2, -h^3, h^4])
sage: P4.sheaves["universal_quotient"]
Bundle(P4, 1, [1, h])
tangent_bundle()

Return the tangent bundle of this ChowScheme if defined.

EXAMPLES:

sage: G = Grass(4,2)
sage: G.tangent_bundle()
Bundle(Grass(4, 2), 4, [1, 4*c1, 7*c1^2, 12*c1*c2, 6*c2^2])
todd_class()

Return the todd class of this ChowScheme.

EXAMPLES:

sage: Proj(3).todd_class()
h^3 + 11/6*h^2 + 2*h + 1
variable_name()

Return the (first) variable name of the Chow ring of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.variable_name()
'c1'
variable_names()

Return the variable names of the Chow ring of this ChowScheme.

EXAMPLES:

sage: X = ChowScheme(2, ['c1', 'c2'], [1, 2])
sage: X.variable_names()
('c1', 'c2')
sage.schemes.chow.scheme.is_chowScheme(x)

Test whether x is a chow scheme.

INPUT:

  • x – anything.

OUTPUT:

Boolean. Whether x derives from ChowScheme_generic.