Reductive groups, semisimple elements

Chevie.Semisimple β€” Module

Algebraic groups and semi-simple elements

Let us fix an algebraically closed field K and let 𝐆 be a connected reductive algebraic group over K. Let 𝐓 be a maximal torus of 𝐆, let X(𝐓) be the character group of 𝐓 (resp. Y(𝐓) the dual lattice of one-parameter subgroups of 𝐓) and Ξ¦ (resp Ξ¦^) the roots (resp. coroots) of 𝐆 with respect to 𝐓.

Then 𝐆 is determined up to isomorphism by the root datum (X(𝐓),Ξ¦, Y(𝐓),Ξ¦^). In algebraic terms, this consists in giving a free β„€-lattice X=X(𝐓) of dimension the rank of 𝐓 (which is also called the rank of 𝐆), and a root system Ξ¦ βŠ‚ X, and similarly giving the dual roots Ξ¦^βŠ‚ Y=Y(𝐓).

This is obtained by a slight generalisation of our setup for a Coxeter group W. This time we assume that the canonical basis of the vector space V on which W acts is a β„€-basis of X, and Ξ¦ is specified by a matrix simpleroots(W) whose rows are the simple roots expressed in this basis of X. Similarly Ξ¦^ is described by a matrix simplecoroots(W) whose rows are the simple coroots in the basis of Y dual to the chosen basis of X. The duality pairing between X and Y is the canonical one, that is the pairing between vectors x∈ X and y∈ Y is given by transpose(x)*y. Thus, we must have the relation simplecoroots(W)*permutedims(simpleroots(W))=cartan(W).

We get this by using the function rootdatum, whose arguments are the two matrices simpleroots(W) and simplecoroots(W) described above. The roots need not generate V, so the matrices need not be square. For example, the root datum of the linear group of rank 3 can be obtained as:

julia> W=rootdatum([-1 1 0;0 -1 1],[-1 1 0;0 -1 1])
A₂Φ₁

julia> reflrep(W,W(1))
3Γ—3 Matrix{Int64}:
 0  1  0
 1  0  0
 0  0  1

here the Weyl group is the symmetric group on 3 letters acting by permutation of the basis of X. The dimension of X, size(simpleroots(W),2), is the rank and the dimension of the subspace generated by the roots, size(simpleroots(W),1), is called the semi-simple rank. In the example the rank is 3 and the semisimple rank is

The default form W=coxgroup(:A,2) defines the adjoint algebraic group (the group in its isogeny class with a trivial centre). In this case Ξ¦ is a basis of X, so simpleroots(W) is the identity matrix and simplecoroots(W) is the Cartan matrix cartan(W) of the root system.

The form coxgroup(:A,2,sc=true) constructs the semisimple simply connected algebraic group, where simpleroots(W) is the transposed of cartan(W) and simplecoroots(W) is the identity matrix.

An extreme form of root data can be specified more conveniently: when W is the trivial coxgroup() (in this case 𝐆 is a torus), the root datum has no roots, thus is entirely determined by the rank r. The function torus(r) constructs such a root datum (it could be also obtained by giving two 0Γ—r matrices to rootdatum).

Finally, the rootdatum function also understands some familiar names for the algebraic groups for which it gives the results that could be obtained by giving the appropriate simpleroots(W) and simplecoroots(W) matrices:

julia> rootdatum(:gl,3)   # same as the previous example
gl₃

The types of root data which are understood are :gl, :pgl, :sl, :slmod, :tgl :sp, :csp, :psp, :so, :pso, :cso, :halfspin, :gpin, :spin, :E6, :E6sc, :CE6, :E7, :E7sc, :CE7, :E8, :F4, :G2.

Semisimple elements

We construct semi-simple elements in two ways. The first way is for finite order elements of 𝐓, which over an algebraically closed field K are in bijection with elements of YβŠ— β„š /β„€ whose denominator is prime to the characteristic of K. These are represented as a vector of Rationals r such that 0≀r<1. The function ss constructs such a semisimple element from a vector of Rationals.

More generally a torus 𝐓 over a field K is isomorphic to (KΛ£)^n where n is the dimension of 𝐓, so a vector of elements of KΛ£ is a more general representation which is produced by the function SemisimpleElement; in this setting the result of ss is naturally interpreted as a Vector{Root1}, so it can also be obtained by calling SemisimpleElement which such a vector.

julia> G=rootdatum(:sl,4)
slβ‚„

julia> ss(G,[1//3,1//4,3//4,2//3])
SemisimpleElement{Root1}: <΢₃,ΞΆβ‚„,ΞΆβ‚„Β³,΢₃²>

julia> SemisimpleElement(G,[E(3),E(4),E(4,3),E(3,2)])
SemisimpleElement{Root1}: <΢₃,ΞΆβ‚„,ΞΆβ‚„Β³,΢₃²>

julia> L=reflection_subgroup(G,[1,3])
Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁Φ₁

julia> C=algebraic_center(L)
(Z0 = SubTorus(Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁Φ₁,[1 2 1]), AZ = Group(SemisimpleElement{Root1}[<1,1,-1>]), descAZ = [[1, 2]], ZD = Group(SemisimpleElement{Root1}[<-1,1,1>, <1,1,-1>]))

julia> T=torsion_subgroup(C.Z0,3)
Group(SemisimpleElement{Root1}[<΢₃,΢₃²,΢₃>])

julia> e=sort(elements(T))
3-element Vector{SemisimpleElement{Root1}}:
 <1,1,1>
 <΢₃,΢₃²,΢₃>
 <΢₃²,΢₃,΢₃²>

In the above, the Levi subgroup L of SLβ‚„ consisting of block-diagonal matrices of shape 2Γ—2 is constructed. The function algebraic_center returns a named tuple with : the neutral component Z⁰ of the center Z of L, represented by a basis of Y(Z⁰), a complement subtorus S of 𝐓 to Z⁰ represented similarly by a basis of Y(S), and semi-simple elements representing the classes of Z modulo Z⁰ , chosen in S. The classes Z/Z⁰ also biject to the fundamental group as given by the field .descAZ, see algebraic_center for an explanation. Finally the semi-simple elements of order 3 in Z⁰ are computed.

julia> e[3]^G(2)
SemisimpleElement{Root1}: <΢₃²,1,΢₃²>

julia> orbit(G,e[3])
6-element Vector{SemisimpleElement{Root1}}:
 <΢₃²,΢₃,΢₃²>
 <΢₃²,1,΢₃²>
 <΢₃,1,΢₃²>
 <΢₃²,1,΢₃>
 <΢₃,1,΢₃>
 <΢₃,΢₃²,΢₃>

Here is the same computation as above performed with semisimple elements whose coefficients are in the finite field FF(4), representing elements of slβ‚„(𝔽₄).

julia> G=rootdatum(:sl,4)
slβ‚„

julia> s=SemisimpleElement(G,Z(4).^[1,2,1])
SemisimpleElement{FFE{2}}: <Zβ‚„,Zβ‚„Β²,Zβ‚„>

julia> s^G(2)
SemisimpleElement{FFE{2}}: <Zβ‚„,1,Zβ‚„>

julia> orbit(G,s)
6-element Vector{SemisimpleElement{FFE{2}}}:
 <Zβ‚„,Zβ‚„Β²,Zβ‚„>
 <Zβ‚„,1,Zβ‚„>
 <Zβ‚„Β²,1,Zβ‚„>
 <Zβ‚„,1,Zβ‚„Β²>
 <Zβ‚„Β²,1,Zβ‚„Β²>
 <Zβ‚„Β²,Zβ‚„,Zβ‚„Β²>

We can compute the centralizer $C_𝐆 (s)$ of a semisimple element in 𝐆:

julia> G=coxgroup(:A,3)
A₃

julia> s=ss(G,[0,1//2,0])
SemisimpleElement{Root1}: <1,-1,1>

julia> centralizer(G,s)
Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=(A₁A₁)Ξ¦β‚‚

The result is an ExtendedReflectionGroup; the reflection group part is the Weyl group of $C_𝐆 ⁰(s)$ and the extended part are representatives of $C_𝐆 (s)$ modulo $C_𝐆⁰(s)$ taken as diagram automorphisms of the reflection part. Here it is printed as a coset $C_𝐆 ⁰(s)Ο•$ which generates $C_𝐆 (s)$.

source
Chevie.Semisimple.SubTorus β€” Type

SubTorus(W,Y::Matrix{<:Integer})

The function returns the subtorus 𝐒 of the maximal torus 𝐓 of the reductive group represented by the Weyl group W such that Y(𝐒) is the (pure) sublattice of Y(𝐓) generated by the (integral) vectors Y. A basis of Y(𝐒) in Hermite normal form (for easy memebership testing) is computed and stored in the field S.gens of the returned SubTorus struct. A basis of Y(𝐓) adapted to Y(𝐒) is also computed. This means a set of integral vectors, stored in S.complement, is computed such that M=vcat(S.gens,S.complement) is a basis of Y(𝐓) (equivalently M∈GL(Z^{rank(W)}). An error is raised if Y does not define a pure sublattice.

julia> W=coxgroup(:A,4)
Aβ‚„

julia> SubTorus(W,[1 2 3 4;2 3 4 1;3 4 1 1])
SubTorus(Aβ‚„,[1 0 3 -13; 0 1 2 7; 0 0 4 -3])

julia> SubTorus(W,[1 2 3 4;2 3 4 1;3 4 1 2])
ERROR: not a pure sublattice
Stacktrace:
 [1] error(::String) at ./error.jl:33
 [2] Chevie.Weyl.SubTorus(::FiniteCoxeterGroup{Perm{Int16},Int64}, ::Matrix{Int64}) at /home/jmichel/julia/Chevie.jl/src/Weyl.jl:1082
 [3] top-level scope at REPL[25]:1
source
Chevie.Semisimple.fundamental_group β€” Function

fundamental_group(W)

This function returns the fundamental group of the algebraic group defined by the Coxeter group struct W. This group is returned as a group of diagram automorphisms of the corresponding affine Weyl group, which is represented as a group of permutations of the set of simple roots enriched by the lowest root of each irreducible component. The definition we take of the fundamental group of a (not necessarily semisimple) reductive group is (P∩ Y(𝐓))/Q where P is the coweight lattice (the dual lattice in Y(𝐓)βŠ— β„š of the root lattice) and Q is the coroot latice. The bijection between elements of P/Q and diagram automorphisms is explained in the context of non-irreducible groups for example in Β§3.B BonnafΓ©2005.

julia> W=coxgroup(:A,3) # the adjoint group
A₃

julia> fundamental_group(W) # the 12th root is the lowest one
Group((1,12,3,2))

julia> W=rootdatum(:sl,4) # the semisimple simply connected group
slβ‚„

julia> fundamental_group(W)
Group(Perm{Int16}[])
source
Chevie.Semisimple.intermediate_group β€” Function

intermediate_group(W, indices)

This computes a rootdatum representing a semisimple algebraic group intermediate between the adjoint group –- obtained by a call like rootdatum(:pgl,4)–- and the simply connected semi-simple group –- obtained by a call like rootdatum(:sl,4). The group is specified by specifying a subset of the minuscule weights, which are weights whose scalar product with every coroot is in -1,0,1 (the weights are the elements of the weight lattice, the lattice in X(𝐓)βŠ— β„š dual to the coroot lattice). The non-trivial characters of the (algebraic) center of a semi-simple simply connected algebraic group are in bijection with the minuscule weights; this set is also in bijection with P/Q where P is the weight lattice and Q is the root lattice. If W is irreducible, the minuscule weights are part of the basis of the weight lattice given by the fundamental weights, which is the dual basis of the simple coroots. They can thus be specified by an index in the Dynkin diagram. The constructed group has lattice X(𝐓) generated by the sum of the root lattice and the weights with the given indices. If W is not irreducible, a minuscule weight is a sum of minuscule weights in different components. An element of indices is thus itself a list, interpreted as representing the sum of the corresponding weights.

julia> W=coxgroup(:A,3)
A₃

julia> fundamental_group(intermediate_group(W,Int[])) # adjoint
Group((1,12,3,2))

julia> fundamental_group(intermediate_group(W,Int[2])) # intermediate
Group((1,3)(2,12))
source
Chevie.Semisimple.quasi_isolated_reps β€” Method

quasi_isolated_reps(W,p=0)

W should be a Weyl group corresponding to an algebraic group 𝐆 over an algebraically closed field of characteristic 0. This function returns a list of semisimple elements for 𝐆, which are representatives of the 𝐆-orbits of quasi-isolated semisimple elements. It follows the algorithm given in Bonnafe2005. If a second argument p is given, it gives representatives of those quasi-isolated elements which exist in characteristic p.

julia> W=coxgroup(:E,6);l=quasi_isolated_reps(W)
5-element Vector{SemisimpleElement{Root1}}:
 <1,1,1,1,1,1>
 <1,-1,1,1,1,1>
 <1,1,1,΢₃,1,1>
 <΢₃,1,1,1,1,΢₃>
 <1,΢₆,΢₆,1,΢₆,1>

julia> map(s->isisolated(W,s),l)
5-element Vector{Bool}:
 1
 1
 1
 0
 0

julia> W=rootdatum(:E6sc);l=quasi_isolated_reps(W)
7-element Vector{SemisimpleElement{Root1}}:
 <1,1,1,1,1,1>
 <-1,1,1,-1,1,-1>
 <΢₃,1,΢₃²,1,΢₃,΢₃²>
 <΢₃²,1,΢₃,1,΢₃,΢₃²>
 <΢₃²,1,΢₃,1,΢₃²,΢₃>
 <΢₆⁡,1,΢₃²,1,΢₃,΢₃²>
 <΢₃²,1,΢₃,1,΢₃²,΢₆⁡>

julia> map(s->isisolated(W,s),l)
7-element Vector{Bool}:
 1
 1
 1
 1
 1
 1
 1

julia> Semisimple.quasi_isolated_reps(W,3)
2-element Vector{SemisimpleElement{Root1}}:
 <1,1,1,1,1,1>
 <-1,1,1,-1,1,-1>
source
Chevie.Semisimple.isisolated β€” Function

isisolated(WF::Spets,t::SemisimpleElement{Root1})

WF should be a Coxeter coset representing an algebraic coset 𝐆 β‹…Οƒ, where 𝐆 is a connected reductive group (represented by W=Group(WF)), and Οƒ is a quasi-central automorphism of 𝐆 defined by WF. The element t should be a semisimple element of 𝐆. The function returns a boolean describing whether tΟƒ is isolated, that is whether the Weyl group of C_𝐆 (tΟƒ)⁰ is not in any proper parabolic subgroup of W^Οƒ.

julia> WF=rootdatum(:u,6)
u₆

julia> l=quasi_isolated_reps(WF)
4-element Vector{SemisimpleElement{Root1}}:
 <1,1,1,1,1,1>
 <ΞΆβ‚„,ΞΆβ‚„,ΞΆβ‚„,ΞΆβ‚„Β³,ΞΆβ‚„Β³,ΞΆβ‚„Β³>
 <ΞΆβ‚„,ΞΆβ‚„,1,1,ΞΆβ‚„Β³,ΞΆβ‚„Β³>
 <ΞΆβ‚„,1,1,1,1,ΞΆβ‚„Β³>

julia> isisolated.(Ref(WF),l)
4-element BitVector:
 1
 1
 1
 0
source
Chevie.Semisimple.torsion_subgroup β€” Function

torsion_subgroup(S::SubTorus,n)

This function returns the subgroup of semi-simple elements of order dividing n in the subtorus S.

julia> G=rootdatum(:sl,4)
slβ‚„

julia> L=reflection_subgroup(G,[1,3])
Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁Φ₁

julia> C=algebraic_center(L)
(Z0 = SubTorus(Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁Φ₁,[1 2 1]), AZ = Group(SemisimpleElement{Root1}[<1,1,-1>]), descAZ = [[1, 2]], ZD = Group(SemisimpleElement{Root1}[<-1,1,1>, <1,1,-1>]))

julia> T=torsion_subgroup(C.Z0,3)
Group(SemisimpleElement{Root1}[<΢₃,΢₃²,΢₃>])

julia> sort(elements(T))
3-element Vector{SemisimpleElement{Root1}}:
 <1,1,1>
 <΢₃,΢₃²,΢₃>
 <΢₃²,΢₃,΢₃²>
source
Chevie.Semisimple.algebraic_center β€” Function

algebraic_center(W)

W should be a Weyl group, or an extended Weyl group. This function returns a description of the center Z of the algebraic group 𝐆 defined by W as a named tuple with the following fields:

Z0: the neutral component Z⁰ of Z as a subtorus of 𝐓.

AZ: representatives in Z of A(Z):=Z/Z⁰ given as a group of semisimple elements.

ZD: center of the derived subgroup of 𝐆 given as a group of semisimple elements.

descAZ: if W is not an extended Weyl group, describes A(Z) as a quotient of the center pi of the simply connected covering of 𝐆 (an incarnation of the fundamental group). It contains a list of elements given as words in the generators of pi which generate the kernel of the quotient map.

julia> G=rootdatum(:sl,4)
slβ‚„

julia> L=reflection_subgroup(G,[1,3])
Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁

ulia> C=algebraic_center(L)
(Z0 = SubTorus(Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁Φ₁,[1 2 1]), AZ = Group(SemisimpleElement{Root1}[<1,1,-1>]), descAZ = [[1, 2]], ZD = Group(SemisimpleElement{Root1}[<-1,1,1>, <1,1,-1>]))

julia> G=coxgroup(:A,3)
A₃

julia> s=ss(G,[0,1//2,0])
SemisimpleElement{Root1}: <1,-1,1>

julia> C=centralizer(G,s)
Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=(A₁A₁)Ξ¦β‚‚

julia> algebraic_center(C)
(Z0 = SubTorus(Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=A₁×A₁Φ₁,Matrix{Int64}(undef, 0, 3)), AZ = Group(SemisimpleElement{Root1}[<1,-1,1>]))
source
Chevie.Semisimple.weightinfo β€” Function

weightinfo(W)

W is a Coxeter group record describing an algebraic group 𝐆, or a IypeIrred. The function is independent of the isogeny type of 𝐆(so just depends on refltype(W), that is on the root system). It returns a dict with the following keys:

  • :minusculeWeights the minuscule weights, described as their position in the list of fundamental weights. For non-irreducible groups, a weight is the sum of at most one weight in each irreducible component. It is represented as the list of its components. For consistency, in the case of an irreducible system, a weight is represented as a one-element list.

  • :minusculeCoweights the minuscule coweights, represented in the same manner as the minuscule weights

  • :decompositions for each coweight, its decomposition in terms of the generators of the adjoint fundamental group (given by the list of the exponents of the generators). Together with the next field it enables to work out the group structure of the adjoint fundamental group.

  • :moduli the list of orders of the generators of the fundamental group.

  • :AdjointFundamentalGroup the list of generators of the adjoint fundamental group, given as permutations of the extended root basis.

  • :CenterSimplyConnected A list of semisimple elements generating the center of the universal covering of 𝐆

  • :chosenAdaptedBasis A basis of the weight lattice adapted to the root lattice. In the basis of the fundamental weights, the root lattice is given by C=transpose(cartan(W)). The property specifying the :chosenAdaptedBasis is that the Hermite normal form of C*chosenAdaptedBasis is almost in Smith normal form (it is diagonal but the diagonal entries may be permuted compared to the Smith normal form; the non-trivial entries are in the positions corresponding to the generators of the fundamental group as indicated by :decompositions).

julia> weightinfo(coxgroup(:A,2)*coxgroup(:B,2))
Dict{Symbol, Array} with 7 entries:
  :moduli                  => [3, 2]
  :minusculeWeights        => [[1, 3], [1], [2, 3], [2], [3]]
  :decompositions          => [[2, 1], [2, 0], [1, 1], [1, 0], [0, 1]]
  :chosenAdaptedBasis      => [1 -1 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]
  :minusculeCoweights      => [[1, 4], [1], [2, 4], [2], [4]]
  :CenterSimplyConnected   => Vector{Rational{Int64}}[[1//3, 2//3, 0, 0], [0, 0…
  :AdjointFundamentalGroup => [(1,12,2), (4,14)]
source
PermGroups.Groups.centralizer β€” Method

centralizer(W,s::SemisimpleElement)

W should be a Weyl group or an extended reflection group and s a semisimple element of the algebraic group G corresponding to W. This function returns the Weyl group of $C_G(s)$, which describes it. The stabilizer is an extended reflection group, with the reflection group part equal to the Weyl group of $C_{G⁰}(s)$, and the diagram automorphism part being those induced by $C_G(s)$.

julia> G=coxgroup(:A,3)
A₃
julia> s=ss(G,[0,1//2,0])
SemisimpleElement{Root1}: <1,-1,1>
julia> centralizer(G,s)
Aβ‚ƒβ‚β‚β‚ƒβ‚Ž=(A₁A₁)Ξ¦β‚‚
source
Chevie.Semisimple.semisimple_centralizer_representatives β€” Function

semisimple_centralizer_representatives(W [,p]) or sscentralizer_reps

W should be a Weyl group corresponding to an algebraic group 𝐆. This function returns a list describing representatives 𝐇 of 𝐆-orbits of reductive subgroups of 𝐆 which are the identity component of the centralizer of a semisimple element. Each group 𝐇 is specified by a list h of reflection indices in W such that 𝐇 corresponds to reflection_subgroup(W,h). If a second argument p is given, only the list of the centralizers which occur in characteristic p is returned.

julia> W=coxgroup(:G,2)
Gβ‚‚

julia> sscentralizer_reps(W)
6-element Vector{Vector{Int64}}:
 []
 [1]
 [2]
 [1, 2]
 [1, 5]
 [2, 6]

julia> reflection_subgroup.(Ref(W),sscentralizer_reps(W))
6-element Vector{FiniteCoxeterSubGroup{Perm{Int16},Int64}}:
 Gβ‚‚β‚β‚Ž=Φ₁²
 Gβ‚‚β‚β‚β‚Ž=A₁Φ₁
 Gβ‚‚β‚β‚‚β‚Ž=Ã₁Φ₁
 Gβ‚‚
 Gβ‚‚β‚β‚β‚…β‚Ž=Aβ‚‚
 Gβ‚‚β‚β‚‚β‚†β‚Ž=Ã₁×A₁

julia> sscentralizer_reps(W,2)
5-element Vector{Vector{Int64}}:
 []
 [1]
 [2]
 [1, 2]
 [1, 5]
source
Chevie.Semisimple.structure_rational_points_connected_centre β€” Function

structure_rational_points_connected_centre(W,q)

W should be a Coxeter group or a Coxeter coset representing a finite reductive group $𝐆 ^F$, and q should be the prime power associated to the isogeny F. The function returns the abelian invariants of the finite abelian group $Z⁰𝐆 ^F$ where Z⁰𝐆 is the connected center of 𝐆.

In the following example one determines the structure of 𝐓(𝔽₃) where 𝐓 runs over all the maximal tori of SLβ‚„.

julia> l=twistings(rootdatum(:sl,4),Int[])
5-element Vector{Spets{FiniteCoxeterSubGroup{Perm{Int16},Int64}}}:
 Aβ‚ƒβ‚β‚Ž=Φ₁³
 Aβ‚ƒβ‚β‚Ž=Φ₁²Φ₂
 Aβ‚ƒβ‚β‚Ž=Φ₁Φ₂²
 Aβ‚ƒβ‚β‚Ž=Φ₁Φ₃
 Aβ‚ƒβ‚β‚Ž=Ξ¦β‚‚Ξ¦β‚„

julia> structure_rational_points_connected_centre.(l,3)
5-element Vector{Vector{Int64}}:
 [2, 2, 2]
 [2, 8]
 [4, 8]
 [26]
 [40]

julia-repl

source