Unipotent Elements

Chevie.UradModule

This module contains functions for computing with unipotent elements of reductive groups; specifically to compute with elements of the unipotent radical of a Borel subgroup of a connected algebraic reductive group; these functions were initially written by Olivier Dudas in GAP3, partly inspired by older C code of Jean Michel.

The unipotent radical of a Borel subgroup is the product in any order of the root subgroups associated to the positive roots. We fix an order, which gives a canonical form to display elements and to compare them.

The computations use the Steinberg relations between root subgroups, which come from the choice of a Chevalley basis of the Lie algebra. The reference we follow is Carter1972, chapters 4 to 6.

We start with a root datum specified by a Weyl group W and build a struct UnipotentGroup which contains information about the maximal unipotent subgroup of the corresponding reductive group, that is the unipotent radical of the Borel subgroup determined by the positive roots.

julia> W=coxgroup(:E,6)
E₆

julia> U=UnipotentGroup(W)
UnipotentGroup(E₆)

Now, if α=roots(W,2), we construct the element u_α(4) of the root subgroup u_α:

julia> U(2=>4)
u2(4)

If we do not specify the coefficient we make by default u_α(1), so we have also:

julia> U(2)^4
u2(4)

We can make more complicated elements:

julia> U(2=>4)*U(4=>5)
u2(4)u4(5)

julia> U(2=>4,4=>5)
u2(4)u4(5)

If the roots are not in order the element is normalized:

julia> U(4=>5,2=>4)
u2(4)u4(5)u8(-20)

It is possible to display the decomposition of the roots in simple roots instead of their index:

julia> xdisplay(U(4=>5,2=>4);root=true)
u₀₁₀₀₀₀(4)u₀₀₀₁₀₀(5)u₀₁₀₁₀₀(-20)

The coefficients in the root subgroups can be elements of arbitrary rings. Here is an example using Mvp's:

julia> W=coxgroup(:E,8);U=UnipotentGroup(W)
UnipotentGroup(E₈)

julia> u=U(map(i->i=>Z(2)*Mvp(Symbol("x",Char(i+0x2080))),1:8)...)
u1(x₁)u2(x₂)u3(x₃)u4(x₄)u5(x₅)u6(x₆)u7(x₇)u8(x₈)
julia> cut(xrepr(u^16;limit=true,root=true),before="u",width=60)
u₂₂₃₄₃₂₁₀(x₁²x₂²x₃³x₄⁴x₅³x₆²x₇)
u₁₂₃₄₃₂₁₁(x₁x₂²x₃³x₄⁴x₅³x₆²x₇x₈)
u₁₂₂₄₃₂₂₁(x₁x₂²x₃²x₄⁴x₅³x₆²x₇²x₈)
u₁₂₂₃₃₃₂₁(x₁x₂²x₃²x₄³x₅³x₆³x₇²x₈)
u₂₂₃₄₃₂₁₁(x₁²x₂²x₃³x₄⁴x₅³x₆²x₇x₈)
u₁₂₂₄₃₃₂₁(x₁x₂²x₃²x₄⁴x₅³x₆³x₇²x₈)
u₁₂₂₄₄₃₂₁(x₁x₂²x₃²x₄⁴x₅⁴x₆³x₇²x₈)
u₂₂₃₄₃₃₂₁(x₁²x₂²x₃³x₄⁴x₅³x₆³x₇²x₈)
u₁₂₃₄₄₃₂₁(x₁x₂²x₃³x₄⁴x₅⁴x₆³x₇²x₈)
u₂₂₃₄₄₃₂₁(x₁²x₂²x₃³x₄⁴x₅⁴x₆³x₇²x₈)
u₂₃₃₅₄₃₂₁(x₁²x₂³x₃³x₄⁵x₅⁴x₆³x₇²x₈)
u₂₂₄₅₄₃₂₁(x₁²x₂²x₃⁴x₄⁵x₅⁴x₆³x₇²x₈)
u₂₃₄₆₅₄₃₂(x₁²x₂³x₃⁴x₄⁶x₅⁵x₆⁴x₇³x₈²)
julia> u^32
()

The above computation shows that in characteristic 2 the exponent of the unipotent group of E₈ is 32. More precisely, squaring doubles the height of the involved roots, so in the above u¹⁶ involves only roots of height 16 or more.

Various actions are defined on unipotent elements. Elements of the Weyl group act (through certain representatives) as long as no root subgroup is in their inversion set:

julia> W=coxgroup(:G,2)
G₂

julia> U=UnipotentGroup(W);@Mvp x,y

julia> u=U(1=>x,3=>y)
u1(x)u3(y)

julia> u^W(2,1)
u4(y)u5(x)
julia> u^W(1)
ERROR: u1(x)u3(y) should have no coefficient on root 1

Semisimple elements act by conjugation:

julia> s=SemisimpleElement(W,[E(3),2])
SemisimpleElement{Cyc{Int64}}: <ζ₃,2>

julia> u^s
u1(ζ₃x)u3(2ζ₃y)

As well as unipotent elements:

julia> u^U(2)
u1(x)u3(x+y)u4(-x-2y)u5(x+3y)u6(x²+3xy+3y²)
source
Chevie.Urad.UnipotentGroupType

A struct UnipotentGroup represents the unipotent radical 𝐔 of a Borel subgroup of a reductive group G.

See Carter1972, section 4.2 for details on the following. A Chevalley basis of the Lie algebra of 𝐔 is a basis eᵣ, where each eᵣ is in the corresponding root subspace, such that [eᵣ,eₛ]=Nᵣₛ e_{r+s} for some integer constants Nᵣₛ. The constants Nᵣₛ for general roots are computed from the case where r and s are positive roots whose sum is a root; such a pair (r,s) is called special.

Constants Cᵣₛᵢⱼ are defined, see Carter1972, 5.2.3, by

$u_s(u)u_r(t)=u_r(t)u_s(u)\prod_{i,j>0}u_{ir+js}(C_{rsij}(-t)^iu^j)$

Where ir+js runs over the positive integral combinations of r and s which are roots, taken in lexicographic order on (i,j). The constants Cᵣₛᵢⱼ are computed from the constants Nᵣₛ, see Carter1972, bottom of page 61 and top of page 76.

The fields of struct Unipotent Group are:

  • W: the Weyl group of G
  • order: the total order on the roots used to normalize products of root subgroups (by default 1:nref(W))
  • special: aNamedTuplefor each special pair of roots(r,s)`
  • r index of r
  • s index of s
  • rs index of r+s
  • N: the constant Nᵣₛ
  • comm: stores the Cᵣₛᵢⱼ as the list of quadruples (i,j,ir+js,Cᵣₛᵢⱼ).
julia> U=UnipotentGroup(coxgroup(:G,2))
UnipotentGroup(G₂)

julia> U.special
10-element Vector{@NamedTuple{r::Int64, s::Int64, rs::Int64, N::Int64, comm::Vector{NTuple{4, Int64}}}}:
 (r = 1, s = 2, rs = 3, N = 1, comm = [(1, 1, 3, 1), (1, 2, 4, -1), (1, 3, 5, 1), (2, 3, 6, 2)])
 (r = 2, s = 3, rs = 4, N = 2, comm = [(1, 1, 4, 2), (2, 1, 5, 3), (1, 2, 6, -3)])
 (r = 2, s = 4, rs = 5, N = 3, comm = [(1, 1, 5, 3)])
 (r = 1, s = 5, rs = 6, N = 1, comm = [(1, 1, 6, 1)])
 (r = 3, s = 4, rs = 6, N = 3, comm = [(1, 1, 6, 3)])
 (r = 2, s = 1, rs = 3, N = -1, comm = [(1, 1, 3, -1), (2, 1, 4, -1), (3, 1, 5, -1), (3, 2, 6, -1)])
 (r = 3, s = 2, rs = 4, N = -2, comm = [(1, 1, 4, -2), (2, 1, 6, -3), (1, 2, 5, 3)])
 (r = 4, s = 2, rs = 5, N = -3, comm = [(1, 1, 5, -3)])
 (r = 5, s = 1, rs = 6, N = -1, comm = [(1, 1, 6, -1)])
 (r = 4, s = 3, rs = 6, N = -3, comm = [(1, 1, 6, -3)])
source
Chevie.Urad.reorderFunction

'reorder(U,l[,order])'

This function takes a list of pairs 'r=>c' representing a unipotent element, where 'r' is a root and 'c' the corresponding coefficient, and puts it in canonical form, reordering the terms to agree with 'U.order' using the commutation relations. If a second argument is given, this is used instead of 'U.order'.

julia> U=UnipotentGroup(coxgroup(:G,2))
UnipotentGroup(G₂)

julia> l=reorder(U,[2=>4,1=>2])
6-element Vector{Pair{Int64, Int64}}:
 1 => 2
 2 => 4
 3 => -8
 4 => 32
 5 => -128
 6 => 512

julia> reorder(U,l,6:-1:1)
2-element Vector{Pair{Int64, Int64}}:
 2 => 4
 1 => 2
source
Chevie.Urad.abelianpartFunction

'abelianpart(u::UnipotentElement)'

If 𝐔 is the unipotent subgroup and D(𝐔) its derived subgroup, this function returns the projection of the unipotent element 'u' on 𝐔/D(𝐔), that is its coefficients on the simple roots.

julia> U=UnipotentGroup(coxgroup(:G,2));@Mvp x,y

julia> u=U(2=>y,1=>x)
u1(x)u2(y)u3(-xy)u4(xy²)u5(-xy³)u6(2x²y³)

julia> abelianpart(u)
u1(x)u2(y)
source
Chevie.Chars.decomposeFunction

decompose(ct::CharTable,c::Vector;exact=true)

decompose class function c (given by its values on conjugacy classes) on irreducible characters as given by CharTable ct. By default c is expected to be a virtual character so the result will be an integer vector. If c is not a virtual character give the keyword exact=false to get a correct result.

source

decompose(w,u::UnipotentElement)

w should be an element of the Weyl group corresponding to u. If 𝐔 is the unipotent radical of the Borel subgroup determined by the positive roots, and 𝐔⁻ the opposite unipotent radical, this function decomposes u into its component in 𝐔 ∩ ʷ𝐔⁻ and its component in 𝐔 ∩ ʷ𝐔.

julia> W=coxgroup(:G,2)
G₂

julia> U=UnipotentGroup(W);@Mvp x,y

julia> u=U(2=>y,1=>x)
u1(x)u2(y)u3(-xy)u4(xy²)u5(-xy³)u6(2x²y³)

julia> decompose(W(1),u)
2-element Vector{UnipotentElement{Mvp{Int64, Int64}}}:
 u1(x)
 u2(y)u3(-xy)u4(xy²)u5(-xy³)u6(2x²y³)

julia> decompose(W(2),u)
2-element Vector{UnipotentElement{Mvp{Int64, Int64}}}:
 u2(y)
 u1(x)
source