Documentation contents

atlas Library · Script File

Weylgroup.at

Functions for computing with Weyl group elements
Source
atlas-scripts/Weylgroup.at (238 lines)
Definitions
46
Loads
Loaded by
projectors_using_character_tables.at parabolics.at induction.at synthetic.at K.at W_K.at finite_dimensional.at tits.at Levi_subgroups.at W_classes.at extended_misc.at

Definitions in source order

sgn

L7sgn (WeylElt w) = int

also defined in misc.at

length

L9length ((RootDatum,mat) rd_M) = int

also defined in K.at, extended.at

lengthens 2 overloads

L12lengthens (RootDatum rd, mat M, int s) = bool
whether multiplication by simple reflection lengthens or shortens M
for right multiplication
L14lengthens (RootDatum rd, int s, mat M) = bool
for left multiplication

also defined in bruhat.at

from_simple

L18from_simple (RootDatum rd, vec alpha) = (WeylElt,vec)
write given root (assumed positive) as |w*beta| with |beta| simple

root_reflection

L29root_reflection (RootDatum rd, vec alpha) = WeylElt

translating to dominant gamma L33

make_dominant_using_roots 2 overloads

L42make_dominant_using_roots (RootDatum rd, ratvec gamma) = (ratvec,vec)
|gamma| is integrally dominant, need to add a sum of roots to it to make it
dominant; this does not change the integral Weyl chamber of |gamma|,
so when acting on parameters it is another parameter with the same types of
roots, generating an isomorphic block
this algorithm is crude: it adds a big enough multiple of |2*rho(rd)|
L48make_dominant_using_roots (RootDatum rd, vec v) = (vec ,vec )
if vector was in $X^*$ it remains so, so return it as |vec|
dom
shift

translate_to_dominant

L55translate_to_dominant (Param p) = (Param ,vec )
assume infinitesimal character |gamma| of |p| is integrally dominant
translate by sum of roots to make it dominant
return (new parameter, sum of roots)
dom
shift

also defined in extended_misc.at

integrally dominant functions L60

integrally_from_dominant

L62integrally_from_dominant ((RootDatum,ratvec)(,v):rd_v) = (WeylElt,ratvec)

integrally_dominant

L64integrally_dominant ((RootDatum,ratvec)(,v):rd_v) = ratvec
a W-invariant form on X^* (or its rational span)
L67

invariant_form_matrix

L79invariant_form_matrix (RootDatum rd) = mat
Each coroot alpha^v defines defines a rank-1 bilinear form on X^* by
multiplying its evaluations at the pair of argument weights. Since alpha^v
and -\alpha^v in this way give the same form, one can obtain a W-invariant
biliear form by summing these rank-1 forms over all positive coroots; the
radical of this form is the coradical of the root datum. In formula
$$
  (\mu,\nu)=\sum_{\alpha^v\in\Delta^{\vee+}} <\alpha^v,\mu><\alpha^v\nu>
$$
The summation is conveniently done by multiplying a wide matrix M by ^M

invariant_form

L80invariant_form (RootDatum rd) = (ratvec,ratvec->rat)

nondegenerate_invariant_form

L83nondegenerate_invariant_form (RootDatum rd) = (ratvec,ratvec->rat)

co_invariant_form_matrix

L88co_invariant_form_matrix (RootDatum rd) = mat
a W-invariant form on X_*\otimes Q; not directly related to invariant_form

co_invariant_form

L89co_invariant_form (RootDatum rd) = (ratvec,ratvec->rat)
elliptic elements of W: their reflection action has no fixed points
L93

is_elliptic

L95is_elliptic (WeylElt w) = bool
|eigen_lattice| empty means no eigenvalue 1

is_relatively_elliptic

L100is_relatively_elliptic (WeylElt w) = bool
a nonzero central torus makes it impossible to be elliptic; therefore a more
practical condition, the weaker |is_relatively_ellptic|, ignores that torus

from_no_Cminus

L107from_no_Cminus (KGBElt x) = (WeylElt,KGBElt)
use complex cross actions to find a KGBElt x0 in a fiber with no C- roots
by descending through complex descents until none are left
return (w,x0) where x=cross(w,x0)

also in this file at line 119; also defined in Levi_subgroups.at

from_no_Cplus

L113from_no_Cplus (KGBElt x) = (WeylElt,KGBElt)
the same, but ascending through complex descents until no C+ roots are left

also in this file at line 123; also defined in Levi_subgroups.at

from_no_Cminus

L119from_no_Cminus (Param p) = (WeylElt, Param)
the same for parameters

also in this file at line 107; also defined in Levi_subgroups.at

from_no_Cplus

L123from_no_Cplus (Param p) = (WeylElt, Param)

also in this file at line 113; also defined in Levi_subgroups.at

from_dlambda_dom

L127from_dlambda_dom(Param p) = (WeylElt, Param)

to_no_Cminus

L132to_no_Cminus (KGBElt x) = KGBElt

also in this file at line 134; also defined in K.at

to_no_Cplus

L133to_no_Cplus (KGBElt x) = KGBElt

also in this file at line 135

to_no_Cminus

L134to_no_Cminus (Param p) = Param

also in this file at line 132; also defined in K.at

to_no_Cplus

L135to_no_Cplus (Param p) = Param

also in this file at line 133

* 2 overloads

L138*(mat M,RootDatum rd) = RootDatum
action of invertible matrix on RootDatum
L143*(WeylElt w,RootDatum rd) = RootDatum

also defined in basic.at, extParamPol.at, complex.at, modules.at, hodge_tensor.at, tits_centralizer.at, stable.at, synthetic.at, group_operations.at, ratmat.at, tits.at, twisted_root_datum.at, cyclotomic.at, polynomial.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, hodge_functions.at, sparse.at, lazy_lists.at

The magic formula below for the order of the Weyl group must handle the simple
factors separately: while all the ingredients are defined for arbitrary Lie
types and root data, the factor |factorial(rank)| comes from the volume
formula for a simplex, applicable only when the fundamental alcove is one.
Labels could also be for simple coroots, as only their product matters here.
L145

order_W_simple 2 overloads

L152order_W_simple ((string,int)(,rank):pair) = int
L156order_W_simple (LieType lt) = int

order_W 2 overloads

L162order_W (LieType lt) = int
L164order_W (RootDatum rd) = int

also defined in character_tables.at

factors

L167factors (WeylElt w) = [WeylElt]
factor w into elements for subgroups of W(rd) for simple factors of rd

also defined in basic.at

factor_strong

L183factor_strong (WeylElt w) = [WeylElt]
w in rd.W, factor_strong(w)=[w_1,...,w_n]:
w_i is in very_simple_factor(rd)[i]
these are distinct root data and not directly related

char_poly

L196char_poly (WeylElt w) = vec

also defined in basic.at

Coxeter element
L198

coxeter_element

L201coxeter_element (RootDatum rd) = WeylElt
Coxeter element of W

coxeter_number_simple

L204coxeter_number_simple (RootDatum rd) = int
Coxeter number

coxeter_number

L208coxeter_number (RootDatum rd) = int

coxeter_torus_element

L212coxeter_torus_element (RootDatum rd) = ratvec
torus element representing the Coxeter Weyl group element

lift_sc

L216lift_sc(WeylElt w)
lift Weyl group element to simply connected group
Weyl group element of a KGB element
L218

w 2 overloads

L220w(KGBElt x)
L221w(Param p)

also defined in complex.at

need invariant_form to (easily) determine if a root is short/long
L223

is_long

L225is_long(RootDatum rd,vec alpha) = bool

is_short

L232is_short(RootDatum rd,vec alpha) = bool

root_lengths

L234root_lengths(RootDatum rd) = void

Generated from atlas-scripts at commit 648506c (2026-10-13).