Documentation contents

Script File

K_Nilpotent.at

Source
atlas-scripts/K_Nilpotent.at (838 lines)
Definitions
97
Loads
Loaded by
none of the other all.at files

Definitions in source order

kn_verbose

L6kn_verbose = false

vector 2 overloads

L13vector([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
L18vector([KType] basis,KTypePol P) = Maybe<vec>

also defined in basic.at

Vector 2 overloads

L24Vector([KType] basis,KTypePol P) = vec
versions that will fail is P not in span of basis
L25Vector([Param] basis,ParamPol P) = vec

KNilpotentData 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

L66root_datum(KNilpotentData d) = RootDatum

also defined in basic.at, W_reps.at, sommers.at

Q_matrices

L67Q_matrices(KNilpotentData d) = [mat]

P_X_matrices

L68P_X_matrices(KNilpotentData d) = [mat]

real and complex nilpotent orbits in setting of KNilpotentData L70

complex_orbit@RealNilpotent->ComplexNilpotent: see nilpotent_orbits.at
L72

complex_orbit_number

L74complex_orbit_number(KNilpotentData d,ComplexNilpotent OC) = int

also in this file at line 76, line 77

real_orbit_number

L75real_orbit_number(KNilpotentData d,RealNilpotent O) = int

complex_orbit_number 2 overloads

L76complex_orbit_number(KNilpotentData d,RealNilpotent O) = int
L77complex_orbit_number(KNilpotentData d,int real_orbit) = int

also in this file at line 74

real_forms_of

L80real_forms_of(KNilpotentData d,int complex_orbit) = [int]
all real forms of given complex orbit

other_real_forms

L85other_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

L89closure(KNilpotentData d,int complex_nilpotent) = [int]
"closure" means: smaller dimension
complex nilpotent -> orbit itself and all complex nilpotents of smaller dimension

closure_real

L95closure_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

L99closure_of_real_orbit(KNilpotentData d,int real_nilpotent) = [int]
real orbit and all real orbits of smaller dimension

smaller_orbits

L105smaller_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 operations
L112

K_basis 4 overloads

L115K_basis = monomials@KTypePol
K-types occurring in given KTypePol
L118K_basis = monomials@[KTypePol]
K-types occurring in given KTypePols
L121K_basis (KNilpotentData data, int real_orbit) = [KType]
all K-types coming from given KNilpotentData
L126K_basis(KNilpotentData data, [int] real_orbits) = [KType]
K-Types coming from given orbits

also in this file at line 144

K_basis_closure

L134K_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

L138K_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

L144K_basis(KNilpotentData data) = [KType]
K-types from all orbits
this should be the same as K_parameter_norm_upto(G,data.N)

also in this file at line 115, line 118, line 121, line 126

change_basis

L149change_basis([KType] K_basis, [KType] K_basis_new,mat M) = mat
given 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

L156L_cap_K_basis(KNilpotentData d,int real_orbit) = [KType]
L\cap K-types coming from given orbit
L160L_cap_K_basis(KNilpotentData d,[int] real_orbits) = [KType]
L\cap K-types coming from given orbits
L164L_cap_K_basis(KNilpotentData d) = [KType]

L_cap_K_basis_opp

L165L_cap_K_basis_opp(KNilpotentData d) = [KType]

T_matrix

L174T_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

L185merge_matrices([ ([KType],[KType],mat) ] matrices) = ([KType],[KType],mat)

merge_T_matrices

L191merge_T_matrices(KNilpotentData d,[int] real_orbits) = ([KType],[KType],mat)

merge_P_X_matrices

L194merge_P_X_matrices(KNilpotentData d,[int] real_orbits) = ([KType],[KType],mat)

compute_Y_matrix

L199compute_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

L217theta_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 s
L228

s_one_roots

L236s_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

L248s_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

L254s_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

L265subsets_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 subset
L267

rho_shifts

L270rho_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

L286twist_by_minus_2rho_u_cap_s(Parabolic P,KTypePol K_type_formula) = KTypePol
given 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
L312twist_by_minus_2rho_u_cap_s(Parabolic P,KType mu) = KType
replace 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 Proposition
L317

Phi

L325Phi (RealNilpotent O,int kgb_number_L, ratvec lambda_L) = KTypePol

also in this file at line 379, line 380, line 382

return value
L376

Phi 3 overloads

L379Phi(RealNilpotent O,Param p_L) = KTypePol
variants of Phi
L380Phi(RealNilpotent O,KType mu_L) = KTypePol
L382Phi(RealNilpotent O,KTypePol mu_L) = KTypePol

also in this file at line 325

functions_on_real_orbit

L386functions_on_real_orbit(RealNilpotent O_in) = KTypePol
functions on real orbit as K-representation

in_span 2 overloads

L396in_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]
L410in_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

L414Phi_upto(RealNilpotent O,int N, ratvec v) = [(KType,KTypePol)]
returns all (?) [(mu_L,extension)], such that all terms in extension have K_norm <= N
L422Phi_upto(KGBElt x_K,[RealNilpotent] orbits, int N, ratvec v) = [(RealNilpotent,[(KType,KTypePol)])]

initialize_KNilpotent 4 overloads

L427initialize_KNilpotent(RealForm G, int N,ratvec v, bool include_Q_and_P_X_matrices) = KNilpotentData
initialize KNilpotentData for G, with given bound, optional ratvec, optional
"compute" flag to compute nilpotent orbits using Vogan's algorithm
L452initialize_KNilpotent(RealForm G, int N,bool compute) = KNilpotentData
L453initialize_KNilpotent(RealForm G, int N) = KNilpotentData
L454initialize_KNilpotent(RealForm G, ratvec v, int N) = KNilpotentData

update_pairs

L478update_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

L481update_T_matrices([([KType],[KType],mat) ] T_matrices,int j, ([KType],[KType],mat) new_matrices) = [([KType],[KType],mat) ]

update_Y_matrices

L484update_Y_matrices([([KType],[KType],mat) ] Y_matrices,int j, ([KType],[KType],mat) new_matrices) = [([KType],[KType],mat) ]

update_Q_and_P_X_matrices

L487update_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

L494fill_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

L529fill(KNilpotentData d,int n) = KNilpotentData
fill orbits 0,1,...,n-1
L535fill(KNilpotentData d) = KNilpotentData
completely fill KNilpotentData, inductively starting at orbit 0

failed

L540failed = ([KType]:[],[KType]:[], null(0,0),null(0),null(0),false)
default failed values
could use unions instead

failed_av_ann

L541failed_av_ann = ([KType]:[],[KType]:[],-1, null(0,0),null(0),null(0),false)

failed_av

L542failed_av = ([KType]:[],[KType]:[],[int]:[],null(0,0),null(0),null(0),false)
associated variety of annihilator of P, this is a single complex orbit
L569
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 basis
L579

search

L601search(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

also in this file at line 554, line 565

av_ann 2 overloads

L620av_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
L632av_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

L638projector(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

L653av_from_av_ann(KNilpotentData d,int complex_orbit,KTypePol P) = vec
compute 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
L668av_from_av_ann(KNilpotentData d,int complex_orbit,Param p)

av 3 overloads

L671av(KNilpotentData d, KTypePol P) = vec
L676av(KNilpotentData d, Param p)
compute associated variety of irreducible J(p)
L679av(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

L688av_ann_elem_long(KNilpotentData d,KTypePol P) = ([KType],[KType],int,mat,vec,vec,bool)

also in this file at line 699

if not found
L697

av_ann_elem_long

L699av_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

L706av_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
L718av_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

L722av_elem_long(KNilpotentData d,KTypePol P) = ([KType],[KType],[int],mat,vec,vec,bool)
same as previous but computed av_ann_elem(P)
L729av_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

L733av_ann_elem(KNilpotentData d,KTypePol P) = int
shorter versions
L734av_ann_elem(KNilpotentData d,Param p) = int

av_from_av_ann_elem 2 overloads

L735av_from_av_ann_elem(KNilpotentData d,int complex_orbit,KTypePol P) = [int]
L736av_from_av_ann_elem(KNilpotentData d,int complex_orbit,Param p) = [int]

av_elem 2 overloads

L737av_elem(KNilpotentData d,KTypePol P) = [int]
L738av_elem(KNilpotentData d,Param p) = [int]
real orbits as computed by KNilpotent algorithm
should agree with result of Vogan's algorithm
L740
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}

some display functions L750

stringify

L753stringify((int a,int b))
useful for including "(a,b)" in a sequence of strings to be printed

display_string

L755display_string(RealNilpotent O) = string

show

L760show(KNilpotentData d) = void
highly 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))
L792

test_minimal_orbits 2 overloads

L797test_minimal_orbits(RealForm G, int N) = void
display K-types as highest weights for K_0
L808test_minimal_orbits(RealForm G, int N, void flag) = void
print K-types as KHighestWeights

test_all_orbits 2 overloads

L819test_all_orbits(RealForm G, int N) = void
display K-types as highest weights for K_0
L830test_all_orbits(RealForm G, int N, void flag) = void
print K-types as KHighestWeights

Generated from atlas-scripts at commit 7e1b958 (2026-09-17).