Documentation contents

atlas Library · Script File

class_tables.at

The purpose of this module is to group case-by-case definitions of W-class
tables for root data with a specified simple Cartan matrix type, and give a
definion of |class_table@RootDatum|. The latter employs the decomposition of
the Dynkin diagram of a root datum into connected components, in order to
build up, for a general root datum, a |WeylClassTable| built up from those for
appropriate sub-root-data.
Source
atlas-scripts/class_tables.at (687 lines)
Definitions
50
Loads
Loaded by
truncated_induction.at character_tables.at character_tables_reductive.at classical_character_tables.at character_table_F.at character_table_G.at character_table_E6.at character_table_E7.at character_table_E8.at

Definitions in source order

combine

L22combine(RootDatum rd,[WeylClassTable] tables) = WeylClassTable
The following method to combine conjugacy class tables of Weyl groups for root
subdata whose simple roots form a mutually orthogonal partition of the simple
roots of |rd| can be given before doing any of the case-by-case stuff.
Explicitly passing |rd| as argument allows the proper renumbering to be
applied when passing to and from the Weyl group of the full root datum.

also defined in generics.at, character_tables_reductive.at, springer_tables_reductive.at

type A
L53

conjugacy_class_S

L56conjugacy_class_S(Partition P) = WeylElt
get an actual WeylElt from a partition <-> conjugacy class in W
for GL(n)

conjugacy_class_A

L63conjugacy_class_A(RootDatum rd) = (Partition->WeylElt)
for other type A root data like SL(n), we need to work a bit harder

cycle_type_GL

L76cycle_type_GL (WeylElt w) = Partition
The inverse operation, find cycle type of a WeylElt for GL(n). This could be
done using |classic_permutation| and |cycle_type| from combinatorics.at, but
knowing that we have a GL(n) element, we can be a bit more efficient.

unsorted_cycle_type_GL

L80unsorted_cycle_type_GL (WeylElt w) = [int]
sometimes we can avoid sorting the cycles into decreasing length order

class_table_S

L84class_table_S (int n) = WeylClassTable

class_table_A

L93class_table_A (RootDatum rd) = WeylClassTable
types B,C
L104

BC_classes

L106BC_classes (int n) = [Signed_cycles]

class_word_BC

L111class_word_BC (Partition P,Partition Q) = [int]
word representative in types B and C of conjugacy class for partition pair;
the parts of P correspond to are cycles without flip, those of Q with flip

conjugacy_class_B

L131conjugacy_class_B (RootDatum rd) = (BiPartition->WeylElt)
for general type B root data, we need to look up and use the diagram order

class_table_B 2 overloads

L139class_table_B (int n) = WeylClassTable
L149class_table_B (RootDatum rd) = WeylClassTable

conjugacy_class_C

L162conjugacy_class_C (RootDatum rd) = (BiPartition->WeylElt)
for general type C root data, we need to look up and use the diagram order

class_table_C 2 overloads

L171class_table_C (int n) = WeylClassTable
in class table construction we prefer |BiPartition| over |Signed_cycles|
L181class_table_C (RootDatum rd) = WeylClassTable
type D
L193

class_word_D 2 overloads

L197class_word_D(Partition lambda,Partition mu) = [int]
word representative in types D of unsplit conjugacy class for partition pair
L224class_word_D(Partition lambda,bool minus) = [int]
word representative in types D of split conjugacy class for partition pair

class_word

L233class_word(D_class c) = [int]

conjugacy_class_SO

L240conjugacy_class_SO(D_class c) = WeylElt

conjugacy_class_D

L244conjugacy_class_D(RootDatum rd) = (D_class->WeylElt)
for general type D root data, we need to look up and use the diagram order

class_table_D 2 overloads

L252class_table_D(int n) = WeylClassTable
L266class_table_D(RootDatum rd) = WeylClassTable
type G2
L281

G2_class_words

L283! G2_class_words = [[],[1],[0],[0,1,0,1,0,1],[0,1,0,1],[0,1]]

class_table_G 2 overloads

L285class_table_G (RootDatum rd) = WeylClassTable
L304class_table_G (int n) = WeylClassTable
type F4
L308

class_signature_F4

L311class_signature_F4 (WeylElt w) = (Partition,Partition)
orbit sizes on long respectively short roots; these characterise classes

classes_Kondo_F4

L319classes_Kondo_F4 (RootDatum F4) = [WeylElt]
list conjugacy classes in Kondo order; non standard ordering of diagram is
allowed: |map| maps Bourbaki indices to corresponding indices in |rd|

class_table_F 2 overloads

L357class_table_F (RootDatum rd) = WeylClassTable
L376class_table_F (int n) = WeylClassTable
type E6
L380

class_signature_E6

L384class_signature_E6 (WeylElt w) = Partition
orbit sizes on roots; these characterise conjugacy classes for W(E6)

class_table_E6

L388class_table_E6 (RootDatum rd) = WeylClassTable

also in this file at line 410, line 419

standard_datum_E6

L407!standard_datum_E6 = RootDatum
we shall do storage of the class table for one particular E6 root datum

class_table_E6 2 overloads

L410class_table_E6 = (RootDatum->WeylClassTable)
voluntarily override previous definition to memoize for |standard_datum_E6|
L419class_table_E6 () = WeylClassTable

also in this file at line 388

type E7
L422
Unlike other exceptional simple types, the class invariant of the cycle type
of the permutation of the roots defined by a Weyl group element does not
entirely separate conjugacy classes: three pairs of classes are ambiguous.
In each case the type of |Levi_datum(w)| will distinguish the pairs, and
indeed just the number of simple factors of this type will do: one member of
the pair gives a single factor, while the other one has 2,3, or 4 factors.

Since |Levi_datum(w)| is cheaper to compute then say |centralizer_order(w)|,
we use this number of simple factors as additional component in order to
characterise conjugacy classes, useful for looking up arbitrary elements |w|.
L424

E7_signature type

L436
set_type E7_signature = (Partition,int)

class_signature_E7

L437class_signature_E7 (WeylElt w) = E7_signature

leq_E7_signatures

L444leq_E7_signatures (E7_signature(P,m),E7_signature(Q,n)) = bool
comparison of root cycle types first, use second component to disambiguate

class_table_E7

L472class_table_E7 (RootDatum rd) = WeylClassTable
Compared to other types, fast construction of a class table for E7 is a bit
more complicated. We prepare a list |sigs_sorted| of class signatures sorted
by |leq_E7_signatures| (so first lexicographically by the root partition type,
then for those pairs where it is necessary by the second component), in which
we can do binary search for the signature of a |WeylElt|. For the table of
powers of classes, we could use this to look up powers of a class
representative, but with a bit of effort we can manage using signatures only.

For classes with an unambiguous root partition type, their powers will
similarly have unambiguous types, so we can use |cycle_power@(partition,int)|
to get the new root partition type and look it up using |binary_lookup_by|. In
the remaining "ambiguous" classes, the even powers are unambiguous (so looking
up the type suffices), while their odd powers are ambiguous, but retain their
relative position (first or second) among the classes with their root
partition type. (Most of the time these odd powers determine the base class
itself, but for the case where the base class has order 6, the third power has
order 2.) So to compute the |k|-th power of a class, we take the partition for
the class, apply |cycle_power| to get the |k|-th power cycle type, and look up
its first occurrence in |sigs_sorted|. The position found will be the value
returned, unless the base class was the second of an ambiguous pair and |k| is
odd, in which case we add 1 to the position. Below we hard-code the positions
6,17,36 of the second elements of ambiguous pairs; being positions in a sorted
list these should never change, but we include as comment code that makes
explicit the condition by which those numbers were singled out.

also in this file at line 508, line 517

standard_datum_E7

L505!standard_datum_E7 = RootDatum
we shall do storage of the class table for one particular E6 root datum

class_table_E7 2 overloads

L508class_table_E7 = (RootDatum->WeylClassTable)
voluntarily override previous definition to memoize for |standard_datum_E6|
L517class_table_E7 () = WeylClassTable

also in this file at line 472

type E8
L520

class_signature_E8

L524class_signature_E8 (WeylElt w) = Partition
orbit sizes on roots; these characterise conjugacy classes for W(E8)

class_table_E8

L530class_table_E8 (RootDatum rd) = WeylClassTable
the code below hard-codes some tables, presumably for faster construction of
the E8 class table. We provide equivalent code that will reproduce the data.

also in this file at line 627, line 636

standard_datum_E8

L624!standard_datum_E8 = RootDatum
we shall do storage of the class table for one particular E8 root datum

class_table_E8 2 overloads

L627class_table_E8 = (RootDatum->WeylClassTable)
voluntarily override previous definition to memoize for |standard_datum_E8|
L636class_table_E8 () = WeylClassTable

also in this file at line 530

class_table_E

L638class_table_E (int n) = WeylClassTable
The synthesis
L645

simple_class_table

L647simple_class_table (LieType lt) = WeylClassTable

class_table_simple

L661class_table_simple (RootDatum rd,string letter,int n) = WeylClassTable

construct_class_table

L675construct_class_table (RootDatum rd) = WeylClassTable
the name of this function highlights that it does considerable work

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