Documentation contents

Script File

geck_generic.at

Source
atlas-scripts/geck_generic.at (480 lines)
Definitions
48
Loads
Loaded by
lusztig_cells.at special_rep.at

Definitions in source order

set_generic_degree 2 overloads

L7set_generic_degree(CharacterTable ct,int i,(->int) f,bool t) = int
L8set_generic_degree(CharacterTable ct) = (int i,(->int) f,bool t)

has_generic_degree

L9has_generic_degree(CharacterTable ct) = (int i)
computing generic degree
reference; Geck, Some Applications of Chevie to the theory of algebraic groups
L10

generic degrees L13

update_generic_degrees

L30update_generic_degrees(CharacterTable ct,[WCell] cells) = void
set generic_degrees(CharacterTable ct,[WCell] cells) = [int]:
   let Wct = ct.class_table in
( ct.n_irreps { size of degree lists being summed }
# for cell in cells
  do assert(Wct.root_datum=cell.root_datum,"Root datum ismatch in cell")
  ;  let cell_char = [int]: ct.decompose(cell_character(Wct,cell))
     then d() = ct.degree(special_irreducible(ct,cell_char))
  in for i:ct.n_irreps
     do if =cell_char[i] then 0 else ct.set_generic_degree(i,d,true) fi
     od
   od
).sum
if only side-effect of |generic_degrees| is desired, have name reflect that

also in this file at line 37, line 40, line 41, line 42

generic_degrees

L33generic_degrees(CharacterTable ct,[Param] parameters) = [int]

also in this file at line 46

update_generic_degrees 4 overloads

L37update_generic_degrees(CharacterTable ct,RealForm G) = void
L40update_generic_degrees(CharacterTable ct) = (RealForm->void)
L41update_generic_degrees(SpringerTable st,RealForm G) = void
L42update_generic_degrees(SpringerTable st) = (RealForm->void)

also in this file at line 30

versions with cell_size_cutoff L44

generic_degrees

L46generic_degrees(CharacterTable ct,[WCell] cells, int cell_size_cutoff) = [int]

also in this file at line 33

show_degrees

L60show_degrees(CharacterTable ct) = void

gg_verbose

L79gg_verbose = false
given G and Levi subgroups L,M of G
 satisfying: L is G-conjugate to a Levi subgroup of M
 find the Levi subgroup L' of M which is G-conjugate to L
application:
G, tables=[SpringerTable] for Levi subgroups of G
L,G in list of Levi subgroups of G
have the Springer tables tables[i] for M, tables[j] for L
Can induce from W(L) to W(G)
Want to induce from [conjugate of] W(L) to W(M)
need to find L'\subset M which is G-conjugate to L
L82

equal_subgroups

L93equal_subgroups(RootDatum L,RootDatum M) = bool

find_Levi

L96find_Levi(RootDatum G,RootDatum M,RootDatum L) = (RootDatum,WeylElt)

conjugacy_classes_reflections_simple

L106conjugacy_classes_reflections_simple(RootDatum rd) = [WeylElt]
representatives of conjugacy classes of reflections:
one simple reflection of each root length

conjugacy_classes_reflections 2 overloads

L114conjugacy_classes_reflections(RootDatum rd) = [WeylElt]
1 or 2 for each simple factor
L119conjugacy_classes_reflections(WeylClassTable wct) = [int]
if you have the WeylClassTable this is better:

omega_L

L123omega_L(CharacterTable ct, int j,(WeylElt->int) weight_function) = int
function defined in Geck just before Definition 4.1

default_weight_function

L130default_weight_function = (WeylElt->int)

max_standard_Levi_conjugacy_representatives

L133max_standard_Levi_conjugacy_representatives (RootDatum rd) = [ [int] ]
adapted from standard_Levi_conjugacy_representatives in Levi_subgroups.at

max_Levi_subgroups

L148max_Levi_subgroups(RootDatum rd) = [RootDatum]

lookup_character_table_old

L153lookup_character_table_old(RootDatum G,[CharacterTable] tables) = (int,ratmat)
find character table for given G in given list

lookup_character_table

L157lookup_character_table(RootDatum M,[CharacterTable] tables) = (int,WeylElt)

a_prime

L167a_prime(RootDatum G,[CharacterTable] tables, int table_index, int character_index) = int
to compute a'_E (of Geck), denoted a_prime here, you need to know
all of the functions a_E for proper Levis; this is assumed to
be known by induction

update_one_table_geck

L196update_one_table_geck ([CharacterTable] tables, int table_index) = void
given a list of tables, where tables for proper Levis are found to the right
update a single table, assuming complete tables are known for all proper Levis
use the Geck algorithm for all (unfilled) entries of the specified table

show

L225show([CharacterTable] tables) = void

also defined in modules.at, K_Nilpotent.at, good_W_representatives.at, arthur_parameters.at, sub_cells.at, associated_variety_annihilator.at, L_packet.at

has_all_generic_degrees

L228has_all_generic_degrees(CharacterTable ct) = bool

update_one_table_mixed_strategy

L234update_one_table_mixed_strategy([CharacterTable] tables, int table_index, int cell_size_cutoff) = void
given a list of tables, where tables for proper Levis are found to the right
update a single table, assuming complete tables are known for all proper Levis
use cell algorithm up to given size, then Geck

update_generic_degrees_geck_long 2 overloads

L265rec_fun update_generic_degrees_geck_long([CharacterTable] tables) = void
update all tables, reading from the right, assuming all the Levis
of table at index j are found at index k>j
modifies the given list of tables, the return value is void
L275rec_fun update_generic_degrees_geck_long([CharacterTable] tables, int cell_size_cutoff) = void
update all tables, reading from the right, assuming all the Levis
of table at index j are found at index k>j
use the cell algorithm up to given cutoff, and then Geck

update_generic_degrees_geck

L283rec_fun update_generic_degrees_geck([CharacterTable] tables) = CharacterTable
just return the updated single table

also in this file at line 473

all_levi_tables

L289all_levi_tables(RootDatum G)
this is the precomputation step:
compute the character tables of all Levis
no including generic degrees

all_levi_tables_plus

L296all_levi_tables_plus(RootDatum G)
in this version precompute generic degrees using the
*cell* computation, which (depending on the rank) may be
faster

set_generic_degrees_geck_long

L303set_generic_degrees_geck_long(RootDatum G) = [CharacterTable]
compute character tables of all Levis, then populate
their generic degrees inductively from the right

set_generic_degrees_geck

L306set_generic_degrees_geck(RootDatum G) = CharacterTable

set_generic_degrees_plus

L311set_generic_degrees_plus(RootDatum G) = [CharacterTable]
compute character tables of all Levis
then compute all generic degrees using cell calculation
then use the Geck algorithm for the remaining ones

set_generic_degrees

L314set_generic_degrees(RootDatum G) = CharacterTable

update_generic_degrees_using_sign 2 overloads

L319update_generic_degrees_using_sign(CharacterTable ct) = void
Geck gives a formula (using omega_L) for generic_degree(sigma\otimes
sign) in terms of generic_degree(sigma). This can be used to fill
in some missing values.
L330update_generic_degrees_using_sign([CharacterTable] tables) = void

set_generic_degrees_2

L333set_generic_degrees_2(RootDatum G) = [CharacterTable]

set_generic_degrees_3

L337set_generic_degrees_3(RootDatum G) = [CharacterTable]

character_table_generic_degrees

L347character_table_generic_degrees(RootDatum G)

Springer_table_generic_degrees

L350Springer_table_generic_degrees(RootDatum G)

test_geck_generic_degrees

L445test_geck_generic_degrees(CharacterTable ct, [int] computed_degrees) = bool
set rec_fun geck_generic_degrees([CharacterTable] tables)=[CharacterTables]:
let table_index=last(for i:#tables do tables[i].generic_degrees[0] = -1 od) in
if table_index=-1 then [tables] else
 let table=tables[index_table] then
  H=table.root_datum then
  for class_index:table.n_classes do
  let a_prime=a_prime(H,tables,table_index,class_index)

  {def of a_prime_E:}
  let  a_prime_E(RootDatum L,CharacterTable ct_L,int index_L)=int:
  let value=
  if gg_verbose then prints("++++++++++++++++++++",new_line,"a_prime_E:",new_line,"L=", L) fi;
  if L.is_abelian then 1 else
   max(
   ##(##for M in  proper_Levi_subgroups(L) do
    let (index_M,P_M)=lookup_character_table(M,tables) then
    ct_M=tables[index_M] in
    for char_M@t in  ct_M.characters do
     let ind=ct_L.decompose(induce_character(M,L,ct_M,ct_L,char_M)) in
     let ()=if gg_verbose then prints("ind: ", ind, "t=",t) fi in
     if ind[index_L]>0 then [a_E(M,ct_M,t)] else [] fi
    od
   od))
  fi
  in if gg_verbose then prints("a_prime_E: ", value) fi;value

  then A=a_prime_E(H,ct_H,index_H),
  B=a_prime_E(H,ct_H,ct_H.tensor_sign_index(index_H)) then
  {()= prints("(1)H=",H,"  A=", A, new_line, "B=", B) then
  ()=prints("(2)H=",H,"   tensor sign: ", ct_H.tensor_sign_index(index_H)) then}
  max=max(A,B- omega_L(ct_H,index_H,default_weight_function@WeylElt))
  in
  if gg_verbose then
   prints("max=", max, " A=",A, " B=", B, new_line,"(4)H=",H,new_line," omega_L=", omega_L(ct_H,index_H,default_weight_function@WeylElt)) fi;
  max



set geck_generic_degree(RootDatum rd, CharacterTable ct,int index_rd)=
let counter=0 in
let rec_fun a_E(RootDatum H,CharacterTable ct_H, int index_H)=int:
 if gg_verbose then prints("-----------------",counter,"---------",new_line,"a_E: H=", H) fi;
 counter:=counter+1;
 if H.is_abelian then if gg_verbose then prints("H is abelian: H=",H) fi;0
 else

  {def of a_prime_E:}
  let  a_prime_E(RootDatum L,CharacterTable ct_L,int index_L)=int:
  let value=
  if gg_verbose then prints("++++++++++++++++++++",new_line,"a_prime_E:",new_line,"L=", L) fi;
  if L.is_abelian then 1 else
   max(
   ##(##for M in  max_Levi_subgroups(L) do
    let ct_M=M.character_table in
    for char_M@t in  ct_M.characters do
     let ind=ct_L.decompose(induce_character(M,L,ct_M,ct_L,char_M)) in
     let ()=if gg_verbose then prints("ind: ", ind, "t=",t) fi in
     if ind[index_L]>0 then [a_E(M,ct_M,t)] else [] fi
    od
   od))
  fi
  in if gg_verbose then prints("a_prime_E: ", value) fi;value
  {end if L.is_abelian}  {this is now the integer value of a_prime_E(...)}
  {end def function a_prime_E}
  then A=a_prime_E(H,ct_H,index_H),
  B=a_prime_E(H,ct_H,ct_H.tensor_sign_index(index_H)) then
  {()= prints("(1)H=",H,"  A=", A, new_line, "B=", B) then
  ()=prints("(2)H=",H,"   tensor sign: ", ct_H.tensor_sign_index(index_H)) then}
  max=max(A,B- omega_L(ct_H,index_H,default_weight_function@WeylElt))
  in
  if gg_verbose then
   prints("max=", max, " A=",A, " B=", B, new_line,"(4)H=",H,new_line," omega_L=", omega_L(ct_H,index_H,default_weight_function@WeylElt)) fi;
  max

 fi {end if H.is_abelian}
 {end def of recursive function a_E}
in
a_E(rd,ct,index_rd)


set geck_generic_degree(RootDatum rd,int i)=int:geck_generic_degree(rd,rd.character_table,i)
set geck_generic_degrees(RootDatum rd,CharacterTable ct)=[int]:
let ()=prints("number of characters: ", ct.n_classes) in
for i:ct.n_classes do
if gg_verbose then prints(new_line,"================================",new_line,"i=",i,new_line) fi;
let g=geck_generic_degree(rd,ct,i)  in
prints("i=",i, " dim=", dimension(ct,i),": g=",g);g od

set geck_generic_degrees(RootDatum rd)=[int]:geck_generic_degrees(rd,rd.character_table)

test_generic_degrees 2 overloads

L450test_generic_degrees(CharacterTable ct1,CharacterTable ct2)
L460test_generic_degrees(RealForm G,CharacterTable ct)
Commented-out code, lines 463–471 (7 lines)
set test_generic_degrees(RealForm G)=
let
 ct=character_table(G) then
 ct1=character_table(G) then
 ()=set_generic_degrees(ct) then
 ()=update_generic_degrees(ct1,G) in
 test_generic_degrees(ct,ct1)

update_generic_degrees_geck

L473update_generic_degrees_geck([SpringerTable] springer_tables) = void

also in this file at line 283

all_Levi_Springer_tables

L478all_Levi_Springer_tables(RootDatum G)

Generated from atlas-scripts at commit 7e1b958 (2026-09-17).