Functionality for all F-theory models

All F-theory models focus on elliptic (or genus-one) fibrations. Details depend on the specific way in which the fibration is constructed/described. Still, some functionality is common among all or at least the majority of all supported models. We will document such common functionality here.

Family of Spaces

Many F-theory constructions (e.g. in the literature) work without fully specifying the base space of the elliptic fibrations. Put differently, those works consider an entire family of base spaces. We aim to support this data structure.

Note of caution: This data structure is subject to discussion. The exact implementation details may change drastically in the future. Use with care (as all experimental code, of course).

Constructors

We currently support the following constructor:

family_of_spacesMethod
family_of_spaces(coordinate_ring::MPolyRing, grading::Matrix{Int64}, dim::Int)

Return a family of spaces that is (currently) used to build families of F-theory models, defined by using a family of base spaces for an elliptic fibration. It is specified by the following data:

  • A polynomial ring. This may be thought of as the coordinate

ring of the generic member in this family of spaces.

  • A grading for this polynomial ring. This may be thought of as

specifying certain line bundles on the generic member in this family of spaces. Of particular interest for F-theory is always the canonical bundle. For this reason, the first row is always thought of as grading the coordinate ring with regard to the canonical bundle. Or put differently, if a variable shares the weight 1 in the first row, then this means that we should think of this coordinate as a section of 1 times the canonical bundle.

  • An integer, which specifies the dimension of the generic member

within this family of spaces.

Note that the coordinate ring can have strictly more variables than the dimension. This is a desired feature for most, if not all, F-theory literature constructions.

julia> coord_ring, _ = QQ["f", "g", "Kbar", "u"];

julia> grading = [4 6 1 0; 0 0 0 1]
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1

julia> d = 3
3

julia> f = family_of_spaces(coord_ring, grading, d)
A family of spaces of dimension d = 3
Experimental

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

source

Attributes

We currently support the following attributes:

coordinate_ringMethod
coordinate_ring(f::FamilyOfSpaces)

Return the coordinate ring of a generic member of the family of spaces.

julia> ring, (f, g, Kbar, u) = QQ["f", "g", "Kbar", "u"]
(Multivariate polynomial ring in 4 variables over QQ, QQMPolyRingElem[f, g, Kbar, u])

julia> grading = [4 6 1 0; 0 0 0 1]
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1

julia> d = 3
3

julia> f = family_of_spaces(ring, grading, d)
A family of spaces of dimension d = 3

julia> coordinate_ring(f)
Multivariate polynomial ring in 4 variables f, g, Kbar, u
  over rational field
Experimental

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

source
weightsMethod
weights(f::FamilyOfSpaces)

Return the grading of the coordinate ring of a generic member of the family of spaces.

julia> ring, (f, g, Kbar, u) = QQ["f", "g", "Kbar", "u"]
(Multivariate polynomial ring in 4 variables over QQ, QQMPolyRingElem[f, g, Kbar, u])

julia> grading = [4 6 1 0; 0 0 0 1]
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1

julia> d = 3
3

julia> f = family_of_spaces(ring, grading, d)
A family of spaces of dimension d = 3

julia> weights(f)
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1
Experimental

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

source
dimMethod
dim(f::FamilyOfSpaces)

Return the dimension of the generic member of the family of spaces.

julia> ring, (f, g, Kbar, u) = QQ["f", "g", "Kbar", "u"]
(Multivariate polynomial ring in 4 variables over QQ, QQMPolyRingElem[f, g, Kbar, u])

julia> grading = [4 6 1 0; 0 0 0 1]
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1

julia> d = 3
3

julia> f = family_of_spaces(ring, grading, d)
A family of spaces of dimension d = 3

julia> dim(f)
3
Experimental

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

source
irrelevant_idealMethod
irrelevant_ideal(f::FamilyOfSpaces)

Return the equivalent of the irrelevant ideal for the generic member of the family of spaces.

julia> coord_ring, (f, g, Kbar, u) = QQ["f", "g", "Kbar", "u"]
(Multivariate polynomial ring in 4 variables over QQ, QQMPolyRingElem[f, g, Kbar, u])

julia> grading = [4 6 1 0; 0 0 0 1]
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1

julia> d = 3
3

julia> f = family_of_spaces(coord_ring, grading, d)
A family of spaces of dimension d = 3

julia> irrelevant_ideal(f)
Ideal generated by
  u
  Kbar
  g
  f
Experimental

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

source
ideal_of_linear_relationsMethod
ideal_of_linear_relations(f::FamilyOfSpaces)

Return the equivalent of the ideal of linear relations for the generic member of the family of spaces.

julia> coord_ring, (f, g, Kbar, u) = QQ["f", "g", "Kbar", "u"]
(Multivariate polynomial ring in 4 variables over QQ, QQMPolyRingElem[f, g, Kbar, u])

julia> grading = [4 6 1 0; 0 0 0 1]
2×4 Matrix{Int64}:
 4  6  1  0
 0  0  0  1

julia> f = family_of_spaces(coord_ring, grading, 3)
A family of spaces of dimension d = 3

julia> ideal_of_linear_relations(f)
Ideal generated by
  -5*f + 3*g + 2*Kbar
  -3*f + 2*g
Experimental

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

source

Printouts

The user can decide to get information whenever a family of spaces is being used. To this end, one invokes set_verbosity_level(:FTheoryModelPrinter, 1). More information is available here.

Attributes of all (or most) F-theory models

ambient_spaceMethod
ambient_space(m::AbstractFTheoryModel)

Return the ambient space of the F-theory model.

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar

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> ambient_space(m)
A family of spaces of dimension d = 5
Experimental

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

source
base_spaceMethod
base_space(m::AbstractFTheoryModel)

Return the base space of the F-theory model.

julia> m = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar

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> base_space(m)
A family of spaces of dimension d = 3
Experimental

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

source
fiber_ambient_spaceMethod
fiber_ambient_space(m::AbstractFTheoryModel)

Return the fiber ambient space of an F-theory model.

julia> t = su5_tate_model_over_arbitrary_3d_base()
Assuming that the first row of the given grading is the grading under Kbar

Global Tate model over a not fully specified base

julia> fiber_ambient_space(t)
Normal toric variety
Experimental

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

source
explicit_model_sectionsMethod
explicit_model_sections(m::AbstractFTheoryModel)

Return the model sections in explicit form, that is as polynomials of the base space coordinates.

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar

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> explicit_model_sections(t)
Dict{String, QQMPolyRingElem} with 9 entries:
  "a6"  => 0
  "a21" => a21
  "a3"  => w^2*a32
  "w"   => w
  "a2"  => w*a21
  "a1"  => a1
  "a4"  => w^3*a43
  "a43" => a43
  "a32" => a32
Experimental

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

source
defining_section_parametrizationMethod
defining_section_parametrization(m::AbstractFTheoryModel)

Return the model sections in explicit form, that is as polynomials of the base space coordinates.

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar

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> defining_section_parametrization(t)
Dict{String, MPolyRingElem} with 4 entries:
  "a6" => 0
  "a3" => w^2*a32
  "a2" => w*a21
  "a4" => w^3*a43
Experimental

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

source
classes_of_model_sectionsMethod
classes_of_model_sections(m::AbstractFTheoryModel)

Return the divisor classes of all model sections.

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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> classes_of_model_sections(t)
Dict{String, ToricDivisorClass} with 9 entries:
  "a21" => Divisor class on a normal toric variety
  "a6"  => Divisor class on a normal toric variety
  "a3"  => Divisor class on a normal toric variety
  "w"   => Divisor class on a normal toric variety
  "a2"  => Divisor class on a normal toric variety
  "a1"  => Divisor class on a normal toric variety
  "a43" => Divisor class on a normal toric variety
  "a4"  => Divisor class on a normal toric variety
  "a32" => Divisor class on a normal toric variety
Experimental

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

source
defining_classesMethod
defining_classes(m::AbstractFTheoryModel)

Return the defining divisor classes of the model in question.

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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

Global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)

julia> defining_classes(t)
Dict{String, ToricDivisorClass} with 2 entries:
  "w"    => Divisor class on a normal toric variety
  "Kbar" => Divisor class on a normal toric variety
Experimental

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

source
gauge_algebraMethod
gauge_algebra(m::AbstractFTheoryModel)

Return the gauge algebra of the given model. If no gauge algebra is known, an error is raised. This information is typically available for all models, however.

julia> t = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "hypersurface")
Assuming that the first row of the given grading is the grading under Kbar

Hypersurface model over a not fully specified base

julia> gauge_algebra(t)
5-element Vector{LinearLieAlgebra{QQBarFieldElem}}:
 Special linear Lie algebra of degree 2 over QQBar
 Special linear Lie algebra of degree 2 over QQBar
 Special linear Lie algebra of degree 2 over QQBar
 Special linear Lie algebra of degree 2 over QQBar
 Linear Lie algebra with 1x1 matrices over QQBar
Experimental

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

source
global_gauge_quotientsMethod
global_gauge_quotients(m::AbstractFTheoryModel)

Return list of lists of matrices, where each list of matrices corresponds to a gauge factor of the same index given by gaugealgebra(m). These matrices are elements of the center of the corresponding gauge factor and quotienting by them replicates the action of some discrete group on the center of the lie algebra. This list combined with gaugealgebra(m) completely determines the gauge group of the model. If no gauge quotients are known, an error is raised.

julia> t = literature_model(arxiv_id = "1408.4808", equation = "3.190", type = "hypersurface")
Assuming that the first row of the given grading is the grading under Kbar

Hypersurface model over a not fully specified base

julia> global_gauge_quotients(t)
5-element Vector{Vector{String}}:
 ["-identity_matrix(C,2)", "-identity_matrix(C,2)"]
 ["-identity_matrix(C,2)"]
 ["-identity_matrix(C,2)"]
 ["-identity_matrix(C,2)", "-identity_matrix(C,2)"]
 ["-identity_matrix(C,1)"]
Experimental

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

source

Properties of all (or most) F-theory models

is_base_space_fully_specifiedMethod
is_base_space_fully_specified(m::AbstractFTheoryModel)

Return true if the F-theory model has a concrete base space and false otherwise.

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1")
Assuming that the first row of the given grading is the grading under Kbar

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> is_base_space_fully_specified(t)
false
Experimental

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

source
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.

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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

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

Methods for all (or most) F-theory models

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> 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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

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> 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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

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> 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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

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(cox_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> 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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

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(cox_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 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
tuneMethod
tune(m::AbstractFTheoryModel, p::MPolyRingElem; completeness_check::Bool = true)

Tune an F-theory model by replacing the hypersurface equation by a custom (polynomial) equation. The latter can be any type of polynomial: a Tate polynomial, a Weierstrass polynomial or a general polynomial. We do not conduct checks to tell which type the provided polynomial is. Consequently, this tuning will always return a hypersurface model.

Note that there is less functionality for hypersurface models than for Weierstrass or Tate models. For instance, singular_loci can (currently) not be computed for hypersurface models.

Examples

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)
Construction over concrete base may lead to singularity enhancement. Consider computing singular_loci. However, this may take time!

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(parent(tate_polynomial(t)))
7-element Vector{MPolyDecRingElem{QQFieldElem, QQMPolyRingElem}}:
 x1
 x2
 x3
 x4
 x
 y
 z

julia> new_tate_polynomial = x^3 - y^2 - x * y * z * x4^4
-x4^4*x*y*z + x^3 - y^2

julia> tuned_t = tune(t, new_tate_polynomial)
Hypersurface model over a concrete base

julia> hypersurface_equation(tuned_t) == new_tate_polynomial
true

julia> base_space(tuned_t) == base_space(t)
true
Experimental

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

source
put_over_concrete_baseMethod
put_over_concrete_base(m::AbstractFTheoryModel, concrete_data::Dict{String, <:Any}; completeness_check::Bool = true)

Put an F-theory model defined over a family of spaces over a concrete base.

Currently, this functionality is limited to Tate and Weierstrass models.

Examples

julia> t = literature_model(arxiv_id = "1109.3454", equation = "3.1", completeness_check = false)
Assuming that the first row of the given grading is the grading under Kbar

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> B3 = projective_space(NormalToricVariety, 3)
Normal toric variety

julia> w_bundle = toric_line_bundle(torusinvariant_prime_divisors(B3)[1])
Toric line bundle on a normal toric variety

julia> kbar = anticanonical_bundle(B3)
Toric line bundle on a normal toric variety

julia> w = generic_section(w_bundle);

julia> a21 = generic_section(kbar^2 * w_bundle^(-1));

julia> a32 = generic_section(kbar^3 * w_bundle^(-2));

julia> a43 = generic_section(kbar^4 * w_bundle^(-3));

julia> t2 = put_over_concrete_base(t, Dict("base" => B3, "w" => w, "a21" => a21, "a32" => a32, "a43" => a43), completeness_check = false)
Global Tate model over a concrete base
Experimental

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

source