Weight lattices
Weight lattices are represented by objects of type WeightLattice <: AdditiveGroup
, and their elements by WeightLatticeElem <: AdditiveGroupElement
.
They are introduced to have a formal parent object of all weights that correspond to a common given root system.
See Cartan types for our conventions on Cartan types and ordering of simple roots.
Table of contents
Constructing weight lattices
weight_lattice
— Methodweight_lattice(R::RootSystem) -> WeightLattice
Return the weight lattice of R
, i.e. the lattice spanned by the fundamental weights.
This is the parent of all weights of R
.
Examples
julia> weight_lattice(root_system([2 -1; -1 2]))
Weight lattice
of root system of rank 2
of type A2
julia> weight_lattice(root_system(matrix(ZZ, 2, 2, [2, -1, -1, 2]); detect_type=false))
Weight lattice
of root system of rank 2
of unknown type
julia> weight_lattice(root_system(matrix(ZZ, [2 -1 -2; -1 2 0; -1 0 2])))
Weight lattice
of root system of rank 3
of type C3 (with non-canonical ordering of simple roots)
Properties of weight lattices
rank
— Methodrank(P::WeightLattice) -> Int
Return the rank of the weight lattice P
.
is_finite
— Methodis_finite(P::WeightLattice) -> Bool
Check if the weight lattice P
is finite, i.e. if it has rank 0.
zero
— Methodzero(P::WeightLattice) -> WeightLatticeElem
Return the neutral additive element in the weight lattice P
.
gen
— Methodgen(P::WeightLattice, i::Int) -> WeightLatticeElem
Return the i
-th generator of the weight lattice P
, i.e. the i
-th fundamental weight of the root system of P
.
This is a more efficient version for gens(P)[i]
.
See also: fundamental_weight(::RootSystem, ::Int)
.
gens
— Methodgens(P::WeightLattice) -> Vector{WeightLatticeElem}
Return the generators of the weight lattice P
, i.e. the fundamental weights of the root system of P
.
See also: gen(::WeightLattice, ::Int)
, fundamental_weights(::RootSystem)
.
root_system
— Methodroot_system(P::WeightLattice) -> RootSystem
Return the underlying root system of P
.
Weight lattice elements
WeightLatticeElem
— MethodWeightLatticeElem(P::WeightLattice, vec::Vector{<:IntegerUnion}) -> WeightLatticeElem
Construct a weight lattice element in P
with the given coefficients w.r.t. the fundamental weights of corresponding root system.
WeightLatticeElem
— MethodWeightLatticeElem(R::RootSystem, vec::Vector{<:IntegerUnion}) -> WeightLatticeElem
Construct a weight lattice element in the root system R
with the given coefficients w.r.t. the fundamental weights of R
.
WeightLatticeElem
— MethodWeightLatticeElem(P::WeightLattice, vec::ZZMatrix) -> WeightLatticeElem
Construct a weight lattice element in P
with the given coefficients w.r.t. the fundamental weights of corresponding root system.
vec
must be a row vector of the same length as the rank of P
.
WeightLatticeElem
— MethodWeightLatticeElem(R::RootSystem, vec::ZZMatrix) -> WeightLatticeElem
Construct a weight lattice element in the root system R
with the given coefficient vector w.r.t. the fundamental weights of R
.
vec
must be a row vector of the same length as the rank of R
.
WeightLatticeElem
— MethodWeightLatticeElem(r::RootSpaceElem) -> WeightLatticeElem
Construct a weight lattice element from the root space element r
.
Basic arithmetic operations like zero
, +
, -
, *
(with integer scalars), and ==
are supported.
coeff
— Methodcoeff(w::WeightLatticeElem, i::Int) -> ZZRingElem
Return the coefficient of the i
-th fundamental weight in w
.
This can be also accessed via w[i]
.
coefficients
— Methodcoefficients(w::WeightLatticeElem) -> ZZMatrix
Return the coefficients of the weight lattice element w
w.r.t. the fundamental weights as a row vector.
The return type may not be relied on; we only guarantee that it is a one-dimensional iterable with eltype
ZZRingElem
that can be indexed with integers.
iszero
— Methodiszero(w::WeightLatticeElem) -> Bool
Return whether w
is zero.
is_dominant
— Methodis_dominant(w::WeightLatticeElem) -> Bool
Check if w
is a dominant weight, i.e. if all coefficients are non-negative.
is_fundamental_weight
— Methodis_fundamental_weight(w::WeightLatticeElem) -> Bool
Check if w
is a fundamental weight, i.e. exactly one coefficient is equal to 1 and all others are zero.
See also: is_fundamental_weight_with_index(::WeightLatticeElem)
.
is_fundamental_weight_with_index
— Methodis_fundamental_weight_with_index(w::WeightLatticeElem) -> Bool, Int
Check if w
is a fundamental weight and return this together with the index of the fundamental weight in fundamental_weights(::RootSystem)
.
If w
is not a fundamental weight, the second return value is arbitrary.
See also: is_fundamental_weight(::WeightLatticeElem)
.
Reflections
reflect
— Methodreflect(w::WeightLatticeElem, s::Int) -> WeightLatticeElem
Return the reflection of w
in the hyperplane orthogonal to the s
-th simple root.
See also: reflect!(::WeightLatticeElem, ::Int)
.
reflect!
— Methodreflect!(w::WeightLatticeElem, s::Int) -> WeightLatticeElem
Reflect w
in the hyperplane orthogonal to the s
-th simple root, and return it.
This is a mutating version of reflect(::WeightLatticeElem, ::Int)
.
Conjugate dominant weight
conjugate_dominant_weight
— Methodconjugate_dominant_weight(w::WeightLatticeElem) -> WeightLatticeElem
Return the unique dominant weight conjugate to w
.
See also: conjugate_dominant_weight_with_elem(::WeightLatticeElem)
.
conjugate_dominant_weight_with_elem
— Methodconjugate_dominant_weight_with_elem(w::WeightLatticeElem) -> Tuple{WeightLatticeElem, WeylGroupElem}
Returns the unique dominant weight dom
conjugate to w
and a Weyl group element x
such that w * x == dom
.