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 CLS11NormalToricVariety
is the toric variety associated to a polyhedral fan $\Sigma$, denoted by $X_{\Sigma}$ in CLS11
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.AffineNormalToricVariety
— MethodAffineNormalToricVariety(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
JToric.NormalToricVariety
— MethodNormalToricVariety(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
JToric.NormalToricVariety
— MethodNormalToricVariety(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
JToric.NormalToricVariety
— MethodNormalToricVariety(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
JToric.NormalToricVariety
— MethodNormalToricVariety( 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
Oscar.Geometry.projective_space
— Functionprojective_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
JToric.hirzebruch_surface
— Functionhirzebruch_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
JToric.del_pezzo
— FunctiondelPezzo( 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
Properties of toric varieties
Hecke.isnormal
— Function 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
JToric.isaffine
— Functionisaffine( v::AbstractNormalToricVariety )
Checks if the normal toric variety v
is affine.
Examples
julia> isaffine( projective_space( 2 ) )
false
JToric.isprojective
— Functionisprojective( 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
Hecke.issmooth
— Functionissmooth(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
Oscar.iscomplete
— Functioniscomplete(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
JToric.has_torusfactor
— Functionhas_torusfactor( v::AbstractNormalToricVariety )
Checks if the normal toric variety v
has a torus factor.
Examples
julia> has_torusfactor( projective_space( 2 ) )
false
JToric.is_orbifold
— Functionis_orbifold( v::AbstractNormalToricVariety )
Checks if the normal toric variety v
is an orbifold.
Examples
julia> is_orbifold( projective_space( 2 ) )
true
JToric.issimplicial
— Functionissimplicial( 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
JToric.is_gorenstein
— Functionis_gorenstein( v::AbstractNormalToricVariety )
Checks if the normal toric variety v
is Gorenstein.
Examples
julia> is_gorenstein( projective_space( 2 ) )
true
JToric.is_q_gorenstein
— Functionis_q_gorenstein( v::AbstractNormalToricVariety )
Checks if the normal toric variety v
is Q-Gorenstein.
Examples
julia> is_q_gorenstein( projective_space( 2 ) )
true
JToric.is_fano
— Functionis_fano( v::AbstractNormalToricVariety )
Checks if the normal toric variety v
is fano.
Examples
julia> is_fano( projective_space( 2 ) )
true
Attributes of toric varieties
AbstractAlgebra.Generic.dim
— Functiondim(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
.
JToric.dim_of_torusfactor
— Functiondim_of_torusfactor( v::AbstractNormalToricVariety )
Computes the dimension of the torus factor of the normal toric variety v
.
Hecke.picard_group
— Functionpicard_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_cone
— Functionnef_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
JToric.mori_cone
— Functionmori_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
JToric.toric_ideal_binomial_generators
— Methodtoric_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