Schubert Calculus

The term Schubert Calculus refers to the intersection theory of Grassmannians. This is to honor Hermann Schubert, a German 18th century mathematician who solved a variety of problems in enumerative geometry by reducing them to the combinatorics and intersection theory of certain cycles on Grassmanians. These cycles are nowadays called Schubert cycles, their cycle classes are called Schubert classes.

We show how to define such classes in OSCAR.

To recall the definition of Schubert cycles on a Grassmannian $\mathrm{G}(k,n)$, we think of $\mathrm{G}(k, n)$ as the Grassmannian $\mathrm{G}(k, W)$ of $k$-dimensional subspaces of an $n$-dimensional $K$-vector space $W$.

A flag in $W$ is a strictly increasing sequence of linear subspaces

\[\{0\} \subset W_1 \subset \dots \subset W_{n-1} \subset W_n = W, \; \text{ with }\; \dim(W_i) = i.\]

Let such a flag $\mathcal{W}$ be given. For any sequence $a = (a_1, \ldots, a_k)$ of integers with $n-k \geq a_1 \geq \ldots \geq a_k \geq 0$, we define the Schubert cycle $\Sigma_a(\mathcal{W})$ by setting

\[\Sigma_a(\mathcal{W}):= \{ V \in \mathrm{G}(k, W)\mid \dim(W_{n-k+i-a_i} \cap V) \geq i, i = 1, \ldots, k \} \,.\]

Then we have:

  • The Schubert cycle $\Sigma_a(\mathcal{W})$ is an irreducible subvariety of $\mathrm{G}(k, W)$ of codimension $|a| = \sum a_i$.
  • Its cycle class $[\Sigma_a(\mathcal{W})]$ does not depend on the choice of the flag.

We define the Schubert class of $a = (a_1, \ldots, a_k)$ to be the cycle class

\[\sigma_a := [\Sigma_a(\mathcal{W})] \,.\]

The number of Schubert classes on the Grassmannian $\mathrm{G}(k, n)$ is equal to $\binom{n}{k}$.

Instead of $\sigma_a$, we write $\sigma_{a_1,\ldots,a_s}$ whenever $a = (a_1, \ldots, a_s, 0, \ldots, 0)$, and $\sigma_{p^i}$ whenever $a = (p, \ldots, p, 0, \ldots, 0) \in \mathbb Z^i \times \{0\}^{k-i}$.

The classes $\sigma_{1^i}$, $i = 1, \ldots, k$, and $\sigma_i$, $i = 1, \ldots, n-k$, are called special Schubert classes. They are closely related to the Chern classes of the tautological vector bundles on $\mathrm{G}(k, W)$. Recall:

  • The tautological subbundle on $\mathrm{G}(k, W)$ is the vector bundle of rank $k$ whose fiber at $V \in \mathrm{G}(k, W)$ is the subspace $V \subset W$.
  • The tautological quotient bundle on $\mathrm{G}(k, W)$ is the vector bundle of rank $(n-k)$ whose fiber at $V \in \mathrm{G}(k, W)$ is the quotient vector space $W/V$.

We denote these vector bundles by $S$ and $Q$, respectively.

The Chern classes of $S$ and $Q$ are

\[c_i(S) = (-1)^i \sigma_{1^i} \; \text{ for } \; i = 1, \ldots, k\]

and

\[c_i(Q) = \sigma_i \; \text{ for }\; i = 1, \ldots, n-k,\]

respectively.

All Schubert classes form a $K$-vector space basis of the Chow ring of $\mathrm{G}(k,n)$. The Chern classes of $S$ (the special Schubert classes $\sigma_{1^i}$, $i=1, \ldots, k$) form a minimal set of generators for the Chow ring of $\mathrm{G}(k,n)$ as a $K$-algebra. See [EH16] for the relations on these generators.

schubert_classMethod
schubert_class(G::AbstractVariety, λ::Int...)
schubert_class(G::AbstractVariety, λ::Vector{Int})
schubert_class(G::AbstractVariety, λ::Partition)

Return the Schubert class $\sigma_\lambda$ on a (relative) Grassmannian G.

Examples

julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> s0 = schubert_class(G, 0)
1

julia> s1 = schubert_class(G, 1)
-c[1]

julia> s2 = schubert_class(G, 2)
c[1]^2 - c[2]

julia> s11 = schubert_class(G, [1, 1])
c[2]

julia> s21 = schubert_class(G, [2, 1])
-c[1]*c[2]

julia> s22 = schubert_class(G, [2, 2])
c[2]^2

julia> s1*s1 == s2+s11
true

julia> s1*s2 == s1*s11 == s21
true

julia> s1*s21 == s2*s2 == s22
true
julia> G = abstract_grassmannian(2,5)
AbstractVariety of dim 6

julia> s3 = schubert_class(G, 5-2)
-c[1]^3 + 2*c[1]*c[2]

julia> s3^2 == point_class(G)
true

julia> Q = tautological_bundles(G)[2]
AbstractBundle of rank 3 on AbstractVariety of dim 6

julia> chern_class(Q, 3)
-c[1]^3 + 2*c[1]*c[2]
julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> s1 = schubert_class(G, 1)
-c[1]

julia> s1 == schubert_class(G, [1, 0])
true

julia> integral(s1^4)
2
Experimental

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

source
schubert_classesMethod
schubert_classes(G::AbstractVariety)

Return all Schubert classes on a (relative) Grassmannian G.

schubert_classes(G::AbstractVariety, m::Int)

Return all Schubert classes in codimension m on a (relative) Grassmannian G.

Examples

julia> G = abstract_grassmannian(2,4)
AbstractVariety of dim 4

julia> schubert_classes(G)
5-element Vector{Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}}:
 [1]
 [-c[1]]
 [c[1]^2 - c[2], c[2]]
 [-c[1]*c[2]]
 [c[2]^2]

julia> basis(G)
5-element Vector{Vector{MPolyQuoRingElem}}:
 [1]
 [c[1]]
 [c[2], c[1]^2]
 [c[1]*c[2]]
 [c[2]^2]

julia> schubert_classes(G, 2)
2-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
 c[1]^2 - c[2]
 c[2]
Experimental

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

source