Operators

GKM Subgraphs

GKMtools.gkm_subgraph_from_verticesFunction
gkm_subgraph_from_vertices(gkm::GKM_graph, vertices::Vector{Int64}) -> GKM_subgraph

Return the GKM subgraph induced by the given vertices.

Note
  1. This does not check if the result is a valid GKM graph (use may use isvalid for that).
  2. If possible, the subgraph will be endowed with the connection induced from the supergraph.

Example

julia> G = projective_space(GKM_graph, 3)
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)

julia> S = gkm_subgraph_from_vertices(G, [2, 3])
GKM subgraph of:
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
Subgraph:
GKM graph with 2 nodes, valency 1 and axial function:
3 -> 2 => (0, -1, 1, 0)

julia> S.Domain
GKM graph with 2 nodes, valency 1 and axial function:
3 -> 2 => (0, -1, 1, 0)

julia> S.Codomain
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
source
gkm_subgraph_from_vertices(gkm::GKM_graph, vertexLabels::Vector{String}) -> GKM_subgraph

As before, but the vertices are given by their labels.

source
GKMtools.gkm_subgraph_from_edgesFunction
gkm_subgraph_from_edges(gkm::GKM_graph, edges::Vector{Edge}) -> GKM_subgraph

Return the GKM subgraph induced by the given edges.

Note
  1. This does not check if the result is a valid GKM graph (use isvalid for that).
  2. If possible, the subgraph will be endowed with the connection induced from the supergraph.

Example

julia> G = projective_space(GKM_graph, 3);

julia> S = gkm_subgraph_from_edges(G, [Edge(1, 2), Edge(2, 3)])
GKM subgraph of:
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
Subgraph:
GKM graph with 3 nodes, valency 1 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 2 => (0, -1, 1, 0)
source
Base.isvalidMethod
isvalid(gkmsub::GKM_subgraph; printDiagnostics::Bool = true) -> Bool

Return true if the given GKM subgraph is valid. This holds if and only if all of the following hold:

  1. The supergraph and subgraph are both valid GKM GKMsubgraphs of the same character group
  2. The subgraph is mathematically a subgraph of the supergraph
  3. The edge weights of the subgraph match that of the supergraph
  4. The vertex labels of the subgraph and the supergraph match.
Warning

If a connection for the supergraph is set, this does not check if it is compatible with the subgraph. Use is_compatible_with_connection() for this.

source

Blowups

GKMtools.blow_up_ex_divFunction
blow_up_ex_div(gkmSub::GKM_subgraph) -> GKM_subgraph

It computes the GKM graph of the blow up of the GKM subgraph gkmSub. It returns the GKM subgraph of exceptional divisor inside the blow up.

Note

The GKM graph needs to have the connection field set. The returned blowup graph and subgraph will also have the connection field set, but not the curveClasses field. (It will be calculated automatically on demand via GKM_second_homology). Mathematically, this follows [GZ01, section 2.2.1].

Warning

This will build an undirected graph. Behaviour with directed graphs as input is not tested.

Examples

julia> G = projective_space(GKM_graph, 3) # 3-dimensional projective space
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)

julia> S = gkm_subgraph_from_vertices(G, [1, 2]) # we take the subgraph of two vertices, it corresponds to a line
GKM subgraph of:
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
Subgraph:
GKM graph with 2 nodes, valency 1 and axial function:
2 -> 1 => (-1, 1, 0, 0)

julia> blowupSub = blow_up_ex_div(S) # blowup of P3 along the line S
GKM subgraph of:
GKM graph with 6 nodes, valency 3 and axial function:
[1>4] -> [1>3] => (0, 0, -1, 1)
[2>3] -> [1>3] => (-1, 1, 0, 0)
[2>4] -> [1>4] => (-1, 1, 0, 0)
[2>4] -> [2>3] => (0, 0, -1, 1)
3 -> [1>3] => (-1, 0, 1, 0)
3 -> [2>3] => (0, -1, 1, 0)
4 -> [1>4] => (-1, 0, 0, 1)
4 -> [2>4] => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
Subgraph:
GKM graph with 4 nodes, valency 2 and axial function:
[1>4] -> [1>3] => (0, 0, -1, 1)
[2>3] -> [1>3] => (-1, 1, 0, 0)
[2>4] -> [1>4] => (-1, 1, 0, 0)
[2>4] -> [2>3] => (0, 0, -1, 1)

julia> Spoint = gkm_subgraph_from_vertices(G, [1]) # we take the subgraph of one vertex that is an invariant point
GKM subgraph of:
GKM graph with 4 nodes, valency 3 and axial function:
2 -> 1 => (-1, 1, 0, 0)
3 -> 1 => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> 1 => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
Subgraph:
GKM graph with 1 nodes, valency 0 and axial function:

julia> blowupPt = blow_up_ex_div(Spoint) # blowup of P3 at a point
GKM subgraph of:
GKM graph with 6 nodes, valency 3 and axial function:
[1>3] -> [1>2] => (0, -1, 1, 0)
[1>4] -> [1>2] => (0, -1, 0, 1)
[1>4] -> [1>3] => (0, 0, -1, 1)
2 -> [1>2] => (-1, 1, 0, 0)
3 -> [1>3] => (-1, 0, 1, 0)
3 -> 2 => (0, -1, 1, 0)
4 -> [1>4] => (-1, 0, 0, 1)
4 -> 2 => (0, -1, 0, 1)
4 -> 3 => (0, 0, -1, 1)
Subgraph:
GKM graph with 3 nodes, valency 2 and axial function:
[1>3] -> [1>2] => (0, -1, 1, 0)
[1>4] -> [1>2] => (0, -1, 0, 1)
[1>4] -> [1>3] => (0, 0, -1, 1)
source

Products

Base.:*Method
*(G1::GKM_graph, G2::GKM_graph; calculateCurveClasses::Bool=true, calculateConnection::Bool=true) -> GKM_graph

It constructs the product of two GKM graphs.

Examples

julia> G = generalized_gkm_flag(root_system(:A, 1))
GKM graph with 2 nodes, valency 1 and axial function:
s1 -> id => (-1, 1)

julia> G*G
GKM graph with 4 nodes, valency 2 and axial function:
s1,id -> id,id => (-1, 1, 0, 0)
id,s1 -> id,id => (0, 0, -1, 1)
s1,s1 -> s1,id => (0, 0, -1, 1)
s1,s1 -> id,s1 => (-1, 1, 0, 0)
Note

The character group is of type free $\mathbb{Q}$-module if this holds for one of the two GKM graphs.

source