atlas Library · Script File
parabolics.at
See "Parabolic Subgroups and Induction" on the Atlas web site.
Fix a subset S of the simple roots, defining the complex standard
parabolic $P_S$ of type S. We define a set KGP(S) (a
quotient of KGB) such that (roughly) KGP(S) <-> $K\backslash G/P_S$.
More precisely, for any KGB element $x$, and $\xi$ with $p(\xi)=x$, the set
KGP(S) is canonically in bijection with $K_{\xi}\backslash G/P_S$; i.e.,
$K_{\xi}$ conjugacy classes of parabolics of type S.
S defines an equivalence relation on KGB of reachability through Cayley
transforms (in either direction) and (complex) cross actions in S; the classes
of this equivalence are in bijection with $K\backslash G/P_S$, so define the
quotient to be KGP.
Data: ([int],KGBElt)=(S,x) where S lists the indices of a subset of the
simple roots of root_datum(x)
Equivalence: (S,x)=(S',y) if these correspond to the same K orbit on $G/P_S$,
which means:
real_form(x)=real_form(y), S=S' (i.e. same complex parabolic), and
x=y in the equivalence defined by S.
In particular, given (S,x), taking x itself for the strong real form,
(S,x) goes to the $K_x$-conjugacy class of the standard parabolic $P_S$.
The data type is KGPElt or Parabolic (synonyms).
Given (S,x),
write $[x_1,...,x_n]$ for the S-equivalence class of $x\subset$ KGB.
The last element $x_n$ is maximal, and is uniquely determined.
This orbit of K on $G/P_S$ is closed <=> $x_1$ is closed in KGB.
ComplexParabolic data type:
(RootDatum rd,[int] S) <-> G-conjugacy class of standard parabolic with
Levi factor given by subset S of simple roots
More topics addressed in this file:
parabolics with $\theta$-stable Levi factor;
$\theta$-stable parabolics;
real parabolics.Definitions in source order
KGPElt, ComplexParabolic type
set_type
[
{. Data type for a K_orbit on G/P_S, equivalently a K-conjugacy class of
parabolics of type S, where S is a list of simple root indices. .}
KGPElt = ([int] S, KGBElt x)
,
{. Data type for a complex standard parabolic subgroup .}
ComplexParabolic = (RootDatum root_datum,[int] S)
]Fields: S, x, root_datum, S
Parabolic type
set_type Parabolic = KGPElt
Data type for a K_orbit on G/P_S (synonym for KGPElt).
leq_by_number
leq_by_number : (KGBElt x,KGBElt y) boolmin
min = ([KGBElt]->KGBElt)choose from a nonempty list of KGB elements one with the smallest index.
also defined in basic.at
max
max = ([KGBElt]->KGBElt)choose from a nonempty list of KGB elements one with the greatest number.
also defined in basic.at
root_datum
root_datum (KGPElt(,x)) = RootDatumthe root datum of the RealForm G of a KGP element.
also defined in basic.at, W_reps.at, K_Nilpotent.at, sommers.at, K.at, nilpotent_orbits.at, W_classes.at, extended_misc.at, character_tables.at, springer_tables.at, disconnected.at, cyclotomic_Lie_algebra.at, bracket.at, exceptional.at
real_form
real_form (KGPElt(,x)) = RealFormthe RealForm G of a KGP element.
also defined in basic.at, weak_packets_precomputed_cell_traces.at, K.at, nilpotent_orbits.at, hodgeParamLaurentPol.at, hodgeParamPol.at
ascents
ascents ([int] S, KGBElt x) = [KGBElt]ascents of |x| by generators in |S|; there may be duplicates.
down_neighbors
down_neighbors ([int] S,KGBElt x) = [KGBElt]all descents of |x| by generators in |S|; there may be duplicates.
is_maximal_for
is_maximal_for ([int] S,KGBElt x) = booldecide whether x is maximal in the partial order defined by S.
whether |#ascents(S,x)=0|
maxima_for
maxima_for ([int] S,RealForm G) = [KGBElt]list maximal KGB elements in the partial order defined by S.
maximal
maximal ([int] S, KGBElt x) = KGBElt(Unique) maximal element in equivalence class of x.
x_min
x_min (KGPElt(S,x)) = KGBElta minimal KGB element from an equivalence class defined by S (unlike |maximal(S,x)|, it is not unique).
KGP_elt_for
KGP_elt_for (KGPElt S_x) = KGPEltbuild KGBElt (with canonical representative) from |S| and |x|.
alternatively: |S_x.x:=maximal(S_x); S_x|
representative
representative = (KGPElt->KGBElt)(Unique) maximal KGB element representing a KGP element.
=
= (KGPElt (S,x):S_x,KGPElt (T,y):T_y) = boolequality of KGP elements: whether they share a K-orbit of parabolics.
From the earlier documentation
Equality of KGP elements: (S,x)=(T,y) if these give the same K-orbit of parabolics.
also defined in basic.at, combinatorics.at, modules.at, synthetic.at, hash.at, tits.at, K_highest_weights.at, nilpotent_orbits.at, cyclotomic.at, polynomial.at, W_reps_type_BC.at, hodgeParamLaurentPol.at, hodgeParamPol.at, laurentPolynomial.at, extended.at, disconnected.at, cyclotomic_Lie_algebra.at, cyclotomicMat.at, bracket.at
equivalence_class_of
equivalence_class_of (KGPElt(S,x):S_x) = [KGBElt]the equivalence class of a KGB element in partial order defined by S.
is_in_class_of
is_in_class_of (KGBElt x, KGPElt(S,):P) = boolKGP
KGP (RealForm G,[int] S) = [KGPElt]the set of KGP elements associated to a RealForm and a set of simple roots S; KGP(G,S) is in bijection with $K\backslash G/P_S$.
also in this file at line 394
KGP_numbers
KGP_numbers (RealForm G,[int] S) = [int]just the index numbers (maximal x) of KGP(G,S).
is_open
is_open (KGPElt y) = boolwhether y in $K\backslash G/P_S$ is open (maximal(y) is final in KGB).
From the earlier documentation
Test whether y in $K\backslash G/P_S$ is open: <=> last element of y is last element of KGB.
is_closed
is_closed (KGPElt P) = booltest whether y in $K\backslash G/P_S$ is closed (length(first element)=0).
KGP_elt
KGP_elt (ratvec lambda,KGBElt x) = KGPEltparabolic determined by (the stabilizer in W of) a weight lambda.
complex_parabolic
complex_parabolic (Parabolic(S,x)) = ComplexParabolicthe complex parabolic underlying P=(S,x).
also in this file at line 174
Complex Levi subgroupsL168
complex_Levi
complex_Levi = (ComplexParabolic->RootDatum)defined in basic.at
From the earlier documentation (documented there as complex_Levi:RootDatum rd, (int->bool) select->RootDatum)
Auxiliary function
also defined in nilpotent_orbits.at
complex_parabolic
complex_parabolic ((RootDatum,RootDatum) (rd,):pair) = ComplexParabolicalso in this file at line 165
parabolics
parabolics (RootDatum rd) = [ComplexParabolic]all (complex) parabolics of a RootDatum
also in this file at line 398
Levi_simple_roots
Levi_simple_roots (ComplexParabolic(rd,S)) = matas columns
Levi_simple_coroots
Levi_simple_coroots (ComplexParabolic(rd,S)) = matas rows
standard_Levi_coweight
standard_Levi_coweight (ComplexParabolic(rd,S)) = vecA coweight for which the Levi roots are precisely those on which it vanishes For standard Levis take a sum of |fundamental_coweight|s, which is fast
standard_Levi_weight
standard_Levi_weight (ComplexParabolic(rd,S)) = vecweight vanishing on all coroots of the Levi, positive on other poscoroots
Levi_coweight
Levi_coweight ((RootDatum,[int]) (rd,S):cp) = vecThis can be generalised to work for any Levi subgroup, by solving a system of linear equations, after using |maximize_Levi| to see |S| as part of a maximal (non standard) Levi. Alternatively, we could have used the functions above in combination with |from_standard_Levi| from Levi_subgroups.at Note that we write (RootDatum,[int]) rather than |ComplexParabolic|, as using the latter implies |S| a subset of simple roots, which is not assumed here.
Levi_weight
Levi_weight ((RootDatum,[int]) (rd,S):cp) = veca weight for which the Levi coroots are precisely those that vanish on it
is_stable
is_stable (mat theta, ComplexParabolic cp) = boolwhether an automorphism |theta| of X^* stabilises the complex parabolic
also defined in L_packet.at
has_theta_stable_Levi
has_theta_stable_Levi (Parabolic(,x):real_para) = boolTest if a complex Levi defined by a set of simple roots $S$ is $\theta_x$-stable;
Levi
Levi (Parabolic(S,x):P) = RealFormMake a real Levi factor from P=(S,x); the complex Levi of S must be theta-stable.
also defined in exceptional.at
parabolic_is_theta_stable
parabolic_is_theta_stable (Parabolic P) = boolTest whether parabolic P=(S,x) is theta-stable: this means that P is closed, and the complex Levi factor L is theta-stable.
parabolic_is_real
parabolic_is_real(Parabolic(S,x):P) = boolTest if parabolic |P=(S,x)| is real: this means that its Levi |L| is theta-stable, that |P| is open, and that outside |S| there are no imaginary compact simple roots for |maximal(S,x)|.
unipotent radical of P L254
see K.pdf, Section 4
P=(S,x)
if x=x_0:=KGB(G,0) then P is the standard parabolic P_S with simple roots S,
and nilrad(P) is contained in the basic Borel
in general P=(S,x) -> gP_Sg^{-1} where gxg^{-1}=x_0
if the G-orbit of P is closed, equivalently if L contains the fundamental
Cartan, then we can replace x with x=x_min(P) which is on the fundamental
Cartan and then find w so that w*x=x_0L255nilrad
nilrad (ComplexParabolic(rd,):P) = matPositive coroots in the nilradical u of P (L must be theta-stable).
columns are poscoroots
also in this file at line 275
nilrad_roots
nilrad_roots (ComplexParabolic(rd,):P) = matPositive roots in the nilradical u of P (L must be theta-stable).
columns are posroots
also in this file at line 276
nilrad
nilrad (Parabolic P) = matalso in this file at line 266
nilrad_roots
nilrad_roots (Parabolic P) = matalso in this file at line 271
rho_u 2 overloads
rho_u (ComplexParabolic P) = ratvecHalf sum of positive roots not in the Levi (L must be theta-stable).
P.root_datum.rho-complex_Levi.rho
rho_u (Parabolic P) = ratvecHalf sum of positive roots not in the Levi (L must be theta-stable).
rho_l 2 overloads
rho_l (ComplexParabolic(rd,):P) = ratvecHalf sum of positive roots in the Levi (L must be theta-stable).
rho(Levi(P))
rho_l (Parabolic P) = ratvecalternative method to define a parabolic L292
it is convenient to be able to define a parabolic in terms of a semisimple element either in \h or \h^*L293
zero_simple_coroots
zero_simple_coroots (RootDatum rd, vec lambda) = [int]Simple coroots on which weight lambda (in $\mathfrak h^*$) is zero.
parabolic_by_wt
parabolic_by_wt (ratvec lambda,KGBElt x) = ParabolicParabolic defined by weight lambda
parabolic_by_wt_verbose
parabolic_by_wt_verbose ((ratvec,KGBElt) lambda_x) = ParabolicParabolic defined by weight lambda; message whether parabolic is real or theta-stable.
theta_stable_parabolic_by_wt
theta_stable_parabolic_by_wt (ratvec lambda,KGBElt x) = ParabolicTheta-stable parabolic defined by weight lambda.
real_parabolic_by_wt
real_parabolic_by_wt (ratvec lambda,KGBElt x) = ParabolicReal parabolic defined by weight lambda.
Levi_by_wt
Levi_by_wt ((ratvec,KGBElt) lambda_x) = RealFormLevi factor of parabolic defined by weight lambda.
theta_stable_Levi_by_wt
theta_stable_Levi_by_wt ((ratvec,KGBElt) lambda_x) = RealFormLevi factor of theta-stable parabolic defined by weight lambda.
real_Levi_by_wt
real_Levi_by_wt ((ratvec,KGBElt) lambda_x) = RealFormLevi factor of real parabolic defined by weight lambda.
nilrad_by_wt
nilrad_by_wt ((ratvec,KGBElt) lambda_x) = matPositive coroots in nilradical of P defined by weight lambda (if L theta-stable).
nilrad_roots_by_wt
nilrad_roots_by_wt ((ratvec,KGBElt) lambda_x) = matPositive roots in nilradical of P defined by weight lambda (if L theta-stable).
rho_u_by_wt
rho_u_by_wt ((ratvec,KGBElt) lambda_x) = ratvecHalf sum of positive roots in nilradical of P defined by weight lambda (if L theta-stable).
zero_simple_roots
zero_simple_roots (RootDatum rd, vec cowt) = [int]Simple roots which are zero on coweight H (in $\mathfrak h$).
parabolic_by_cwt
parabolic_by_cwt (ratvec H,KGBElt x) = ParabolicParabolic defined by coweight H
parabolic_by_cwt_verbose
parabolic_by_cwt_verbose ((ratvec,KGBElt) H_x) = ParabolicParabolic defined by coweight H; message whether parabolic is real or theta-stable.
Levi_by_cwt
Levi_by_cwt ((ratvec,KGBElt) H_x) = RealFormLevi factor of parabolic defined by coweight H.
nilrad_by_cwt
nilrad_by_cwt ((ratvec,KGBElt) H_x) = matPositive coroots in nilradical of P defined by coweight H (if L theta-stable).
nilrad_roots_by_cwt
nilrad_roots_by_cwt ((ratvec,KGBElt) H_x) = matPositive roots in nilradical of P defined by coweight H (if L theta-stable).
rho_u_by_cwt
rho_u_by_cwt ((ratvec,KGBElt) H_x) = ratvecHalf sum of roots in nilradical of P defined by coweight H (if L theta-stable).
rho_Levi_by_cwt
rho_Levi_by_cwt ((ratvec,KGBElt) H_x) = ratvec$\rho(L)$ for Levi of P defined by coweight H (if L theta-stable).
auxiliary routines L391
KGP
KGP (RealForm G,ComplexParabolic (,S)) = [KGPElt]List of K-conjugacy classes of given ComplexParabolic (as KGP elts).
also in this file at line 144
parabolics
parabolics = (RealForm,ComplexParabolic->[Parabolic])This is identical to the previous function, since |Parabolic| is |KGBElt|
List K-conjugacy classes of given ComplexParabolic (as Parabolics).
also in this file at line 178
all_parabolics
all_parabolics (RealForm G) = [Parabolic]theta_stable_parabolics 2 overloads
theta_stable_parabolics (RealForm G,ComplexParabolic(,S)) = [Parabolic]List K-conjugacy classes of given ComplexParabolic that are theta-stable.
theta_stable_parabolics (RealForm G) = [Parabolic]List all theta-stable parabolics for G.
theta_stable_parabolics_of_type
theta_stable_parabolics_of_type (RealForm G,[int] S) = [Parabolic]List all theta-stable parabolics of G, of type S.
all_rel_split_theta_stable_parabolics
all_rel_split_theta_stable_parabolics (RealForm G) = [Parabolic]List all theta-stable parabolics of G with relatively split L.
all_real_parabolics
all_real_parabolics (RealForm G) = [Parabolic]parabolics_with_theta_stable_Levi
parabolics_with_theta_stable_Levi (RealForm G,[int] S) = [Parabolic]all_parabolics_with_theta_stable_Levi
all_parabolics_with_theta_stable_Levi (RealForm G) = [Parabolic]classes_for_real_parabolics
classes_for_real_parabolics (RealForm G) = [[int]]Find equivalence classes of non-imaginary simple roots w.r.t. max. x, for alpha \cong alpha' if (1-theta)(alpha)=(1-theta(alpha')
classes_for_theta_parabolics
classes_for_theta_parabolics (RealForm G) = [[int]]Find equivalence classes of non-imaginary simple roots w.r.t. max. x, for alpha \cong alpha' if (1+theta)(alpha)=(1+theta(alpha')
maximal_real_parabolics
maximal_real_parabolics(RealForm G) = [KGPElt]maximal parabolics among all real parabolics of G=G(R) not the same as real forms of maximal parabolics of G(C)
maximal_theta_parabolics
maximal_theta_parabolics (RealForm G) = [KGPElt]theta_stable parabolics, maximal among all such unlike the real_parabolic case, these have different x-values
support
support (KGBElt x) = [int]The smallest list of simple roots such that descents lead to the distinguished fiber.
also defined in nilpotent_orbits.at, W_reps_type_BC.at, cyclotomic_Lie_algebra.at, bracket.at
and extract the set of reflection indicesL518
support_dual
support_dual (KGBElt x) = [int]also defined in nilpotent_orbits.at, Vogan-dual.at
support_alt
support_alt(KGBElt x) = [int]Alternative definition: compute support using inverse Weyl group part
From the earlier documentation
Auxiliary function.
coset_reps
coset_reps (RootDatum rd, RootDatum rd_L) = [WeylElt]coset representatives for W(rd)/W(rd_L); with L non standard Levi subsystem. If L=L(lambda) the W-orbit of lambda is in bijection with this quotient
bounded_coset_reps
bounded_coset_reps (RootDatum rd,RootDatum rd_L,int bound) = [WeylElt]embed_KGB
embed_KGB (KGBElt x_L,RealForm G) = KGBEltIf L is a theta-stable Levi factor in G, KGB for L embeds in KGB for G.
also defined in induction.at
inverse_embed_KGB
inverse_embed_KGB (KGBElt x_G,RealForm L) = KGBEltGiven a KGB element of G, find one for the theta-stable Levi L which maps to it.
also defined in induction.at
Given an involution theta and a root datum, return the set S of complex roots containing the first positive representative of each quadruple ($\pm$ alpha,$\pm$ theta(alpha)).L548
makeS 2 overloads
makeS (mat theta,RootDatum rd) = matmakeS (KGBElt x) = matAs the previous function, with argument a KGB element x determining the involution and root datum
also defined in induction.at, nci_nilrad_roots.at
rho_S 2 overloads
rho_S ((mat,RootDatum)pair) = ratvecHalf sum of roots in chosen set S of complex roots, described above.
rho_S (KGBElt x) = ratvecAs previous function, with argument KGB element x.
also defined in induction.at
some user-oriented functions, not used in functions aboveL565
(real) cuspidal parabolics L567
real_parabolic
real_parabolic (KGBElt x) = ParabolicReal parabolic defined by x has Levi factor M=centralizer(A), $\mathfrak u$=positive roots not in M; for M to be stable: x must have no C+ roots.
real_Levi
real_Levi (KGBElt x) = RealFormLevi factor of real parabolic defined by x (must have no C+ roots).
theta-stable split parabolics L579
theta_stable_parabolic
theta_stable_parabolic (KGBElt x) = ParabolicTheta-stable parabolic defined by x has Levi factor L=centralizer(T), $\mathfrak u$=positive roots not in L; for this to be stable: no C- roots.
theta_stable_Levi
theta_stable_Levi (KGBElt x) = RealFormLevi factor of theta-stable parabolic defined by x (must have no C- roots).
is_standard_Levi
is_standard_Levi (RealForm L,RealForm G) = boolCheck whether a Levi subgroup L is standard in G, namely simple roots of L are simple (at level 1 for rho_check) for G.
From the earlier documentation
Check whether a Levi subgroup L is standard in G (simple roots of L are simple for G).
make_parabolic
make_parabolic (RealForm L, RealForm G) = ParabolicGiven a Levi subgroup L of G, construct the parabolic with Levi L
also defined in induction.at
minimal_real_parabolic
minimal_real_parabolic (RealForm G) = Parabolicminimal_real_Levi
minimal_real_Levi (RealForm G) = RealFormmaximal_parabolics
maximal_parabolics (RootDatum rd) = [ComplexParabolic]print_theta_stable_parabolics
print_theta_stable_parabolics (RealForm G) = voidFor each theta-stable parabolic of G, print S, Levi factor, and maximal x.
Generated from atlas-scripts at commit 648506c (2026-10-13).