atlas Library · 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
is_complex(InnerClass ic) = boolwhether root system involution is that of a complex group
also defined in basic.at, complex.at
is_strictly_complex
is_strictly_complex(RealForm G) = boolwhether |G| is a complex group, which implies being connected
also defined in complex.at
swapped_factors
swapped_factors(RealForm G) = [(int,int)]find pairing of factors among |simple_factors(root_datum(G))|
left_factors
left_factors(RealForm G) = [RootDatum]left_roots
left_roots(RealForm G) = matleft_coroots
left_coroots(RealForm G) = matleft_copy
left_copy(RealForm G) = RootDatumleft_root_indices
left_root_indices(RealForm G) = [int]right_factors
right_factors(RealForm G) = [RootDatum]right_roots
right_roots(RealForm G) = matright_coroots
right_coroots(RealForm G) = matright_copy
right_copy(RealForm G) = RootDatumright_root_indices
right_root_indices(RealForm G) = [int]tau
tau(WGraph graph,int i) = [int]tau invariant of node of WGraph
also defined in basic.at, modules.at, hodge_normalize.at
in_tau
in_tau(WGraph graph,int i, int j) = boolalso defined in modules.at, stable.at
intersection
intersection([int] S,[int] T) = [int]intersection of sets of integers
also in this file at line 131; also defined in lattice.at
digraph
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
intersection([int] A,[int] B) = [int]also in this file at line 115; also defined in lattice.at
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
sub_digraph(WGraph graph,[int] S) = WGraphsub_graph
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).
also defined in subgroups.at
links
links(WGraph graph) = [[int]]strong_components 2 overloads
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)]:
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
sub_cells(WCell (nodes,graph,ops),[int] S) = [WCell]left_cells
left_cells(RealForm G, WCell cell) = [WCell]right_cells
right_cells(RealForm G,WCell cell) = [WCell]left_cell_of
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
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
extract_nodes(WGraph g, [int] nodes) = WGraphshow 4 overloads
show(WGraph g) = void----- output commands -----------
show(WCell (vertices,g,))show([WGraph] graphs) = voidshow([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, ratmat.at, Levi_subgroups.at, nilpotent_orbits.at, subgroups.at, poset.at, cyclotomic.at, polynomial.at, character_tables.at, springer_tables.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, weak_packets.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at, exceptional.at, nilpotent_posets.at, lazy_lists.at
short_string
short_string([int] list,int max)convert [int] to string, truncating after max terms
show_short
show_short([WCell] cells) = voidalso defined in weak_packets.at
export
export(WGraph g) = stringwrite a graphviz file typical usage: > file.dot prints(export(g)) in console: dot -Tpdf -ofile.pdf file.dot"
also defined in weak_packets.at
G is complex, st_left is the springer table for the left copy of GL340
Generated from atlas-scripts at commit 648506c (2026-10-13).
Commented-out code, lines 343–345 (2 lines)