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.CStarSurfaceCaseType
CStarSurfaceCase

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.CStarSurfaceType
CStarSurface{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.ToricSurfaceType
ToricSurface <: 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.

Constructors

CStarSurfaces.cstar_surfaceMethod
cstar_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_surfaceMethod
cstar_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_surfaceMethod
toric_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_surfaceMethod
toric_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_matrixMethod
gen_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_ambientFunction
canonical_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_relationsFunction
cox_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_ringMethod
cox_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_groupMethod
class_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_rankMethod
class_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_torsionMethod
class_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_orderMethod
class_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_groupMethod
picard_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_matrixMethod
degree_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_partMethod
degree_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_partMethod
degree_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_indexMethod
gorenstein_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_indexMethod
picard_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_quasismoothMethod
is_quasismooth(X :: MoriDreamSpace)

Checks whether the Mori Dream Space $X$ is quasismooth, i.e. its characteristic space $\hat X$ is smooth.

CStarSurfaces.is_factorialMethod
is_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_smoothMethod
is_smooth(X :: MoriDreamSpace)

Checks whether a Mori Dream Space is smooth, i.e. factorial and quasismooth.

CStarSurfaces.is_log_terminalMethod
is_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_canonicityMethod
log_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.singularitiesMethod
singularities(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_singularitiesMethod
number_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_typesMethod
singularity_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_stringFunction
singularity_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_resolutionMethod
canonical_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_resolutionMethod
canonical_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_resolutionMethod
minimal_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_divisorsMethod
number_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_matrixFunction
intersection_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_intersectionMethod
anticanonical_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_minimalFunction
is_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_metricFunction
admits_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_indicesMethod
special_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_polytopesMethod
moment_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.nblocksFunction
nblocks(X :: CStarSurface)

Returns the number of blocks in the generator matrix of a C-star surface.

CStarSurfaces.block_sizesFunction
block_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.slopesFunction
slopes(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_plusMethod
has_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_minusMethod
has_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_plusMethod
has_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_minusMethod
has_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_quadricFunction
is_intrinsic_quadric(X :: CStarSurface)

Checks whether a C-star surface is an intrinsic quadric, i.e its Cox Ring has a single quadratic relation.