Surfaces with torus action
The two main Julia types in this packages are CStarSurface
and ToricSurface
. Some functionality also works for MoriDreamSpace
's, an abstract type of which CStarSurface
and ToricSurface
are subtypes.
Julia types
CStarSurfaces.MoriDreamSpace
— TypeMoriDreamSpace
Julia type for Mori Dream Spaces.
Subtypes of MoriDreamSpace
should at least implement the following methods: canonical_toric_ambient
, cox_ring_relations
, is_quasismooth
.
CStarSurfaces.CStarSurfaceCase
— TypeCStarSurfaceCase
The abstract supertype of the possible possible configurations of source and sink of a $\mathbb{C}^*$-surface.
This type has the four subtypes EE
, EP
, PE
and PP
, named after the existence of elliptic fixed points and parabolic fixed point curves in the source and sink of a $\mathbb{C}^*$-surface respectively.
CStarSurfaces.CStarSurface
— TypeCStarSurface{T<:CStarSurfaceCase} <: MoriDreamSpace
A $\mathbb{C}^*$-surface of case T <: CStarSurfaceCase
. As a Julia type, it gets modeled by a stuct with fields l
, d
and case
, where l
and d
are zero-indexed vectors of one-indexed vectors of integers and case
is one of the four symbols :ee
, :pe
, :ep
and :pp
.
CStarSurfaces.ToricSurface
— TypeToricSurface <: MoriDreamSpace
A toric surface. As a Julia type, it gets modeled by a struct with a single field vs
that stores the primitive generator of the rays of the two-dimensional complete fan describing the toric surface.
CStarSurfaces.SurfaceWithTorusAction
— TypeSurfaceWithTorusAction = Union{CStarSurface, ToricSurface}
The Union
of CStarSurface
and ToricSurface
.
CStarSurfaces.MoriDreamSpaceUnion
— TypeMoriDreamSpaceUnion
The Union of MoriDreamSpace
and Oscar's NormalToricVarietyType
.
Constructors
CStarSurfaces.cstar_surface
— Methodcstar_surface(ls :: Vector{Vector{Int64}}, ds :: Vector{Vector{Int64}}, case :: Symbol; check_lineality = false)
Construct a C-star surface from the integral vectors $l_i=(l_{i1}, ..., l_{in_i})$ and $d_i=(d_{i1}, ..., d_{in_i})$ and a given C-star surface case. The parameters ls
and ds
are given both given as a vector of vectors. They must be of the same length and satisfy gcd(ls[i][j], ds[i][j]) == 1
for all i
and j
. The parameter case
can be one of the four symbols :ee, :pe, :ep, :pp
.
If the keyword argument check_lineality = true
is given, an error is thrown when the given vectors do not generate $\mathbb{Q}^2$ as a convex cone. By default, this is disabled for performance.
Example
The $E_6$ singular cubic.
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> gen_matrix(X)
[-3 -1 3 0]
[-3 -1 0 2]
[-2 -1 1 1]
CStarSurfaces.cstar_surface
— Methodcstar_surface(P :: ZZMatrix)
Construct a C-star surface from a generator matrix of the correct format. That is, $P$ must be of one of the following forms:
\[\begin{array}{lcclc} \text{(e-e)} & \begin{bmatrix} L \\ d \end{bmatrix} & \qquad & \text{(p-e)} & \begin{bmatrix} L & 0 \\ d & 1 \end{bmatrix} \\ \text{(e-p)} & \begin{bmatrix} L & 0 \\ d & -1 \end{bmatrix} & \qquad & \text{(p-p)} & \begin{bmatrix} L & 0 & 0 \\ d & 1 & -1 \end{bmatrix} \end{array},\]
where for some integral vectors $l_i=(l_{i1}, ..., l_{in_i}) \in \mathbb{Z}^{n_i}_{\geq 0}$ and $d_i=(d_{i1}, ..., d_{in_i}) \in \mathbb{Z}^{n_i}$ with $\gcd(l_{ij}, d_{ij}) = 1$, we have
\[L = \begin{bmatrix} -l_0 & l_1 & \dots & 0 \\ \vdots & & \ddots & 0 \\ -l_0 & 0 & \dots & l_r \end{bmatrix}, \qquad d = \begin{bmatrix} d_0 & \dots & d_r \end{bmatrix}.\]
If the keyword argument check_lineality = true
is given, an error is thrown when the given vectors do not generate $\mathbb{Q}^2$ as a convex cone. By default, this is disabled for performance.
Example
The $E_6$ singular cubic.
julia> cstar_surface(ZZ[-3 -1 3 0 ; -3 -1 0 2 ; -2 -1 1 1])
C-star surface of type (e-e)
CStarSurfaces.toric_surface
— Methodtoric_surface(vs :: Vector{Vector{T}}; check_lineality = false) where {T <: IntegerUnion}
Construct a toric surface from a list of integral vectors in two-dimensional space.
If the keyword argument check_lineality = true
is given, an error is thrown when the given vectors do not generate $\mathbb{Q}^2$ as a convex cone. By default, this is disabled for performance.
Example
The 5-th Hirzebruch surface.
julia> toric_surface([[1,0], [0,1], [-1,-5], [0,-1]])
Normal toric surface
CStarSurfaces.toric_surface
— Methodtoric_surface(P :: ZZMatrix; check_lineality = false)
Construct a toric surface from an integral matrix, where the columns of the matrix are the rays of the describing fan.
If the keyword argument check_lineality = true
is given, an error is thrown when the given vectors do not generate $\mathbb{Q}^2$ as a convex cone. By default, this is disabled for performance.
Example
The 5-th Hirzebruch surface.
julia> toric_surface(ZZ[1 0 -1 0 ; 0 1 -17 -1])
Normal toric surface
Basic attributes
CStarSurfaces.gen_matrix
— Methodgen_matrix(X :: MoriDreamSpaceUnion)
Return the generator matrix of a Mori Dream Space X
. The columns of this matrix are the rays of the fan of the canonical toric ambient variety of X
.
Example
julia> gen_matrix(cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee))
[-3 -1 3 0]
[-3 -1 0 2]
[-2 -1 1 1]
CStarSurfaces.canonical_toric_ambient
— Functioncanonical_toric_ambient(X :: MoriDreamSpace)
Return the canonical toric ambient variety of a Mori Dream Space as an OSCAR NormalToricVariety
.
Example
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> Z = canonical_toric_ambient(X)
Normal toric variety
julia> rays(Z)
4-element SubObjectIterator{RayVector{QQFieldElem}}:
[-1, -1, -2//3]
[-1, -1, -1]
[1, 0, 1//3]
[0, 1, 1//2]
CStarSurfaces.cox_ring_relations
— Functioncox_ring_relations(X :: MoriDreamSpace)
Return the list of relations in the Cox Ring of a Mori Dream Space. Here, a relation is a RingElem
whose parent is the Cox Ring of the canonical toric ambient variety.
Oscar.cox_ring
— Methodcox_ring(X :: MoriDreamSpace)
Return the Cox Ring of a Mori Dream Space.
Examples
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> cox_ring(X)
Quotient
of graded multivariate polynomial ring in 4 variables over QQ
by ideal(T[0][1]^3*T[0][2] + T[1][1]^3 + T[2][1]^2)
julia> X = toric_surface([[1,0], [1,5], [-2,-5]])
Normal toric surface
julia> cox_ring(X)
Multivariate polynomial ring in 3 variables over QQ graded by
x1 -> [0 1]
x2 -> [2 1]
x3 -> [1 1]
Class group and Picard group
Hecke.class_group
— Methodclass_group(X :: MoriDreamSpace)
Return the class group of a Mori Dream Space.
Example
julia> class_group(cstar_surface([[1, 1], [2], [2]], [[0, -2], [1], [1]], :ee))
GrpAb: Z/4 x Z
CStarSurfaces.class_group_rank
— Methodclass_group_rank(X :: MoriDreamSpaceUnion)
Return the rank of the class group of a Mori Dream Space.
Example
julia> class_group_rank(cstar_surface([[1, 1], [2], [2]], [[-3, -4], [1], [1]], :pe))
2
CStarSurfaces.class_group_torsion
— Methodclass_group_torsion(X :: MoriDreamSpaceUnion)
Return the list of elementary divisors that make up the torsion part of the class group of a Mori Dream Space.
Example
julia> class_group_torsion(cstar_surface([[2, 2], [2], [4]], [[3, -3], [1], [1]], :ee))
2-element Vector{ZZRingElem}:
2
6
CStarSurfaces.class_group_torsion_order
— Methodclass_group_torsion_order(X :: MoriDreamSpaceUnion)
Return the order of the torsion part of the class group of a Mori Dream Space.
Example
julia> class_group_torsion_order(cstar_surface([[2, 2], [2], [4]], [[3, -3], [1], [1]], :ee))
12
Hecke.picard_group
— Methodpicard_group(X :: MoriDreamSpace)
Return the Picard group of a Mori Dream Space.
Example
julia> picard_group(cstar_surface([[1, 1], [2], [2]], [[0, -2], [1], [1]], :ee))
GrpAb: Z
CStarSurfaces.degree_matrix
— Methoddegree_matrix(X :: MoriDreamSpaceUnion)
Return the degree matrix of a Mori Dream Space (often denoted as $Q$). The columns of this matrix are the degrees of the generator of the Cox Ring, which are elements of the divisor class group. Note that we write the torsion parts of these elements first (in the upper rows of the degree matrix), and the free part after that (in the lower rows of the degree matrix).
Example
julia> degree_matrix(cstar_surface([[2, 2], [2], [4]], [[3, -3], [1], [1]], :ee))
[0 1 1 0]
[0 4 1 5]
[1 3 4 2]
CStarSurfaces.degree_matrix_free_part
— Methoddegree_matrix_free_part(X :: MoriDreamSpaceUnion)
The free part of the degree matrix of a Mori Dream Space. By the convention in this package, these are the lower rows of degree_matrix(X)
.
Example
julia> degree_matrix_free_part(cstar_surface([[2, 2], [2], [4]], [[3, -3], [1], [1]], :ee))
[1 3 4 2]
CStarSurfaces.degree_matrix_torsion_part
— Methoddegree_matrix_torsion_part(X :: MoriDreamSpaceUnion)
The torsion part of the degree matrix of a Mori Dream Space. By the convention in this package, these are the upper rows of degree_matrix(X)
.
Example
julia> degree_matrix_torsion_part(cstar_surface([[2, 2], [2], [4]], [[3, -3], [1], [1]], :ee))
[0 1 1 0]
[0 4 1 5]
Oscar.gorenstein_index
— Methodgorenstein_index(X :: MoriDreamSpace)
Return the Gorenstein index of a $\mathbb{Q}$-Gorenstein Mori Dream Space.
Example
julia> gorenstein_index(cstar_surface([[1, 1], [11], [5]], [[0, -2], [9], [3]], :ee))
78
Oscar.picard_index
— Methodpicard_index(X :: MoriDreamSpace)
Return the index of the Picard group in the class group of a Mori Dream Space.
Example
julia> picard_index(cstar_surface([[1, 1], [7], [7]], [[0, -1], [3], [3]], :ee))
42
Singularities and Resolutions
CStarSurfaces.is_quasismooth
— Methodis_quasismooth(X :: MoriDreamSpace)
Checks whether the Mori Dream Space $X$ is quasismooth, i.e. its characteristic space $\hat X$ is smooth.
CStarSurfaces.is_factorial
— Methodis_factorial(X :: MoriDreamSpace)
Determine if a Mori Dream Space has at most factorial singularities, i.e. its canonical toric ambient variety is smooth.
Example
julia> is_factorial(cstar_surface([[1, 1], [7], [7]], [[0, -1], [3], [3]], :ee))
false
Hecke.is_smooth
— Methodis_smooth(X :: MoriDreamSpace)
Checks whether a Mori Dream Space is smooth, i.e. factorial and quasismooth.
CStarSurfaces.is_log_terminal
— Methodis_log_terminal(X :: SurfaceWithTorusAction)
Check whether a surface with torus action has at most log terminal singularities.
Example
The $E_6$ singular cubic.
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> is_log_terminal(X)
true
A non-log terminal $\mathbb{C}^*$-surface.
julia> X = cstar_surface([[5, 7], [3], [2]], [[-1, 2], [1], [-1]], :ee)
C-star surface of type (e-e)
julia> is_log_terminal(X)
false
CStarSurfaces.log_canonicity
— Methodlog_canonicity(X :: SurfaceWithTorusAction)
Given a surface with torus action $X$, return the maximal rational number $\varepsilon$ such that $X$ is $\varepsilon$-log canonical. By definition, this is the minimal discrepancy in the resolution of singularities plus one.
Example
julia> log_canonicity(cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee))
1//1
CStarSurfaces.singularities
— Methodsingularities(X :: SurfaceWithTorusAction)
Return the list of singular points of a given surface with torus action.
Example
The $E_6$ singular cubic surface.
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> singularities(X)
1-element Vector{CStarSurfaceFixedPoint{EE}}:
elliptic fixed point x^+
CStarSurfaces.number_of_singularities
— Methodnumber_of_singularities(X :: SurfaceWithTorusAction)
Return the number of singularities of a given surface with torus action.
Example
The $E_6$ singular cubic surface.
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> number_of_singularities(X)
1
CStarSurfaces.singularity_types
— Methodsingularity_types(X :: SurfaceWithTorusAction)
Return the list of singularity types of all singularities of a surface with torus action.
Examples
A $\mathbb{C}^*$-surface with two Gorenstein singularities.
julia> X = cstar_surface([[1, 2], [3], [3]], [[-1, -3], [2], [2]], :ee)
C-star surface of type (e-e)
julia> singularity_types(X)
2-element Vector{SingularityTypeADE}:
A2
E6
A non-log terminal $\mathbb{C}*$-surface.
julia> X = cstar_surface([[5, 7],[3],[2]], [[-1, 2], [1], [-1]], :ee)
C-star surface of type (e-e)
julia> singularity_types(X)
3-element Vector{SingularityType}:
Non log terminal singularity
E8
A2
CStarSurfaces.singularity_types_string
— Functionsingularity_types_string(X :: SurfaceWithTorusAction)
Return a string encoding of the singularity types of all fixed points of X
.
Example
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ep)
C-star surface of type (e-p)
julia> singularity_types_string(X)
"E6;A0::;A0,A1,A1"
CStarSurfaces.canonical_resolution
— Methodcanonical_resolution(X :: CStarSurface)
Return the canonical resolution of singularities of a C-star surface X
. The result is a triple (Y, ex_div, discr)
where Y
is the smooth C-star surface in the resolution of singularities of X
, ex_div
contains the exceptional divisors in the resolution and discrepancies
contains their discrepancies.
Example
Resolution of singularities of the $E_6$ singular cubic surface.
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> (Y, ex_div, discr) = canonical_resolution(X);
julia> gen_matrix(Y)
[-3 -1 -2 -1 3 2 1 1 0 0 0 0 0]
[-3 -1 -2 -1 0 0 0 0 2 1 1 0 0]
[-2 -1 -1 0 1 1 1 0 1 1 0 1 -1]
julia> map(E -> E * E, ex_div)
9-element Vector{QQFieldElem}:
-2
-2
-2
-2
-2
-2
-3
-2
-1
julia> discr
9-element Vector{Rational{Int64}}:
0//1
0//1
0//1
0//1
0//1
0//1
1//1
2//1
4//1
CStarSurfaces.canonical_resolution
— Methodcanonical_resolution(X :: ToricSurface)
Return the canonical resolution of singularities of a toric surface X
. The result is a triple (Y, ex_rays, discrepancies)
where Y
is the smooth toric surface in the resolution of singularities of X
, ex_rays
contains the rays of the exceptional divisors in the resolution and discrepancies
contains their discrepancies.
Example
julia> X = toric_surface(ZZ[1 1 -3 ; 0 4 -7])
Normal toric surface
julia> (Y, ex_div, discr) = canonical_resolution(X);
julia> gen_matrix(Y)
[1 1 -3 1 1 1 0 -1 -2 -1 0]
[0 4 -7 1 2 3 1 -2 -5 -3 -1]
julia> map(E -> E*E, ex_div)
8-element Vector{QQFieldElem}:
-2
-2
-2
-2
-3
-2
-2
-3
julia> discr
8-element Vector{Rational{Int64}}:
0//1
0//1
0//1
-1//5
-2//5
-1//7
-2//7
-3//7
CStarSurfaces.minimal_resolution
— Methodminimal_resolution(X :: CStarSurface)
Return the minimal resolution of singularities of a C-star surface surface X
. The minimal resolution is obtained by contracting all (-1)-curves of the canonical resolution. The result is a triple (Y, ex_div, discr)
where Y
is the smooth C-star surface in the resolution of singularities of X
, ex_div
contains the exceptional divisors in the resolution and discrepancies
contains their discrepancies.
Example
Resolution of singularities of the $E_6$ singular cubic surface.
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> (Y, ex_div, discr) = minimal_resolution(X);
julia> gen_matrix(Y)
[-3 -1 -2 -1 3 2 1 0 0 0]
[-3 -1 -2 -1 0 0 0 2 1 0]
[-2 -1 -1 0 1 1 1 1 1 1]
CStarSurfaces.number_of_exceptional_prime_divisors
— Methodnumber_of_exceptional_prime_divisors(X :: SurfaceWithTorusAction)
Return the total number of exceptional prime divisors in the minimal resolution of X
.
Example
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ep)
C-star surface of type (e-p)
julia> number_of_exceptional_prime_divisors(X)
8
Intersection numbers
CStarSurfaces.intersection_matrix
— Functionintersection_matrix(X :: SurfaceWithTorusAction)
Return the matrix of intersection numbers of all torus invariant prime divisors associated of a surface with torus action with each other. The result is a rational n
x n
matrix, where n = nrays(X)
and the (i,j)
-th entry is the intersection number of the prime divisors associated to the i
-th and j
-th ray respectively.
Examples
julia> intersection_matrix(cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee))
[1//3 1 2//3 1]
[ 1 3 2 3]
[2//3 2 4//3 2]
[ 1 3 2 3]
julia> intersection_matrix(toric_surface(ZZ[1 0 -1 0 ; 0 1 -17 -1]))
[0 1 0 1]
[1 17 1 0]
[0 1 0 1]
[1 0 1 -17]
CStarSurfaces.anticanonical_self_intersection
— Methodanticanonical_self_intersection(X :: SurfaceWithTorusAction)
Return the self intersection number of the anticanonical divisor on a surface with torus action.
Example
julia> anticanonical_self_intersection(cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee))
3
CStarSurfaces.is_combinatorially_minimal
— Functionis_combinatorially_minimal(X :: SurfaceWithTorusAction)
Check if a given surface with torus action X
is combinatorially minimal, i.e. every contraction X -> Y
is an isomorphism. Equivalently, every torus-invariant divisor has non-negative self-intersection.
Example
julia> X = cstar_surface([[3, 1], [3], [2]], [[-2, -1], [1], [1]], :ee)
C-star surface of type (e-e)
julia> is_combinatorially_minimal(X)
true
Kaehler Einstein metrics
CStarSurfaces.admits_kaehler_einstein_metric
— Functionadmits_kaehler_einstein_metric(X :: SurfaceWithTorusAction)
Checks whether a surface with torus action admits a Kaehler-Einstein metric.
Examples
julia> admits_kaehler_einstein_metric(cstar_surface([[1,1], [4], [4]], [[-1,-2], [3], [3]], :ee))
true
julia> admits_kaehler_einstein_metric(toric_surface([[1,0], [1,5], [-2,-5]]))
true
CStarSurfaces.special_indices
— Methodspecial_indices(X :: CStarSurface)
Returns the subset of indices in 0 : r
that are special in the sense of Definition 5.2/Proposition 5.3 of [6], i.e. those where the special fiber of the toric degeneration $\psi_k : \mathcal{X}_k \to \mathbb{C}$ is a normal toric variety.
Example
Example 6.4 from [6].
julia> X = cstar_surface([[2,1],[1,1],[2]], [[3,-1],[0,-1],[1]], :ee)
C-star surface of type (e-e)
julia> special_indices(X)
2-element Vector{Int64}:
0
2
CStarSurfaces.moment_polytopes
— Methodmoment_polytopes(X :: CStarSurface)
Return the moment polytopes for all k = 0, ..., r
, as constructed in Construction 5.5 of [6].
Example
Example 6.4 from [6].
julia> X = cstar_surface([[2,1],[1,1],[2]], [[3,-1],[0,-1],[1]], :ee)
C-star surface of type (e-e)
julia> map(vertices, moment_polytopes(X))
3-element OffsetArray(::Vector{SubObjectIterator{PointVector{QQFieldElem}}}, 0:2) with eltype SubObjectIterator{PointVector{QQFieldElem}} with indices 0:2:
[[1, 0], [0, -1//2], [-1//2, -1//4], [1//5, 4//5]]
[[1, 0], [0, 1], [-1//2, 1], [1//5, -2//5]]
[[1//5, -3//5], [1, 1], [-1//2, 1//4], [0, -1//2]]
Attributes of $\mathbb{C}^*$-surfaces
CStarSurfaces.nblocks
— Functionnblocks(X :: CStarSurface)
Returns the number of blocks in the generator matrix of a C-star surface.
CStarSurfaces.block_sizes
— Functionblock_sizes(X :: CStarSurface)
Returns the sizes of the blocks in the generator matrix of a C-star surface. The result is a zero-indexed vector of type ZeroVector
.
CStarSurfaces.slopes
— Functionslopes(X :: CStarSurface)
Returns the DoubleVector
of slopes of a C-star surface, i.e a DoubleVector
with slopes(X)[i][j] = X.d[i][j] // X.l[i][j]
.
CStarSurfaces.has_x_plus
— Methodhas_x_plus(X :: CStarSurface{<:CStarSurfaceCase})
Checks whether a given C-star surface has an elliptic fixed point in the source, commonly denoted $x^+$.
CStarSurfaces.has_x_minus
— Methodhas_x_minus(X :: CStarSurface{<:CStarSurfaceCase})
Checks whether a given C-star surface has an elliptic fixed point in the sink, commonly denoted $x^-$.
CStarSurfaces.has_D_plus
— Methodhas_D_plus(X :: CStarSurface{<:CStarSurfaceCase})
Checks whether a given C-star surface has a parabolic fixed point curve in the source, commonly denoted $D^+$.
CStarSurfaces.has_D_minus
— Methodhas_D_minus(X :: CStarSurface{<:CStarSurfaceCase})
Checks whether a given C-star surface has a parabolic fixed point curve in the sink, commonly denoted $D^-$.
CStarSurfaces.is_intrinsic_quadric
— Functionis_intrinsic_quadric(X :: CStarSurface)
Checks whether a C-star surface is an intrinsic quadric, i.e its Cox Ring has a single quadratic relation.