Curve Classes

Given a GKM space $X$, every edge $e$ of its GKM graph corresponds to a $T$-invariant rational curve $C_e$ in $X$, and hence to a second homology class $[C_e]\in H_2(X;\mathbb{Z})$. As we discuss in the supporting paper, it turns out that:

  1. The subgroup of $H_2(X;\mathbb{Z})$ generated by $\{[C_e] : e \text{ an edge of the GKM graph}\}$ coincides with the subgroup generated by algebraic cycles.
  2. The weights of the GKM graph give rise to an explicit presentation of this subgroup in terms of a complete set of relations between the $[C_e]$ classes.

This is the basis on which this package handles curve classes of GKM spaces.

GKMtools.print_curve_classes — Function
print_curve_classes(G::AbstractGKMGraph)

For each edge, print the representative of its curve class and its Chern numner.

Examples

julia> P2 = projective_space(GKMGraph, 2);

julia> print_curve_classes(P2)
2 -> 1: (1), Chern number: 3
3 -> 1: (1), Chern number: 3
3 -> 2: (1), Chern number: 3

julia> H5 = gkm_graph_of_toric(hirzebruch_surface(NormalToricVariety, 5));

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> P2_blown_up = blow_up(subgraph_from_vertices(P2, [1]))
GKM subgraph of:
GKM graph with 4 nodes, valency 2 and axial function:
[1>3] -> [1>2] => (0, 1, -1)
2 -> [1>2] => (1, -1, 0)
3 -> [1>3] => (1, 0, -1)
3 -> 2 => (0, 1, -1)
Algorithmic connection for GKM graph with 4 nodes and valency 2
Subgraph:
GKM graph with 2 nodes, valency 1 and axial function:
[1>3] -> [1>2] => (0, 1, -1)
Algorithmic connection for GKM graph with 2 nodes and valency 1

julia> P2_blown_up_ambient = ambient_graph(P2_blown_up);

julia> print_curve_classes(P2_blown_up_ambient)
[1>3] -> [1>2]: (-1, 1), Chern number: 1
2 -> [1>2]: (1, 0), Chern number: 2
3 -> [1>3]: (1, 0), Chern number: 2
3 -> 2: (0, 1), Chern number: 3
source
GKMtools.curve_class — Function
curve_class(G::AbstractGKMGraph, e::Edge) -> CurveClass
curve_class(G::AbstractGKMGraph, src::String, dst::String)

Return the second homology class represented by the given edge whose source and destination have the given labels.

Examples

julia> P2 = projective_space(GKMGraph, 2);

julia> P2_blown_up = blow_up(subgraph_from_vertices(P2, [1]));

julia> P2_blown_up_ambient = ambient_graph(P2_blown_up);

julia> curve_class(P2_blown_up_ambient, "[1>3]", "[1>2]")
(-1, 1)
source
Oscar.IntersectionTheory.chern_number — Function
chern_number(e::Edge, G::AbstractGKMGraph) -> ZZRingElem

Return the first Chern number of the invariant curve represented by e.

Examples

julia> P2 = projective_space(GKMGraph, 2);

julia> chern_number(Edge(1, 2), P2)
3

julia> partialFlagVariety = flag_variety(GKMGraph, [1, 2]);

julia> chern_number(Edge(1, 2), partialFlagVariety)
3
julia> P2 = projective_space(GKMGraph, 2);

julia> chern_number(P2, 2 * curve_class(P2, Edge(1, 2)))
6
julia> chern_number(P2, -2 * curve_class(P2, Edge(1, 2)) + curve_class(P2, Edge(2, 3)))
-3
source
Hecke.is_effective — Function
is_effective(G::AbstractGKMGraph, beta::CurveClass) -> Bool

Return whether beta is in the effective cone, i.e. whether it is a non-negative linear combination of edge curve classes.

Note

We consider the effective cone to be closed and hence zero is also considered effective.

Examples

julia> F3 = flag_variety(GKMGraph, [1, 1, 1]);

julia> beta = curve_class(F3, Edge(1, 2));

julia> is_effective(F3, beta)
true

julia> is_effective(F3, 0*beta)
true

julia> is_effective(F3, -1*beta)
false

julia> is_effective(F3, 2*beta)
true
source