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_movesMethod
braid_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:

  • n is the position where the braid move starts
  • len is the length of the braid move
  • dir is the direction of the braid move. If len=2 or len=3, dir is 0 or -1. If len=4 or len=6, dir is -2 or -3 if the root at n is short, otherwise dir is -1. This information can be used, when computing the tropical Plücker relations.
Warning

If w1 and w2 do not define the same element in W, the behaviour is arbitrary.

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)
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
apply_braid_move!Method
apply_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.

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

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.

isomorphismMethod
isomorphism(::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).

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
isomorphismMethod
isomorphism(::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).

Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Parabolic subgroups

parabolic_subgroupFunction
parabolic_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]
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source
parabolic_subgroup_with_projectionMethod
parabolic_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]
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Irreducible factors

irreducible_factorsMethod
irreducible_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]
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source

Inner direct products

inner_direct_productMethod
inner_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)))
true
Experimental

This function is part of the experimental code in Oscar. Please read here for more details.

source