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.

Note

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.

Note

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_representationMethod
tn_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])
Experimental

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

source

Operations on Torus Representations

dualMethod
dual(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])
Experimental

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

source

Varieties With a Torus Action

Types

The OSCAR type for abstract varieties with a torus action is TnVariety.

Constructors

tn_varietyMethod
tn_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.

Note

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.

Experimental

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

source

Specialized Constructors

tn_grassmannianMethod
tn_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.

Note

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
Experimental

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

source
tn_flag_varietyMethod
tn_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
Experimental

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

source

Underlying Data of an Abstract Variety With a Torus Action

dimMethod
 dim(X::TnVariety)

Return the dimension of X.

Examples

julia> G = tn_grassmannian(2, 5);

julia> dim(G)
6
Experimental

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

source
fixed_pointsMethod
 fixed_points(X::TnVariety)

Return the fixed points representing X and their multiplicities.

Note

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
Experimental

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

source
tangent_bundleMethod
 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])
Experimental

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

source
tautological_bundlesMethod
 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
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 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_bundleMethod
tn_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.

Experimental

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

source

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:

localizationMethod
localization(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])
Experimental

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

source

Operations on Abstract Equivariant Vector Bundles

dualMethod
dual(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.

Experimental

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

source

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_classMethod
 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]
Experimental

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

source
total_chern_classMethod
 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
Experimental

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

source

Underlying Data of Chern Classes

tn_bundleMethod
 tn_bundle(c::TnBundleChern)

Return the tn_bundle to which c belongs.

Experimental

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

source
polynomialMethod
polynomial(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]
Experimental

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

source

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

integralMethod
 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
Experimental

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

source

Examples: Linear Subspaces on Hypersurfaces

linear_subspaces_on_hypersurfaceMethod
linear_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$.

Note

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
Experimental

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

source

Kontsevich Moduli Spaces

kontsevich_moduli_spaceMethod
 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).

Note

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
Experimental

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

source

Examples: Gromov-Witten Invariants

Based on the implementation of Kontsevich Moduli Spaces, we can compute Gromov-Witten invariants as follows:

gromov_witten_invariantMethod
 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.

Note

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
Experimental

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

source
instanton_numberMethod
 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.

Note

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.

Note

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
Experimental

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

source