Properties of GKM graphs

These are the main properties of GKM graphs.

Oscar.betti_numbersFunction
betti_numbers(G::GKM_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].

Note
  • i ranges from 0 to the valency of G, that can be obtained by valency(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)]).
Warning

betti_numbers[1] is the 0-th Betti number, since Julia arrays are 1-based and not 0-based.

Examples

julia> H6 = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 6));

julia> betti_numbers(H6)
3-element Vector{Int64}:
 1
 2
 1
source
GKMtools.valencyFunction
valency(G::GKM_graph) -> Int64

Return the valency of G, i.e. the degree of each vertex.

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
6
source
GKMtools.rank_torusFunction
rank_torus(G::GKM_graph) -> Int64

Return 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)
4

Taking products adds the rank:

julia> H6 = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 6));

julia> rank_torus(H6)
4
julia> rank_torus(H6 * P3)
8
source
GKMtools.is2_indepFunction
is2_indep(G::GKM_graph) -> Bool

Return true if G is 2-independent, i.e. the weights of every two edges at a vertex are linearly independent.

source
GKMtools.is3_indepFunction
is3_indep(G::GKM_graph) -> Bool

Return true if G is 3-independent, i.e. the weights of every three edges 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))
true

The 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)
false
Warning

This function throws an error if the valency of G is less than 3, since in this case it is not possible to pick three different edges ta a vertex.

source
GKMtools.is_strictly_nefFunction
is_strictly_nef(G::GKM_graph) -> Bool

It returns 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)
false
source