Global Weierstrass models

    ... over concrete bases

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

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

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

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

    In this 5-fold ambient space, a global 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$.

    To construct a Weierstrass model as a hypersurface in an ambient space, we first need 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. This triangulation will typically take a long time to complete and yield a large number of candidate ambient spaces. Typically, one wishes to focus on those spaces which contain the toric base space in a manifest way. But even this criterion usually allows for many ambient spaces to be used.

    To circumvent this obstacle, all our constructors operate in the opposite direction. That is, they begins 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. Note that the so-constructed ambient space need not be smooth.

    We support the following constructors:

    FTheoryTools.global_weierstrass_modelMethod
    global_weierstrass_model(base::Oscar.AbstractNormalToricVariety)

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

    Examples

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> is_smooth(toric_ambient_space(w))
    false
    source
    FTheoryTools.global_weierstrass_model_over_projective_spaceMethod
    global_weierstrass_model_over_projective_space()

    This method constructs a global Weierstrass model over the 3-dimensional projective space.

    Examples

    julia> using Oscar
    
    julia> global_weierstrass_model_over_projective_space()
    A global Weierstrass model over a concrete base
    source
    FTheoryTools.global_weierstrass_modelMethod
    global_weierstrass_model(f::MPolyElem{fmpq}, g::MPolyElem{fmpq}, base::Oscar.AbstractNormalToricVariety)

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

    Examples

    julia> using Oscar
    
    julia> base = test_base()
    A normal toric variety
    
    julia> f = sum([rand(Int) * b for b in basis_of_global_sections(anticanonical_bundle(base)^4)]);
    
    julia> g = sum([rand(Int) * b for b in basis_of_global_sections(anticanonical_bundle(base)^6)]);
    
    julia> w = global_weierstrass_model(f, g, base)
    A global Weierstrass model over a concrete base
    
    julia> is_smooth(toric_ambient_space(w))
    false
    source

    ... over not fully specified bases

    A global 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.

    Consequently, the construction of such models accepts 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 auxiliary ring as a (possilby redundant) set of local coordinate of the base space. For the computer implementation, this ring will therefore serve as the coordinate ring of an auxiliary toric base space, namely an affine space with those coordinates.

    For such geometries, we support the following functionality.

    FTheoryTools.global_weierstrass_modelMethod
    global_weierstrass_model(poly_f::MPolyElem{fmpq}, poly_g::MPolyElem{fmpq}, auxiliary_base_ring::MPolyRing, d::Int)

    This method constructs a global Weierstrass model over a base space that is not fully specified. The following example illustrates this approach.

    Examples

    julia> using Oscar
    
    julia> auxiliary_base_ring, (f, g, x) = QQ["f", "g", "x"];
    
    julia> w = global_weierstrass_model(f, g, auxiliary_base_ring, 3)
    A global Weierstrass model over a not fully specified base
    
    julia> weierstrass_polynomial(w)
    f*x*z^4 + g*z^6 + x^3 - y^2
    
    julia> toric_base_space(w)
    [ Info: Base space was not fully specified. Returning AUXILIARY base space.
    A normal toric variety
    
    julia> toric_ambient_space(w)
    [ Info: Base space was not fully specified. Returning AUXILIARY ambient space.
    A normal, simplicial toric variety
    
    julia> dim(toric_ambient_space(w))
    5
    source

    Attributes

    FTheoryTools.weierstrass_section_fMethod
    weierstrass_section_f(w::GlobalWeierstrassModel)

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

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> weierstrass_section_f(w);
    source
    FTheoryTools.weierstrass_section_gMethod
    weierstrass_section_g(w::GlobalWeierstrassModel)

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

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> weierstrass_section_g(w);
    source
    FTheoryTools.weierstrass_polynomialMethod
    weierstrass_polynomial(w::GlobalWeierstrassModel)

    Return the Weierstrass polynomial of the global Weierstrass model.

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> weierstrass_polynomial(w);
    source
    FTheoryTools.cy_hypersurfaceMethod
    cy_hypersurface(w::GlobalWeierstrassModel)

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

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> cy_hypersurface(w)
    A closed subvariety of a normal toric variety
    source
    AbstractAlgebra.discriminantMethod
    discriminant(w::GlobalWeierstrassModel)

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

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> discriminant(w);
    source

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

    FTheoryTools.toric_base_spaceMethod
    toric_base_space(w::GlobalWeierstrassModel)

    Return the toric base space of the global Weierstrass model.

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> is_smooth(toric_base_space(w))
    true
    source
    FTheoryTools.toric_ambient_spaceMethod
    toric_ambient_space(w::GlobalWeierstrassModel)

    Return the toric base space of the global Weierstrass model.

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> is_smooth(toric_ambient_space(w))
    false
    source

    To tell if they are auxiliary or not, one can use base_fully_specified(w), which returns true in case the Tate model is defined over a concrete base and false otherwise.

    Properties

    FTheoryTools.base_fully_specifiedMethod
    base_fully_specified(t::GlobalWeierstrassModel)

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

    julia> using Oscar
    
    julia> w = global_weierstrass_model(test_base())
    A global Weierstrass model over a concrete base
    
    julia> base_fully_specified(w)
    true
    source

    Singular loci

    For applications in F-theory, singular elliptic fibrations are key (cf. Timo Weigand (2018) and references therein). The general approach is to not work with the singular space directly. Rather, one resolves the singularities in order to obtain a smooth space instead. Subsequently, one performs computations on this smooth space.

    In this sense, knowledge of the singular loci is a first step to a successful analysis of such a geometry. For this, we provide the following functionality.

    FTheoryTools.singular_lociMethod
    singular_loci(w::GlobalWeierstrassModel)

    Return the singular loci of the global 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 David A. Cox, John B. Little, Henry K. Schenck (2011), $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.

    Let us demonstrate the functionality by computing the singular loci of a Type $III$ Tate model Sheldon Katz, David R. Morrison, Sakura Schafer-Nameki, James Sully (2011). In this case, we will consider a global Tate model over a non-fully specified base. The Tate sections are factored as follows:

    • $a_1 = a_{11} w^1$,
    • $a_2 = a_{21} w^1$,
    • $a_3 = a_{31} w^1$,
    • $a_4 = a_{41} w^1$,
    • $a_6 = a_{62} w^2$.

    For this factorization, we expect a singularity of Kodaira type $III$ over the divisor $W = {w = 0}$, as desired. So this should be one irreducible component of the discriminant. Moreover, we should find that the discriminant vanishes to order 3 on $W = {w = 0}$, while the Weierstrass sections $f$ and $g$ vanish to orders 1 and 2, respectively.

    Let us verify this by turning this global Tate model into a Weierstrass model and then computing the singular loci of the discriminant of this Weierstrass model.

    julia> using Oscar
    
    julia> auxiliary_base_ring, (a11, a21, a31, a41, a62, w) = QQ["a11", "a21", "a31", "a41", "a62", "w"];
    
    julia> a1 = a11 * w;
    
    julia> a2 = a21 * w;
    
    julia> a3 = a31 * w;
    
    julia> a4 = a41 * w;
    
    julia> a6 = a62 * w^2;
    
    julia> ais = [a1, a2, a3, a4, a6];
    
    julia> t = global_tate_model(ais, auxiliary_base_ring, 3)
    A global Tate model over a not fully specified base
    
    julia> weier = global_weierstrass_model(t)
    [ Info: Base space was not fully specified. Returning AUXILIARY ambient space.
    [ Info: Base space was not fully specified. Returning AUXILIARY base space.
    A global Weierstrass model over a not fully specified base
    
    julia> length(singular_loci(weier))
    [ Info: Base space was not fully specified. Returning AUXILIARY base space.
    2
    
    julia> singular_loci(weier)[2]
    (ideal(w), (1, 2, 3), "III")
    source