Resolving F-Theory Models

In F-theory, the standard approach to handling singular geometries is to replace them with smooth ones via crepant resolutions. This process preserves the Calabi–Yau condition and ensures the correct encoding of physical data. However, several important caveats apply:

  • Not all singularities admit crepant resolutions; some singularities are obstructed from being resolved without violating the Calabi–Yau condition.
  • No general algorithm is known for computing a crepant resolution of a given singular geometry. In practice, one applies all known resolution techniques, guided by mathematical structure and physical expectations. A particularly prominent strategy is a sequence of blowups, which we discuss below.

After applying a resolution strategy, one obtains a partially resolved model. For the reasons stated above, we do currently no verify whether the model has been fully resolved — i.e., whether all resolvable singularities have been removed crepantly to the extent possible. Instead, the following method returns true if resolution techniques were applied and false otherwise.

is_partially_resolvedMethod
is_partially_resolved(m::AbstractFTheoryModel)

Return true if resolution techniques were applied to the F-theory model, thereby potentially resolving its singularities. Otherwise, return false.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, defining_classes = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> is_partially_resolved(t)
false

julia> t2 = blow_up(t, ["x", "y", "x1"]; coordinate_name = "e1")
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> is_partially_resolved(t2)
true
Experimental

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

source

Blowups

A blowup is a birational modification of an algebraic variety or scheme that replaces a chosen subvariety (or subscheme), called the center of the blowup, with an exceptional divisor. This process provides a tool for resolving singularities in a controlled way.

In the weighted case, the exceptional divisor is introduced with a grading by positive integers. This allows for finer control over the resolution process.

Manually Applying Individual Blowups

You can execute individual blowups, whether toric or not, using the following methods:

blow_upMethod
blow_up(m::AbstractFTheoryModel, ideal_gens::Vector{String}; coordinate_name::String = "e")

Resolve an F-theory model by blowing up a locus in the ambient space.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, defining_classes = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> blow_up(t, ["x", "y", "x1"]; coordinate_name = "e1")
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

Here is an example for a Weierstrass model.

Examples

julia> using Random;

julia> B2 = projective_space(NormalToricVariety, 2)
Normal toric variety

julia> b = torusinvariant_prime_divisors(B2)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> w = literature_model(arxiv_id = "1208.2695", equation = "B.19", base_space = B2, defining_classes = Dict("b" => b), completeness_check = false, rng = Random.Xoshiro(1234))
Weierstrass model over a concrete base -- U(1) Weierstrass model based on arXiv paper 1208.2695 Eq. (B.19)

julia> blow_up(w, ["x", "y", "x1"]; coordinate_name = "e1")
Partially resolved Weierstrass model over a concrete base -- U(1) Weierstrass model based on arXiv paper 1208.2695 Eq. (B.19)
Experimental

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

source
blow_upMethod
blow_up(m::AbstractFTheoryModel, I::MPolyIdeal; coordinate_name::String = "e")

Resolve an F-theory model by blowing up a locus in the ambient space.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, defining_classes = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> x1, x2, x3, x4, x, y, z = gens(coordinate_ring(ambient_space(t)))
7-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
 x1
 x2
 x3
 x4
 x
 y
 z

julia> blow_up(t, ideal([x, y, x1]); coordinate_name = "e1")
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
Experimental

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

source
blow_upMethod
blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::String = "e")

Resolve an F-theory model by blowing up a locus in the ambient space. For this method, the blowup center is encoded by an ideal sheaf.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, defining_classes = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> x1, x2, x3, x4, x, y, z = gens(coordinate_ring(ambient_space(t)))
7-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
 x1
 x2
 x3
 x4
 x
 y
 z

julia> blowup_center = ideal_sheaf(ambient_space(t), ideal([x, y, x1]))
Sheaf of ideals
  on normal, simplicial toric variety
with restrictions
   1: Ideal (x_5_1, x_4_1, x_1_1)
   2: Ideal (1)
   3: Ideal (x_5_3, x_4_3, x_1_3)
   4: Ideal (x_5_4, x_4_4, x_1_4)
   5: Ideal (1)
   6: Ideal (1)
   7: Ideal (1)
   8: Ideal (1)
   9: Ideal (1)
  10: Ideal (1)
  11: Ideal (1)
  12: Ideal (1)

julia> blow_up(t, blowup_center; coordinate_name = "e1")
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
Experimental

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

source

Data Format for Resolutions

Typically, a resolution requires a sequence of blowups.

The resolution metadata functions store information about sections in terms of their homogeneous coordinates after a given sequence of blowups.

Our framework is tailored towards toric blowups.

  • A resolution entry consists of two parts:
    1. The sequence of blowup centers (each a list of coordinate names).
    2. The list of new exceptional coordinate names introduced at each step.
  • The zero and generating sections are then tracked through these blowups and recorded in terms of the homogeneous factors that describe their proper transforms.

For example, a sequence of blowups might look like

[
  [["x","y","w"], ["y","e1"], ["x","e4"], ["y","e2"], ["x","y"]],
  ["e1","e4","e2","e3","s"]
]

This represents the blowup sequence:

(x, y, w | e1)
(y, e1   | e4)
(x, e4   | e2)
(y, e2   | e3)
(x, y    | s)

Each tuple $(g_1, \dotsc, g_n | e)$ indicates that we blow up the locus $g_1 = \dotsb = g_n = 0$ by replacing it with a new exceptional locus $e = 0$. This is done by replacing $g_i \mapsto e g_i$ and introducing a new homogeneous factor $[g_1 : \dotsb : g_n]$. Thus, in the case of the above example blowup sequence, the map from the coordinates of the original to the resolved space is

\[x \mapsto e_1 e_2^2 e_3^2 e_4 s x \\ y \mapsto e_1 e_2^2 e_3^3 e_4^2 s y \\ w \mapsto e_1 e_2 e_3 e_4 w\]

with all other coordinates being unchanged, and the new homogeneous factors (along with the original ambient weighted projective factor) are

\[[e_1 e_2^2 e_3^2 e_4 s x : e_1 e_2^2 e_3^3 e_4^2 s y : z] [e_2 e_3 s x : e_2 e_3^2 e_4 s y : w] [e_3 s y : e_1] [s x : e_4] [s y : e_2] [x : y]\,.\]

Each blowup $(g_1, \dotsc, g_n | e)$ has an associated rescaling $(g_1, \dotsc, g_n, e) \sim (\lambda g_1, \dotsc, \lambda g_n, \lambda^{-1} e)$, under which the products $e g_i$ are invariant.

For a weighted blowup, along with a center and exceptional coordinate $(g_1, \dotsc, g_n | e)$, a grading vector $\mu = (\mu_1, \dotsc, \mu_n)$ is specified, and the blowup is carried out by the replacement $g_i \mapsto e^{\mu_i} g_i$. The associated rescaling is then $(g_1, \dotsc, g_n, e) \sim (\lambda^{\mu_1} g_1, \dotsc, \lambda^{\mu_n} g_n, \lambda^{-1} e)$, under which the products $e^{\mu_i} g_i$ are invariant.

Registering And Extracting Known Resolution Sequences

The known (weighted) blowup resolution sequences, can be accessed with the following methods.

resolutionsMethod
resolutions(m::AbstractFTheoryModel)

Return resolutions of the F-theory model if known, otherwise throw an error.

See Registering And Extracting Known Resolution Sequences for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> resolutions(m)
1-element Vector{Tuple{Vector{Vector{String}}, Vector{String}}}:
 ([["x", "y", "w"], ["y", "e1"], ["x", "e4"], ["y", "e2"], ["x", "y"]], ["e1", "e4", "e2", "e3", "s"])
Experimental

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

source
weighted_resolutionsMethod
weighted_resolutions(m::AbstractFTheoryModel)

Return weighted_resolutions of the F-theory model if known, otherwise throw an error.

See Registering And Extracting Known Resolution Sequences for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> weighted_resolutions(m)
1-element Vector{Tuple{Vector{Tuple{Vector{String}, Vector{Int64}}}, Vector{String}}}:
 ([(["x", "y", "w"], [1, 1, 1]), (["x", "y", "w"], [1, 2, 1]), (["x", "y", "w"], [2, 2, 1]), (["x", "y", "w"], [2, 3, 1]), (["x", "y"], [1, 1])], ["e1", "e4", "e2", "e3", "s"])
Experimental

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

source

If beyond this, a resolution sequence is known, it is advantageous to register it with the model:

add_resolution!Method
add_resolution!(m::AbstractFTheoryModel, centers::Vector{Vector{String}}, exceptionals::Vector{String})

Add a resolution for a model.

See Registering And Extracting Known Resolution Sequences for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> add_resolution!(m, [["x", "y", "w"], ["y", "e1"], ["x", "e4"], ["y", "e2"], ["x", "y"]], ["e1", "e4", "e2", "e3", "s"])

julia> length(resolutions(m))
1
Experimental

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

source
add_weighted_resolution!Method
add_weighted_resolution!(m::AbstractFTheoryModel, centers::Vector{Tuple{Vector{String}, Vector{Int64}}}, exceptionals::Vector{String})

Add a weighted resolution for a model.

See Registering And Extracting Known Resolution Sequences for more details.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, model_sections = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> centers = [(["x", "y", "w"], [1, 1, 1]), (["x", "y", "w"], [1, 2, 1]), (["x", "y", "w"], [2, 2, 1]), (["x", "y", "w"], [2, 3, 1]), (["x", "y"], [1, 1])];

julia> exceptionals = ["e1", "e4", "e2", "e3", "s"];

julia> add_weighted_resolution!(m, centers, exceptionals)

julia> length(weighted_resolutions(m))
1
Experimental

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

source

Once registered, the following method applies the complete sequence of blowups in a single step:

resolveMethod
resolve(m::AbstractFTheoryModel, index::Int)

Resolve a model with the index-th resolution that is known.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, defining_classes = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> t2 = resolve(t, 1)
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> coordinate_ring(ambient_space(t2))
Multivariate polynomial ring in 12 variables over QQ graded by
  x1 -> [1 0 0 0 0 0 0]
  x2 -> [0 1 0 0 0 0 0]
  x3 -> [0 1 0 0 0 0 0]
  x4 -> [0 1 0 0 0 0 0]
  x -> [0 0 1 0 0 0 0]
  y -> [0 0 0 1 0 0 0]
  z -> [0 0 0 0 1 0 0]
  e1 -> [0 0 0 0 0 1 0]
  e4 -> [0 0 0 0 0 0 1]
  e2 -> [-1 -3 -1 1 -1 -1 0]
  e3 -> [0 4 1 -1 1 0 -1]
  s -> [2 6 -1 0 2 1 1]

julia> w2 = 2 * torusinvariant_prime_divisors(B3)[1]
Torus-invariant, non-prime divisor on a normal toric variety

julia> t3 = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, defining_classes = Dict("w" => w2), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> t4 = resolve(t3, 1)
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
Experimental

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

source

Resolution Metadata Functions

The following methods retrieve known resolution associated section data.

resolution_zero_sectionsMethod
resolution_zero_sections(m::AbstractFTheoryModel)

Return resolution_zero_sections of the F-theory model if known, otherwise throw an error.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> resolution_zero_sections(m)
1-element Vector{Vector{Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}}:
 [[1, 1, 0], [1, 1, w], [1, 1], [1, 1], [1, 1], [1, 1]]
Experimental

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

source
resolution_generating_sectionsMethod
resolution_generating_sections(m::AbstractFTheoryModel)

Return resolution_generating_sections of the F-theory model if known, otherwise throw an error.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> resolution_generating_sections(m)
1-element Vector{Vector{Vector{Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}}}:
 [[[0, 0, 1], [0, 0, 1], [0, 1], [0, 1], [0, 1], [a32, a43]]]
Experimental

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

source
weighted_resolution_zero_sectionsMethod
weighted_resolution_zero_sections(m::AbstractFTheoryModel)

Return weighted_resolution_zero_sections of the F-theory model if known, otherwise throw an error.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> weighted_resolution_zero_sections(m)
1-element Vector{Vector{Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}}:
 [[1, 1, 0], [1, 1, w], [1, 1, w], [1, 1, w], [1, 1, w], [1, 1]]
Experimental

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

source
weighted_resolution_generating_sectionsMethod
weighted_resolution_generating_sections(m::AbstractFTheoryModel)

Return weighted_resolution_generating_sections of the F-theory model if known, otherwise throw an error.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> weighted_resolution_generating_sections(m)
1-element Vector{Vector{Vector{Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}}}}:
 [[[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1], [a32, a43]]]
Experimental

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

source

You can also add to this information, if more resolution generating sections or zero sections are known.

add_resolution_zero_section!Method
add_resolution_zero_section!(m::AbstractFTheoryModel, addition::Vector{Vector{String}})

Add a resolution zero section for a model.

Warning

The newly added section must be specified in terms of the base space coordinates only.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> add_resolution_zero_section!(m, [["1", "1", "0"], ["1", "1", "w"], ["1", "1"], ["1", "1"], ["1", "1"], ["1", "1"]])

julia> length(resolution_zero_sections(m))
1
Experimental

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

source
add_resolution_generating_section!Method
add_resolution_generating_section!(m::AbstractFTheoryModel, addition::Vector{Vector{Vector{String}}})

Add a resolution generating section for a model.

Warning

The newly added section must be specified in terms of the base space coordinates only.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", rng = Random.Xoshiro(1234))
Global Tate model over a not fully specified base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> add_resolution_generating_section!(m, [[["0", "0", "1"], ["0", "0", "1"], ["0", "1"], ["0", "1"], ["0", "1"], ["a32", "a43"]]])

julia> length(resolution_generating_sections(m))
1
Experimental

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

source
add_weighted_resolution_zero_section!Method
add_weighted_resolution_zero_section!(m::AbstractFTheoryModel, addition::Vector{Vector{String}})

Add a weighted resolution zero section for a model.

Warning

The newly added section must be specified in terms of the base space coordinates only.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, model_sections = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> add_weighted_resolution_zero_section!(m, [["1", "1", "0"], ["1", "1", "x1"], ["1", "1", "x1"], ["1", "1", "x1"], ["1", "1", "x1"], ["1", "1"]])

julia> length(weighted_resolution_zero_sections(m))
1
Experimental

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

source
add_weighted_resolution_generating_section!Method
add_weighted_resolution_generating_section!(m::AbstractFTheoryModel, addition::Vector{Vector{Vector{String}}})

Add a weighted resolution generating section for a model.

Warning

The newly added section must be specified in terms of the base space coordinates only.

See Resolution Metadata Functions for more details.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> w = torusinvariant_prime_divisors(B3)[1]
Torus-invariant, prime divisor on a normal toric variety

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1", base_space = B3, model_sections = Dict("w" => w), completeness_check = false, rng = Random.Xoshiro(1234))
Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> addition = [[["0", "0", "1"], ["0", "0", "1"], ["0", "0", "1"], ["0", "0", "1"], ["0", "0", "1"], ["1980*x1^10", "0", "0"]]];

julia> add_weighted_resolution_generating_section!(m, addition)

julia> length(weighted_resolution_generating_sections(m))
2
Experimental

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

source

Exceptional Divisors

The following methods return information on exceptional divisors introduced by toric blowups. Therefore, these attributes are only available for models build over a concrete toric base space.

exceptional_classesMethod
exceptional_classes(m::AbstractFTheoryModel)

Return the cohomology classes of the exceptional toric divisors of a model as a vector of cohomology classes in the toric ambient space. This information is only supported for models over a concrete base that is a normal toric variety, but is always available in this case. After a toric blow up this information is updated.

See Exceptional Divisors for more details.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> foah11_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), rng = Random.Xoshiro(1234))
Hypersurface model over a concrete base

julia> exceptional_classes(foah11_B3)
4-element Vector{CohomologyClass}:
 Cohomology class on a normal toric variety given by e1
 Cohomology class on a normal toric variety given by e2
 Cohomology class on a normal toric variety given by e3
 Cohomology class on a normal toric variety given by e4
Experimental

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

source
exceptional_divisor_indicesMethod
exceptional_divisor_indices(m::AbstractFTheoryModel)

Return the indices of the generators of the Cox ring of the ambient space which correspond to exceptional divisors. This information is only supported for models over a concrete base that is a normal toric variety, but is always available in this case. After a toric blow up this information is updated.

See Exceptional Divisors for more details.

Examples

julia> using Random;

julia> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> Kbar = anticanonical_divisor_class(B3)
Divisor class on a normal toric variety

julia> foah11_B3 = literature_model(arxiv_id = "1408.4808", equation = "3.142", type = "hypersurface", base_space = B3, defining_classes = Dict("s7" => Kbar, "s9" => Kbar), rng = Random.Xoshiro(1234))
Hypersurface model over a concrete base

julia> exceptional_divisor_indices(foah11_B3)
4-element Vector{Int64}:
  8
  9
 10
 11
Experimental

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

source

Analyzing the Resolved Fiber Structure

Note: This functionality is currently only supported for Global Tate Models.

After resolution, one typically studies the structure of the resolved fibers to extract intersection numbers and representation-theoretic data. The method below computes the fiber components and their intersection graph in codimension one of the base space:

analyze_fibersMethod
analyze_fibers(model::GlobalTateModel, centers::Vector{<:Vector{<:Integer}})

Determine the fiber of a (singular) global Tate model over a particular base locus.

Warning

This method may run for very long time and is currently not tested as part of the regular OSCAR CI due to its excessive run times.

Experimental

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

source