Weierstrass models

A Weierstrass model describes a particular form of an elliptic fibration. We focus on an elliptic fibration over a complete base $B$. Consider the weighted projective space $\mathbb{P}^{2,3,1}$ with coordinates $x, y, z$. In addition, consider

  • $f \in H^0( B, \overline{K}_{B}^{\otimes 4} )$,
  • $g \in H^0( B, \overline{K}_{B}^{\otimes 6} )$,

Then form a $\mathbb{P}^{2,3,1}$-bundle over $B$ such that

  • $x$ transforms as a section of $2 \overline{K}_{B}$,
  • $y$ transforms as a section of $3 \overline{K}_{B}$,
  • $z$ transforms as a section of $0 \overline{K}_{B} = \mathcal{O}_{B}$.

In this 5-fold ambient space, a Weierstrass model is the hypersurface defined by the vanishing of the Weierstrass polynomial $P_W = x^3 - y^2 + f x z^4 + g z^6$.

Crucially, for non-trivial F-theory settings, the elliptic fibration in question must be singular. In fact, by construction, one usually engineers certain singularities. This can be read-off from the Weierstrass table, which we have reproduced from [Wei18] with small corrections:

type$\mathrm{ord}(f)$$\mathrm{ord}(g)$$\mathrm{ord}(\Delta)$sing.monodromy coveralgebra $\mathfrak{g}$comp.
$I_0$$\geq 0$$\geq 0$0
$I_1$$0$$0$$1$
$II$$\geq 1$$1$$2$
$III$$1$$\geq 2$$3$$A_1$$\mathfrak{su}(2)$
$IV^{ns}$$\geq 2$$2$$4$$A_2$$\left. \psi^2 - \frac{g}{w^2} \right|_{w = 0}$$\mathfrak{sp}(1)$$1$
$IV^{s}$$\geq 2$$2$$4$$A_2$$\left. \psi^2 - \frac{g}{w^2} \right|_{w = 0}$$\mathfrak{su}(3)$$2$
$I_m^{ns}$$0$$0$$m$$A_{m - 1}$$\left. \psi^2 + \frac{9g}{2f} \right|_{w = 0}$$\mathfrak{sp}(\lfloor \frac{m}{2} \rfloor])$$1$
$I_m^{s}$$0$$0$$m$$A_{m - 1}$$\left. \psi^2 + \frac{9g}{2f} \right|_{w = 0}$$\mathfrak{su}(m)$$2$
$I_0^{*ns}$$\geq 2$$\geq 3$$6$$D_4$$\left. \psi^3 + \psi \cdot \frac{f}{w^2} + \frac{g}{w^3} \right|_{w = 0}$$\mathfrak{g}_2$$1$
$I_0^{*ss}$$\geq 2$$\geq 3$$6$$D_4$$\left. \psi^3 + \psi \cdot \frac{f}{w^2} + \frac{g}{w^3} \right|_{w = 0}$$\mathfrak{so}(7)$$2$
$I_0^{*s}$$\geq 2$$\geq 3$$6$$D_4$$\left. \psi^3 + \psi \cdot \frac{f}{w^2} + \frac{g}{w^3} \right|_{w = 0}$$\mathfrak{so}(8)$$3$
$I_{2n-5}^{*ns}$ ($n \geq 3$)$2$$3$$2n+1$$D_{2n-1}$$\left. \psi^2 + \frac{1}{4} \left( \frac{\Delta}{w^{2n+1}} \right) \left( \frac{2wf}{9g} \right)^3 \right|_{w = 0}$$\mathfrak{so}(4n-3)$$1$
$I_{2n-5}^{*s}$ ($n \geq 3$)$2$$3$$2n+1$$D_{2n-1}$$\left. \psi^2 + \frac{1}{4} \left( \frac{\Delta}{w^{2n+1}} \right) \left( \frac{2wf}{9g} \right)^3 \right|_{w = 0}$$\mathfrak{so}(4n-2)$$2$
$I_{2n-4}^{*ns}$ ($n \geq 3$)$2$$3$$2n+2$$D_{2n}$$\left. \psi^2 + \left( \frac{\Delta}{w^{2n+2}} \right) \left( \frac{2wf}{9g} \right)^2 \right|_{w = 0}$$\mathfrak{so}(4n-1)$$1$
$I_{2n-4}^{*s}$ ($n \geq 3$)$2$$3$$2n+2$$D_{2n}$$\left. \psi^2 + \left( \frac{\Delta}{w^{2n+2}} \right) \left( \frac{2wf}{9g} \right)^2 \right|_{w = 0}$$\mathfrak{so}(4n)$$2$
$IV^{*ns}$$\geq 3$$4$$8$$E_6$$\left. \psi^2 - \frac{g}{w^4} \right|_{w = 0}$$\mathfrak{f}_4$$1$
$IV^{*s}$$\geq 3$$4$$8$$E_6$$\left. \psi^2 - \frac{g}{w^4} \right|_{w = 0}$$\mathfrak{e}_6$$2$
$III^*$$3$$\geq 5$$9$$E_7$$\mathfrak{e}_7$
$II^*$$\geq 4$$5$$10$$E_8$$\mathfrak{e}_8$
non-min.$\geq 4$$\geq 6$$\geq 12$non-can.

Constructors

We aim to provide support for Weierstrass models over the following bases:

  • a toric variety,
  • a toric scheme,
  • a (covered) scheme.

Often, one also wishes to obtain information about a Weierstrass model without explicitly specifying the base space. Also for this application, we provide support. Finally, we provide support for some standard constructions.

Before we detail these constructors, we must comment on the constructors over toric base spaces. Namely, in order to construct a Weierstrass model as a hypersurface in an ambient space, we first wish to construct the ambient space in question. For a toric base, one way to achieve this is to first focus on the Cox ring of the toric ambient space. This ring must be graded such that the Weierstrass polynomial is homogeneous and cuts out a Calabi-Yau hypersurface. Given this grading, one can perform a triangulation task. Typically, this combinatorial task is very demanding, consumes a lot of computational power and takes a long time to complete. Even more, it will yield a large, often huge, number of candidate ambient spaces of which the typical user will only pick one. For instance, a common and often appropriate choice is a toric ambient space which contains the toric base space in a manifest way.

To circumvent this very demanding computation, our toric constructors operate in the opposite direction. That is, they begin by extracting the rays and maximal cones of the chosen toric base space. Subsequently, those rays and cones are extended to form one of the many toric ambient spaces. This proves hugely superior in performance than going through the triangulation task of enumerating all possible toric ambient spaces. One downside of this strategy is that the so-constructed ambient space need not be smooth.

A toric variety as base space

We require that the provided toric base space is complete. This is a technical limitation as of now. The functionality of OSCAR only allows us to compute a section basis (or a finite subset thereof) for complete toric varieties. In the future, this could be extended.

However, completeness is an expensive check. Therefore, we provide an optional argument which one can use to disable this check if desired. To this end, one passes the optional argument completeness_check = false as last argument to the constructor. The following examples demonstrate this:

weierstrass_modelMethod
weierstrass_model(base::NormalToricVariety; completeness_check::Bool = true)

This method constructs a Weierstrass model over a given toric base 3-fold. The Weierstrass sections $f$ and $g$ are taken with (pseudo)random coefficients.

Examples

julia> w = weierstrass_model(sample_toric_variety(); completeness_check = false)
Weierstrass model over a concrete base
weierstrass_modelMethod
weierstrass_model(base::NormalToricVariety, f::MPolyRingElem, g::MPolyRingElem; completeness_check::Bool = true)

This method operates analogously to weierstrass_model(base::NormalToricVarietyType). The only difference is that the Weierstrass sections $f$ and $g$ can be specified with non-generic values.

Examples

julia> base = sample_toric_variety()
Normal toric variety

julia> f = generic_section(anticanonical_bundle(base)^4);

julia> g = generic_section(anticanonical_bundle(base)^6);

julia> w = weierstrass_model(base, f, g; completeness_check = false)
Weierstrass model over a concrete base

A (covered) scheme as base space

This functionality does not yet exist.

Base space not specified

A Weierstrass model can also be constructed over a base space that is not fully specified. Rather, it assumes that a base space exists such that the Weierstrass sections $f$ and $g$ are well-defined, so that the Weierstrass model in question is well-defined.

For many practical applications, one wishes to assume a further specialize the Weierstrass sections $f$ and $g$. This has the advantage that one can engineer singularity loci or even the singularity type over a specific locus. To some extend, this is the backbone of many F-theory constructions. It is useful to consider a polynomial ring whose variables are the sections used in the desired factorization of the Weierstrass sections $f$ and $g$. In theory, one can consider the indeterminates of this polynomial ring as local coordinate of an auxiliary base space. Indeed, for our computer implementation the polynomial ring with these indeterminates serves as the coordinate ring of a family of base spaces. We support the following constructor:

weierstrass_modelMethod
weierstrass_model(auxiliary_base_ring::MPolyRing, auxiliary_base_grading::Matrix{Int64}, d::Int, weierstrass_f::MPolyRingElem, weierstrass_g::MPolyRingElem)

This method constructs a Weierstrass model over a base space that is not fully specified.

Note that many studies in the literature use the class of the anticanonical bundle in their analysis. We anticipate this by adding this class as a variable of the auxiliary base space, unless the user already provides this grading. Our convention is that the first grading refers to Kbar and that the homogeneous variable corresponding to this class carries the name "Kbar".

The following example illustrates this approach.

Examples

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

julia> auxiliary_base_grading = [4 6 1 0]
1×4 Matrix{Int64}:
 4  6  1  0

julia> w = weierstrass_model(auxiliary_base_ring, auxiliary_base_grading, 3, f, g)
Assuming that the first row of the given grading is the grading under Kbar

Weierstrass model over a not fully specified base

Standard constructions

We provide convenient constructions of Weierstrass models over famous base spaces. Currently, we support the following:

weierstrass_model_over_projective_spaceMethod
weierstrass_model_over_projective_space(d::Int)

This method constructs a Weierstrass model over the projective space.

Examples

julia> weierstrass_model_over_projective_space(3)
Weierstrass model over a concrete base
weierstrass_model_over_hirzebruch_surfaceMethod
weierstrass_model_over_hirzebruch_surface(r::Int)

This method constructs a Weierstrass model over a Hirzebruch surface.

Examples

julia> weierstrass_model_over_hirzebruch_surface(1)
Weierstrass model over a concrete base
weierstrass_model_over_del_pezzo_surfaceMethod
weierstrass_model_over_del_pezzo_surface(b::Int)

This method constructs a Weierstrass model over a del-Pezzo surface.

Examples

julia> weierstrass_model_over_del_pezzo_surface(3)
Weierstrass model over a concrete base

Literature models

Certain Weierstrass models have been studied in the physics literature over and over again. Thereby, these constructions became famous and some were given special names. We aim to provide support for such standard constructions. Currently, we provide support for the following:

su5_weierstrass_model_over_arbitrary_3d_baseMethod
su5_weierstrass_model_over_arbitrary_3d_base()

Return the SU(5) Weierstrass model over an arbitrary 3-dimensional base space. For more details see e.g. [Wei18] and references therein.

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

Weierstrass model over a not fully specified base

Attributes

Basic attributes

For all Weierstrass models – irrespective over whether the base is toric or not – we support the following attributes:

weierstrass_section_fMethod
weierstrass_section_f(w::WeierstrassModel)

Return the polynomial $f$ used for the construction of the Weierstrass model.

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

Weierstrass model over a not fully specified base

julia> weierstrass_section_f(w);
weierstrass_section_gMethod
weierstrass_section_g(w::WeierstrassModel)

Return the polynomial $g$ used for the construction of the Weierstrass model.

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

Weierstrass model over a not fully specified base

julia> weierstrass_section_g(w);
weierstrass_polynomialMethod
weierstrass_polynomial(w::WeierstrassModel)

Return the Weierstrass polynomial of the Weierstrass model.

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

Weierstrass model over a not fully specified base

julia> weierstrass_polynomial(w);

In case the Weierstrass model is constructed over a not fully specified base, recall that we construct an auxiliary (toric) base space as well as an auxiliary (toric) ambient space. The (auxiliary) base and ambient space can be accessed with the following functions:

base_spaceMethod
base_space(w::WeierstrassModel)

Return the base space of the Weierstrass model.

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

Weierstrass model over a not fully specified base

julia> base_space(w)
A family of spaces of dimension d = 3
ambient_spaceMethod
ambient_space(w::WeierstrassModel)

Return the base space of the Weierstrass model.

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

Weierstrass model over a not fully specified base

julia> ambient_space(w)
A family of spaces of dimension d = 5
fiber_ambient_spaceMethod
fiber_ambient_space(w::WeierstrassModel)

Return the fiber ambient space of the Weierstrass model.

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

Weierstrass model over a not fully specified base

julia> fiber_ambient_space(w)
Normal toric variety

The following method allows to tell if the base/ambient space is auxiliary or not:

base_fully_specifiedMethod
base_fully_specified(w::WeierstrassModel)

Return true is the Weierstrass model has a concrete base space and false otherwise.

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

Weierstrass model over a not fully specified base

julia> base_fully_specified(w)
false

The user can decide to get an information whenever an auxiliary base space, auxiliary ambient space or auxiliary hypersurface have been computed. To this end, one invokes set_verbosity_level(:WeierstrassModel, 1). More background information is available here.

Advanced attributes

The following attributes are currently only supported in a toric setting:

calabi_yau_hypersurfaceMethod
calabi_yau_hypersurface(w::WeierstrassModel)

Return the Calabi-Yau hypersurface in the toric ambient space which defines the Weierstrass model.

julia> w = weierstrass_model(sample_toric_variety(); completeness_check = false)
Weierstrass model over a concrete base

julia> calabi_yau_hypersurface(w)
Closed subvariety of a normal toric variety

Note that for applications in F-theory, singular elliptic fibrations are key (cf. [Wei18] and references therein). Consequently the discriminant locus as well as the singular loci of the fibration in question are of ample importance:

discriminantMethod
discriminant(w::WeierstrassModel)

Return the discriminant $\Delta = 4 f^3 + 27 g^2$.

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

Weierstrass model over a not fully specified base

julia> discriminant(w);
singular_lociMethod
singular_loci(w::WeierstrassModel)

Return the singular loci of the Weierstrass model, along with the order of vanishing of $(f, g, \Delta)$ at each locus and the refined Tate fiber type.

For the time being, we either explicitly or implicitly focus on toric varieties as base spaces. Explicitly, in case the user provides such a variety as base space, and implicitly, in case we work over a non-fully specified base. This has the advantage that we can "filter out" trivial singular loci.

Specifically, recall that every closed subvariety of a simplicial toric variety is of the form $V(I)$, where $I$ is a homogeneous ideal of the Cox ring. Let $B$ be the irrelevant ideal of this toric variety. Then, by proposition 5.2.6. of [CLS11], $V(I)$ is trivial/empty iff $B^l \subseteq I$ for a suitable $l \geq 0$. This can be checked by checking if the saturation $I:B^\infty$ is the ideal generated by $1$.

By treating a not-fully specified base space implicitly as toric space, we can extend this result straightforwardly to this situation also. This is the reason for constructing this auxiliary base space.

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

Weierstrass model over a not fully specified base

julia> length(singular_loci(w))
2

Methods

Blowup

We can blow up a Weierstrass model:

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

Resolve a Weierstrass model by blowing up a locus in the ambient space.

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)

Consequently, the model will thereafter be partially resolved.

is_partially_resolvedMethod
is_partially_resolved(w::WeierstrassModel)

Return true if resolution techniques were applies to the Weierstrass model, thereby potentially resolving its singularities. Otherwise, return false.

julia> w = literature_model(arxiv_id = "1208.2695", equation = "B.19", completeness_check = false)
Assuming that the first row of the given grading is the grading under Kbar

Weierstrass model over a not fully specified base -- U(1) Weierstrass model based on arXiv paper 1208.2695 Eq. (B.19)

julia> is_partially_resolved(w)
false