Abstract variety maps

An abstract variety map $f\colon X \to Y$ encodes a morphism between abstract varieties at the level of intersection theory. It is determined by:

  • the pullback $f^*\colon \mathrm{N}^*(Y)_{\mathbb Q}\to \mathrm{N}^*(X)_{\mathbb Q}$, a ring homomorphism on Chow rings;
  • optionally, a pushforward $f_*\colon \mathrm{N}^*(X)_{\mathbb Q}\to \mathrm{N}^*(Y)_{\mathbb Q}$, a group homomorphism satisfying the projection formula.

When the pushforward is not given explicitly, it can sometimes be computed automatically via the projection formula, provided enough information about the Chow ring of $Y$ is available (see the documentation of map for details).

Abstract variety maps also carry a relative tangent bundle $\mathrm{T}_f$, which satisfies $\mathrm{T}_X = f^* \mathrm{T}_Y \oplus \mathrm{T}_f$, and may carry a relative polarization $\mathcal{O}_f(1)$.

Pullback and pushforward semantics

The pullback $f^*$ is a ring homomorphism: it preserves products and sends $1$ to $1$. It is always available once a map is constructed.

The pushforward $f_*$ is only a group homomorphism (it does not preserve products in general), but it satisfies the projection formula:

\[f_*(f^*(y) \cdot x) = y \cdot f_*(x) \quad \text{for all } x \in \mathrm{N}^*(X),\; y \in \mathrm{N}^*(Y).\]

When the pushforward is not specified explicitly, OSCAR attempts to compute it from the pullback using the projection formula together with the intersection pairing on $Y$. This succeeds automatically when:

  • Y is a point or a curve;
  • all algebraic classes in $\mathrm{N}^*(Y)_{\mathbb Q}$ are known (e.g., projective spaces, Grassmannians, complete intersections);
  • the flag :alg is set on $Y$.

In other cases, a warning is issued and the result may be incorrect.

julia> P2 = abstract_projective_space(2);

julia> P5 = abstract_projective_space(5, symbol = "H");

julia> h = gens(P2)[1]
h

julia> i = map(P2, P5, [2*h]); # Veronese embedding

julia> pushforward(i, h) # pushforward works via projection formula
2*H^4

julia> pushforward(i, P2(1)) # pushforward of the fundamental class
4*H^3

Inclusions and extend_inclusion

For an inclusion $i\colon X \hookrightarrow Y$, where the class $[X]$ is not already representable in $\mathrm{N}^*(Y)_{\mathbb Q}$, the pushforward $i_*$ cannot be expressed in the existing Chow ring of $Y$. Setting inclusion = true in the map constructor calls extend_inclusion to create a modified variety $Y^+$ with extra generators added to the Chow ring so that $i_*$ becomes well-defined. The structure map $Y^+ \to Y$ gives access to the enlarged ring while preserving the original ring via pullback.

Types

The OSCAR type for abstract variety maps is AbstractVarietyMap.

Constructors

mapFunction
map(X::AbstractVariety, Y::AbstractVariety,
   f_pullback::Vector, f_pushforward = nothing;
   inclusion::Bool = false, symbol::String = "x")

Return an abstract variety map $f:X \rightarrow Y$ by specifying the pullbacks of the generators of the Chow ring $\mathrm{N}^*(Y)_{\mathbb Q}.$ If needed, also specify the pushforward map $\mathrm{N}^*(X)_{\mathbb Q} \rightarrow \mathrm{N}^*(Y)_{\mathbb Q}.$

Note

The pullback is relatively easy to describe since it is functorial, while the pushforward is usually more complicated. In some cases, the pushforward of an element $x \in \mathrm{N}^*(X)_{\mathbb Q}$ can be automatically computed via pullback. Specifically, the projection formula tells us that

\[f_\ast(f^\ast(y)\cdot x) = f_\ast(x)\cdot y \;\text{ for all }\; x\in \mathrm{N}^*(X)_{\mathbb Q}, y\in \mathrm{N}^*(Y)_{\mathbb Q}.\]

Since we are working with numerical equivalence, to determine $f_\ast(x)$, it suffices to know all its intersection numbers. These can be readily computed via pullback, provided that all classes in $\mathrm{N}^*(Y)_{\mathbb Q}$ are known (or at least those classes having non-zero intersection numbers with $f_\ast(x)$). This is the case in the following situations:

  • When $Y$ is a point or a curve;
  • when all classes in $\mathrm{N}^*(Y)_{\mathbb Q}$ are known;
  • when :alg is passed as the fourth argument. This can be done when we are certain that the computed pushforward is correct, even though not all classes in $\mathrm{N}^*(X)_{\mathbb Q}$ are known.

In the other cases, if no pushforward map has been specified, a warning will be given when trying to do pushforward.

Note

In the case of an inclusion $X \hookrightarrow Y$ where the class of $X$ in $\mathrm{N}^*(Y)_{\mathbb Q}$ is not already representable in $\mathrm{N}^*(Y)_{\mathbb Q}$, use the argument inclusion = true. Then, a modified version $Y^+$ of $Y$ will be created, with extra classes added to the Chow ring so that one can pushforward all classes on $X$. In this case, the string symbol specifies how the extra generators of the extended Chow ring $\mathrm{N}^*(Y^+)_{\mathbb Q}$ are printed. See the subsection Example: Cubic fourfolds of the documentation for an example.

Examples

julia> P2xP2 = abstract_projective_space(2, symbol = "k")*abstract_projective_space(2, symbol = "l")
AbstractVariety of dim 4

julia> k, l = gens(P2xP2)
2-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
 k
 l

julia> P8 = abstract_projective_space(8)
AbstractVariety of dim 8

julia> h = gens(P8)[1]
h

julia> Se = map(P2xP2, P8, [k+l]) # Segre embedding
AbstractVarietyMap from AbstractVariety of dim 4 to AbstractVariety of dim 8

julia> pullback(Se, h)
k + l

julia> pushforward(Se, k+l)
6*h^5

julia> pushforward(Se, pullback(Se, h)*(k+l)) == h*pushforward(Se, k+l)
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
extend_inclusionMethod
extend_inclusion(i::AbstractVarietyMap; symbol::String = "x")

Given an inclusion $i\colon X \hookrightarrow Y$ where the class of $X$ in $\mathrm{N}^*(Y)_{\mathbb Q}$ is not already representable in $\mathrm{N}^*(Y)_{\mathbb Q}$, create a modified version $Y^+$ of $Y$ with extra classes added to the Chow ring so that one can pushforward all classes on $X$.

Return the resulting morphism $j\colon X \to Y^+$.

Note

The string symbol specifies how the extra generators in the extended Chow ring $\mathrm{N}^*(X^+)_{\mathbb Q}$ are printed.

See the subsection Example: Cubic fourfolds of the documentation for an example.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
identity_mapMethod
identity_map(X::AbstractVariety)

Return the identity map on X.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Underlying data of an abstract variety map

An abstract variety map is made up from (a selection of) the data discussed here:

domainMethod
domain(f::AbstractVarietyMap)

Return the domain of f.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
codomainMethod
codomain(f::AbstractVarietyMap)

Return the codomain of f.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
dimMethod
dim(f::AbstractVarietyMap)

Return the relative dimension of f, that is, return dim(domain(f)) - dim(codomain(f)).

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> P5 = abstract_projective_space(5, symbol = "H")
AbstractVariety of dim 5

julia> h = gens(P2)[1]
h

julia> i = map(P2, P5, [2*h])
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 5

julia> dim(i)
-3
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
pullbackMethod
pullback(f::AbstractVarietyMap, y::MPolyDecRingOrQuoElem)

Return the pullback of y via f.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> P5 = abstract_projective_space(5, symbol = "H")
AbstractVariety of dim 5

julia> h = gens(P2)[1]
h

julia> i = map(P2, P5, [2*h])
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 5

julia> H = gens(P5)[1]
H

julia> pullback(i, H)
2*h
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
pushforwardMethod
pushforward(f::AbstractVarietyMap, x::MPolyDecRingOrQuoElem)

Return the pushforward of x via f.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> P5 = abstract_projective_space(5, symbol = "H")
AbstractVariety of dim 5

julia> h = gens(P2)[1]
h

julia> i = map(P2, P5, [2*h])
AbstractVarietyMap from AbstractVariety of dim 2 to AbstractVariety of dim 5

julia> pushforward(i, h)
2*H^4
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
tangent_bundleMethod
tangent_bundle(f::AbstractVarietyMap)

If domain(f) and codomain(f) are given tangent bundles, return the relative tangent bundle of f.

Examples

julia> P2 = abstract_projective_space(2)
AbstractVariety of dim 2

julia> T = tangent_bundle(P2)
AbstractBundle of rank 2 on AbstractVariety of dim 2

julia> PT = projective_bundle(T)
AbstractVariety of dim 3

julia> pr = structure_map(PT)
AbstractVarietyMap from AbstractVariety of dim 3 to AbstractVariety of dim 2

julia> PBT = pullback(pr, T)
AbstractBundle of rank 2 on AbstractVariety of dim 3

julia> tangent_bundle(PT) - PBT == tangent_bundle(pr)
true

julia> PBT*OO(PT, 1) - OO(PT) == tangent_bundle(pr) # relative Euler sequence
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Further data associated to an abstract variety map

cotangent_bundleMethod
cotangent_bundle(f::AbstractVarietyMap)

If domain(f) and codomain(f) are given tangent bundles, return the relative cotangent bundle of f.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
todd_classMethod
todd_class(f::AbstractVarietyMap)

Return the Todd class of the relative tangent bundle of f.

Examples

The fibre variable z is the relative polarization of the projective bundle:

julia> P2 = abstract_projective_space(2);

julia> PF = projective_bundle(tautological_bundles(P2)[2]);

julia> z = polarization(PF)  # relative O(1) class on the fibre
z

julia> todd_class(structure_map(PF))
z - 1//4*h^2 + 1//2*h + 1
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Operations on abstract variety maps

composeMethod
compose(f::AbstractVarietyMap, g::AbstractVarietyMap)

Given abstract variety maps f (from X to Y) and g (from Y to Z), return their composition.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source