Weyl groups

Weyl groups are represented by objects of type WeylGroup <: Group, and their elements by WeylGroupElem <: GroupElement.

Warning

Weyl groups in OSCAR only afford right actions on roots and weights. Note however, that this may differ from the literature, but is to stay consistent with the conventions in the rest of OSCAR.

Note

See Cartan types for our conventions on Cartan types and ordering of simple roots.

Table of contents

Constructing Weyl groups

weyl_groupMethod
weyl_group(R::RootSystem) -> WeylGroup

Return the Weyl group of R.

Examples

julia> weyl_group(root_system([2 -1; -1 2]))
Weyl group
  of root system of rank 2
    of type A2

julia> weyl_group(root_system(matrix(ZZ, 2, 2, [2, -1, -1, 2]); detect_type=false))
Weyl group
  of root system of rank 2
    of unknown type

julia> weyl_group(root_system(matrix(ZZ, [2 -1 -2; -1 2 0; -1 0 2])))
Weyl group
  of root system of rank 3
    of type C3 (with non-canonical ordering of simple roots)
source
weyl_groupMethod
weyl_group(cartan_matrix::ZZMatrix) -> WeylGroup

Construct the Weyl group defined by the given (generalized) Cartan matrix.

source
weyl_groupMethod
weyl_group(fam::Symbol, rk::Int) -> WeylGroup

Construct the Weyl group of the given type.

The input must be a valid Cartan type, see is_cartan_type(::Symbol, ::Int).

Examples

julia> weyl_group(:A, 2)
Weyl group
  of root system of rank 2
    of type A2
source
weyl_groupMethod
weyl_group(type::Vector{Tuple{Symbol,Int}}) -> WeylGroup
weyl_group(type::Tuple{Symbol,Int}...) -> WeylGroup

Construct the Weyl group of the given type.

Each element of type must be a valid Cartan type, see is_cartan_type(::Symbol, ::Int). The vararg version needs at least one element.

Examples

julia> weyl_group([(:G, 2), (:D, 4)])
Weyl group
  of root system of rank 6
    of type G2 x D4
source

Basic properties

Basic group arithmetic like *, and inv are defined for WeylGroupElem objects.

Using (W::WeylGroup)(word::Vector{<:Integer}), one can construct group elements from a word in the generators. Finite Weyl groups support iteration over all group elements (in an arbitrary order).

is_finiteMethod
is_finite(W::WeylGroup) -> Bool

Return whether W is finite.

source
oneMethod
one(W::WeylGroup) -> WeylGroupElem

Return the identity element of W.

source
isoneMethod
isone(x::WeylGroupElem) -> Bool

Return whether x is the identity element of its parent.

source
genMethod
gen(W::WeylGroup, i::Int) -> WeylGroupElem

Return the i-th simple reflection (with respect to the underlying root system) of W.

This is a more efficient version for gens(W)[i].

source
gensMethod
gens(W::WeylGroup) -> WeylGroupElem

Return the simple reflections (with respect to the underlying root system) of W.

See also: gen(::WeylGroup, ::Int).

source
number_of_generatorsMethod
number_of_generators(W::WeylGroup) -> Int

Return the number of generators of the W, i.e. the rank of the underlying root system.

source
orderMethod
order(W::WeylGroup) -> ZZRingELem
order(::Type{T}, W::WeylGroup) where {T} -> T

Return the order of W.

If W is infinite, an InfiniteOrderError exception will be thrown.

source
root_systemMethod
root_system(W::WeylGroup) -> RootSystem

Return the underlying root system of W.

source

Words and length

wordMethod
word(x::WeylGroupElem) -> Vector{UInt8}

Return x as a list of indices of simple reflections, in reduced form.

This function is right inverse to calling (W::WeylGroup)(word::Vector{<:Integer}).

source
lengthMethod
length(x::WeylGroupElem) -> Int

Return the length of x.

source
longest_elementMethod
longest_element(W::WeylGroup) -> WeylGroupElem

Return the unique longest element of W. This only exists if W is finite.

source

Bruhat order

<Method
<(x::WeylGroupElem, y::WeylGroupElem) -> Bool

Return whether x is smaller than y with respect to the Bruhat order, i.e., whether some (not necessarily connected) subexpression of a reduced decomposition of y, is a reduced decomposition of x.

source

Reduced expressions

reduced_expressionsMethod
reduced_expressions(x::WeylGroupElem; up_to_commutation::Bool=false)

Return an iterator over all reduced expressions of x as Vector{UInt8}.

If up_to_commutation is true, the iterator will not return an expression that only differs from a previous one by a swap of two adjacent commuting simple reflections.

The type of the iterator and the order of the elements are considered implementation details and should not be relied upon.

Examples

julia> W = weyl_group(:A, 3);

julia> x = W([1,2,3,1]);

julia> collect(reduced_expressions(x))
3-element Vector{Vector{UInt8}}:
 [0x01, 0x02, 0x01, 0x03]
 [0x01, 0x02, 0x03, 0x01]
 [0x02, 0x01, 0x02, 0x03]

julia> collect(reduced_expressions(x; up_to_commutation=true))
2-element Vector{Vector{UInt8}}:
 [0x01, 0x02, 0x01, 0x03]
 [0x02, 0x01, 0x02, 0x03]

The second expression of the first iterator is not contained in the second iterator because it only differs from the first expression by a swap of two the two commuting simple reflections s1 and s3.

source

Action on roots and weights

Orbits

weyl_orbitMethod
weyl_orbit(wt::WeightLatticeElem)

Return an iterator over the Weyl group orbit at the weight wt.

The type of the iterator and the order of the elements are considered implementation details and should not be relied upon.

Note

This function currently only supports finite Weyl groups.

source