Connections
Let $e$ be an directed edge $p\rightarrow q$, and let $E_p$ (resp., $E_q$) be the set of all directed edges starting from $p$ (resp., $q$). Following [GZ00], a connection along $e$ is a bijection
\[\nabla_e\colon E_p \longrightarrow E_q.\]
A connection $\nabla$ of a GKM graph $G$ is a family of connections $\nabla = \{\nabla_e \}_{e \in E}$, where $E$ is the set of all edges of $G$, such that $\nabla_{-e}=\nabla_{e}^{-1}$.
The connection is compatible with the axial function $\mathrm{w}$ of $G$ if for all $e' \in E_p$, there exists an integer $a$ depending on $e$ and $e'$ such that
\[\mathrm{w}(\nabla_e(e')) = \mathrm{w}(e') - a \mathrm{w}(e).\]
If $G$ is the GKM graph of a GKM space $X$, then these integers $a$ are the degrees of the equivariant line bundles into which $TX$ splits when restricted to the invariant rational curve represented by $e$.
Existence and uniqueness of connections
Given a GKM graph $G$ that comes from a GKM space $X$, it always has a connection for the geometric reason sketched above. However, $G$ may admit more than one connection.
The following are sufficient conditions for the existence of a unique connection of $G$.
- The valency of $G$ is at least 3 and $G$ is $3$-independent, i.e. the weights of every three edges starting at the same vertex are linearly independent.
- The valency of $G$ is at most 2.
In those cases, the connection can be computed using get_connection
.
If neither of these two conditions hold and $G$ is not the output of a standard construction, a choice of connection can be specified manually using set_connection!
.
GKMtools.get_connection
— Methodget_connection(gkm::AbstractGKM_graph) -> Union{Nothing, GKM_connection}
Return the connection of the given GKM graph if it is 3-independent, or if it is 2-valent and 2-independent, or if it has been set manually. If one of the first two cases holds and the connection hasn't been calculated before, it is saved in the gkm
object for later use. If none of the three cases hold, return nothing
.
For GKM graphs of valency at least 3 that are not 3-independent, a connection may still exist, although uniqueness is not guaranteed. Use get_any_connection
to get any compatible connection if one exists.
Example
The unique connection for $\mathbb{P}^n$ has $\nabla_{(p\rightarrow q)}(p\rightarrow r)=(q\rightarrow r)$ for every triple of distinct vertices $(p, q, r)$, and $\nabla_{(p\rightarrow q)}(p\rightarrow q)=(q\rightarrow p)$ for every distinct vertices $p$ and $q$.
julia> G = projective_space(GKM_graph, 2)
GKM graph with 3 nodes, valency 2 and axial function:
2 -> 1 => (-1, 1, 0)
3 -> 1 => (-1, 0, 1)
3 -> 2 => (0, -1, 1)
julia> C = get_connection(G)
GKM connection for GKM graph with 3 nodes and valency 2:
Connection:
(Edge(2, 1), Edge(2, 1)) => Edge(1, 2)
(Edge(1, 2), Edge(1, 2)) => Edge(2, 1)
(Edge(2, 3), Edge(2, 1)) => Edge(3, 1)
(Edge(1, 3), Edge(1, 2)) => Edge(3, 2)
(Edge(3, 1), Edge(3, 2)) => Edge(1, 2)
(Edge(3, 1), Edge(3, 1)) => Edge(1, 3)
(Edge(2, 1), Edge(2, 3)) => Edge(1, 3)
(Edge(1, 3), Edge(1, 3)) => Edge(3, 1)
(Edge(2, 3), Edge(2, 3)) => Edge(3, 2)
(Edge(3, 2), Edge(3, 2)) => Edge(2, 3)
(Edge(3, 2), Edge(3, 1)) => Edge(2, 1)
(Edge(1, 2), Edge(1, 3)) => Edge(2, 3)
a_i's:
(Edge(2, 1), Edge(2, 1)) => 2
(Edge(1, 2), Edge(1, 2)) => 2
(Edge(2, 3), Edge(2, 1)) => 1
(Edge(1, 3), Edge(1, 2)) => 1
(Edge(3, 1), Edge(3, 2)) => 1
(Edge(3, 1), Edge(3, 1)) => 2
(Edge(2, 1), Edge(2, 3)) => 1
(Edge(1, 3), Edge(1, 3)) => 2
(Edge(2, 3), Edge(2, 3)) => 2
(Edge(3, 2), Edge(3, 2)) => 2
(Edge(3, 2), Edge(3, 1)) => 1
(Edge(1, 2), Edge(1, 3)) => 1
GKMtools.get_any_connection
— Methodget_any_connection(gkm::AbstractGKM_graph)::Union{Nothing, GKM_connection}
Return any connection for the given GKM graph, if there exists one, or nothing
otherwise. This connection is not guaranteed to have any special properties. In particular, if gkm
is the GKM graph of a sufficiently nice space, the returned connection is not guaranteed to be the one induced by the geometry of the space.
GKMtools.build_GKM_connection
— Functionbuild_GKM_connection(gkm::AbstractGKM_graph, con::Dict{Tuple{Edge, Edge}, Edge}) -> GKM_connection
Return the GKM_connection
object (including information of the integers $a$) defined by the given connection map.
- This function does not check whether the given connection map is valid (use
isvalid(::GKM_connection)
for that). - This does not save the new connection to the gkm object (use
set_connection!(::AbstractGKM_graph, ::GKM_connection)
for that).
Example
julia> G = projective_space(GKM_graph, 1)
GKM graph with 2 nodes, valency 1 and axial function:
2 -> 1 => (-1, 1)
julia> con = Dict{Tuple{Edge, Edge}, Edge}()
Dict{Tuple{Edge, Edge}, Edge}()
julia> con[(Edge(1, 2), Edge(1, 2))] = Edge(2, 1)
Edge(2, 1)
julia> con[(Edge(2, 1), Edge(2, 1))] = Edge(1, 2)
Edge(1, 2)
julia> C = build_GKM_connection(G, con)
GKM connection for GKM graph with 2 nodes and valency 1:
Connection:
(Edge(2, 1), Edge(2, 1)) => Edge(1, 2)
(Edge(1, 2), Edge(1, 2)) => Edge(2, 1)
a_i's:
(Edge(2, 1), Edge(2, 1)) => 2
(Edge(1, 2), Edge(1, 2)) => 2
build_GKM_connection(gkm::AbstractGKM_graph, a::Dict{Tuple{Edge, Edge}, ZZRingElem}) -> GKM_connection
Return the GKM_connection
object (including the connection map $\nabla$) defined by the given integers a
.
- This function does not check whether the given connection map is valid (use
isvalid(::GKM_connection)
for that). - This does not save the new connection to the gkm object (use
set_connection!(::AbstractGKM_graph, ::GKM_connection)
for that).
Example
julia> G = projective_space(GKM_graph, 1)
GKM graph with 2 nodes, valency 1 and axial function:
2 -> 1 => (-1, 1)
julia> a = Dict{Tuple{Edge, Edge}, ZZRingElem}()
Dict{Tuple{Edge, Edge}, ZZRingElem}()
julia> a[(Edge(1, 2), Edge(1, 2))] = 2
2
julia> a[(Edge(2, 1), Edge(2, 1))] = 2
2
julia> C = build_GKM_connection(G, a)
GKM connection for GKM graph with 2 nodes and valency 1:
Connection:
(Edge(2, 1), Edge(2, 1)) => Edge(1, 2)
(Edge(1, 2), Edge(1, 2)) => Edge(2, 1)
a_i's:
(Edge(2, 1), Edge(2, 1)) => 2
(Edge(1, 2), Edge(1, 2)) => 2
GKMtools.set_connection!
— Functionset_connection!(gkm::AbstractGKM_graph, con::GKM_connection)
Manually set the GKM connection of gkm
to con
. This will overwrite any previously set connection.
Example
After building the GKM_connection
using build_GKM_connection
like in the example above, we may assign it to the GKM graph using set_connection!
:
julia> G = projective_space(GKM_graph, 1);
julia> a = Dict{Tuple{Edge, Edge}, ZZRingElem}();
julia> a[(Edge(1, 2), Edge(1, 2))] = 2;
julia> a[(Edge(2, 1), Edge(2, 1))] = 2;
julia> C = build_GKM_connection(G, a);
julia> set_connection!(G, C)
GKM connection for GKM graph with 2 nodes and valency 1:
Connection:
(Edge(2, 1), Edge(2, 1)) => Edge(1, 2)
(Edge(1, 2), Edge(1, 2)) => Edge(2, 1)
a_i's:
(Edge(2, 1), Edge(2, 1)) => 2
(Edge(1, 2), Edge(1, 2)) => 2
Base.isvalid
— Methodisvalid(con::GKM_connection; printDiagnostics::Bool=true) -> Bool
Return true
if the given connection is valid for its GKM graph. This holds if and only if all of the following hold:
con.con
andcon.a
are set for all(Edge(v,w), Edge(v,u))
where $vw$ and $vu$ are edges in the graph- con maps every
(e,e)
toreverse(e)
- a maps every
(e,e)
to2
- Every pair of edges
(e,ei)
with same source satisfies the relation of the associated a's (see above), i.e.con.gkm.w[ei'] = con.gkm.w[ei] - con.a[(e,ei)] * con.gkm.w[e]
Example
julia> G = projective_space(GKM_graph, 1);
julia> C = get_connection(G)
GKM connection for GKM graph with 2 nodes and valency 1:
Connection:
(Edge(2, 1), Edge(2, 1)) => Edge(1, 2)
(Edge(1, 2), Edge(1, 2)) => Edge(2, 1)
a_i's:
(Edge(2, 1), Edge(2, 1)) => 2
(Edge(1, 2), Edge(1, 2)) => 2
julia> C.con[(Edge(1, 2), Edge(1, 2))] = Edge(1, 2) # Should be Edge(2, 1)!
Edge(1, 2)
julia> isvalid(C)
Connection doesn't map (e,e) to reverse(e) for e=Edge(1, 2).
false
GKMtools.is_compatible_with_connection
— Functionis_compatible_with_connection(gkmSub::AbstractGKM_subgraph, con::GKM_connection; printDiagnostics::Bool=true)::Bool
Return true
if the connection map sends edge pairs contained in the subgraph to an edge of the subgraph. This is necessary for the subgraph to represent a $T$-invariant subspace.