Localization and Bott's Formula
Recall that our focus in this chapter is on abstract intersection theory: We discuss computations which manipulate collections of data referred to as abstract varieties, and we interprete the results as applying to all (smooth projective complex) varieties sharing the data. The tools presented in this section allow for more efficient computations in the case of varieties with a (split) torus action whose fixed point set is finite. They are based on localization and a version of Bott's formula which is formulated in the language of equivariant intersection theory. See [Dan14] and the references cited there.
Using Bott's formula in enumerative geometry goes back to [ES02]. We quote from that paper:
Many parameter spaces carry natural actions of algebraic tori, in particular those coming from projective enumerative problems. In 1967, Bott gave a residue formula that allows one to express the degree of certain zero-cycles on a smooth complete variety with an action of an algebraic torus in terms of local contributions supported on the components of the fixpoint set. These components tend to have much simpler structure than the whole space; indeed, in many interesting cases, including all the examples of the present paper, the fixpoints are actually isolated.
We represent an abstract variety with a torus action by specifying its dimension together with the fixed points of the action and, possibly, further data.
In order to work with a version of Bott's formula for orbifolds, it is allowed to specify multiplicities at the fixed points. Here, the multiplicity at a fixed point $P$ is the order of of a local chart group at $P$. See the section on Kontsevich moduli spaces for an example.
An abstract equivariant vector bundle under a torus action is represented by its rank and its base variety, together with its localizations at the fixed points.
Recall that an equivariant vector bundle over a point is a representation of the group under consideration (in our case, a torus).
Torus Representations
Types
For our purposes here, we offer the type TnRep
.
Constructors
tn_representation
— Methodtn_representation(w::Vector{<:IntegerUnion})
Return the representation of a (split) torus of rank length(w)
specified by the weights w
.
Examples
julia> tn_representation([1, 2, 3])
TnRep(3, ZZRingElem[1, 2, 3])
This function is part of the experimental code in Oscar. Please read here for more details.
Operations on Torus Representations
dual
— Methoddual(F::TnRep)
det(F::TnRep)
+(F::TnRep, G::TnRep)
*(F::TnRep, G::TnRep)
Return the dual of F
, the determinant of F
, the sum F
$+$ G
, and the tensor product of F
and G
, respectively.
Examples
julia> F = tn_representation([1, 2, 3])
TnRep(3, ZZRingElem[1, 2, 3])
julia> G = tn_representation([1, 1, 1])
TnRep(3, ZZRingElem[1, 1, 1])
julia> F*G
TnRep(9, ZZRingElem[2, 2, 2, 3, 3, 3, 4, 4, 4])
This function is part of the experimental code in Oscar. Please read here for more details.
Varieties With a Torus Action
Types
The OSCAR type for abstract varieties with a torus action is TnVariety
.
Constructors
tn_variety
— Methodtn_variety(n::Int, points::Vector{Pair{P, Int}}) where P
Return an abstract variety with a (split) torus action, represented by its dimension n
and a Vector
specifying the fixed points of the action together with their multiplicities.
Specifying multiplicities at the fixed points allows one to work with a version of Bott's formula for orbifolds. Here, the multiplicity at a fixed point $P$ is the order of of a local chart group at $P$. See the section on Kontsevich moduli spaces for an example.
This function is part of the experimental code in Oscar. Please read here for more details.
Specialized Constructors
tn_grassmannian
— Methodtn_grassmannian(k::Int, n::Int; weights = :int)
Return the Grassmannian $\mathrm{G}(k, n)$ of k
-dimensional subspaces of an n
-dimensional standard vector space as a TnVariety
, where the action is induced by the diagonal action with weights
on the standard vector space.
The fixed points correspond to the ${n}\choose{k}$ coordinate subspaces of dimension $k$ in the standard vector space.
Examples
julia> G = tn_grassmannian(3,5) # all weights are 1
TnVariety of dim 6 with 10 fixed points
julia> V = fixed_points(G)
10-element Vector{Pair{Vector{Int64}, Int64}}:
[1, 2, 3] => 1
[1, 2, 4] => 1
[1, 3, 4] => 1
[2, 3, 4] => 1
[1, 2, 5] => 1
[1, 3, 5] => 1
[2, 3, 5] => 1
[1, 4, 5] => 1
[2, 4, 5] => 1
[3, 4, 5] => 1
julia> P = V[10][1]
3-element Vector{Int64}:
3
4
5
This function is part of the experimental code in Oscar. Please read here for more details.
tn_flag_variety
— Methodtn_flag_variety(dims::Int...; weights = :int)
Given integers, say, $d_1, \dots, d_{k}, n$ with $0 < d_1 < \dots < d_{k} < n$, return the abstract flag variety $\mathrm{F}(d_1, \dots, d_{k}; n)$ of nested sequences of subspaces of dimensions $d_1, \dots, d_{k}$ of an $n$-dimensional standard vector space as a TnVariety
, where the action is induced by the diagonal action with weights
on the standard vector space.
Examples
julia> F = tn_flag_variety(1,3,4) # all weights are 1
TnVariety of dim 5 with 12 fixed points
julia> fixed_points(F)
12-element Vector{Pair{Vector{Vector{Int64}}, Int64}}:
[[1], [2, 3], [4]] => 1
[[1], [2, 4], [3]] => 1
[[1], [3, 4], [2]] => 1
[[2], [1, 3], [4]] => 1
[[2], [1, 4], [3]] => 1
[[2], [3, 4], [1]] => 1
[[3], [1, 2], [4]] => 1
[[3], [1, 4], [2]] => 1
[[3], [2, 4], [1]] => 1
[[4], [1, 2], [3]] => 1
[[4], [1, 3], [2]] => 1
[[4], [2, 3], [1]] => 1
This function is part of the experimental code in Oscar. Please read here for more details.
Underlying Data of an Abstract Variety With a Torus Action
dim
— Method dim(X::TnVariety)
Return the dimension of X
.
Examples
julia> G = tn_grassmannian(2, 5);
julia> dim(G)
6
This function is part of the experimental code in Oscar. Please read here for more details.
fixed_points
— Method fixed_points(X::TnVariety)
Return the fixed points representing X
and their multiplicities.
Specifying multiplicities at the fixed points allows one to work with a version of Bott's formula for orbifolds. Here, the multiplicity at a fixed point $P$ is the order of of a local chart group at $P$. See the section on Kontsevich moduli spaces for an example.
Examples
julia> G = tn_grassmannian(2, 5);
julia> V = fixed_points(G)
10-element Vector{Pair{Vector{Int64}, Int64}}:
[1, 2] => 1
[1, 3] => 1
[2, 3] => 1
[1, 4] => 1
[2, 4] => 1
[3, 4] => 1
[1, 5] => 1
[2, 5] => 1
[3, 5] => 1
[4, 5] => 1
julia> P = V[10][1]
2-element Vector{Int64}:
4
5
This function is part of the experimental code in Oscar. Please read here for more details.
tangent_bundle
— Method tangent_bundle(X::TnVariety)
Return the tangent bundle of X
.
Examples
julia> G = tn_grassmannian(1, 3);
julia> T = tangent_bundle(G)
TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> V = fixed_points(G)
3-element Vector{Pair{Vector{Int64}, Int64}}:
[1] => 1
[2] => 1
[3] => 1
julia> f = localization(T);
julia> P1 = V[1][1];
julia> f(P1)
TnRep(2, ZZRingElem[1, 2])
julia> P2 = V[2][1];
julia> f(P2)
TnRep(2, ZZRingElem[-1, 1])
julia> P3 = V[3][1];
julia> f(P3)
TnRep(2, ZZRingElem[-2, -1])
This function is part of the experimental code in Oscar. Please read here for more details.
tautological_bundles
— Method tautological_bundles(X::TnVariety)
If X
has been given tautological bundles, return these bundles.
Examples
julia> G = tn_grassmannian(2, 5);
julia> tautological_bundles(G)
2-element Vector{TnBundle}:
TnBundle of rank 2 on TnVariety of dim 6 with 10 fixed points
TnBundle of rank 3 on TnVariety of dim 6 with 10 fixed points
This function is part of the experimental code in Oscar. Please read here for more details.
Further Data Associated to an Abstract Variety With a Torus Action
As for the type AbstractVariety
, we have the methods trivial_line_bundle(X::TnVariety)
(alternatively, OO(X::TnVariety)
), cotangent_bundle(X::TnVariety)
, and euler_number(X::TnVariety)
. Morever, if X
is of type TnVariety
, entering total_chern_class(X)
returns the total Chern class of the tangent bundle of X
. Similarly for entering chern_class(X, k)
.
Abstract Equivariant Vector Bundles Under a Torus Action
Types
The OSCAR type for an abstract equivariant vector bundle under a torus action is TnBundle
.
Constructors
tn_bundle
— Methodtn_bundle(X::TnVariety, r::Int, f::Function)
Return an abstract equivariant vector bundle on X
by specifying its rank together with a function which gives the localization of the vector bundle at each fixed point of the torus action on X
.
This function is part of the experimental code in Oscar. Please read here for more details.
Underlying Data of an Equivariant Bundle
If F
is of type TnBundle
, then rank(F)
and parent(F)
return the rank and the underlying variety of F
, respectively. Moreover, we have:
localization
— Methodlocalization(F::TnBundle)
Return the localization of F
at the fixed points of the given torus action.
Examples
julia> G = tn_grassmannian(1, 3);
julia> T = tangent_bundle(G)
TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> V = fixed_points(G)
3-element Vector{Pair{Vector{Int64}, Int64}}:
[1] => 1
[2] => 1
[3] => 1
julia> f = localization(T);
julia> P1 = V[1][1];
julia> f(P1)
TnRep(2, ZZRingElem[1, 2])
julia> P2 = V[2][1];
julia> f(P2)
TnRep(2, ZZRingElem[-1, 1])
julia> P3 = V[3][1];
julia> f(P3)
TnRep(2, ZZRingElem[-2, -1])
This function is part of the experimental code in Oscar. Please read here for more details.
Operations on Abstract Equivariant Vector Bundles
dual
— Methoddual(F::TnBundle)
symmetric_power(F::TnBundle, k::Int)
exterior_power(F::TnBundle, k::Int)
det(F::TnBundle)
+(F::TnBundle, G::TnBundle)
*(F::TnBundle, G::TnBundle)
Return the dual of F
, the k
-th symmetric power of F
, the k
-th exterior power of F
, the determinant of F
, the sum F
$+$ G
, and the tensor product of F
and G
, respectively.
This function is part of the experimental code in Oscar. Please read here for more details.
Chern Classes and Their Integration
In contrast to the varieties of type AbstractVariety
, there are no associated Chow rings for the varieties of type TnVariety
. In order to work with polynomial expressions in the Chern classes of an abstract equivariant vector bundle, Oscar internally creates an appropriate polynomial ring. We illustrate this in the examples below.
Types
To work with with polynomial expressions in Chern classes, we offer the type TnBundleChern
.
Constructors
chern_class
— Method chern_class(F::TnBundle, f::RingElem)
Return the evaluation of f
in the Chern classes of F
.
Examples
julia> G = tn_grassmannian(1, 3);
julia> T = tangent_bundle(G)
TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> R, (x, y) = polynomial_ring(QQ, [:x, :y])
(Multivariate polynomial ring in 2 variables over QQ, QQMPolyRingElem[x, y])
julia> f = x*y^2
x*y^2
julia> c = chern_class(T, f)
Chern class c[1]*c[2]^2 of TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> parent(polynomial(c))
Multivariate polynomial ring in 2 variables over QQ graded by
c[1] -> [1]
c[2] -> [2]
This function is part of the experimental code in Oscar. Please read here for more details.
total_chern_class
— Method total_chern_class(F::TnBundle)
chern_class(F::TnBundle, k::Int)
top_chern_class(F::TnBundle)
Return the total Chern class, the k
-th Chern class, and the top Chern class of F
, respectively.
Examples
julia> G = tn_grassmannian(1, 3);
julia> T = tangent_bundle(G)
TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> total_chern_class(T::TnBundle)
Chern class c[1] + c[2] + 1 of TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
This function is part of the experimental code in Oscar. Please read here for more details.
Underlying Data of Chern Classes
tn_bundle
— Method tn_bundle(c::TnBundleChern)
Return the tn_bundle
to which c
belongs.
This function is part of the experimental code in Oscar. Please read here for more details.
polynomial
— Methodpolynomial(c::TnBundleChern)
Return the polynomial representing c
.
Examples
julia> G = tn_grassmannian(1, 3);
julia> T = tangent_bundle(G)
TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> f = polynomial(total_chern_class(T))
c[1] + c[2] + 1
julia> parent(f)
Multivariate polynomial ring in 2 variables over QQ graded by
c[1] -> [1]
c[2] -> [2]
This function is part of the experimental code in Oscar. Please read here for more details.
Operations on Chern Classes
The usual arithmetic operations are available.
Examples
julia> G = tn_grassmannian(1, 3);
julia> T = tangent_bundle(G)
TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> c1 = chern_class(T, 1)
Chern class c[1] of TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> c2 = chern_class(T, 2)
Chern class c[2] of TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> c = c1^2-3*c2
Chern class c[1]^2 - 3*c[2] of TnBundle of rank 2 on TnVariety of dim 2 with 3 fixed points
julia> typeof(c)
TnBundleChern
Integration
integral
— Method integral(c::TnBundleChern)
Return the integral of c
.
Examples
julia> G = tn_grassmannian(2, 4)
TnVariety of dim 4 with 6 fixed points
julia> Q = tautological_bundles(G)[2];
julia> E = symmetric_power(Q, 3)
TnBundle of rank 4 on TnVariety of dim 4 with 6 fixed points
julia> integral(top_chern_class(E))
27
This function is part of the experimental code in Oscar. Please read here for more details.
Examples: Linear Subspaces on Hypersurfaces
linear_subspaces_on_hypersurface
— Methodlinear_subspaces_on_hypersurface(k::Int, d::Int; bott::Bool = true)
If $n=\frac1{k+1}\binom{d+k}d+k$ is an integer, return the number of $k$-dimensional subspaces on a generic hypersurface of degree $d$ in a projective space of dimension $n$.
lines_on_hypersurface(n::Int; bott::Bool = true)
Return the number of lines on a hypersurface of degree $d = 2*n-3$ in a projective space of dimension $n$.
The function relies on Bott's formula by default. Use bott = false
to switch to Schubert calculus.
Examples
julia> linear_subspaces_on_hypersurface(1,3)
27
julia> linear_subspaces_on_hypersurface(2,5)
420760566875
julia> [lines_on_hypersurface(n) for n=2:10]
9-element Vector{QQFieldElem}:
1
27
2875
698005
305093061
210480374951
210776836330775
289139638632755625
520764738758073845321
This function is part of the experimental code in Oscar. Please read here for more details.
Kontsevich Moduli Spaces
kontsevich_moduli_space
— Method kontsevich_moduli_space(n::Int, d::Int; weights=nothing)
Return the Kontsevich moduli space $\overline{M}(\mathbb P^n, d)$ as a TnVariety
(abstract orbifold).
With respect to notation, we refer to [Dan14].
Examples
julia> K = kontsevich_moduli_space(4, 3)
TnVariety of dim 16 with 740 fixed points
julia> V = fixed_points(K);
julia> mult = V[740][2]
6
This function is part of the experimental code in Oscar. Please read here for more details.
Examples: Gromov-Witten Invariants
Based on the implementation of Kontsevich Moduli Spaces, we can compute Gromov-Witten invariants as follows:
gromov_witten_invariant
— Method gromov_witten_invariant(d::Int, ns::Vector{Int})
gromov_witten_invariant(d::Int, ns::Int...)
Return the Gromov-Witten invariant $N_d^{(d_1, \dots, d_k)}$, where $d_1, \dots, d_k$ are the integers given by ns
.
We refer to [Dan14] for the definition of these numbers.
Examples
julia> [gromov_witten_invariant(d, 5) for d = 1:3]
3-element Vector{QQFieldElem}:
2875
4876875//8
8564575000//27
julia> gromov_witten_invariant(2, 4, 2)
92448
julia> gromov_witten_invariant(2, 3, 3)
423549//8
julia> gromov_witten_invariant(2, 3, 2, 2)
22518
julia> gromov_witten_invariant(2, 2, 2, 2, 2)
9792
This function is part of the experimental code in Oscar. Please read here for more details.
instanton_number
— Method instanton_number(d::Int, ns::Vector{Int})
Return the instanton number $\tilde{n}_d^{(d_1, \dots, d_k)}$, where $d_1, \dots, d_k$ are the integers given by ns
.
We follow the notation in [Dan14]: The numbers $\tilde{n}_d^{(d_1, \dots, d_k)}$ are defined so that the equations $N_d^{(d_1, \dots, d_k)} = \sum \frac{\tilde{n}_{\frac{d}{k}}^{(d_1, \dots, d_k)}}{k^3}$ hold true.
The $\tilde{n}_d^{(d_1, \dots, d_k)}$ are of particular interest in the context of enumerating rational curves of degree $d$ on complete intersection Calaby-Yau threefolds of type $(d_1, \dots, d_k)$ in $\mathbb P^{k+3}$. By classification, in addition to the quintic threefold in $\mathbb P^{4}$, these are of type $(4,2)$, $(3,3)$, $(3,3,2)$, and $(2, 2, 2, 2)$. For example, for $1\leq d \leq 9$, the $\tilde{n}_d^{(5)}$ are precisely the numbers of rational curves of degree $d$ on the general quintic threefold. In particular, $\tilde{n}_3^{(5)}$ gives the number of twisted cubic curves on the general quintic threefold.
Examples
julia> [instanton_number(d, 5) for d = 1:3]
3-element Vector{QQFieldElem}:
2875
609250
317206375
julia> instanton_number(3,4,2)
15655168
julia> instanton_number(2,4,2)
92288
julia> instanton_number(2, 4, 2)
92288
julia> instanton_number(2, 3, 3)
52812
julia> instanton_number(2, 3, 2, 2)
22428
julia> instanton_number(2, 2, 2, 2, 2)
9728
This function is part of the experimental code in Oscar. Please read here for more details.