Cohomology Classes
Constructors
General constructors
cohomology_class
— Methodcohomology_class(v::NormalToricVarietyType, p::MPolyQuoRingElem)
Construct the toric cohomology class on the toric variety v
corresponding to the polynomial p
. Note that p
must reside in the cohomology ring of v
.
Examples
julia> P2 = projective_space(NormalToricVariety, 2)
Normal toric variety
julia> c = cohomology_class(P2, gens(cohomology_ring(P2))[1])
Cohomology class on a normal toric variety given by x1
cohomology_class
— Methodcohomology_class(d::ToricDivisor)
Construct the toric cohomology class corresponding to the toric divisor d
.
Examples
julia> P2 = projective_space(NormalToricVariety, 2)
Normal toric variety
julia> d = toric_divisor(P2, [1, 2, 3])
Torus-invariant, non-prime divisor on a normal toric variety
julia> cohomology_class(d)
Cohomology class on a normal toric variety given by 6*x3
cohomology_class
— Methodcohomology_class(c::ToricDivisorClass)
Construct the toric cohomology class corresponding to the toric divisor class c
.
Examples
julia> P2 = projective_space(NormalToricVariety, 2)
Normal toric variety
julia> tdc = toric_divisor_class(P2, [2])
Divisor class on a normal toric variety
julia> cohomology_class(tdc)
Cohomology class on a normal toric variety given by 2*x3
cohomology_class
— Methodcohomology_class(l::ToricLineBundle)
Construct the toric cohomology class corresponding to the toric line bundle l
.
Examples
julia> P2 = projective_space(NormalToricVariety, 2)
Normal toric variety
julia> l = toric_line_bundle(P2, [2])
Toric line bundle on a normal toric variety
julia> polynomial(cohomology_class(l))
2*x3
Addition, subtraction and scalar multiplication
Cohomology classes 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
or QQFieldElem
.
Wedge product
The wedge product of cohomology classes is implemented via *
, using internally the multiplication of the corresponding polynomial (equivalence classes) in the Cox ring.
A cohomology class can be wedged n
-times with itself via ^n
, where n
can be an integer or of type ZZRingElem
.
Properties
One can check if a cohomology class is trivial via is_trivial
.
Equality of cohomology classes can be tested via ==
.
Attributes
toric_variety
— Methodtoric_variety(c::CohomologyClass)
Return the normal toric variety of the cohomology class c
.
Examples
julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal toric variety
julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety
julia> cc = cohomology_class(d)
Cohomology class on a normal toric variety given by 6*x3 + e1 + 7*e2
julia> toric_variety(cc)
Normal, simplicial, complete toric variety
coefficients
— Methodcoefficients(c::CohomologyClass)
Return the coefficients of the cohomology class c
.
Examples
julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal toric variety
julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety
julia> cc = cohomology_class(d)
Cohomology class on a normal toric variety given by 6*x3 + e1 + 7*e2
julia> coefficients(cc)
3-element Vector{QQFieldElem}:
6
1
7
exponents
— Methodexponents(c::CohomologyClass)
Return the exponents of the cohomology class c
.
Examples
julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal toric variety
julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety
julia> cc = cohomology_class(d)
Cohomology class on a normal toric variety given by 6*x3 + e1 + 7*e2
julia> exponents(cc)
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]
polynomial
— Methodpolynomial(c::CohomologyClass)
Return the polynomial in the cohomology ring of the normal toric variety toric_variety(c)
which corresponds to c
.
Examples
julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal toric variety
julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety
julia> cc = cohomology_class(d)
Cohomology class on a normal toric variety given by 6*x3 + e1 + 7*e2
julia> polynomial(cc)
6*x3 + e1 + 7*e2
polynomial
— Methodpolynomial(c::CohomologyClass, ring::MPolyQuoRing)
Return the polynomial in ring
corresponding to the cohomology class c
.
Examples
julia> dP2 = del_pezzo_surface(NormalToricVariety, 2)
Normal toric variety
julia> d = toric_divisor(dP2, [1, 2, 3, 4, 5])
Torus-invariant, non-prime divisor on a normal toric variety
julia> cc = cohomology_class(d)
Cohomology class on a normal toric variety given by 6*x3 + e1 + 7*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 generated by
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)[1]
Quotient
of multivariate polynomial ring in 5 variables x1, x2, x3, x4, x5
over rational field
by ideal (x1*x3, x1*x5, x2*x4, x2*x5, x3*x4, x1 + x2 - x5, x2 + x3 - x4 - x5)
julia> polynomial(R_quo, cc)
6*x3 + x4 + 7*x5
Methods
integrate
— Methodintegrate(c::CohomologyClass; check::Bool = true)
Integrate the cohomolgy class c
over the normal toric variety toric_variety(c)
.
The theory underlying this method requires that the toric variety in question is simplicial and complete. The check of completeness may take a long time to complete. If desired, this can be switched off by setting the optional argument check
to the value false
.
Examples
julia> dP3 = del_pezzo_surface(NormalToricVariety, 3)
Normal toric variety
julia> (x1, x2, x3, e1, e2, e3) = gens(cohomology_ring(dP3))
6-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
x1
x2
x3
e1
e2
e3
julia> c = cohomology_class(dP3, e3*e3 + e3)
Cohomology class on a normal toric variety given by e3^2 + e3
julia> integrate(c)
-1
julia> F3 = hirzebruch_surface(NormalToricVariety, 3)
Normal toric variety
julia> (x1, x2, x3, x4) = gens(cohomology_ring(F3))
4-element Vector{MPolyQuoRingElem{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}:
t1
x1
t2
x2
julia> c = cohomology_class(F3, x1*x2 + x3*x4)
Cohomology class on a normal toric variety given by 2//3*x2^2
julia> integrate(c)
2
The following example constructs the Fano variety 2-36 (cf. https://www.fanography.info/2-36) and verifies that the triple self-intersection number of its anticanonical bundle is 62.
Examples
julia> e1 = [1,0,0];
julia> e2 = [0,1,0];
julia> e3 = [0,0,1];
julia> m = 2;
julia> ray_generators = [e1, -e1, e2, e3, - e2 - e3 - m * e1];
julia> max_cones = incidence_matrix([[1,3,4], [1,3,5], [1,4,5], [2,3,4], [2,3,5], [2,4,5]]);
julia> X = normal_toric_variety(max_cones, ray_generators; non_redundant = true)
Normal toric variety
julia> cox_ring(X)
Multivariate polynomial ring in 5 variables over QQ graded by
x1 -> [1 0]
x2 -> [1 2]
x3 -> [0 -1]
x4 -> [0 -1]
x5 -> [0 -1]
julia> cohomology_ring(X)
Quotient
of multivariate polynomial ring in 5 variables over QQ graded by
x1 -> [1]
x2 -> [1]
x3 -> [1]
x4 -> [1]
x5 -> [1]
by ideal (x1 - x2 - 2*x5, x3 - x5, x4 - x5, x1*x2, x3*x4*x5)
julia> integrate(cohomology_class(anticanonical_divisor(X))^3)
62
julia> integrate(cohomology_class(anticanonical_divisor_class(X))^3)
62
Special attributes of toric varieties
cohomology_ring
— Methodcohomology_ring(v::NormalToricVarietyType; check::Bool = true)
Return the cohomology ring of the simplicial and complete toric variety v
.
Examples
julia> p2 = projective_space(NormalToricVariety, 2);
julia> ngens(cohomology_ring(p2))
3
volume_form
— Methodvolume_form(v::NormalToricVariety)
Construct the volume form of the normal toric toric variety v
.
Examples
julia> polynomial(volume_form(projective_space(NormalToricVariety, 2)))
x3^2
julia> polynomial(volume_form(del_pezzo_surface(NormalToricVariety, 3)))
-e3^2
julia> polynomial(volume_form(hirzebruch_surface(NormalToricVariety, 5)))
1//5*x2^2
intersection_form
— Methodintersection_form(v::NormalToricVariety)
Computes the intersection numbers among the cohomology classes associated to the torusinvariant prime divisors of the normal toric toric variety v
.
Examples
julia> F3 = hirzebruch_surface(NormalToricVariety, 3)
Normal toric variety
julia> length(intersection_form(F3))
10
chern_class
— Methodchern_class(v::NormalToricVariety, k::Int; check::Bool = true)
Computes the k
-th Chern class of the tangent bundle of a normal toric variety that is both smooth and complete. Since these checks can be computationally very demanding, we provide an optional argument check
. Once set to false
, this method skips those tests.
The implemented algorithm uses proposition 13.1.2 in [CLS11].
Examples
julia> F3 = hirzebruch_surface(NormalToricVariety, 3)
Normal toric variety
julia> chern_class(F3, 0)
Cohomology class on a normal toric variety given by 1
julia> chern_class(F3, 1, check = false)
Cohomology class on a normal toric variety given by t1 + x1 + t2 + x2
julia> integrate(chern_class(F3, 2), check = false)
4
chern_classes
— Methodchern_classes(v::NormalToricVariety; check::Bool = true)
Computes all Chern classes of the tangent bundle of a normal toric variety, which is smooth and complete. Since those checks can be computationally very demanding, the optional argument check
can be set to false
to skip those tests.
Examples
julia> F3 = hirzebruch_surface(NormalToricVariety, 3)
Normal toric variety
julia> cs = chern_classes(F3)
3-element Vector{CohomologyClass}:
Cohomology class on a normal toric variety given by 1
Cohomology class on a normal toric variety given by t1 + x1 + t2 + x2
Cohomology class on a normal toric variety given by 4//3*x2^2
julia> integrate(cs[3])
4
basis_of_h4
— Methodbasis_of_h4(v::NormalToricVariety; check::Bool = true)
This method computes a monomial basis of the cohomology class $H^4(X, \mathbb{Q})$ for a toric variety $X$. The algorithm employs Theorem 12.4.1 in [CLS11], i.e. truncates the cohomology ring to degree $2$. By virtue of this theorem, this approach is supported only for toric varieties that are both complete and simplicial. Since it can be computationally very demanding to verify completeness, the optional argument check
can be set to false
to skip the tests.
Examples
julia> Y1 = hirzebruch_surface(NormalToricVariety, 2)
Normal toric variety
julia> Y2 = hirzebruch_surface(NormalToricVariety, 2)
Normal toric variety
julia> Y = Y1 * Y2
Normal toric variety
julia> h4_basis = basis_of_h4(Y)
6-element Vector{CohomologyClass}:
Cohomology class on a normal toric variety given by yx2^2
Cohomology class on a normal toric variety given by xx2*yx2
Cohomology class on a normal toric variety given by xx2*yt2
Cohomology class on a normal toric variety given by xx2^2
Cohomology class on a normal toric variety given by xt2*yx2
Cohomology class on a normal toric variety given by xt2*yt2
julia> betti_number(Y, 4) == length(h4_basis)
true