Properties of GKM graphs
These are the main properties of GKM graphs.
GKMtools.is_compact — Function
is_compact(G::AbstractGKM_graph) -> BoolReturn true if G is compact, i.e. all flags at all vertices are associated with edges (no standalone flags).
Example
julia> G = projective_space(GKM_graph, 2)
GKM graph with 3 nodes, valency 2 and axial function:
2 -> 1 => (-1, 1, 0)
3 -> 1 => (-1, 0, 1)
3 -> 2 => (0, -1, 1)
julia> is_compact(G)
true
julia> M = G.M;
julia> add_standalone_flag!(G, 1, gens(M)[1]);
julia> add_standalone_flag!(G, 2, gens(M)[2]);
julia> add_standalone_flag!(G, 3, gens(M)[3]);
julia> is_compact(G)
falseOscar.betti_numbers — Function
betti_numbers(G::AbstractGKM_graph) -> Vector{Int64}Return the array betti_numbers such that betti_numbers[i+1] is the 2i-th combinatorial Betti number for i from 0 to the valency of G, as defined in [GZ01, section 1.3].
iranges from 0 to the valency ofG, that can be obtained byvalency(G).- From [GZ01, Theorem 1.3.2], the combinatorial Betti numbers equal the Betti numbers of the underlying GKM space if the torus action is Hamiltonian. This holds automatically for smooth projective varieties with algebraic torus action (cf. [MFK94, Example 8.1 (ii)]).
betti_numbers[1]is the 0-th Betti number, since Julia arrays are 1-based and not 0-based.- Currently only implemented for compact GKM spaces.
Examples
julia> H6 = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 6));
julia> betti_numbers(H6)
3-element Vector{Int64}:
1
2
1GKMtools.valency — Function
valency(G::AbstractGKM_graph) -> Int64Return the valency of G, i.e. the number of flags at each vertex.
This function does not check if G is a valid GKM graph (use isvalid to check this). In particular, it does not check if every vertex has the same degree. The returned value is the degree of vertex 1.
Example:
The valency of the GKM graph of $\mathbb{P}^3$ is 3, since all of the fixed points $[1:0:0:0], \dots, [0:0:0:1]$ are connected to each other via some $T$-invariant $\mathbb{P}^1$'s. For example, $[1:0:0:0]$ and $[0:1:0:0]$ are connected by $\{[x:y:0:0] : x,y\in\mathbb{C}\}$.
julia> valency(projective_space(GKM_graph, 3))
3
julia> valency(grassmannian(GKM_graph, 2, 4)) # The Grassmannian of 2-planes in C^4
4
julia> valency(flag_variety(GKM_graph, [1, 1, 1, 1])) # The variety of full flags in C^4
6GKMtools.rank_torus — Function
rank_torus(G::AbstractGKM_graph) -> Int64Return the rank of the torus acting on G. That is, the rank of the character group.
Examples
By default, the torus acting on $\mathbb{P}^n$ is $(\mathbb{C}^\times)^{n+1}$, acting by rescaling the homogeneous coordinates.
julia> P3 = projective_space(GKM_graph, 3);
julia> rank_torus(P3)
4Taking products adds the rank:
julia> H6 = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 6));
julia> rank_torus(H6)
4
julia> rank_torus(H6 * P3)
8GKMtools.is2_indep — Function
is2_indep(G::AbstractGKM_graph) -> BoolReturn true if G is 2-independent, i.e. the weights of every two flags at a vertex are linearly independent.
GKMtools.is3_indep — Function
is3_indep(G::AbstractGKM_graph) -> BoolReturn true if G is 3-independent, i.e. the weights of every three flags at a vertex are linearly independent.
Example
The weights of $\mathbb{P}^3$ at the fixed point $[1:0:0:0]$ are $\{t_i-t_0:i\in\{1, 2, 3\}\}$, which are linearly independent over $\mathbb{C}$.
julia> is3_indep(projective_space(GKM_graph, 3))
trueThe variety of complete flags in $\mathbb{C}^3$ is an example of a GKM graph that is not 3-independent:
julia> G = flag_variety(GKM_graph, [1, 1, 1])
GKM graph with 6 nodes, valency 3 and axial function:
13 -> 12 => (0, -1, 1)
21 -> 12 => (-1, 1, 0)
23 -> 13 => (-1, 1, 0)
23 -> 21 => (-1, 0, 1)
31 -> 13 => (-1, 0, 1)
31 -> 21 => (0, -1, 1)
32 -> 12 => (-1, 0, 1)
32 -> 23 => (0, -1, 1)
32 -> 31 => (-1, 1, 0)
julia> is3_indep(G)
falseGKMtools.is_strictly_nef — Function
is_strictly_nef(G::AbstractGKM_graph) -> BoolReturn true if and only if the Chern numbers of all curve classes corresponding to edges of the GKM graph are strictly positive.
Examples
julia> F3 = flag_variety(GKM_graph, [1,1,1]);
julia> print_curve_classes(F3)
13 -> 12: (0, 1), Chern number: 2
21 -> 12: (1, 0), Chern number: 2
23 -> 13: (1, 1), Chern number: 4
23 -> 21: (0, 1), Chern number: 2
31 -> 13: (1, 0), Chern number: 2
31 -> 21: (1, 1), Chern number: 4
32 -> 12: (1, 1), Chern number: 4
32 -> 23: (1, 0), Chern number: 2
32 -> 31: (0, 1), Chern number: 2
julia> is_strictly_nef(F3)
true
julia> H5 = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 5))
GKM graph with 4 nodes, valency 2 and axial function:
2 -> 1 => (1, 0, -1, 0)
3 -> 2 => (5, 1, 0, -1)
4 -> 1 => (0, 1, 5, -1)
4 -> 3 => (-1, 0, 1, 0)
julia> print_curve_classes(H5)
2 -> 1: (-5, 1), Chern number: -3
3 -> 2: (1, 0), Chern number: 2
4 -> 1: (1, 0), Chern number: 2
4 -> 3: (0, 1), Chern number: 7
julia> is_strictly_nef(H5)
falseGKMtools.fano_index — Function
fano_index(G::AbstractGKM_graph) -> ZZRingElemReturn the Fano index of the GKM graph, which is the gcd of the first Chern numbers of all its edges.
Examples
julia> P2 = projective_space(GKM_graph, 2);
julia> fano_index(P2)
3
julia> F3 = flag_variety(GKM_graph, [1, 1, 1]);
julia> fano_index(F3)
2GKMtools.index_periodic_betti — Function
index_periodic_betti(G::AbstractGKM_graph) -> Vector{Int64}Return the index-periodic Betti numbers of a compact GKM graph.
For a GKM graph with Fano index $p$, this function computes the sums of Betti numbers grouped by their residue class modulo $p$. Specifically, the $i$-th entry (for $i$ from $1$ to $p$) contains the sum of all Betti numbers $b_j$ where $j \equiv i$ (mod $p$).
This is as defined in [BGL+25, before Theorem 2.2].
- The returned vector has length equal to the Fano index $p$.
- Entry i corresponds to the sum of Betti numbers with index congruent $i$ (mod $p$).
- Requires the GKM graph to be compact.
Examples
julia> P2 = projective_space(GKM_graph, 2);
julia> index_periodic_betti(P2)
3-element Vector{Int64}:
1
1
1GKMtools.QH_ss_check_GLLXBR — Function
QH_ss_check_GLLXBR(G::AbstractGKM_graph)::BoolReturn true if $G$ satisfies conditions (1) and (2) in [BGL+25, Theorem 2.2].