atlas Library · Script File
parameters.at
various ways of defining parameters
Definitions in source order
unnormalized_torus_factor
unnormalized_torus_factor (KGBElt x) = ratvectorus_factor, aka "normalized torus factor", is $\theta$-fixed,
$\xi=\exp_1(torus_factor/2)\exp_1(\rho^\vee/2)\sigma_w\xi_0$ where
$\exp_1(t)=\exp(2\pi i t)$ is the "base 1 exponential function"; note
"over 2" in those $\exp_1$ terms, Marc writes $\exp_{-1}(x)=\exp(\pi ix)$
instead, for which $\xi=\exp_{-1}(torus_factor+\rho^\vee)\sigma_w\xi_0$.
Jeff prefers $\xi=exp_1(unnormalized_torus_factor)\sigma_w\xi_0$
Therefore:
|unnormalized_torus_factor=(torus_factor+rho^\vee)/2|
|torus_factor=2*unnormalized_torus_factor-rho^\vee|
NOTE: result of |unnormalized_torus_factor| is not $\theta-fixed$
probably better not to use |unnormalized_torus_factor|
also defined in synthetic.at
square_unnormalized
square_unnormalized ( InnerClass ic,mat theta,ratvec unnormalized_torus_factor) = ratveccompute xi^2 and test if it is central
this is formula when v= unnormalized_torus_factor
xi=exp(2\pi iv)\sigma_w\xi_0
xi^2=exp(2\pi i[(1+^theta)*v+(1-^theta)*rho^v/2]
=v*(1+theta)+rho^v*(1-theta)/2
=rho^v + (2*v-rho^v)*(1+theta)/2
square_normalized
square_normalized (InnerClass ic,mat theta,ratvec torus_factor) = ratvecsquare
square = square_normalized@(InnerClass,mat,ratvec)for valid arguments one should have square(ic,theta,tf)=square(real_form(ic,theta,tf))
also in this file at line 42, line 43; also defined in synthetic.at
square2
square2 (InnerClass ic,mat theta,ratvec tf) = ratvecthis should always be twice |square|
square 2 overloads
square (RealForm G) = ratvecthe following is the same as central_cocharacter@RealForm in Vogan-dual.at
square (KGBElt x) = ratvecalso in this file at line 37; also defined in synthetic.at
square_is_central
square_is_central (InnerClass ic,mat theta,ratvec tf) = booltf=normalized torus_factor: xi=exp(\pi i(tf\rho^v))\sigma_w\xi_0 so square_is_central(ic,theta(x),torus_factor(x)) should always be true
also defined in synthetic.at, extended_misc.at
parity
parity (Param p,vec alpha_hat) = boolparity condition
dual_inner_class
dual_inner_class (Param p) = InnerClassto compute y values over a block of parameters, precompute dual inner class
Removing things related to duality, see Vogan-dual.atL64
In duality, y is a KGBElt for G^\vee(gamma), but only its torus factor as a generalized KGB element for G^\vee is what is easily computed, namely as infinitesimal_character(p)-lambda(p). To correctly compute a corresponding true KGB element under the embedding of G^\vee(gamma) into G^\vee is quite difficult. The code below tries to obtain a vector giving the correct grading by first computing the vector that would directly give the grading for G^\vee (by adding rho_r(x)), and then subtracting the similar difference |dual_shift| between grading vector and torus_factor for G^\vee(gamma). However this correction is not always by an element of X^*, so that the value of square(y) need not be what it should be, and the construction of a KGB_elt may consequently fail with "Not a valid strong involution" error. A probably more successful attempt is in Vogan-dual.at: dual_KGB and y_alt.L66
caution: this function builds an inner class on the fly; if called multiple times even with the same argument, the results will be incompatibleL88
lambda 2 overloads
lambda (ratvec gamma,mat theta,KGBElt y) = ratveclambda (ratvec gamma,KGBElt x,KGBElt y) = ratvecalso defined in basic.at
nu 2 overloads
nu (ratvec gamma,KGBElt x) = ratvecnu (ratvec gamma,KGBElt x,KGBElt y) = ratvecallow unused y
also defined in basic.at, extended.at
make_regular
make_regular (RootDatum rd, ratvec v) = ratvecsometimes gamma returned by y^2 is not regular, need to make it regular
also defined in stable.at
choose_g 3 overloads
choose_g (RealForm G, RootDatum dual_integral) = ratvecchoose infinitesimal character appropriate for dual parameter
choose_g (KGBElt x, KGBElt y) = ratvecchoose_g (Param p) = ratvectits
tits(KGBElt x) = Tits_eltcontragredient of a parameter
KGB_elt
KGB_elt (Tits_elt t)also defined in basic.at, synthetic.at
inverse
inverse(KGBElt x)also defined in basic.at, combinatorics.at, ratmat.at, tits.at, affine.at, cyclotomic.at, Gaussian_elim.at, cyclotomic_Gaussian_elim.at, lazy_lists.at
contragredient
contragredient(Param p) = Paramcontragredient: (x,lambda,nu) -> (w_0\times x,-w_0\lambda,-w_0\nu) sketch: the contragredient is given by the Chevalley involution (of the real group) which acts by -1 on lambda,nu, but keeps the same x (it doesn't change the "group") -lambda,-nu are in the wrong chamber (for our fixed parabolic), so use w_0 (the long element of the Weyl group)
parameter 2 overloads
parameter (KGBElt x,KGBElt y,ratvec gamma) = Paramgamma=infinitesimal character to combine with x, found from real_form(y)
final argument gamma would work
parameter (KGBElt x, KGBElt y) = Paramthe next function used to be wrong, with choose_g(x,y) instead
computes gamma from real_form(y), x-dominant
also defined in basic.at, L_packet.at, K.at, extended_misc.at
is_subset
is_subset([Param] A,[Param] B) = boolA is a subset of B
also defined in basic.at
is_proper_subset
is_proper_subset([Param] A,[Param] B) = boolA is a proper subset of B
also defined in misc.at
complement
complement([Param] A,[Param] B) = [Param]complement of A in B
param_pol 2 overloads
param_pol ([Param] params,RealForm G) = ParamPolturn [Param] into a ParamPol
param_pol ([Param] params) = ParamPolturn [Param] into a ParamPol; error if #params=0
also defined in basic.at
remove_duplicates
remove_duplicates([Param] list) = [Param]replace [Param] with list with multiplicity one uses properties of ParamPols
also defined in restricted_roots.at, nilpotent_orbits.at, disconnected.at
compare
compare([Param] A_in,[Param] B_in)compare two lists of parameters
compare_long
compare_long([Param] A_in,[Param] B_in)see Vogan-dual.atL205
this gives a parameter for the dual group with infinitesimal character gL206
Commented-out code, lines 207–211 (3 lines)
set dual_parameter (KGBElt x, KGBElt y,ratvec g) = Param: parameter(y,x,g) set parameter_pair (KGBElt x, KGBElt y,ratvec gamma,ratvec g) = (Param,Param): (parameter(x,y,gamma), dual_parameter(x,y,g))
shift (up) a candidate dual infinitesimal character to strictly dominantL213
Commented-out code, lines 214–220 (5 lines)
set shift_g_regular (RootDatum rd, ratvec g) = ratvec:
for alpha@i in simple_roots(rd)
do let (v,d) = %fundamental_coweight(rd,i)
in g +:= (1-ceil(g*alpha/d)) * v
od; gGenerated from atlas-scripts at commit 648506c (2026-10-13).
Commented-out code, lines 81–87 (5 lines)