Curve Classes

Given a GKM variety $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_classesFunction
print_curve_classes(G::GKM_graph)

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

Examples

julia> P2 = projective_space(GKM_graph, 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_ex_div(gkm_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)
Subgraph:
GKM graph with 2 nodes, valency 1 and axial function:
[1>3] -> [1>2] => (0, -1, 1)

julia> print_curve_classes(P2_blown_up.Codomain)
[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_classFunction
curve_class(G::GKM_graph, src::String, dst::String)

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

Example

julia> P2 = projective_space(GKM_graph, 2);

julia> P2_blown_up = blow_up_ex_div(gkm_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)
Subgraph:
GKM graph with 2 nodes, valency 1 and axial function:
[1>3] -> [1>2] => (0, -1, 1)

julia> curve_class(P2_blown_up.Codomain, "[1>3]", "[1>2]")
(-1, 1)
source
curve_class(G::GKM_graph, e::Edge)

Return the second homology class represented by the given edge.

source
Oscar.IntersectionTheory.chern_numberFunction
chern_number(e::Edge, G::GKM_graph) -> ZZRingElem

Return the Chern number of the curve class represented by the given edge. This is the pairing of the curve class with the first Chern class of the tangent bundle.

Example

julia> P2 = projective_space(GKM_graph, 2);

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

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

julia> chern_number(Edge(1, 2), partialFlagVariety)
4
source
chern_number(G::GKM_graph, beta::CurveClass; check::Bool=true)::ZZRingElem

Return the Chern number of the curve class beta. This is the pairing of the second homology class with the first Chern class of the tangent bundle.

Example

julia> P2 = projective_space(GKM_graph, 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_effectiveFunction
is_effective(G::GKM_graph, 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(GKM_graph, [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
GKMtools.GKM_second_homologyFunction
GKM_second_homology(G::GKM_graph) -> GKM_H2

It builds (if necessary) and returns the GKM_H2 object of this GKM graph. The result is stored in G for future use. Assume that G represents a GKM variety $X$. The returned GKM_H2 struct is by definition the quotient of the $\mathbb{Z}$-module generated by the GKM graph's edges modulo the relations in $H_2(X;\mathbb{Z})$. Thus, it is the submodule of $H_2(X;\mathbb{Z})$ generated by classes of $T$-invariant curves.

Note
  • If G.H2 is already set, it just returns that. Otherwise it calculates it afresh and stores it there.
  • For most applications, it is not necessary to work with this object directly. Use functions like curve_class and chern_number instead.
source