Sheaf Cohomology of Toric Line Bundles

OSCAR provides functionality to compute the dimensions of sheaf cohomology groups of toric line bundles on normal toric varieties.

The computation can be carried out using three different algorithms, selected via a keyword argument.

  • :cohomcalg — use the cohomCalg algorithm (cf. [BJRR10], [BJRR10*1]). Requires the toric variety to be simplicial and projective.

  • :chamber — chamber counting algorithm (cf. [CLS11], p.398). Requires the toric variety to be simplicial and complete.

  • :local — local cohomology method (cf. [CLS11], Section 9.5).

Applicability of cohomCalg

In theory, the cohomCalg algorithm applies to all smooth complete and simplicial projective toric varieties [RR10], [Jow11]. However, the implementation in [BJRR10*1] is limited to the simplicial, projective case due to its handling of secondary cohomologies. Consequently, all functions relying on cohomCalg are currently restricted to simplicial, projective toric varieties.

Dimensions of line bundle cohomology

The following methods compute the dimensions of the sheaf cohomology groups of a toric line bundle.

  • sheaf_cohomology(l; algorithm=...) returns all cohomology dimensions.
  • sheaf_cohomology(l, i; algorithm=...) returns the dimension in degree i.
sheaf_cohomologyMethod
sheaf_cohomology(l::ToricLineBundle; algorithm::Symbol=:cohomcalg)

Compute the dimensions of all sheaf cohomology groups of the toric line bundle l.

Returns a vector [h⁰, …, hᵈ] whose entries are the dimensions of the cohomology groups H^i(X, l), where d = dim(X).

The keyword argument algorithm::Symbol selects the algorithm used for the computation.

Allowed values are:

  • :cohomcalg — use the cohomCalg algorithm (cf. [BJRR10], [BJRR10*1]). Requires the toric variety to be simplicial and projective.
  • :chamber — chamber counting algorithm (cf. [CLS11], p.398). Requires the toric variety to be simplicial and complete.
  • :local — local cohomology method (cf. [CLS11], Section 9.5).

By default, :cohomcalg is used.

Examples

julia> dP3 = del_pezzo_surface(NormalToricVariety, 3)
Normal toric variety

julia> sheaf_cohomology(toric_line_bundle(dP3, [1, 2, 3, 4]))
3-element Vector{ZZRingElem}:
 0
 16
 0

julia> sheaf_cohomology(toric_line_bundle(dP3, [1, 2, 3, 4]); algorithm = :chamber)
3-element Vector{ZZRingElem}:
 0
 16
 0

julia> sheaf_cohomology(toric_line_bundle(dP3, [1, 2, 3, 4]); algorithm = :local)
3-element Vector{ZZRingElem}:
 0
 16
 0

julia> sheaf_cohomology(toric_line_bundle(dP3, [-3,-2,-2,-2]))
3-element Vector{ZZRingElem}:
 0
 2
 0

julia> sheaf_cohomology(toric_line_bundle(dP3, [-3,-2,-2,-2]); algorithm = :chamber)
3-element Vector{ZZRingElem}:
 0
 2
 0

julia> sheaf_cohomology(toric_line_bundle(dP3, [-3,-2,-2,-2]); algorithm = :local)
3-element Vector{ZZRingElem}:
 0
 2
 0
source
sheaf_cohomologyMethod
sheaf_cohomology(l::ToricLineBundle, i::Int; algorithm::Symbol=:cohomcalg)

Compute the dimension of the i-th sheaf cohomology group of the toric line bundle l.

The keyword argument algorithm::Symbol selects the algorithm used for the computation.

Allowed values are:

  • :cohomcalg — use the cohomCalg algorithm (cf. [BJRR10], [BJRR10*1]). Requires the toric variety to be simplicial and projective.
  • :chamber — chamber counting algorithm (cf. [CLS11], p.398). Requires the toric variety to be simplicial and complete.
  • :local — local cohomology method (cf. [CLS11], Section 9.5).

By default, :cohomcalg is used.

Examples

julia> dP3 = del_pezzo_surface(NormalToricVariety, 3)
Normal toric variety

julia> sheaf_cohomology(toric_line_bundle(dP3, [4, 1, 1, 1]), 0; algorithm = :cohomcalg)
12

julia> sheaf_cohomology(toric_line_bundle(dP3, [4, 1, 1, 1]), 0; algorithm = :chamber)
12

julia> sheaf_cohomology(toric_line_bundle(dP3, [4, 1, 1, 1]), 0; algorithm = :local)
12
source

Toric vanishing sets

Vanishing sets describe subsets of the Picard group of a fixed toric variety for which a given sheaf cohomology group vanishes.

Their computation is based on [BJRR10*1]. Consequently, as stated above, this functionality is currently available only for toric varieties that are simplicial and projective.

This approach to identifying vanishing sets on toric varieties was originally introduced in [Bie18]. Technically, a vanishing set is the complement of a finite family of polyhedra.

Computing vanishing sets

For a toric variety, all vanishing sets are computed as follows:

vanishing_setsMethod
vanishing_sets(variety::NormalToricVarietyType)

Compute the vanishing sets of an abstract toric variety v by use of the cohomCalg algorithm.

source

The return value is a vector of vanishing sets of length dim(X) + 1.

The first vanishing set describes all line bundles for which the zeroth sheaf cohomology vanishes. More generally, if a line bundle is contained in the n-th vanishing set, then its (n−1)-st cohomology group vanishes.

Membership in a vanishing set can be tested with:

containsMethod
contains(tvs::ToricVanishingSet, l::ToricLineBundle)

Check if the toric line bundle l is contained in the toric vanishing set tvs.

Examples

julia> dP1 = del_pezzo_surface(NormalToricVariety, 1)
Normal toric variety

julia> l = toric_line_bundle(dP1, [3, 2])
Toric line bundle on a normal toric variety

julia> sheaf_cohomology(l)
3-element Vector{ZZRingElem}:
 7
 0
 0

julia> vs = vanishing_sets(dP1)
3-element Vector{ToricVanishingSet}:
 Toric vanishing set for cohomology indices [0]
 Toric vanishing set for cohomology indices [1]
 Toric vanishing set for cohomology indices [2]

julia> contains(vs[1], l)
false

julia> contains(vs[2], l)
true

julia> contains(vs[3], l)
true
source

A vanishing set may coincide with the entire Picard group. This can be checked with isfull, which returns true if the vanishing set equals the entire Picard group and false otherwise.

Additional information associated with a vanishing set is available via:

toric_varietyMethod
toric_variety(tvs::ToricVanishingSet)

Return the toric variety of the vanishing set tvs.

Examples

julia> dP1 = del_pezzo_surface(NormalToricVariety, 1)
Normal toric variety

julia> vs = vanishing_sets(dP1)
3-element Vector{ToricVanishingSet}:
 Toric vanishing set for cohomology indices [0]
 Toric vanishing set for cohomology indices [1]
 Toric vanishing set for cohomology indices [2]

julia> toric_variety(vs[3])
Normal, simplicial, projective, 2-dimensional toric variety without torusfactor
source
polyhedraMethod
polyhedra(tvs::ToricVanishingSet)

Return the vector of the polyhedra whose complement defines the vanishing set tvs.

Examples

julia> dP1 = del_pezzo_surface(NormalToricVariety, 1)
Normal toric variety

julia> vs = vanishing_sets(dP1)
3-element Vector{ToricVanishingSet}:
 Toric vanishing set for cohomology indices [0]
 Toric vanishing set for cohomology indices [1]
 Toric vanishing set for cohomology indices [2]

julia> polyhedra(vs[3])
1-element Vector{Polyhedron{QQFieldElem}}:
 Polyhedron in ambient dimension 2
source
cohomology_indicesMethod
cohomology_indices(tvs::ToricVanishingSet)

Return the cohomology indices of the toric vanishing set tvs.

Examples

julia> dP1 = del_pezzo_surface(NormalToricVariety, 1)
Normal toric variety

julia> vs = vanishing_sets(dP1)
3-element Vector{ToricVanishingSet}:
 Toric vanishing set for cohomology indices [0]
 Toric vanishing set for cohomology indices [1]
 Toric vanishing set for cohomology indices [2]

julia> cohomology_indices(vs[3])
1-element Vector{Int64}:
 2
source

Vanishing sets can also be used to compute immaculate line bundles:

immaculate_line_bundlesMethod
immaculate_line_bundles(variety::NormalToricVarietyType)

Compute all immaculate line bundles as a toric vanishing set by intersecting the vanishing sets for all cohomology indices.

Examples

julia> dP1 = del_pezzo_surface(NormalToricVariety, 1)
Normal toric variety

julia> ilb = immaculate_line_bundles(dP1)
Toric vanishing set for cohomology indices [0, 1, 2]

julia> polyhedra(ilb)
4-element Vector{Polyhedron{QQFieldElem}}:
 Polyhedron in ambient dimension 2
 Polyhedron in ambient dimension 2
 Polyhedron in ambient dimension 2
 Polyhedron in ambient dimension 2

julia> print_constraints(polyhedra(ilb)[1])
-x_1 <= 0
-x_1 + x_2 <= 0

julia> print_constraints(polyhedra(ilb)[2])
-x_1 + x_2 <= 0
x_2 <= -2

julia> print_constraints(polyhedra(ilb)[3])
-x_2 <= -1
x_1 - x_2 <= -2

julia> print_constraints(polyhedra(ilb)[4])
x_1 - x_2 <= -2
x_1 <= -3
source