Normal Toric Varieties

Introduction

We introduce two main types of normal toric varieties, distinguishing between the affine and non-affine case:

  • AffineNormalToricVariety is the toric variety associated to a cone $\sigma$, denoted by $U_{\sigma}$ in CLS11
  • NormalToricVariety is the toric variety associated to a polyhedral fan $\Sigma$, denoted by $X_{\Sigma}$ in CLS11
Warning

The lattice is always assumed to be the standard lattice $\mathbb{Z}^n$. Transformations for non-standard lattices will have to be done by the user.

Constructors

JToric.AffineNormalToricVarietyMethod
AffineNormalToricVariety(C::Cone)

Construct the affine normal toric variety $U_{C}$ corresponding to a polyhedral cone C.

Examples

Set C to be the positive orthant in two dimensions.

julia> C = Oscar.positive_hull([1 0; 0 1])
A polyhedral cone in ambient dimension 2

julia> antv = AffineNormalToricVariety(C)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
JToric.NormalToricVarietyMethod
NormalToricVariety(C::Cone)

Construct the (affine) normal toric variety $X_{\Sigma}$ corresponding to a polyhedral fan $\Sigma = C$ consisting only of the cone C.

Examples

Set C to be the positive orthant in two dimensions.

julia> C = Oscar.positive_hull([1 0; 0 1])
A polyhedral cone in ambient dimension 2
julia> ntv = NormalToricVariety(C)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
JToric.NormalToricVarietyMethod
NormalToricVariety(PF::PolyhedralFan)

Construct the normal toric variety $X_{PF}$ corresponding to a polyhedral fan PF.

Examples

Take PF to be the normal fan of the square.

julia> square = Oscar.cube(2)
A polyhedron in ambient dimension 2

julia> nf = Oscar.normal_fan(square)
A polyhedral fan in ambient dimension 2

julia> ntv = NormalToricVariety(nf)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
JToric.NormalToricVarietyMethod
NormalToricVariety(P::Polyhedron)

Construct the normal toric variety $X_{\Sigma_P}$ corresponding to the normal fan $\Sigma_P$ of the given polyhedron P.

Note that this only coincides with the projective variety associated to P, if P is normal.

Examples

Set P to be a square.

julia> square = Oscar.cube(2)
A polyhedron in ambient dimension 2

julia> ntv = NormalToricVariety(square)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
JToric.NormalToricVarietyMethod
NormalToricVariety( r::Matrix{Int}, c::Vector{Vector{Int}} )

Construct the normal toric variety whose fan has ray generators r and maximal cones c.

Examples

julia> NormalToricVariety( [-1 5; 0 1; 1 0; 0 -1], [[1,2],[2,3],[3,4],[4,1]] )
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
Oscar.Geometry.projective_spaceFunction
projective_space( d::Int )

Construct the projective space of dimension d.

Examples

julia> projective_space( 2 )
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
JToric.hirzebruch_surfaceFunction
hirzebruch_surface( r::Int )

Constructs the r-th Hirzebruch surface.

Examples

julia> hirzebruch_surface( 5 )
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source
JToric.del_pezzoFunction
delPezzo( b::Int )

Constructs the delPezzo surface with b blowups for b at most 3.

Examples

julia> del_pezzo( 3 )
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2
source

Properties of toric varieties

Hecke.isnormalFunction
 isnormal(K::AnticNumberField) -> Bool

Returns true if $K$ is a normal extension of $\mathbb Q$, false otherwise.

isnormal(C::ClassField) -> Bool

For a class field $C$ defined over a normal base field $k$, decide if $C$ is normal over $Q$.

isnormal(a::AlgAssAbsOrdIdl) -> Bool

Returns true if $a$ is a normal ideal and false otherwise.

isnormal(G::T, H::T) where T <: GAPGroup

Return whether the subgroup H is normal in G, i. e., H is invariant under conjugation with elements of G.

isnormal(A::MPolyQuo)

Given an affine algebra A over a perfect field, return true if A is normal, false otherwise.

CAVEAT: The function computes the normalization of A. This may take some time.

isnormal(P::Polyhedron)

Check whether P is normal.

Examples

The 3-cube is normal.

julia> C = cube(3)
A polyhedron in ambient dimension 3

julia> isnormal(C)
true

But this pyramid is not:

julia> P = convex_hull([0 0 0; 0 1 1; 1 1 0; 1 0 1]);

julia> isnormal(P)
false
isnormal( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is normal. (This function is somewhat tautological at this point.)

Examples

julia> isnormal(projective_space( 2 ))
true
source
JToric.isaffineFunction
isaffine( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is affine.

Examples

julia> isaffine( projective_space( 2 ) )
false
source
JToric.isprojectiveFunction
isprojective( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is projective, i.e. if the fan of v is the the normal fan of a polytope.

Examples

julia> isprojective( projective_space( 2 ) )
true
source
Hecke.issmoothFunction
issmooth(C::AffinePlaneCurve{S}, P::Point{S}) where S <: FieldElem

Throw an error if P is not a point of C, return false if P is a singular point of C, and true if P is a smooth point of C.

Example

julia> R, (x, y) = PolynomialRing(QQ, ["x", "y"])
(Multivariate Polynomial Ring in x, y over Rational Field, fmpq_mpoly[x, y])

julia> C = Oscar.AffinePlaneCurve(x^2*(x+y)*(y^3-x^2))
Affine plane curve defined by -x^5 - x^4*y + x^3*y^3 + x^2*y^4

julia> P = Oscar.Point([QQ(0), QQ(0)])
Point with coordinates fmpq[0, 0]

julia> Oscar.issmooth(C, P)
false
issmooth(C::ProjectivePlaneCurve{S}, P::Oscar.Geometry.ProjSpcElem{S}) where S <: FieldElem

Throw an error if P is not a point of C, return false if P is a singular point of C, and true if P is a smooth point of C.

Example

julia> S, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> T, _ = grade(S)
(Multivariate Polynomial Ring in x, y, z over Rational Field graded by
  x -> [1]
  y -> [1]
  z -> [1], MPolyElem_dec{fmpq, fmpq_mpoly}[x, y, z])

julia> C = Oscar.ProjPlaneCurve(x^2*(x+y)*(y^3-x^2*z))
Projective plane curve defined by -x^5*z - x^4*y*z + x^3*y^3 + x^2*y^4


julia> PP = projective_space(QQ, 2)
(Projective space of dim 2 over Rational Field
, MPolyElem_dec{fmpq, fmpq_mpoly}[x[0], x[1], x[2]])

julia> P = Oscar.Geometry.ProjSpcElem(PP[1], [QQ(0), QQ(0), QQ(1)])
(0 : 0 : 1)

julia> Oscar.issmooth(C, P)
false
issmooth(P::Polyhedron)

Check whether P is smooth.

Examples

A cube is always smooth.

julia> C = cube(8);

julia> issmooth(C)
true
issmooth(PF::PolyhedralFan)

Determine whether PF is smooth.

Examples

Even though the cones of this fan cover the positive orthant together, one of these und thus the whole fan is not smooth.

julia> PF = PolyhedralFan([0 1; 2 1; 1 0], IncidenceMatrix([[1, 2], [2, 3]]));

julia> issmooth(PF)
false
issmooth( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is smooth.

Examples

julia> issmooth( projective_space( 2 ) )
true
source
Oscar.iscompleteFunction
iscomplete(PF::PolyhedralFan)

Determine whether PF is complete, i.e. its support, the set-theoretic union of its cones, covers the whole space.

Examples

Normal fans of polytopes are complete.

julia> iscomplete(normal_fan(cube(3)))
true
iscomplete( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is complete.

Examples

julia> iscomplete( projective_space( 2 ) )
true
source
JToric.has_torusfactorFunction
has_torusfactor( v::AbstractNormalToricVariety )

Checks if the normal toric variety v has a torus factor.

Examples

julia> has_torusfactor( projective_space( 2 ) )
false
source
JToric.is_orbifoldFunction
is_orbifold( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is an orbifold.

Examples

julia> is_orbifold( projective_space( 2 ) )
true
source
JToric.issimplicialFunction
issimplicial( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is simplicial. Hence, this function works just as is_orbifold. It is implemented for user convenience.

Examples

julia> issimplicial( projective_space( 2 ) )
true
source
JToric.is_gorensteinFunction
is_gorenstein( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is Gorenstein.

Examples

julia> is_gorenstein( projective_space( 2 ) )
true
source
JToric.is_q_gorensteinFunction
is_q_gorenstein( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is Q-Gorenstein.

Examples

julia> is_q_gorenstein( projective_space( 2 ) )
true
source
JToric.is_fanoFunction
is_fano( v::AbstractNormalToricVariety )

Checks if the normal toric variety v is fano.

Examples

julia> is_fano( projective_space( 2 ) )
true
source

Attributes of toric varieties

AbstractAlgebra.Generic.dimFunction
dim(Y::YoungTableau) -> BigInt

Return the dimension (using hook-length formula) of the irreducible representation of permutation group $S_n$ associated the partition Y.part.

Since the computation overflows easily BigInt is returned. You may perform the computation of the dimension in different type by calling dim(Int, Y).

Examples

julia> dim(YoungTableau([4,3,1]))
70

julia> dim(YoungTableau([3,1])) # the regular representation of S_4
3
dim(M::FreeModule{T}) where T <: FieldElement

Return the dimension of the given vector space.

dim(N::Submodule{T}) where T <: FieldElement

Return the dimension of the given vector subspace.

dim(N::QuotientModule{T}) where T <: FieldElement

Return the dimension of the given vector quotient space.

dim(V::AbsSpace) -> Int

Return the dimension of the space V.

dim(S::ZpGenus) -> fmpz

Return the dimension of this genus.

dim(G::ZGenus) -> Int

Return the dimension of this genus.

dim(I::MPolyIdeal)

Return the Krull dimension of I.

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> I = ideal(R, [y-x^2, x-z^3])
ideal(-x^2 + y, x - z^3)

julia> dim(I)
1
dim(a::MPolyQuoIdeal)

Return the Krull dimension of a.

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"], ordering=:degrevlex)
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> Q, q = quo(R, ideal(R, [x^3*y^2-y^3*x^2, x*y^4-x*y^2]))
(Quotient of Multivariate Polynomial Ring in x, y, z over Rational Field by ideal(x^3*y^2 - x^2*y^3, x*y^4 - x*y^2), Map from
Multivariate Polynomial Ring in x, y, z over Rational Field to Quotient of Multivariate Polynomial Ring in x, y, z over Rational Field by ideal(x^3*y^2 - x^2*y^3, x*y^4 - x*y^2) defined by a julia-function with inverse
)

julia> a = ideal(Q,[x^3*y^4-x+y, x*y+y^2*x])
ideal(x^3*y^4 - x + y, x*y^2 + x*y)

julia> dim(a)
1
dim(Q::MPolyQuo)

Return the Krull dimension of the quotient ring Q.

Examples

julia> R, (x, y, z) = PolynomialRing(QQ, ["x", "y", "z"])
(Multivariate Polynomial Ring in x, y, z over Rational Field, fmpq_mpoly[x, y, z])

julia> Q, _ = quo(R, ideal(R, [y-x^2, x-z^3]))
(Quotient of Multivariate Polynomial Ring in x, y, z over Rational Field by ideal(-x^2 + y, x - z^3), Map from
Multivariate Polynomial Ring in x, y, z over Rational Field to Quotient of Multivariate Polynomial Ring in x, y, z over Rational Field by ideal(-x^2 + y, x - z^3) defined by a julia-function with inverse
)

julia> dim(Q)
1
dim(C::Cone)

Return the dimension of C.

Examples

The cone C in this example is 2-dimensional within a 3-dimensional ambient space.

julia> C = Cone([1 0 0; 1 1 0; 0 1 0]);

julia> dim(C)
2
dim(P::Polyhedron)

Return the dimension of P.

Examples

julia> V = [1 2 3; 1 3 2; 2 1 3; 2 3 1; 3 1 2; 3 2 1];

julia> P = convex_hull(V);

julia> dim(P)
2
dim(PF::PolyhedralFan)

Return the dimension of PF.

Examples

This fan in the plane contains a 2-dimensional cone and is thus 2-dimensional itself.

julia> PF = PolyhedralFan([1 0; 0 1; -1 -1], IncidenceMatrix([[1, 2], [3]]));

julia> dim(PF)
2
dim( v::AbstractNormalToricVariety )

Computes the dimension of the normal toric variety v.

source
JToric.dim_of_torusfactorFunction
dim_of_torusfactor( v::AbstractNormalToricVariety )

Computes the dimension of the torus factor of the normal toric variety v.

source
Hecke.picard_groupFunction
picard_group(O::NfOrd) -> GrpAbFinGen, MapClassGrp

Returns the Picard group of $O$ and a map from the group in the set of (invertible) ideals of $O$.

picard_group(O::AlgAssAbsOrd, prepare_ref_disc_log::Bool = false)
  -> GrpAbFinGen, MapPicardGroup

Given an order $O$ in a commutative algebra over $\mathbb Q$, this function returns the picard group of $O$. If prepare_ref_disc_log is true, then (possibly expensive) preparations for the computation of refined discrete logarithms in non maximal orders are done.

JToric.nef_coneFunction
nef_cone( v::NormalToricVariety )

Computes the nef cone of the normal toric variety v.

Examples

julia> pp = projective_space(2)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2

julia> nef = nef_cone(pp)
A polyhedral cone in ambient dimension 1

julia> dim(nef)
1
source
JToric.mori_coneFunction
mori_cone( v::NormalToricVariety )

Computes the mori cone of the normal toric variety v.

Examples

julia> pp = projective_space(2)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2

julia> mori = mori_cone(pp)
A polyhedral cone in ambient dimension 1

julia> dim(mori)
1
source
JToric.toric_ideal_binomial_generatorsMethod
toric_ideal_binomial_generators(antv::AffineNormalToricVariety)

Get the exponent vectors corresponding to the generators of the toric ideal associated to the affine normal toric variety antv.

Examples

Take the cyclic quotient singularity corresponding to the pair of integers (2,5).

julia> C = Oscar.positive_hull([-2 5; 1 0])
A polyhedral cone in ambient dimension 2

julia> antv = AffineNormalToricVariety(C)
A normal toric variety corresponding to a polyhedral fan in ambient dimension 2

julia> toric_ideal_binomial_generators(antv)
pm::Matrix<long>
-1 -1 2 1
-1 0 3 -1
0 -1 -1 2
source