Abstract Variety Maps
Types
The OSCAR type for abstract variety maps is AbstractVarietyMap.
Constructors
map — Function
map(X::AbstractVariety, Y::AbstractVariety, fˣ::Vector, fₓ = 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 $N^*(Y)_{\mathbb Q}.$ If needed, also specify the pushforward map $N^*(X)_{\mathbb Q} \rightarrow N^*(Y)_{\mathbb Q}.$
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 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 N^*(X)_{\mathbb Q}, y\in N^*(Y)_{\mathbb Q}.\]
Since we are working with numerical equivalence, to determine $f_\ast(x)$, it suffices to know all its intersection numbers, which can readily be computed via pullback, provided that all classes in $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 $N^*(Y)_{\mathbb Q}$ are known.
- When
:algis 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 $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.
In the case of an inclusion X $\hookrightarrow$ Y where the class of X in $N^*(Y)_{\mathbb Q}$ is not known, use the argument extend_inclusion = true. Then, a modified version of Y will be created, with extra classes added so that one can pushforward all classes on X. 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
This function is part of the experimental code in Oscar. Please read here for more details.
identity_map — Method
Underlying Data of an Abstract Variety Map
An abstract variety map is made up from (a selection of) the data discussed here:
dim — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
pullback — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.
pushforward — Method
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^4This function is part of the experimental code in Oscar. Please read here for more details.
tangent_bundle — Method
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
This function is part of the experimental code in Oscar. Please read here for more details.