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
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
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
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
source
stanley_reisner_idealMethod
stanley_reisner_ideal(f::FamilyOfSpaces)

Return the equivalent of the Stanley-Reisner 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> stanley_reisner_ideal(f)
Ideal generated by
  f*g*Kbar*u
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
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
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
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
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
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
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
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
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, model_sections = 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
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, model_sections = 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, model_sections = 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)
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, model_sections = 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
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 = basis_of_global_sections(w_bundle)[1];

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
source