Script File
lusztig_cells.at
the Lusztig map goes from triples (O,x,xi) to W^
this file implements an algorithm (conjectural)
to implement this when xi=1
the set obtained for fixed O, running over x,
is a Lusztig (left) cell
Note: this used to involve the dual group but this has been changed,
the dual version will be moved to lusztig_cells_dual.at
sigma_lusztig (used to be sigma_L, the new name is better
sigma_lusztig(O,x) is a of a representation of W(G)
conjecturally it is the same as
Lusztig(O,x,1) as defined in the Orange book
G, O = special orbit for G, x\in A-bar(O)
M=M(A-bar(O)): pairs defined by Lusztig
xi an irreducible representation of Cent_{A-bar(O)}(x)
(O,x,xi) -- Lusztig --> W(G)^
generalization of Springer map
(O,1,1) -> Springer(O) Springer correspondence for G
-> Springer(O)\otimes sign \in W(G)^
-> W(G)^ via the isomorphism W(G)\simeq W(G)
More general case:
(O,x,1) -> L_x=Cent_{G}(x)^0
-> O_L_x (same H)
-> Springer(O_L_x)\otimes sgn in W(L_x)^ NOT the same as Sommers: Springer(dual(O_L_x))
-> sigma_lusztig_x\in W(L_x) via W(L_x)\simeq W(L_x_v)
-> [ no: truncated induction from W(L_x) to W(G)]
-> induce to W(G) and keep the term(s) with the same degree as sigma_lusztig(O,1,1)
Note: this O_L_x might not be special, so Springer(dual(orbit)) \ne Springer(orbit)*sign
Non-trivial \xi not yet consideredDefinitions in source order
sigma_lusztig_verbose
L43
sigma_lusztig_verbose = falsemain algorithm for computing sigma_lusztig, this won't usually be called by the user M is a pseudo-Levi H_M is (the ss element of) an orbit for M exp(2pi i y) is an element of center of M^0 typically (M,H_M,y) are provided by component_datum@ComplexNilpotentL45
arguments: G given group with its coordinate, need this to compute roots of L in G G.ct is needed to compute truncated induction/exchange_long_short L.st is needed to compute Springer(O_L) (L=centralizer of y) O: given orbit on the dual side M: pseudo-Levi in which exp(2\pi iy) is central (this isn't really needed but is helpful information) H_M: ss element for orbit of M y: x=exp(2\pi iy) note that L depends on yL51
modify to work on the group side:
generalization of Springer map
(O,1,1) -> Springer(O) Springer correspondence for G (Springer(0)=sign/Springer(principal)=trivial)
General case:
(O,x,1) -> L_x=Cent_{G}(x)^0
-> O_L_x (same H)
-> Springer(O_L_x) in W(L_x)^
-> induce from W(L_x) to W(G)
-> keep term(s) with generic degree: generic_degree(Springer(O))L64returns [(int,int)] = [(index,multiplicity)] usually [(j,1)]: meaning only character #j appears with multiplicity 1 rarely [(j,1),(k,1)...] : several characters appear with multiplicity 1 occasionally []: empty so far never see mult>0L77
sigma_lusztig_long
L85
sigma_lusztig_long( SpringerTable st_G,ComplexNilpotent O,RootDatum M,vec H_M,ratvec y) = (RootDatum,vec,ratvec,[int])this used to be called _no_dual, now the default
RootDatum G,
returns (M,H_M,y,j_values)
end if y is in weight latticeL195
sigma_lusztig
L197
sigma_lusztig( SpringerTable st_G,ComplexNilpotent O,RootDatum M,vec H_M,ratvec y) = [int]RootDatum G,
lusztig_cell_long
L200
lusztig_cell_long ( SpringerTable st_G,ComplexNilpotent O) = [(RootDatum,vec,ratvec,[int])]RootDatum G,
lusztig_cell
L216
lusztig_cell ( SpringerTable st_G,ComplexNilpotent O) = [[int]]an entry in lusztig_cell_long can be (M,H_M,y,[]) use remove_zeros to eliminate these
RootDatum G,
also in this file at line 423
lusztig_cell_plus
L223
lusztig_cell_plus ( SpringerTable st_G,ComplexNilpotent orbit) = [[int]]include terms coming from deformation
RootDatum G,
lusztig_cells
L246
lusztig_cells ( SpringerTable st_G,[ComplexNilpotent] orbits) = [[ ComplexNilpotent,RootDatum,vec,ratvec,[int] ]]compute lusztig cells, running over given list of nilpotents
returns: array, one entry for each orbit orbit -> array of [M,H_M,y,j_values]
RootDatum G,
lusztig_cells_plus
L261
lusztig_cells_plus ( SpringerTable st_G,[ComplexNilpotent] orbits)RootDatum G,
lusztig_cells 2 overloads
L293
lusztig_cells ( SpringerTable st_G) = [[ ComplexNilpotent,RootDatum,vec,ratvec,[int] ]]RootDatum G,
L297
lusztig_cells (RealForm G) = [[ ComplexNilpotent,RootDatum,vec,ratvec,[int] ]]also in this file at line 246
show_lusztig_cells
L303
show_lusztig_cells ( SpringerTable st_G,[ComplexNilpotent] orbits) = voidshow lusztig cells, running over given list of nilpotents
RootDatum G,
show_lusztig_cells_plus
L369
show_lusztig_cells_plus ( SpringerTable st_G,[ComplexNilpotent] orbits) = voidshow lusztig cells, running over given list of nilpotents
RootDatum G,
lusztig_cell
L423
lusztig_cell (RootDatum G,ComplexNilpotent O) = [[int]]some shorthands which are handy but sometimes inefficient
also in this file at line 216
show_lusztig_cells
L426
show_lusztig_cells ( SpringerTable st_G) = voidRootDatum G,
show_lusztig_cells_plus
L429
show_lusztig_cells_plus (RootDatum G,SpringerTable st_G) = voidshow_lusztig_cells
L432
show_lusztig_cells(RootDatum G) = voidshow_lusztig_cells_plus
L435
show_lusztig_cells_plus (RootDatum G) = voidA_bar 2 overloads
L438
A_bar(SpringerTable st,ComplexNilpotent O) = ([int],[[RootDatum]])L448
A_bar(SpringerTable st) = (ComplexNilpotent ->([int],[[RootDatum]]))show_A_bar 2 overloads
L451
show_A_bar([int] sigmas,[[RootDatum]] pseudolevis) = voidL458
show_A_bar(SpringerTable st,ComplexNilpotent orbit) = voidfour inner products stuff moved to inner_products.atL470
stuff that used to be in lusztig_cells_complete.atL472
Generated from atlas-scripts at commit 7e1b958 (2026-09-17).
Commented-out code, lines 473–567 (94 lines)
these generic versions are no longer needed: {show lusztig cells, running over given list of nilpotents} set show_lusztig_cells_generic\ (RootDatum G,SpringerTable st_G,[ComplexNilpotent] orbits) = void: (new_line ,"Lusztig cells",new_line ,"G=", G.nice_format, new_line , "#orbits: ", #orbits ).prints; let table = [ [string] ]: { concatenation of all [string] values from |data| } for data@i in lusztig_cells(G,st_G,orbits) {[[(M,H_M,y,values)]]} do for (orbit,M,H_M,y,values) in data do if =#values then { even if there are no |values|, build one [string] } [[orbit.diagram.to_string + st_G.special_star(orbit) ,orbit.dim_nilpotent.to_string ,i.to_string ,integrality_datum(orbit).nice_format ,M.nice_format ,H_M.compact_string ,y.compact_string ,centralizer(G,y).nice_format ,"[]" ,"x" ,"x" ,"x" ,"x" ,"x" ]] else { contribute one or more [string] values } for k in values do [orbit.diagram.to_string + st_G.special_star(orbit) ,orbit.dim_nilpotent.to_string ,i.to_string ,integrality_datum(orbit).nice_format ,M.nice_format ,H_M.compact_string ,y.compact_string ,centralizer(G,y).nice_format ,if #values=1 then k.to_string { mention unique |k| } else values.to_string + ":" + k.to_string { mention |k| from list } fi ,if =y then st_G.ct.special(st_G.springer(orbit)).to_string else "" fi ,dimension(st_G.ct,k).to_string ,st_G.ct.degree(k).to_string ,st_G.ct.generic_degree(k).to_string ,st_G.ct.character(k).to_string ] od {for k in values} fi od.## { for (...) in data } od.## {for data in Lusztig_cells } in ( ["O" ,"dim" ,"i" ,"rd_int" ,"M" ,"H_M" ,"v" ,"L" ,"sigma" ,"special" ,"dim" ,"deg" ,"gdeg" ,"char=ct.character(sigma[0])" ] # table ).tabulate set show_lusztig_cells_generic_long\ (RootDatum G,SpringerTable st_G,[ComplexNilpotent] orbits) = void: show_very_long(st_G.ct); show_long(st_G); show_lusztig_cells_generic(G,st_G,orbits) set show_lusztig_cells_generic (RootDatum G,SpringerTable st_G) = void: show_lusztig_cells_generic(G,st_G,G.orbits) set show_lusztig_cells_generic_long (RootDatum G,SpringerTable st_G) = void: show_lusztig_cells_generic_long(G,st_G,G.orbits) set show_lusztig_cells_generic (RootDatum G) = void: let st=Springer_table_generic_degrees(G) in show_lusztig_cells_generic(G,G.Springer_table) set show_lusztig_cells_generic_long (RootDatum G) = void: let st=Springer_table_generic_degrees(G) in show_lusztig_cells_generic_long(G,st)