Script File
sub_cells.at
Suppose G is a RootDatum, and \theta is a algebraic involution of G defining a real form G(R) We say G is a "complex group" if the root system R of G is "complex": meaning R\simeq R_1\times R_1, with \delta exchanging the two factors. Equivalently: <\alpha,\delta(\alpha^vee)>=0 for all (simple) roots alpha Caution: This is slightly weaker than: G\simeq G_1\times G_1 with \delta switching factors. For example SL(2)xSL(2)/<-I,-I>, delta acts by switching factors <- SO(3,1); this is disconnected. is_complex@RealForm tests the condition: <alpha,delta(alpha^vee)>=0 Question: how do we check the stronger condition: G(R) is a connected, complex group. (This allows Spin(3,1)=SL(2,C) and PSO(3,1)=PSL(2,C), but not SO(3,1)\simeq PSL(2,C)\times Z_2 (direct product) Answer: G^\theta\otimes C\simeq G In the usual notation: G=G_1\times G_1, \theta(g,h)=(h,g) G^\theta=G_1-diagonal, (G^\theta)\otimes C=G_1\times G_1=G We call this condition: is_strictly_complex How to test this: (G^\theta)_0 =K_0(G) (identity component) Claim: (G,\theta) is complex <=> a) G(R), equivalently K=G^\theta, is connected b) complexification(K_0(G))\simeq G I believe we can replace b) with b') complexification(K_0(G)) is locally isomorphic to G Furthermore this is probably equivalent to: i) G.is_complex ii) G.components_rank=0 Probably we won't use is_strictly_complex much, so leaving this here
Definitions in source order
is_complex
L53
is_complex(InnerClass ic) = boolwhether root system involution is that of a complex group
also defined in basic.at, complex.at
is_strictly_complex
L58
is_strictly_complex(RealForm G) = boolwhether |G| is a complex group, which implies being connected
also defined in complex.at
swapped_factors
L66
swapped_factors(RealForm G) = [(int,int)]find pairing of factors among |simple_factors(root_datum(G))|
left_factors
L75
left_factors(RealForm G) = [RootDatum]left_roots
L80
left_roots(RealForm G) = matleft_coroots
L83
left_coroots(RealForm G) = matleft_copy
L86
left_copy(RealForm G) = RootDatumleft_root_indices
L89
left_root_indices(RealForm G) = [int]right_factors
L92
right_factors(RealForm G) = [RootDatum]right_roots
L97
right_roots(RealForm G) = matright_coroots
L100
right_coroots(RealForm G) = matright_copy
L103
right_copy(RealForm G) = RootDatumright_root_indices
L106
right_root_indices(RealForm G) = [int]tau
L110
tau(WGraph graph,int i) = [int]tau invariant of node of WGraph
also defined in basic.at, modules.at
in_tau
L111
in_tau(WGraph graph,int i, int j) = boolalso defined in modules.at, stable.at
intersection
L115
intersection([int] S,[int] T) = [int]intersection of sets of integers
also in this file at line 131
digraph
L123
digraph(WGraph graph) = WGraphdirected graph underlying (symmetric) WGraph see atlas-functions.help/W_graph discard edge x->y if tax(x)\subset tau(y) [keep edge x-> y if there is j\in tau(x), j\not\in\tau(y)]
intersection
L131
intersection([int] A,[int] B) = [int]also in this file at line 115
subgraph of a directed graph given by subset S of simple roots keep link x->y if there is j\in S satisfying: j\in \tau(x) j\not\in\tau(y) i.e. S\cap tau(x)\not\subset \tau(y)L134
sub_digraph
L141
sub_digraph(WGraph graph,[int] S) = WGraphsub_graph
L161
sub_graph(WGraph graph,[int] S) = WGraphsub_root_datum is needed for the W_cells to be understood by the underlying "real" character table. But it isn't good enough: if ct=GL(3,R).character_table and C is a left cell from GL(3,C), then ct cannot see C: the root datum of C is SL(3), and that for ct is GL(3).
links
L177
links(WGraph graph) = [[int]]strong_components 2 overloads
L191
strong_components(WGraph g) = [WCell]strong_components(g) returns [([int] nodes,WGraph)]: the ith entry ([int] nodes,WGraph graph) is: nodes is the list of nodes in the strong component (as returned by strong_components(links(g))) graph is the WGraph of these nodes, renumbered [0,1,...,k] so this really is a WGraph, without reference to the original, as in the W_cells command,
[([int],WGraph)]:
L213
strong_components(WCell cell) = [WCell]same as the previous, except that the nodes [0,1,...,n] of g are also labeled by [int] nodes, and we want to keep track of this numbering also this means for each component there are two lists of indices: first one: the nodes of component, in their numbering [0,...,n] of nodes of g second one: the nodes of component, in their numbering from [int] nodes return: (second one,graph)
[([int],WGraph)]:
sub_cells
L219
sub_cells(WCell (nodes,graph,ops),[int] S) = [WCell]left_cells
L222
left_cells(RealForm G, WCell cell) = [WCell]right_cells
L225
right_cells(RealForm G,WCell cell) = [WCell]left_cell_of
L247
left_cell_of(Param p) = WCelldangerous bend p is for a complex group p -> p.integrality_datum is also complex left_cell_of(p) has root_datum a "left" copy of p.integrality_datum on the other hand we're going to be inducing a character of the Weyl group from this root datum to a "left" copy of p.root_datum in other words we need guarantee: ** left_roots of p.integrality_datum is a subsystem of left_roots of p.real_form ** [note: to be precise, left_roots is defined on a (complex) real form, not a root datum to define left_roots of p.integrality_datum (which we're NOT going to do) do this: inner_class(p.integrality_datum,p.x.involution).quasisplit_form] since taking a left copy isn't unique this might fail (see below for example) solution: compute p.integrality_datum choose the simple roots in this which occur in p.real_form.left_copy
left_cell_of_old
L267
left_cell_of_old(Param p) = WCellthis version failed in this example: set G=GL(5,C) set p=parameter(KGB(G,33),[1,0,0,-1,-2,2,2,0,-1,-1]/1,[13,11,6,14,1,-13,-1,-6,-11,-14]/8) associated_variety_ann_res_complex(p) fails, because inner_class(p.integrality_datum,p.x.involution).quasisplit_form.left_copy is not a sub-system of p.real_form.left_copy
extract_nodes
L277
extract_nodes(WGraph g, [int] nodes) = WGraphshow 4 overloads
L288
show(WGraph g) = void----- output commands -----------
L292
show(WCell (vertices,g,))L295
show([WGraph] graphs) = voidL301
show([WCell] cells) = voidalso defined in modules.at, K_Nilpotent.at, good_W_representatives.at, arthur_parameters.at, associated_variety_annihilator.at, geck_generic.at, L_packet.at
short_string
L307
short_string([int] list,int max)convert [int] to string, truncating after max terms
show_short
L315
show_short([WCell] cells) = voidexport
L325
export(WGraph g) = stringwrite a graphviz file typical usage: > file.dot prints(export(g)) in console: dot -Tpdf -ofile.pdf file.dot"
G is complex, st_left is the springer table for the left copy of GL340
Generated from atlas-scripts at commit 7e1b958 (2026-09-17).
Commented-out code, lines 343–345 (2 lines)