Abstract varieties

When doing intersection theory in this package, we are not working with concrete varieties defined by algebraic equations; rather, we work with abstract varieties that are represented by their Chow rings, an analogue of the cohomology ring.

More precisely, we only work with projective smooth varieties defined over an algebraically closed field of characteristic 0 (or simply $\mathbf C$). Let $X$ be such a variety. A $k$-cycle on $X$ is a formal linear combination of codimension-$k$ subvarieties with rational coefficients, and a $k$-class is an equivalent class of cycles modulo numerical equivalence (see below). The Chow ring $A^*(X)$ is a commutative graded ring, where $A^k(X)$ are classes of codimension $k$, and the product is given by the intersection product $A^k(X)\times A^l(X)\to A^{k+l}(X)$.

Some remarks:

  • Since we work with rational coefficients, we will not be able to see any torsion classes.
  • For practical reasons, we can use Singular's FunctionField as coefficients. This will allow us to introduce parameters and do some symbolic computations.
  • Usually the rational equivalence is used for defining the Chow ring. But this is too fine an equivalence for us: we are actually working with numerical equivalence, that is, we only care about the intersection numbers with respect to classes in complementary codimension. This is enough for most enumerative problems, and another advantage is that we can deduce the pushforward of a morphism when only the pullback is known (see Morphisms for details).
  • In many cases, we won't be able to compute the entire Chow ring: we will only be able to obtain information on a certain subring generated by some tautological classes. Therefore we are actually working with the class of all varieties that share the same piece of tautological ring (see A "non-algebraic" example for a typical example).
  • For some nice varieties, the numerical equivalence coincides with the rational equivalence. In this case the Chow ring coincides with the rational cohomology ring and can be completely computed, so both problems disappear. A nice consequence is that the Betti numbers of the Chow ring are exactly the (even) Betti numbers of the variety itself, so we have an equality sum(betti(X)) == euler(X). The class of these varieties includes projective spaces, Grassmannians, homogeneous spaces for affine algebraic groups (e.g., flag varieties), and in general any variety with an affine stratification. Moreover, products, projective bundles, and blowups with center in this class will remain in this class. Internally, we use set_special(X, :alg => true) to declare that $X$ satisfies this property. (maybe a better name?)

Technically, an abstract variety is given as an AbsVariety.

It contains the following fields:

  • dim::Int: the dimension of the variety;
  • ring::ChRing: the Chow ring;
  • base: the coefficient ring, default is Singular.QQ;

and optionally, the following:

  • point: the class of a point, used for computing integrals;
  • O1: a polarization class, if applicable;
  • T: the tangent bundle of the variety;
  • bundles: tautological bundles, if applicable;
  • struct_map: the structure map.

See Constructors for available variety constructors, including projective spaces, Grassmannians, etc.

Abstract bundles

Since $X$ is smooth, any coherent sheaf on $X$ admits a finite resolution by locally-free sheaves, i.e., vector bundles. We get an isomorphism of Grothendieck rings $K^0(X)\simeq K_0(X)$. Therefore we will only speak of abstract bundles, which should be thought of as virtual bundles or complexes of bundles.

By Grothendieck–Riemann–Roch theorem, the Chern character $\mathrm{ch}$ provides an isomorphism from the Grothendieck ring $K_0(X)$ to the Chow ring (modulo rational equivalence) over rational coefficients

\[\mathrm{ch}: K_0(X)_{\mathbf Q}\xrightarrow{\sim} A^*(X)_{\mathbf Q}.\]

So an abstract bundle will be represented by its Chern character. Equivalently, this can be determined by the rank and the total Chern class.

It contains the following fields:

  • parent::AbsVariety: the base variety;
  • rank: the rank of the bundle, which can contain parameters so is not necessarily an Int;
  • ch: the Chern character;
  • chern: the total Chern class.

Abstract variety morphisms

An abstract variety morphism $f:X\to Y$ is specified by the pullback $f^*:A^*(Y)\to A^*(X)$ and the pushforward $f_*:A^*(X)\to A^*(Y)$. The pullback is functorial so it should be a ring homomorphism (a ChAlgHom), while the pushforward is only a FunctionMap.

AbsVarietyHom(X::AbsVariety, Y::AbsVariety, fˣ::ChAlgHom, fₓ)
AbsVarietyHom(X::AbsVariety, Y::AbsVariety, fˣ::Vector, fₓ)

The type of an abstract variety morphism.


It contains the following fields:

  • domain::AbsVariety: the domain of the morphism;
  • codomain::AbsVariety: the codomain of the morphism;
  • dim::Int: the relative dimension;
  • pullback::ChAlgHom;
  • pushforward::FunctionMap;

and optionally, the following:

  • O1: the class of a relative $\mathcal O(1)$, if applicable;
  • T: the relative tangent bundle.

See Morphisms for details on how to build morphisms and manipulate them.

Varieties with a torus action and equivariant bundles

If $X$ is a complex variety (or more generally, an orbifold) with a torus action that admits only isolated fixed points, Bott's localization formula expresses certain integrals as a sum over the fixed points. In the case of Grassmannians and flag varieties, there are natural torus actions and Bott's formula allows us to compute integrals using only combinatoric data.

To model this, we have the following types.

It has the following fields:

  • dim::Int: the dimension of the variety;
  • points::Vector{Pair{P, Int}}: a vector of fixed points and their orbifold multiplicities;
  • T: the tangent bundle;
  • bundles: tautological bundles, if applicable.
TnBundle(X::TnVariety, r::Int, f::Function)

The type of a torus-equivariant bundle, represented by its localizations to the fixed points of the base variety.


It has the following fields:

  • parent::TnVariety: the base variety;
  • rank::Int: the rank of the bundle;
  • loc::Function: the localizations.

The localization/restriction of a TnBundle to each of the fixed points in X.points is a representation of type TnRep. They are stored as a function to allow lazy evaluation. This is crucial for large examples, since otherwise we may run into memory problems.

It has fields:

  • n::Int: the dimension of the representation;
  • w::Vector: the weights.

We try to keep the same syntax for AbsVariety and TnVariety, and for AbsBundle and TnBundle, wherever possible. See the documentations for details.

Graded rings

The following types are implemented to handle graded rings with weights, and their quotients.

ChRing(R::MPolyRing, w::Vector{Int})
ChRing(R::MPolyRing, w::Vector{Int}, I::sideal)

The type of a graded ring, possibly equipped with an ideal to represent a quotient ring.


For a ChRingElem, its homogeneous components can be accessed via Julia's getindex interface.

julia> c = chern(proj(3))
1 + 4*h + 6*h^2 + 4*h^3

julia> c[1]

julia> c[0:5]
6-element Vector{IntersectionTheory.ChRingElem}:

For performance reasons, an element of a quotient ring might not always be in reduced form. It can be simplified using simplify (return a copy) and simplify! (in place).