Weyl groups (experimental features)
This page is an addition to the documentation of Weyl groups with the additional experimental features.
Exchange lemma and Braid moves
braid_moves — Methodbraid_moves(W::WeylGroup, w1::Vector{UInt8}, w2::Vector{UInt8}) -> Vector{Tuple{Int,Int,Int}}Return the braid moves required to transform the reduced expression w2 into the reduced expression w1 with respect to the Weyl group W. A braid move (n, len, dir) should be understood as follows:
nis the position where the braid move startslenis the length of the braid movediris the direction of the braid move. Iflen=2orlen=3,diris0or-1. Iflen=4orlen=6,diris-2or-3if the root atnis short, otherwisediris-1. This information can be used, when computing the tropical Plücker relations.
Examples
julia> W = weyl_group(:A, 3);
julia> braid_moves(W, UInt8[1,2,1,3,2,1], UInt8[1,3,2,1,3,2])
4-element Vector{Tuple{Int64, Int64, Int64}}:
(4, 2, 0)
(2, 3, -1)
(4, 3, -1)
(3, 2, 0)
julia> W = weyl_group(:B, 2);
julia> braid_moves(W, UInt8[2,1,2,1], UInt8[1,2,1,2])
1-element Vector{Tuple{Int64, Int64, Int64}}:
(1, 4, -2)This function is part of the experimental code in Oscar. Please read here for more details.
apply_braid_move! — Methodapply_braid_move!(w::Vector{UInt8}, mv::Tuple{Int,Int,Int}) -> Vector{UInt8}Apply the braid move mv to the word w and return the result. If mv is not a valid braid move for w, the behaviour is arbitrary. See also braid_moves.
This function is part of the experimental code in Oscar. Please read here for more details.
Conversion to other group types
For many computations, it may be suitable to have a WeylGroup as a different kind of group object, to e.g. use functionality that is only available for that other type.
The conversion functions come in pairs: one only creates an isomorphic group object, the other also computes the isomorphism.
isomorphism — Methodisomorphism(::Type{FPGroup}, W::WeylGroup) -> Map{WeylGroup, FPGroup}Return an isomorphism from W to a group H of type FPGroup.
H will be the quotient of a free group with the same rank as W, where we have the natural 1-to-1 correspondence of generators, modulo the Coxeter relations of W.
Isomorphisms are cached in W, subsequent calls of isomorphism(FPGroup, W) yield identical results.
If only the image of such an isomorphism is needed, use fp_group(W).
This function is part of the experimental code in Oscar. Please read here for more details.
isomorphism — Methodisomorphism(::Type{PermGroup}, W::WeylGroup) -> Map{WeylGroup, PermGroup}Return an isomorphism from W to a group H of type PermGroup. An exception is thrown if no such isomorphism exists.
The generators of H are in the natural 1-1 correspondence with the generators of W.
If the type of W is irreducible and not $E_6$ or $E_7$, then the degree of H is optimal. See [Sau14] for the optimal permutation degrees of Weyl groups.
Isomorphisms are cached in W, subsequent calls of isomorphism(PermGroup, W) yield identical results.
If only the image of such an isomorphism is needed, use permutation_group(W).
This function is part of the experimental code in Oscar. Please read here for more details.
Parabolic subgroups
parabolic_subgroup — Functionparabolic_subgroup(W::WeylGroup, vec::Vector{<:Integer}, w::WeylGroupElem=one(W)) -> WeylGroup, Map{WeylGroup, WeylGroup}Return a Weyl group P and an embedding $f:P\to W$ such that $f(P)$ is the subgroup U of W generated by [inv(w)*u*w for u in gens(W)[vec]]. Further, f maps gen(P, i) to inv(w)*gen(W, vec[i])*w. The elements of vec must be pairwise distinct integers in 1:number_of_generators(W) and vec must be non-empty.
Examples
julia> W = weyl_group(:B, 3)
Weyl group
of root system of rank 3
of type B3
julia> P1, f1 = parabolic_subgroup(W, [1, 2])
(Weyl group of root system of type A2, Map: P1 -> W)
julia> f1(P1[1] * P1[2]) == W[1] * W[2]
true
julia> P2, f2 = parabolic_subgroup(W, [1, 2], W[1])
(Weyl group of root system of type A2, Map: P2 -> W)
julia> f2(P2[1]) == W[1] && f2(P2[2]) == W[1] * W[2] * W[1]
true
julia> P3, f3 = parabolic_subgroup(W, [1,3,2])
(Weyl group of root system of type B3 (non-canonical ordering), Map: P3 -> W)
julia> f3(P3[2]) == W[3]
trueThis function is part of the experimental code in Oscar. Please read here for more details.
parabolic_subgroup_with_projection — Methodparabolic_subgroup_with_projection(W::WeylGroup, vec::Vector{<:Integer}; check::Bool=true) -> WeylGroup, Map{WeylGroup, WeylGroup}, Map{WeylGroup, WeylGroup}Return a triple (P, emb, proj) that describes a factor of W, that is, a product of irreducible factors. Here P, emb =parabolic_subgroup(W, vec) and proj is the projection map from W onto P, which is a left-inverse of emb.
If check = true, then it is checked whether vec actually describes a union of irreducible components of the Dynkin diagram.
Examples
julia> W = weyl_group([(:A, 3), (:B, 3)])
Weyl group
of root system of rank 6
of type A3 x B3
julia> P1, f1, p1 = parabolic_subgroup_with_projection(W, [1,2,3])
(Weyl group of root system of type A3, Map: P1 -> W, Map: W -> P1)
julia> p1(W[1]*W[4]*W[2]*W[6]) == P1[1] * P1[2]
true
julia> P2, f2, p2 = parabolic_subgroup_with_projection(W, [4,6,5])
(Weyl group of root system of type B3 (non-canonical ordering), Map: P2 -> W, Map: W -> P2)
julia> p2(W[5]) == P2[3]
trueThis function is part of the experimental code in Oscar. Please read here for more details.
Irreducible factors
irreducible_factors — Methodirreducible_factors(W::WeylGroup; morphisms::Bool=false)If morphisms is true, return a triple (U, emb, proj) that describes the irreducible factors of W. That is, U, emb, proj are vectors whose length is the number of irreducible components of the Dynkin diagram of W, and for each i, (U[i], emb[i], proj[i]) describes the i-th factor of W as described in parabolic_subgroup_with_projection.
If morphisms is false, return only U .
The order of the irreducible factors is the one given by cartan_type_with_ordering.
See also inner_direct_product(::AbstractVector{WeylGroup}).
Examples
julia> W = weyl_group([(:A, 3), (:B, 4)]);
julia> irreducible_factors(W)
2-element Vector{WeylGroup}:
Weyl group of root system of type A3
Weyl group of root system of type B4
julia> U, emb, proj = irreducible_factors(W; morphisms=true)
(WeylGroup[Weyl group of root system of type A3, Weyl group of root system of type B4], Map{WeylGroup, WeylGroup}[Map: Weyl group -> W, Map: Weyl group -> W], Map{WeylGroup, WeylGroup}[Map: W -> Weyl group, Map: W -> Weyl group])
julia> emb[1](U[1][1]) == W[1]
true
julia> proj[2](W[4]) == U[2][1]
trueThis function is part of the experimental code in Oscar. Please read here for more details.
Inner direct products
inner_direct_product — Methodinner_direct_product(L::AbstractVector{WeylGroup}; morphisms::Bool=false)
inner_direct_product(L::WeylGroup...; morphisms::Bool=false)If morphisms is false, then return a Weyl group W that is isomorphic to the direct product of the Weyl groups in L. The generators of W are in natural 1-1 correspondence with the generators of the groups in L in the given order.
If morphisms is true, return a triple (W, emb, proj) where W is as above and emb, proj are vectors such that emb[i] (resp., proj[i]) is the embedding of L[i] into W (resp., the projection of W onto L[i]).
See also inner_direct_product(::AbstractVector{T}) where {T<:Union{PcGroup, SubPcGroup, FPGroup, SubFPGroup}}.
Examples
julia> W1 = weyl_group(:A, 2); W2 = weyl_group(:B, 3);
julia> W, emb, proj = inner_direct_product(W1, W2; morphisms=true)
(Weyl group of root system of type A2 x B3, Map{WeylGroup, WeylGroup}[Map: W1 -> W, Map: W2 -> W], Map{WeylGroup, WeylGroup}[Map: W -> W1, Map: W -> W2])
julia> proj[2](W[3]) == W2[1]
true
julia> gens(W) == vcat(emb[1].(gens(W1)), emb[2].(gens(W2)))
trueThis function is part of the experimental code in Oscar. Please read here for more details.