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
iff
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