Morphisms between ChowSchemes

A morphism between ChowSchemes is given by a ring map between its Chow rings. For example, the Veronese embedding is given as follows:

sage: X.<x> = Proj(2, 'x', name='X')
sage: Y.<y> = Proj(5, 'y', name='Y')
sage: f = X.hom([2*x], Y); f
ChowScheme morphism:
  From: X
  To:   Y
  Defn: y |--> 2*x

The domain and codomain are retrieved as usual:

sage: f.domain() == X
True
sage: f.codomain() == Y
True

Compute the images of elements \(y\) in the Chow ring of the codomain, either by f.upperstar(y) or simply f(y):

sage: f.upperstar(y)
2*x
sage: f(y)
2*x
sage: f(y^2)
4*x^2
sage: f(2*y^3)
0

The composition of two morphisms is given by applying the * operator:

sage: Z.<z> = Proj(56, 'z', name='Z')
sage: g = Y.hom([3*y], Z)
sage: h = g * f
sage: k = X.hom([6*x], Z)  # Direct definition of the composition
sage: h == k
True

If the point_classes of the domain and codomain are defined, e.g. domain and codomain are representing projective non singular varieties, as they are for library.proj.Proj, one can compute f.lowerstar(x) for elements \(x\) in the Chow ring of the domain:

sage: f.lowerstar(x)
2*y^4
sage: f.lowerstar(x^2)
y^5
sage: f.lowerstar(1 + x^2)
y^5 + 4*y^3

If E and F are sheaves on X and Y respectively, compute the pullback and pushforward as follows:

sage: TY = Y.tangent_bundle()
sage: f.upperstar(TY)
Bundle(X, 5, [1, 12*x, 60*x^2])
sage: TX = X.tangent_bundle()
sage: f.lowerstar(TX)
Sheaf(Y, 0, [1, 0, 0, 16*y^3, 72*y^4, 240*y^5])

AUTHORS:

  • Manfred Lehn (2013)
  • Christoph Sorger (2013)
class sage.schemes.chow.morphism.ChowSchemeMorphism(parent, phi)

Bases: sage.structure.element.Element

Base class for morphisms between ChowSchemes.

category()

Return the category of the SHom-set.

OUTPUT:

A category.

EXAMPLES:

sage: X.<w> = Proj(1, 'w')
sage: Y.<h> = Proj(3, 'h')
sage: i = X.hom(['3 * w'], Y)
sage: i.category()
Category of homsets of chowschemes over PointChowScheme
chowring_morphism()

Return the morphism on the level of Chow rings for this ChowSchemeMorphism.

EXAMPLES:

sage: P1.<h> = ChowScheme(1, 'h', 1, 'h^2', 'h', name='P1')
sage: P3.<k> = ChowScheme(3, 'k', 1, 'k^4', 'k^3', name='P3')
sage: f = P1.hom([3*h], P3)
sage: f.chowring_morphism()
Ring morphism:
  From: A(P3)
  To:   A(P1)
  Defn: k |--> 3*h
codomain()

Return the codomain of this ChowSchemeMorphism.

OUTPUT:

A ChowsScheme. The codomain of this ChowSchemeMorphism.

EXAMPLES:

sage: X.<w> = Proj(1, 'w')
sage: Y.<h> = Proj(3, 'h')
sage: i = X.hom(['3 * w'], Y)
sage: i.codomain()
ChowScheme(3, 'h', 1, 'h^4', 'h^3')
domain()

Return the domain of this ChowSchemeMorphism.

OUTPUT:

A Chowscheme. The domain of this ChowSchemeMorphism

EXAMPLES:

sage: X.<w> = Proj(1, 'w')
sage: Y.<h> = Proj(3, 'h')
sage: i = X.hom(['3 * w'], Y)
sage: i.domain()
ChowScheme(1, 'w', 1, 'w^2', 'w')
is_endomorphism()

Return whether the morphism is an endomorphism.

OUTPUT:

Boolean. Return true if the domain and codomain are identical.

EXAMPLES:

sage: X.<w> = Proj(1, 'w')
sage: Y.<h> = Proj(3, 'h')
sage: i = X.hom(['3 * w'], Y)
sage: i.is_endomorphism()
False
sage: j = X.hom(['2 * w'], X)
sage: j.is_endomorphism()
True
lowerstar(v, normal_bundle=None, verbose=False)

Return \(f_{*}(v)\) where \(v\) can be a class in \(A^{*}(X)\) or a sheaf on the domain \(X\). Both, the domain \(X\) and the codomain \(Y\) are supposed to be projective, e.g. their point_classes respectively have to be known.

In case, \(v\) is a sheaf, the tangent bundles on \(X\) and \(Y\) have to be known as Grothendieck-Hirzebruch-Riemann-Roch is used for the computation. Note, as indicated already above, the result should be understood as a virtual sheaf (e.g. the alternating sum of \(R^{i}f_{*}v\)).

If the normal bundle is specified, \(f\) is supposed to be an embedding and Riemann-Roch without denominateurs is used for the computation. In this case no need for the tangent bundles on \(X\) and \(Y\) and the result is not virtual.

INPUT:

  • v – a class in the Chow ring of the domain or a sheaf on the domain.
  • normal_bundle – the (optional) normal bundle of this ChowSchemeMorphism (supposed to be an embedding in this case).

OUTPUT:

A class in the Chow ring of the codomain or a sheaf on the codomain depending whether v is a class or a sheaf.

EXAMPLES:

sage: X.<w> = Proj(1, 'w', name='X')
sage: Y.<h> = Proj(3, 'h', name='Y')
sage: i = X.hom([3*w], Y)
sage: i.lowerstar(w)
h^3
sage: i.lowerstar(X.o(1))
Sheaf(Y, 0, [1, 0, -3*h^2, -8*h^3])
sage: i.lowerstar(X.tangent_bundle())
Sheaf(Y, 0, [1, 0, -3*h^2, -6*h^3])

sage: P2.<h> = ChowScheme(2, 'h', 1, 'h^3', 'h^2', name='P2')
sage: P5.<k> = ChowScheme(5, 'k', 1, 'k^6', 'k^5', name='P5')
sage: f = P2.hom([2*h], P5)
sage: E = Bundle(P2, 2, [1, 3*h, 3*h^2])
sage: N = Bundle(P2, 3, [1, 9*h, 30*h^2])  # Normal bundle
sage: f.lowerstar(E, normal_bundle=N)
Sheaf(P5, 0, [1, 0, 0, 16*k^3, 72*k^4, 240*k^5])

sage: P2 = Proj(2)
sage: f = P2.base_morphism()  # P2 -> Pt
sage: f.lowerstar(P2.o(1)).rank()  # = dim H^0(P2, O(1)) par GHRR
3
upperstar(v)

Return \(f^{*}(v)\) where v can be a class in \(A^{*}(Y)\) or a sheaf on \(Y\).

INPUT:

  • v – a class in the Chow ring of the codomain or a sheaf on the codomain.

OUTPUT:

A class in the Chow ring of the domain or a sheaf on the domain depending whether v is a class or a sheaf.

EXAMPLES:

sage: X.<w> = Proj(1, 'w', name='X')
sage: Y.<h> = Proj(3, 'h', name='Y')
sage: i = X.hom(['3 * w'], Y)
sage: i.upperstar(h)
3*w
sage: i.upperstar(Y.o(1))
Bundle(X, 1, [1, 3*w])
sage: i.upperstar(Y.tangent_bundle())
Bundle(X, 3, [1, 12*w])
class sage.schemes.chow.morphism.ChowSchemeMorphism_id(X)

Bases: sage.schemes.chow.morphism.ChowSchemeMorphism

Return the identity morphism from \(X\) to itself.

INPUT:

  • X – the ChowScheme.

EXAMPLES:

sage: from sage.schemes.chow.morphism import ChowSchemeMorphism_id
sage: X = ChowScheme(1, 'h', 1, 'h^2', name='P1')
sage: ChowSchemeMorphism_id(X)
ChowScheme endomorphism of P1
  Defn: Identity map
class sage.schemes.chow.morphism.ChowSchemeMorphism_structure_map(parent, f)

Bases: sage.schemes.chow.morphism.ChowSchemeMorphism

The structure morphism

INPUT:

  • parent – SHom-set with codomain equal to the base ChowScheme of the domain.
sage.schemes.chow.morphism.is_chowSchemeMorphism(f)

Test whether f is a chowscheme morphism.

INPUT:

  • f – anything.

OUTPUT:

Boolean. Return True if f is a chowscheme morphism.

EXAMPLES:

sage: P1.<h> = ChowScheme(1, 'h', 1, 'h^2', 'h', name='P1')
sage: P3.<k> = ChowScheme(3, 'k', 1, 'k^4', 'k^3', name='P3')
sage: H = P1.Hom(P3)
sage: f = H([3*h])
sage: is_chowSchemeMorphism(f)
True