# The Chow ring

Algebraic cycles are formal linear sum of irreducible subvarieies over the integers. Perse, algebraic cycles do not admit a well-defined intersection product.

To see this, think of intersecting a non-trivial algebraic cycle C with itself. Of course, in set theory we can intersect C with itself and the result is again C. However, for a well-defined intersection theory, we would ask that the self-intersection of C is an algebraic cycle of strictly smaller dimension.

In theory, this is resolved by saying that the self-intersection of C is given by intersecting C with a distinct algebraic cycle D which is obtained by moving C a little bit. The general phrase for this is to "move C in general position".

This leads to a famous notion of equivalence among algebraic cycles, the so-called rational equivalence. The set of equivalence classes of algebraic cycles together with the intersection product then furnishes the Chow ring of the variety in question.

For complete and simplicial toric varieties, many things are known about the Chow ring and algebraic cycles (cf. section 12.5 in David A. Cox, John B. Little, Henry K. Schenck (2011):

among the Chow ring and the cohomology ring. Note that the cohomology ring is naturally graded (cf. last paragraph on page 593 in David A. Cox, John B. Little, Henry K. Schenck (2011)). However, the Chow ring is usually considered as a non-graded ring. To match this general convention, and in particular the implementation of the Chow ring for matroids in OSCAR, the toric Chow ring is constructed as a non-graded ring.

to the quotient of the non-graded Cox ring and a certain ideal. Specifically, the ideal in question is the sum of the ideal of linear relations and the Stanley-Reisner ideal.

• It is worth noting that the ideal of linear relations is not

homogeneous with respect to the class group grading of the Cox ring. In order to construct the cohomology ring, one can introduce a $\mathbb{Z}$-grading on the Cox ring such that the ideal of linear relations and the Stanley-Reißner ideal are homogeneous.

rational equivalence classes of algebraic cycles are one-to-one to the cones in the fan of the toric variety.

## Constructors

### General constructors

rational_equivalence_classMethod
rational_equivalence_class(v::NormalToricVarietyType, p::MPolyQuoRingElem)

Construct the rational equivalence class of algebraic cycles corresponding to a linear combination of cones.

Examples

julia> P2 = projective_space(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> chow_ring(P2)
Quotient
of multivariate polynomial ring in 3 variables over QQ
by ideal(x1 - x3, x2 - x3, x1*x2*x3)

julia> (x1, x2, x3) = gens(chow_ring(P2))
3-element Vector{MPolyQuoRingElem{QQMPolyRingElem}}:
x1
x2
x3

julia> rational_equivalence_class(P2, x1)
Rational equivalence classon a normal toric variety represented by V(x3)
source
rational_equivalence_classMethod
rational_equivalence_class(v::NormalToricVarietyType, coefficients::Vector{T}) where {T <: IntegerUnion}

Construct the rational equivalence class of algebraic cycles corresponding to a linear combination of cones.

Examples

julia> P2 = projective_space(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> rational_equivalence_class(P2, [6, 5, 4, 3, 2, 1])
Rational equivalence class on a normal toric variety represented by 15V(x1,x3)+6V(x3)
source

### Special constructors

rational_equivalence_classMethod
rational_equivalence_class(d::ToricDivisor)

Construct the rational equivalence class of algebraic cycles corresponding to the toric divisor d.

Examples

julia> P2 = projective_space(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(P2, [1, 2, 3])
Torus-invariant, non-prime divisor on a normal toric variety

julia> rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)
source
rational_equivalence_classMethod
rational_equivalence_class(c::ToricDivisorClass)

Construct the algebraic cycle corresponding to the toric divisor class c.

Examples

julia> P2 = projective_space(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> tdc = toric_divisor_class(P2, )
Divisor class on a normal toric variety

julia> rational_equivalence_class(tdc)
Rational equivalence class on a normal toric variety represented by 2V(x3)
source
rational_equivalence_classMethod
RationalEquivalenceClass(l::ToricLineBundle)

Construct the toric algebraic cycle corresponding to the toric line bundle l.

Examples

julia> P2 = projective_space(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> l = toric_line_bundle(P2, )
Toric line bundle on a normal toric variety

julia> polynomial(rational_equivalence_class(l))
2*x3
source
rational_equivalence_classMethod
rational_equivalence_class(cc::CohomologyClass)

Construct the toric algebraic cycle corresponding to the cohomology class cc.

Examples

julia> P2 = projective_space(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> (x1, x2, x3) = gens(cohomology_ring(P2))
3-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
x1
x2
x3

julia> cc = CohomologyClass(P2, x1+x2)
Cohomology class on a normal toric variety given by x1 + x2

julia> rational_equivalence_class(cc)
Rational equivalence class on a normal toric variety represented by 2V(x3)
source
rational_equivalence_classMethod
rational_equivalence_class(sv::ClosedSubvarietyOfToricVariety)

Construct the rational equivalence class of algebraic cycles of a closed subvariety of a normal toric variety.

Examples

julia> ntv = normal_toric_variety(Oscar.normal_fan(Oscar.cube(2)))
Normal toric variety

julia> set_coordinate_names(ntv, ["x1", "x2", "y1", "y2"]);

julia> (x1, x2, y1, y2) = gens(cox_ring(ntv))
4-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
x1
x2
y1
y2

julia> sv = closed_subvariety_of_toric_variety(ntv, [x1^2+x1*x2+x2^2, y2])
Closed subvariety of a normal toric variety

julia> rational_equivalence_class(sv)
Rational equivalence class on a normal toric variety represented by 2V(x2,y2)
source

### Addition, subtraction and scalar multiplication

Algebraic cycles can be added and subtracted via the usual + and - operators. Moreover, multiplication by scalars from the left is supported for scalars which are integers or of type ZZRingElem.

Note that one can easily define the Chow ring also a formal linear sums of irreducible subvarieties with coefficients being rational numbers. We support this more general ring and therefore also allow for left multiplication with scalars of type QQFieldElem.

### Intersection product

The intersection product of algebraic cycles is implemented via *. This makes sense, since algebraic cycles on toric varieties are elements of the Chow ring, which in turn is (a certain) quotient of the Cox ring. Hence, internally, an algebraic cycle can be thought of as a polynomial in this ring and the intersection product corresponds to the product of two (equivalence classes of) polynomials.

An algebraic cycle can be intersected n- with itself via ^n, where n can be an integer of of type ZZRingElem.

A closed subvarieties defines in a natural way a rational equivalence class (cf. section on special constructors above). This allows to compute intersection products among closed subvarieties and rational equivalence classes in the Chow ring.

## Attributes

### Defining attributes

toric_varietyMethod
toric_variety(ac::RationalEquivalenceClass)

Return the normal toric variety of a rational equivalence class of algebraic cycles.

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> toric_variety(ac)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor
source
polynomialMethod
polynomial(ac::RationalEquivalenceClass)

On a simplicial and complete toric variety, the Chow ring is isomorphic to a certain quotient of the Cox ring. This function returns the ring element corresponding to a given rational equivalence class of algebraic cycles.

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> polynomial(ac)
6*x3 + e1 + 7*e2
source
polynomialMethod
polynomial(ring::MPolyQuoRing, ac::RationalEquivalenceClass)

On a simplicial and complete toric variety, the Chow ring is isomorphic to a certain quotient of the Cox ring. This function returns the ring element corresponding to a given rational equivalence class of algebraic cycles. The first argument of this function allows to obtain this ring element in a different ring. This allows to change the coefficient ring if desired.

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> R, _ = polynomial_ring(QQ, 5)
(Multivariate polynomial ring in 5 variables over QQ, QQMPolyRingElem[x1, x2, x3, x4, x5])

julia> (x1, x2, x3, x4, x5) = gens(R)
5-element Vector{QQMPolyRingElem}:
x1
x2
x3
x4
x5

julia> sr_and_linear_relation_ideal = ideal([x1*x3, x1*x5, x2*x4, x2*x5, x3*x4, x1 + x2 - x5, x2 + x3 - x4 - x5])
ideal(x1*x3, x1*x5, x2*x4, x2*x5, x3*x4, x1 + x2 - x5, x2 + x3 - x4 - x5)

julia> R_quo = quo(R, sr_and_linear_relation_ideal)
Quotient
of multivariate polynomial ring in 5 variables over QQ
by ideal(x1*x3, x1*x5, x2*x4, x2*x5, x3*x4, x1 + x2 - x5, x2 + x3 - x4 - x5)

julia> polynomial(R_quo, ac)
6*x3 + x4 + 7*x5
source

### Representatives

In order to see a geometric interpretation of rational equivalence classes of algebraic cycles most efficiently, it is best to replace self-intersections by transverse complete intersections. Indeed, within the regime of simplicial, complete toric varieties this is always possible. However, this involves a choice. Consequently, the following methods will pick a special choice and return values for that particular choice of representative of the rational equivalence class in question.

representativeMethod
representative(ac::RationalEquivalenceClass)

Return a polynomial in the Cox ring mapping to polynomial(ac).

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> ac*ac
Rational equivalence class on a normal toric variety represented by 34V(x2,x3)

julia> representative(ac*ac)
34*x2*x3
source

It can be rather convenient to investigate such a representative in order to understand the geometric meaning of a rational equivalence class. For this purpose, we support the following methods.

coefficientsMethod
coefficients(ac::RationalEquivalenceClass)

Return the coefficients of polynomial(ac).

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> coefficients(ac*ac)
1-element Vector{QQFieldElem}:
-34
source
componentsMethod
components(ac::RationalEquivalenceClass)

Turn each monomial of representative(ac) into a closed subvariety and return the list formed from these subvarieties. Note that each of these subvarieties is irreducible and their formal linear sum, with the coefficients computed by the method coefficients(ac::RationalEquivalenceClass), defines an algebraic cycle, whose rational equivalence class is identical to the one given to this method.

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> length(components(ac*ac))
1
source

### Other attributes

cohomology_classMethod
cohomology_class(ac::RationalEquivalenceClass)

Return the cohomology class of a rational equilvalence class of algebraic cycles.

Examples

julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal, non-affine, smooth, projective, gorenstein, fano, 2-dimensional toric variety without torusfactor

julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety

julia> ac = rational_equivalence_class(d)
Rational equivalence class on a normal toric variety represented by 6V(x3)+V(e1)+7V(e2)

julia> cohomology_class(ac)
Cohomology class on a normal toric variety given by 6*x3 + e1 + 7*e2
source

## Properties

One can check if a rational equivalence class of algebraic cycles is trivial via is_trivial. Equality can be tested with ==.

## Special attributes of toric varieties

chow_ringMethod
chow_ring(v::NormalToricVarietyType)

Return the Chow ring of the simplicial toric variety v.

While David A. Cox, John B. Little, Henry K. Schenck (2011) focus on simplicial and complete varieties to define the Chow ring, it was described in Christoph Pegel (2014) that this notion can also be extended to non-complete varieties. We explicitly support the Chow ring also for non-complete varieties.

This is demonstrated by the following example. Note that the computation for the non-complete variety leads to a Chow ring which is identical to the Chow ring of a certain matroid. This observation can be anticipated by e.g. the results in Eva Maria Feichtner, Sergey Yuzvinsky (2004).

Examples

julia> p2 = projective_space(NormalToricVariety, 2);

julia> is_complete(p2)
true

julia> ngens(chow_ring(p2))
3

julia> v = normal_toric_variety([[1, 0], [0, 1], [-1, -1]], [, , ])
Normal toric variety

julia> is_complete(v)
false

julia> set_coordinate_names(v, ["x_{1}", "x_{2}", "x_{3}"])

julia> chow_ring(v)
Quotient
of multivariate polynomial ring in 3 variables over QQ
by ideal(x_{1} - x_{3}, x_{2} - x_{3}, x_{1}*x_{2}, x_{1}*x_{3}, x_{2}*x_{3})

julia> M = cycle_matroid(complete_graph(3))
Matroid of rank 2 on 3 elements

julia> chow_ring(M)
Quotient
of multivariate polynomial ring in 3 variables over QQ
by ideal(x_{1} - x_{2}, x_{1} - x_{3}, x_{1}*x_{2}, x_{1}*x_{3}, x_{2}*x_{3})
source
gens_of_rational_equivalence_classesMethod
gens_of_rational_equivalence_classes(v::NormalToricVarietyType)

Return a list of generators of the Chow ring of a complete, simplicial toric variety.

Recall that the cones of a complete, simplicial toric variety can be seen as generators of the Chow ring (lemma 12.5.1 in David A. Cox, John B. Little, Henry K. Schenck (2011)). This function first maps each cone to an element of the Chow ring and then removes elements by taking rational equivalence into account.

Examples

julia> p2 = projective_space(NormalToricVariety, 2);

julia> gens_of_rational_equivalence_classes(p2)
6-element Vector{MPolyQuoRingElem{QQMPolyRingElem}}:
x3^2
x3^2
x3^2
x3
x3
x3
source
map_gens_of_chow_ring_to_cox_ringMethod
map_gens_of_chow_ring_to_cox_ring(v::NormalToricVarietyType)

Return a dictionary which maps the generators of the chow ring to monomials in the Cox ring. This dictionary involves a choice, i.e. is not unique.

Examples

julia> p2 = projective_space(NormalToricVariety, 2);

julia> map_gens_of_chow_ring_to_cox_ring(p2)
Dict{QQMPolyRingElem, MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}} with 2 entries:
x3^2 => x1*x3
x3   => x3
source