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:
- 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.
- 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: 3GKMtools.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)Oscar.IntersectionTheory.chern_number — Function
chern_number(e::Edge, G::AbstractGKMGraph) -> ZZRingElemReturn 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)
3julia> 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)))
-3Hecke.is_effective — Function
is_effective(G::AbstractGKMGraph, beta::CurveClass) -> BoolReturn whether beta is in the effective cone, i.e. whether it is a non-negative linear combination of edge curve classes.
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