Script File
K_Nilpotent.at
Definitions in source order
kn_verbose
L6
kn_verbose = falsevector 2 overloads
L13
vector([Param] basis,ParamPol P) = Maybe<vec>given basis [Param] convert ParamPol to a vector in this basis assuming ParamPol has integer coefficients returns a vector if all entries in the ParamPol occur in the basis otherwise returns no_vec
L18
vector([KType] basis,KTypePol P) = Maybe<vec>also defined in basic.at
Vector 2 overloads
L24
Vector([KType] basis,KTypePol P) = vecversions that will fail is P not in span of basis
L25
Vector([Param] basis,ParamPol P) = vecKNilpotentData type
L28
set_type
[ KNilpotentData =
( RealForm real_form
, int N {K_norm bound}
, ratvec v {for use in K_norm in reductive case, default is rho_check(G)}
, [ComplexNilpotent] complex_orbits
{complex nilpotent orbits, sorted by increasing dimension}
{,bool precompute_real_orbits
{flag to use the Vogan algorithm to compute real orbits}
DISABLED}
, bool include_Q_and_P_X_matrices
, [RealNilpotent] real_orbits {real forms of each complex orbit}
, [[(KType,KTypePol)]] pairs
{one pair for each real orbit O
O-> an array [(mu_L,P)] of pairs L\cap K-type mu_L and KTypePol:Phi(mu_L)
where P=Phi(mu_L)}
, [([KType],[KType],mat) ] T_matrices
{one matrix for each real orbit O
O->(K_basis,L_cap_K_basis,T)
K_basis: K_types (for G) coming from O (#=m)
L_cap_K_basis: K_type for L coming from O (#=n)
T=mxn matrix given the operator Phi in these bases}
, [([KType],[KType],mat)] Y_matrices
{one matrix for each complex orbit OC
OC->(K_basis,L_cap_K_basis,Y)
K_basis,L_cap_K_basis: coming from all
(real forms of complex) orbits of smaller dimension
Y is the matrix giving the image of Phi in these bases}
, [([KType],[KType],mat,mat)] Q_and_P_X_matrices
{one pair of matrices for each complex orbit OC
(K_basis,L_cap_K_basis,Q,P_X):
K_basis and L_cap_K_basis: closure of OC,
i.e. all real forms of OC and all orbits of smaller dimension
Q=matrix of T/T\cap Y
P_X=projector_mod_image(Y)=projection to X=W/Y}
)
]Fields: real_form, N, v, complex_orbits, include_Q_and_P_X_matrices, real_orbits, pairs, T_matrices, Y_matrices, Q_and_P_X_matrices
principal data structure for KNilpotent calculation
root_datum
L66
root_datum(KNilpotentData d) = RootDatumalso defined in basic.at, W_reps.at, sommers.at
Q_matrices
L67
Q_matrices(KNilpotentData d) = [mat]P_X_matrices
L68
P_X_matrices(KNilpotentData d) = [mat]real and complex nilpotent orbits in setting of KNilpotentData L70
complex_orbit@RealNilpotent->ComplexNilpotent: see nilpotent_orbits.atL72
complex_orbit_number
L74
complex_orbit_number(KNilpotentData d,ComplexNilpotent OC) = intreal_orbit_number
L75
real_orbit_number(KNilpotentData d,RealNilpotent O) = intcomplex_orbit_number 2 overloads
L76
complex_orbit_number(KNilpotentData d,RealNilpotent O) = intL77
complex_orbit_number(KNilpotentData d,int real_orbit) = intalso in this file at line 74
real_forms_of
L80
real_forms_of(KNilpotentData d,int complex_orbit) = [int]all real forms of given complex orbit
other_real_forms
L85
other_real_forms(KNilpotentData d,int real_orbit) = [int]given a real orbit O, all of the other real forms of complexification OC of O
closure
L89
closure(KNilpotentData d,int complex_nilpotent) = [int]"closure" means: smaller dimension
complex nilpotent -> orbit itself and all complex nilpotents of smaller dimension
closure_real
L95
closure_real(KNilpotentData d,int complex_orbit) = [int]all real forms of given complex orbit, and all real forms of smaller orbits
closure_of_real_orbit
L99
closure_of_real_orbit(KNilpotentData d,int real_nilpotent) = [int]real orbit and all real orbits of smaller dimension
smaller_orbits
L105
smaller_orbits(KNilpotentData d,int real_orbit) = [int]real orbit -> all orbits of strictly smaller dimension
bases of K-types and L_cap_K-types L110
these sets of K-types serve as basis of matrix operationsL112
K_basis 4 overloads
L115
K_basis = monomials@KTypePolK-types occurring in given KTypePol
L118
K_basis = monomials@[KTypePol]K-types occurring in given KTypePols
L121
K_basis (KNilpotentData data, int real_orbit) = [KType]all K-types coming from given KNilpotentData
L126
K_basis(KNilpotentData data, [int] real_orbits) = [KType]K-Types coming from given orbits
also in this file at line 144
K_basis_closure
L134
K_basis_closure(KNilpotentData data,int complex_orbit) = [KType]K-types coming from all real forms of complex orbit, and all real forms of smaller orbits
K_basis_closure_of_real_orbit
L138
K_basis_closure_of_real_orbit(KNilpotentData data,int real_orbit) = [KType]K-types coming from real orbit, and all real orbits of smaller dimension
K_basis
L144
K_basis(KNilpotentData data) = [KType]K-types from all orbits this should be the same as K_parameter_norm_upto(G,data.N)
change_basis
L149
change_basis([KType] K_basis, [KType] K_basis_new,mat M) = matgiven a matrix in K_basis, convert to K_basis_new requirement: K_basis is a subset of K_basis_new (unless n_columns(M)=0)
L_cap_K_basis 3 overloads
L156
L_cap_K_basis(KNilpotentData d,int real_orbit) = [KType]L\cap K-types coming from given orbit
L160
L_cap_K_basis(KNilpotentData d,[int] real_orbits) = [KType]L\cap K-types coming from given orbits
L164
L_cap_K_basis(KNilpotentData d) = [KType]L_cap_K_basis_opp
L165
L_cap_K_basis_opp(KNilpotentData d) = [KType]T_matrix
L174
T_matrix([ (KType,KTypePol) ] pairs) = ([KType],[KType],mat)matrix constructed from list of pairs [(KType,KTypePol)] defining a map from L\cap K-types to K-types each KTypes if for L\cap K, each KTypePol is for G rows <-> K-types (for G) columns <-> L\cap K-types each column gives Phi(L\cap K-type) as a sum of K-types
merge_matrices
L185
merge_matrices([ ([KType],[KType],mat) ] matrices) = ([KType],[KType],mat)merge_T_matrices
L191
merge_T_matrices(KNilpotentData d,[int] real_orbits) = ([KType],[KType],mat)merge_P_X_matrices
L194
merge_P_X_matrices(KNilpotentData d,[int] real_orbits) = ([KType],[KType],mat)compute_Y_matrix
L199
compute_Y_matrix(KNilpotentData d,int complex_orbit) = ([KType],[KType],mat)(K_basis,L_cap_K_basis,Y) all for smaller orbits,not including P_X
K_basis_closure=K_basis_closure(d,complex_orbit) then L_cap_K_basis_closure=L_cap_K_basis_closure(d,complex_orbit) then Y=change_basis(K_basis,K_basis_closure,Y0) in (K_basis_closure,L_cap_K_basis_closure,Y,projector_mod_image(Y))L206
utilities involving nilradicals L211
theta_orbit_reps
L217
theta_orbit_reps(KGBElt x, [vec] roots) = [vec]given a theta_x-stable set of roots R, return subset of R consisting of each imaginary root alpha\in R, and one of each pair alpha,theta(alpha) if R isn't theta-stable this will fail with an error
versions of commands in induction.at, but here involving the 1-eigenspace \mathfrak s[1] of \mathfrak sL228
s_one_roots
L236
s_one_roots(RealNilpotent O,KGBElt x) = [vec]roots of H in s[1] s = -1 eigenspace of theta_x s[1] = 1 H-eigenspace of H on s
s_one_roots_restricted
L248
s_one_roots_restricted(RealNilpotent O,KGBElt x) = [vec]restriction of s_one_roots to H^{theta_x}
each pair (alpha,theta(alpha)) contributes
a single root restriction(alpha)=restriction(theta(alpha)),
corresponding to the single vector X_\alpha-\theta(X_\alpha) in s[1]
characters of H^theta are elements of X^*/(1-theta)X^*
s_one_nc_cx_restricted_roots
L254
s_one_nc_cx_restricted_roots(RealNilpotent O,KGBElt x) = [vec]only want the non-compact imaginary roots after restriction these are the nci roots, and one of each pair of complex roots
subsets_of_s_one_nc_cx_restricted_roots
L265
subsets_of_s_one_nc_cx_restricted_roots(RealNilpotent O,KGBElt x) = [[vec]]all non-empty subsets of the set of restrictions of roots of s[1] to H^{theta_x}
see KNilpotent paper, Corollary 7.3(6)
don't want empty subsetL267
rho_shifts
L270
rho_shifts(RealNilpotent O,KGBElt x_G) = [(vec,int)]H is in \mathfrak h, not \mathfrak h^*
twist_by_minus_2rho_u_cap_s 2 overloads
L286
twist_by_minus_2rho_u_cap_s(Parabolic P,KTypePol K_type_formula) = KTypePolgiven Q theta-stable, and the K-type formula P for a K-type mu_L of L=Levi(Q), return the K-type formula for mu_L twisted by -2rho(u\cap s) algorithm: apply twist_by_minus_2rho_u_cap_s to P (see induction.at) term by term, each individual term in the result may be a non-standard parameter for L, apply standardize to each term, to give a sum of STFL parameters for L: this is the K-type formula for a single L\cap K-type STFL: standard final limit parameter
L312
twist_by_minus_2rho_u_cap_s(Parabolic P,KType mu) = KTypereplace K-type mu with mu\otimes (-2\rho(u\cap s))
Extension Algorithm L315
this implements the algorithm of Proposition 7.3(6) of Vogan's notes Phi(orbit,kgb_number_L,lambda_L): O is a RealNilpotent for G L=Levi(O) mu_L=(KGB(L,kgb_number_L),lambda_L) is an L\cap K-type Phi is the function \tilde\mathcal E of the PropositionL317
Phi
L325
Phi (RealNilpotent O,int kgb_number_L, ratvec lambda_L) = KTypePolreturn valueL376
Phi 3 overloads
L379
Phi(RealNilpotent O,Param p_L) = KTypePolvariants of Phi
L380
Phi(RealNilpotent O,KType mu_L) = KTypePolL382
Phi(RealNilpotent O,KTypePol mu_L) = KTypePolalso in this file at line 325
functions_on_real_orbit
L386
functions_on_real_orbit(RealNilpotent O_in) = KTypePolfunctions on real orbit as K-representation
in_span 2 overloads
L396
in_span([KTypePol] list,KTypePol P) = ([KType],mat,vec,bool)given KTypePols list=[Q_1,...,Q_n] and KTypePol:P test if P=\sum a_i Q_i with a_i\in Z return true/false, and [KTypePol] R,[int] a so that P=sum a[i]*R[i]
L410
in_span([[KTypePol]] list_of_lists,KTypePol P) = ([KType],mat,vec,bool)convenient to define in_span([[KTypePol]] list,KTypePol P)= in_span( flatten the list,P)
Phi_upto 2 overloads
L414
Phi_upto(RealNilpotent O,int N, ratvec v) = [(KType,KTypePol)]returns all (?) [(mu_L,extension)], such that all terms in extension have K_norm <= N
L422
Phi_upto(KGBElt x_K,[RealNilpotent] orbits, int N, ratvec v) = [(RealNilpotent,[(KType,KTypePol)])]initialize_KNilpotent 4 overloads
L427
initialize_KNilpotent(RealForm G, int N,ratvec v, bool include_Q_and_P_X_matrices) = KNilpotentDatainitialize KNilpotentData for G, with given bound, optional ratvec, optional "compute" flag to compute nilpotent orbits using Vogan's algorithm
L452
initialize_KNilpotent(RealForm G, int N,bool compute) = KNilpotentDataL453
initialize_KNilpotent(RealForm G, int N) = KNilpotentDataL454
initialize_KNilpotent(RealForm G, ratvec v, int N) = KNilpotentDataupdate_pairs
L478
update_pairs([[(KType,KTypePol)]] pairs,int j,[(KType,KTypePol)] new_pairs) = [[(KType,KTypePol)]]crude guess of possible real orbits, given complex orbits the actual real orbits are a subset of these this command is not needed if using Vogan algorithm to compute real orbits
set potential_real_nilpotent_orbits(RealForm G,[ComplexNilpotent] complex_orbits)=[RealNilpotent]:
let delta=distinguished_involution(G) in
##for (rd,H)@i in complex_orbits
do
if H*delta=H {H must be ^delta-fixed to give a real orbit} then
let roots_of_Levi=simple_roots_from_coweight(rd,H) then
P_complex= (rd,roots_of_Levi) then
theta_stable_parabolics=theta_stable_parabolics(G,P_complex) in
for P in theta_stable_parabolics do RealNilpotent:(H,x_min(P),[]) od
else []
fi
od
set potential_real_nilpotent_orbits(RealForm G)=[RealNilpotent]:
potential_real_nilpotent_orbits(G,complex_nilpotent_orbits(G))
are these necessary? there must be a more elegant way to do this
update_T_matrices
L481
update_T_matrices([([KType],[KType],mat) ] T_matrices,int j, ([KType],[KType],mat) new_matrices) = [([KType],[KType],mat) ]update_Y_matrices
L484
update_Y_matrices([([KType],[KType],mat) ] Y_matrices,int j, ([KType],[KType],mat) new_matrices) = [([KType],[KType],mat) ]update_Q_and_P_X_matrices
L487
update_Q_and_P_X_matrices([([KType],[KType],mat,mat) ] Q_and_P_X__matrices,int j, ([KType],[KType],mat,mat) new_matrices) = [([KType],[KType],mat,mat) ]fill_one_step
L494
fill_one_step(KNilpotentData d, int complex_orbit)assume things computed up to complex orbit i-1 (not including Q and P_X) fill data up to complex orbit i
KNilpotentData:
fill 2 overloads
L529
fill(KNilpotentData d,int n) = KNilpotentDatafill orbits 0,1,...,n-1
L535
fill(KNilpotentData d) = KNilpotentDatacompletely fill KNilpotentData, inductively starting at orbit 0
failed
L540
failed = ([KType]:[],[KType]:[], null(0,0),null(0),null(0),false)default failed values
could use unions instead
failed_av_ann
L541
failed_av_ann = ([KType]:[],[KType]:[],-1, null(0,0),null(0),null(0),false)failed_av
L542
failed_av = ([KType]:[],[KType]:[],[int]:[],null(0,0),null(0),null(0),false)search 2 overloads
L554
search(KNilpotentData d,[int] real_orbits,KTypePol P) = ([KType],[KType],mat,vec,vec,bool)find P in terms coming from given list of real orbits
returns (failed or): K_basis from list of orbits vector w in basis of K-types (expressing given P in this basis) L_cap_K basis from list of orbits matrix T of map from L\cap K-types to K-types vector v in basis of L\cap K-types satisfying Tv=w bool indicating success
L565
search(KNilpotentData d,int real_orbit,[int] real_orbits,KType mu_L) = ([KType],[KType],mat,vec,vec,bool)same as previous, where P=Phi(O,mu_L)
also in this file at line 601
associated variety of annihilator of P, this is a single complex orbitL569
computed using all smaller orbits, not algorithm: run over complex orbits OC, write P in K-type basis from OC (if possible) solve Tv=w; if success return OC return values as in search (above), plus int i (orbit number)L570
Associated variety L577
computing associated varieties inductively by taking filtration/associated graded at each step given a real orbit O and a KTypePol P, where P does not come from smaller orbits Q: matrix of Phi modulo image from smaller orbits so solve Qv=w where w=P in appropriate basisL579
search
L601
search(KNilpotentData d,int complex_orbit,KTypePol P) = ([KType],[KType],mat,vec,vec,bool)given complex orbit OC, w=vector of ParamPol P in basis of K-types from OC solve Qv=w if possible return values as in search (above) returns (failed or): [KType]: K_basis from list of orbits [KType]: L_cap_K basis from list of orbits mat: matrix Q of map from L\cap K-types to K-types vec: vector v in basis of L\cap K-types vec: vector w expressing P in basis of K-types v is solution to: Qv=w (should be unique if it exists) bool: success
av_ann 2 overloads
L620
av_ann(KNilpotentData d,KTypePol P) = ([KType],[KType],int,mat,vec,vec,bool)same as previous where the complex orbit OC isn't specified, return values include an int giving OC
L632
av_ann(KNilpotentData d,Param p) = ([KType],[KType],int,mat,vec,vec,bool)associated variety of annihilator of Param p apply the previous to K-types of p, i.e. character_formula(p)*0
projector
L638
projector(vec v, int i)given v=[a_1,a_2,...,a_n]
return diag[0^{a+1},...,1^{a_i},...0^{a_n}]
also defined in projectors_using_character_tables.at
av_from_av_ann 2 overloads
L653
av_from_av_ann(KNilpotentData d,int complex_orbit,KTypePol P) = veccompute the associated variety given av_ann
algorithm: given O (complex) with real forms O_0,...,O_n
Q,P_X for O
solve Qv=P_X(w)
Q has a large kernel, but anything in the kernel has to do with smaller orbits
write v=[v_0,v_1,..,v_k,v_{k+1},..,v_{k+n}]
where [v_0,...,v_{k-1}] from smaller orbits
[v_k,...,v_{k+n}] on given orbit
the associated variety is those O_i such that v_{k_i}\ne 0
L668
av_from_av_ann(KNilpotentData d,int complex_orbit,Param p)av 3 overloads
L671
av(KNilpotentData d, KTypePol P) = vecL676
av(KNilpotentData d, Param p)compute associated variety of irreducible J(p)
L679
av(KNilpotentData d,[Param] params) = [(Param,vec)]elementary (non Q) versions L682
this section of commands should not be needed, but is included for testing purposes solving Tv=w directly (not using quotients)L684
av_ann_elem_long
L688
av_ann_elem_long(KNilpotentData d,KTypePol P) = ([KType],[KType],int,mat,vec,vec,bool)also in this file at line 699
if not foundL697
av_ann_elem_long
L699
av_ann_elem_long(KNilpotentData d,Param p) = ([KType],[KType],int,mat,vec,vec,bool)also in this file at line 688
av_from_av_ann_elem_long 2 overloads
L706
av_from_av_ann_elem_long(KNilpotentData d,int complex_orbit,KTypePol P) = ([KType],[KType],[int],mat,vec,vec,bool)associated variety of P, assuming associatevariety OC of ann(P) is known
algorithm: run over subsets of real forms of OC and try to solve Tv=w
L718
av_from_av_ann_elem_long(KNilpotentData d,int complex_orbit,Param p) = ([KType],[KType],[int],mat,vec,vec,bool)associated variety of p, assuming OC=associated variety of ann(p) is known
av_elem_long 2 overloads
L722
av_elem_long(KNilpotentData d,KTypePol P) = ([KType],[KType],[int],mat,vec,vec,bool)same as previous but computed av_ann_elem(P)
L729
av_elem_long(KNilpotentData d,Param p) = ([KType],[KType],[int],mat,vec,vec,bool)associated variety of p from scratch, by computing OC=av_ann_elem(p) first
av_ann_elem 2 overloads
L733
av_ann_elem(KNilpotentData d,KTypePol P) = intshorter versions
L734
av_ann_elem(KNilpotentData d,Param p) = intav_from_av_ann_elem 2 overloads
L735
av_from_av_ann_elem(KNilpotentData d,int complex_orbit,KTypePol P) = [int]L736
av_from_av_ann_elem(KNilpotentData d,int complex_orbit,Param p) = [int]av_elem 2 overloads
L737
av_elem(KNilpotentData d,KTypePol P) = [int]L738
av_elem(KNilpotentData d,Param p) = [int]real orbits as computed by KNilpotent algorithm should agree with result of Vogan's algorithmL740
some display functions L750
stringify
L753
stringify((int a,int b))useful for including "(a,b)" in a sequence of strings to be printed
display_string
L755
display_string(RealNilpotent O) = stringshow
L760
show(KNilpotentData d) = voidhighly customized function for displaying KNilpotentData
also defined in modules.at, good_W_representatives.at, arthur_parameters.at, sub_cells.at, associated_variety_annihilator.at, geck_generic.at, L_packet.at
;
prints("Sum of ranks of Q matrices: ", sum(for Q in d.Q_matrices do rank(Q) od));
prints("#K_basis: ", #K_basis(d))L792test_minimal_orbits 2 overloads
L797
test_minimal_orbits(RealForm G, int N) = voiddisplay K-types as highest weights for K_0
L808
test_minimal_orbits(RealForm G, int N, void flag) = voidprint K-types as KHighestWeights
test_all_orbits 2 overloads
L819
test_all_orbits(RealForm G, int N) = voiddisplay K-types as highest weights for K_0
L830
test_all_orbits(RealForm G, int N, void flag) = voidprint K-types as KHighestWeights
Generated from atlas-scripts at commit 7e1b958 (2026-09-17).
Commented-out code, lines 742–748 (6 lines)
disabled set KNilpotent_real_orbits(RealForm G,int N, ratvec v)= let d0=initialize_KNilpotent(G,N,v,false) then d=fill(d0) in d.real_orbits set KNilpotent_real_orbits(RealForm G,int N)=KNilpotent_real_orbits(G,N,rho_check(G)) set KNilpotent_real_orbits(RealForm G)=KNilpotent_real_orbits(G,K_norm(trivial(G).K_type_pol)+3) {in SU(2,1) need +3}