Weyl groups
Weyl groups are represented by objects of type WeylGroup <: Group, and their elements by WeylGroupElem <: GroupElement.
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.
See Cartan types for our conventions on Cartan types and ordering of simple roots.
Table of contents
- Table of contents
- Constructing Weyl groups
- Basic properties
- Reduced expressions
- Action on roots and weights
Constructing Weyl groups
weyl_group — Method
weyl_group(R::RootSystem) -> WeylGroupReturn 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)sourceweyl_group — Method
weyl_group(cartan_matrix::ZZMatrix; check::Bool=true) -> WeylGroup
weyl_group(cartan_matrix::Matrix{<:IntegerUnion}; check::Bool=true) -> WeylGroupConstruct the Weyl group defined by the given (generalized) Cartan matrix.
If check=true the function will verify that cartan_matrix is indeed a generalized Cartan matrix.
weyl_group — Method
weyl_group(fam::Symbol, rk::Int) -> WeylGroupConstruct 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 A2sourceweyl_group — Method
weyl_group(type::Vector{Tuple{Symbol,Int}}) -> WeylGroup
weyl_group(type::Tuple{Symbol,Int}...) -> WeylGroupConstruct 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 D4sourceBasic properties
Basic group arithmetic like *, and inv are defined for WeylGroupElem objects.
Finite Weyl groups support iteration over all group elements (in an arbitrary order).
gens — Method
gens(W::WeylGroup) -> WeylGroupElemReturn the simple reflections (with respect to the underlying root system) of W.
See also: gen(::WeylGroup, ::Int).
number_of_generators — Method
number_of_generators(W::WeylGroup) -> IntReturn the number of generators of the W, i.e. the rank of the underlying root system.
order — Method
order(W::WeylGroup) -> ZZRingELem
order(::Type{T}, W::WeylGroup) where {T} -> TReturn the order of W.
If W is infinite, an InfiniteOrderError exception will be thrown. Use is_finite(::WeylGroup) to check this prior to calling this function if in doubt.
is_finite_order — Method
is_finite_order(x::WeylGroupElem) -> BoolReturn whether x is of finite order, i.e. there is a natural number n such that is_one(x^n).
order — Method
order(x::WeylGroupElem) -> ZZRingELem
order(::Type{T}, x::WeylGroupElem) where {T} -> TReturn the order of x, i.e. the smallest natural number n such that is_one(x^n).
If x is of infinite order, an InfiniteOrderError exception will be thrown. Use is_finite_order(::WeylGroupElem) to check this prior to calling this function if in doubt.
root_system — Method
Element constructors
Using (W::WeylGroup)(word::Vector{<:Integer}), one can construct group elements from a word in the generators.
gens — Method
gens(W::WeylGroup) -> WeylGroupElemReturn the simple reflections (with respect to the underlying root system) of W.
See also: gen(::WeylGroup, ::Int).
reflection — Method
reflection(beta::RootSpaceElem) -> WeylGroupElemReturn the Weyl group element corresponding to the reflection at the hyperplane orthogonal to the root beta.
Words and length
word — Method
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}).
Examples
julia> W = weyl_group(:A, 2);
julia> x = longest_element(W)
s1 * s2 * s1
julia> word(x)
3-element Vector{UInt8}:
0x01
0x02
0x01sourcelongest_element — Method
longest_element(W::WeylGroup) -> WeylGroupElemReturn the unique longest element of W. This only exists if W is finite.
Bruhat order
Reduced expressions
reduced_expressions — Method
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.
Action on roots and weights
* — Method
*(r::RootSpaceElem, x::WeylGroupElem) -> RootSpaceElem
*(w::WeightLatticeElem, x::WeylGroupElem) -> WeightLatticeElemReturn the result of acting with x from the right on r or w.
See also: *(::WeylGroupElem, ::Union{RootSpaceElem,WeightLatticeElem}).
geometric_representation — Method
geometric_representation(W::WeylGroup) -> ZZMatrixGroup, Map{WeylGroup, ZZMatrixGroup}Return the geometric representation G of the Weyl group W, together with the isomorphism hom from W to G.
This representation is defined by coefficients(a) * hom(x) == coefficients(a * x) for all x in W and a a simple root of root_system(W). By linear extension, this also holds for all elements a in the root space of root_system(W).
See [Hum90, Sect. 5.3] for more details.
Examples
julia> R = root_system(:B, 3); W = weyl_group(R);
julia> r = positive_root(R, 8)
a_1 + a_2 + 2*a_3
julia> x = W([1, 2, 1, 3])
s1 * s2 * s1 * s3
julia> G, hom = geometric_representation(W)
(Matrix group of degree 3 over ZZ, Map: W -> G)
julia> coefficients(r) * hom(x)
[1 1 0]
julia> coefficients(r * x)
[1 1 0]sourcedual_geometric_representation — Method
dual_geometric_representation(W::WeylGroup) -> ZZMatrixGroup, Map{WeylGroup, ZZMatrixGroup}Return the dual geometric representation G of the Weyl group W, together with the isomorphism hom from W to G.
This representation is defined by coefficients(w) * hom(x) == coefficients(w * x) for all x in W and w a fundamental weight of root_system(W). By linear extension, this also holds for all elements w in weight_lattice(root_system(W)).
Examples
julia> R = root_system(:B, 3); W = weyl_group(R);
julia> w = WeightLatticeElem(R, [1, 4, -3])
w_1 + 4*w_2 - 3*w_3
julia> x = W([1, 2, 1, 3])
s1 * s2 * s1 * s3
julia> G, hom = dual_geometric_representation(W)
(Matrix group of degree 3 over ZZ, Map: W -> G)
julia> coefficients(w) * hom(x)
[-4 6 -7]
julia> coefficients(w * x)
[-4 6 -7]sourceOrbits
weyl_orbit — Method
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.
source