Let us fix an algebraically closed field K and let G be a connected reductive algebraic group over K. Let T be a maximal torus of G, let X(T) be the character group of T (resp. Y(T) the dual lattice of one-parameter subgroups) and Φ (resp Φ∨) the roots (resp. coroots) of G with respect to T.
Then G is determined up to isomorphism by the root datum (X(T),Φ, Y(T),Φ∨). In algebraic terms, this consists in giving a root system Φ ⊂ X(T), where X(T) is a free Z-lattice of dimension the rank of G, and giving similarly the dual roots Φ∨⊂ Y(T).
This is obtained by a slight generalization of our setup for Coxeter
groups. This time we assume the canonical basis of our vector space V is
a basis of X(T), and Φ is specified by a matrix R
whose lines are
the simple roots expressed in this basis of V. Similarly Φ∨ is
described by a matrix R1
whose lines are the simple coroots in the basis
of Y(T) dual to the chosen basis of X(T).
We get that by a new form of the function CoxeterGroup
, where the
arguments are the two matrices R
and R1
described above. The roots need
not generate V, so the matrices need not be square. For instance, the
root datum of the linear group of rank 3 can be specified as:
gap> W := CoxeterGroup( [ [ -1, 1, 0], [ 0, -1, 1 ] ], > [ [ -1, 1, 0], [ 0, -1, 1 ] ] ); CoxeterGroup([[-1,1,0],[0,-1,1]],[[-1,1,0],[0,-1,1]]) gap> MatXPerm( W, W.1); [ [ 0, 1, 0 ], [ 1, 0, 0 ], [ 0, 0, 1 ] ]
here the symmetric group on 3 letters acts by permutation of the basis vectors of V --- the semi-simple rank is 2; the integral elements of V correspond to the characters of a maximal torus, and the integral elements of V∨ to one-parameter subgroups of that torus.
The default form CoxeterGroup("A",2)
corresponds to the adjoint
algebraic group (the group with a trivial center). In that case Φ is a
basis of X(T), so R
is the identity matrix and R1
is the Cartan
matrix C
of the root system. The form CoxeterGroup("A",2,"sc")
constructs the semisimple simply connected algebraic group, where R
is
the transposed of C
and R1
is the identity matrix. In general we have
the relation R1*TransposedMat(R)=C
.
There is also a function RootDatum
which understands some familiar names
for the algebraic groups and gives the results that could be obtained by
giving the appropriate matrices R
and R1
:
gap> RootDatum("sl",3); # same as CoxeterGroup("A",2,"sc") RootDatum("sl",3)
It is also possible to compute with finite order elements of T. Over an
algebraically closed field, finite order elements of T are in bijection
with elements of Q/Z⊗ Y(T) whose denominator is prime to the
characteristic of the field. These are represented as elements of a vector
space of rank r over Q, taken Mod1
whenever the need arises, where
Mod1
is the function which replaces the numerator of a fraction with the
numerator mod
the denominator; the fraction /pq represents a
primitive p-th root of unity raised to the p-th power. In this
representation, multiplication of roots of unity becomes addition Mod1
of
rationals and rasing to the power n becomes multiplication by n. One
can also just give elements of a field which are treated as such.
Here is an example of computations with semisimple-elements given as list inb Q/Z.
gap> G:=RootDatum("sl",4); RootDatum("sl",4) gap> L:=ReflectionSubgroup(G,[1,3]); ReflectionSubgroup(RootDatum("sl",4), [ 1, 3 ]) gap> AlgebraicCentre(L); rec( Z0 := [ [ 1, 2, 1 ] ], complement := [ [ 0, 1, 0 ], [ 0, 0, 1 ] ], AZ := Group( <0,0,1/2> ) ) gap> SemisimpleSubgroup(G,last.Z0,3); Group( <1/3,2/3,1/3> ) gap> Elements(last); [ <0,0,0>, <1/3,2/3,1/3>, <2/3,1/3,2/3> ] gap> s:=last[2]; <1/3,2/3,1/3>
First, the group G=SL4 is constructed, then the Levi subgroup L
consisting of block-diagonal matrices of shape 2× 2. The function
AlgebraicCentre
returns a record with three fields: a basis of the
sub-lattice Y(Z0) of Y(T), where Z0 is the connected component of
the identity in the centre Z of L, a basis of a complement lattice of
Y(Z0) in Y(T) representing a subtorus S of T complement to Z0,
and semi-simple elements which are representatives of the classes of Z
modulo Z0 , chosen in S. Then the semi-simple elements of order 3 in
Z0 are computed.
gap> s^G.2; <1/3,0,1/3> gap> Orbit(G,s); [ <1/3,2/3,1/3>, <1/3,0,1/3>, <2/3,0,1/3>, <1/3,0,2/3>, <2/3,0,2/3>, <2/3,1/3,2/3> ]
Here is the same computation performed with semisimple elements whose
coefficients are in the finite field GF(3)
:
gap> s:=SemisimpleElement(G,Z(3)*[1,1,2]); <Z(3),Z(3),Z(3)^0> gap> s^G.2; <Z(3),Z(3)^0,Z(3)^0> gap> Orbit(G,s); [ <Z(3),Z(3),Z(3)^0>, <Z(3)^0,Z(3),Z(3)^0>, <Z(3),Z(3)^0,Z(3)^0>, <Z(3),Z(3),Z(3)>, <Z(3)^0,Z(3),Z(3)>, <Z(3)^0,Z(3)^0,Z(3)> ]
The function SemisimpleCentralizer
computes the centralizer CG(s)
of a semisimple element in G:
gap> G:=CoxeterGroup("A",3); CoxeterGroup("A",3) gap> s:=SemisimpleElement(G,[0,1/2,0]); <0,1/2,0> gap> SemisimpleCentralizer(G,s); Extended((A1xA1)<1,3>.(q+1))
The result is an extended reflection group; the reflection group part is the Weyl group of CG0(s) and the extended part are representatives of CG(s) modulo CG0(s) taken as diagram automorphisms of the reflection part. Here is is printed as a coset CG0(s)φ which generates CG(s).
CoxeterGroup( simpleRoots, simpleCoroots )
CoxeterGroup( C[, "sc"] )
CoxeterGroup( type1, n1, ... , typek, nk[, "sc"] )
Here we describe the extended forms of the function CoxeterGroup
allowing
to specify more general root data. In the first form a set of roots is
given explicitly as the lines of the matrix simpleRoots, representing
vectors in a vector space V, as well as a set of coroots as the lines of
the matrix simpleCoroots expressed in the dual basis of V∨. The
product C=simpleCoroots*TransposedMat(simpleRoots)
must be a valid
Cartan matrix. The dimension of V can be greater than Length(C)
. The
length of C is called the semisimple rank of the Coxeter datum, while
the dimension of V is called its rank.
In the second form C is a Cartan matrix, and the call CoxeterGroup(C)
is equivalent to CoxeterGroup(IdentityMat(Length(C)),C)
. The new
situation is when the optional "sc"
argument is given; then the
situation is reversed: the simple coroots are given by the identity
matrix, and the simple roots by the transposed of C (this corresponds to
the embedding of the root system in the lattice of characters of a maximal
torus in a simply connected algebraic group).
The argument "sc"
can also be given in the third form with the same
effect.
The following fields in a Coxeter group record complete the description of the corresponding root datum:
simpleRoots
:
simpleCoroots
:
matgens
:This function requires the package "chevie" (see RequirePackage).
RootDatum(type,rank)
This function returns the root datum for the algebraic group decribed by
type and rank. The types understood as of now are: "gl"
, "sl"
,
"pgl"
, "sp"
, "so"
, "psp"
, "pso"
, "halfspin"
and
"spin"
.
gap> RootDatum("spin",8);# same as CoxeterGroup("D",4,"sc") RootDatum("spin",8)
This function requires the package "chevie" (see RequirePackage).
73.3 FundamentalGroup for Weyl groups
FundamentalGroup(W)
This function returns the fundamental group corresponding to the Weyl group record W as diagram automorphisms of the corresponding affine Weyl group induced by W, thus as a group of permutations of the simple roots and the lowest root of each irreducible component.
gap> W:=CoxeterGroup("A",3); CoxeterGroup("A",3) gap> FundamentalGroup(W); Group( ( 1, 2, 3,12) ) gap> W:=CoxeterGroup("A",3,"sc"); CoxeterGroup("A",3,"sc") gap> FundamentalGroup(W); Group( () )
This function requires the package "chevie" (see RequirePackage).
IntermediateGroup(W, indices)
This computes a Weyl group record representing an algebraic group
intermediate between the adjoint group --- obtained by a call like
CoxeterGroup("A",3)
--- and the simply connected semi-simple group ---
obtained by a call like CoxeterGroup("A",3,"sc")
. The group is
specified by specifying a subset of the minuscule weights, which are
weights with scalar product in -1,0,1 with every coroot. The non-trivial
elements of the (algebraic) center of a semi-simple simply connected
algebraic group are in bijection with the minuscule weights. The minuscule
weights are specified, if W is irreducible, by the list indices of
their position in the Dynkin diagram (see PrintDiagram). The constructed
group has lattice X(T) generated by the sum of the root lattice and the
weights with the given indices.
gap> W:=CoxeterGroup("A",3);; gap> IntermediateGroup(W,[]); # adjoint CoxeterGroup("A",3) gap> IntermediateGroup(W,[2]);# intermediate CoxeterGroup([ [ 2, 0, -1 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ],[ [ 1, -1, 0 ], [ -1, 2, -1 ], [ 1, -1, 2 ] ]) gap> FundamentalGroup(last); Group( ( 1, 3)( 2,12) )
This function requires the package "chevie" (see RequirePackage).
Mod1(r)
This is a utility function for working in Q/Z. The argument should be
a rational or a list. If r is a rational, it returns
(Numerator(r) mod Denominator(r))/Denominator(r)
. If r is a list,
it returns List(r,Mod1)
.
gap> Mod1([-2/3,-1,7/4,3]); [ 1/3, 0, 3/4, 0 ]
This function requires the package "chevie" (see RequirePackage).
SemisimpleElement(W,v)
W should be a root datum, given as a Coxeter group record for a Weyl
group, and v a list of elements of length W.rank
. The result is a
semisimple element record, which has the fields:
.v
:Mod1
if they are rational.
.group
:
gap> G:=CoxeterGroup("A",3);; gap> s:=SemisimpleElement(G,[0,1/2,0]); <0,1/2,0>
This function requires the package "chevie" (see RequirePackage).
73.7 Operations for Semisimple elements
The arithmetic operations *
, /
and ^
work for semisimple elements.
They also have Print
and String
methods. We first give an element with
elements of Q/Z representating roots of unity.
gap> G:=CoxeterGroup("A",3); CoxeterGroup("A",3) gap> s:=SemisimpleElement(G,[0,1/2,0]); <0,1/2,0> gap> t:=SemisimpleElement(G,[1/2,1/3,1/7]); <1/2,1/3,1/7> gap> s*t; <1/2,5/6,1/7> gap> t^3; <1/2,0,3/7> gap> t^-1; <1/2,2/3,6/7> gap> t^0; <0,0,0> gap> String(t); "<1/2,1/3,1/7>"
GF(5)
:
gap> s:=SemisimpleElement(G,Z(5)*[1,2,1]); <Z(5),Z(5)^2,Z(5)> gap> t:=SemisimpleElement(G,Z(5)*[2,3,4]); <Z(5)^2,Z(5)^0,Z(5)^3> gap> s*t; <Z(5)^3,Z(5)^2,Z(5)^0> gap> t^3; <Z(5)^2,Z(5)^0,Z(5)> gap> t^-1; <Z(5)^2,Z(5)^0,Z(5)> gap> t^0; <Z(5)^0,Z(5)^0,Z(5)^0> gap> String(t); "<Z(5)^2,Z(5)^0,Z(5)^3>"
The operation ^
also works for applying an element of its defining Weyl
group to a semisimple element, which allows orbit computations:
gap> s:=SemisimpleElement(G,[0,1/2,0]); <0,1/2,0> gap> s^G.2; <1/2,1/2,1/2> gap> Orbit(G,s); [ <0,1/2,0>, <1/2,1/2,1/2>, <1/2,0,1/2> ]
The operation ^
also works for applying a root to a semisimple element:
gap> s:=SemisimpleElement(G,[0,1/2,0]); <0,1/2,0> gap> s^G.roots[4]; 1/2 gap> s:=SemisimpleElement(G,Z(5)*[1,1,1]); <Z(5),Z(5),Z(5)> gap> s^G.roots[4]; Z(5)^2
Frobenius( WF )
:WF
is a Coxeter coset associated to the
Coxeter group W, the function Frobenius
returns the associated
automorphism which can be applied to semisimple elements, see Frobenius.
gap> W:=CoxeterGroup("D",4);;WF:=CoxeterCoset(W,(1,2,4));; gap> s:=SemisimpleElement(W,[1/2,0,0,0]); <1/2,0,0,0> gap> F:=Frobenius(WF); function ( arg ) ... end gap> F(s); <0,1/2,0,0> gap> F(s,-1); <0,0,0,1/2>
These functions require the package "chevie" (see RequirePackage).
SemisimpleCentralizer( W, s)
W should be a Weyl group record and s a semisimple element for W. This function returns the stabilizer of the semisimple element s in W, which describes also CG(s), if G is the algebraic group described by W. The stabilizer is an extended reflection group, with the reflection group part equal to the Weyl group of CG0(s), and the diagram automorphism part being those induced by CG(s)/CG0(s) on CG0(s).
gap> G:=CoxeterGroup("A",3); CoxeterGroup("A",3) gap> s:=SemisimpleElement(G,[0,1/2,0]); <0,1/2,0> gap> SemisimpleCentralizer(G,s); Extended((A1xA1)<1,3>.(q+1))
This function requires the package "chevie" (see RequirePackage).
73.9 AlgebraicCentre
AlgebraicCentre( W )
W should be a Weyl group record, that is a Coxeter group record where
.simpleRoots
and .simpleCoroots
are integral, or an extended Weyl group
record. This function returns a description of the centre Z of the
algebraic group defined by W (it is a non-connected group for an extended
Weyl group) as a record with the following fields:
Z0
:
complement
:Z0
in Y(T) where
S is a complement torus to Z0 in T.
AZ
:
gap> G:=CoxeterGroup("A",3,"sc"); CoxeterGroup("A",3,"sc") gap> L:=ReflectionSubgroup(G,[1,3]); ReflectionSubgroup(CoxeterGroup("A",3,"sc"), [ 1, 3 ]) gap> AlgebraicCentre(L); rec( Z0 := [ [ 1, 2, 1 ] ], complement := [ [ 0, 1, 0 ], [ 0, 0, 1 ] ], AZ := Group( <0,0,1/2> ) ) gap> G:=CoxeterGroup("A",3);; gap> s:=SemisimpleElement(G,[0,1/2,0]);; gap> SemisimpleCentralizer(G,s); Extended((A1xA1)<1,3>.(q+1)) gap> AlgebraicCentre(last); rec( Z0 := [ ], complement := [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ], AZ := Group( <1/2,1/2,1/2> ) )
This function requires the package "chevie" (see RequirePackage).
73.10 SemisimpleSubgroup
SemisimpleSubgroup( W, V, n )
This function returns the subgroup of semi-simple elements of order dividing n in the subtorus S of the maximal torus T of the algebraic group defined by W, where S is represented by V, an integral basis of the sublattice Y(S) of Y(T).
gap> G:=CoxeterGroup("A",3,"sc");; gap> L:=ReflectionSubgroup(G,[1,3]);; gap> z:=AlgebraicCentre(L);; gap> z.Z0; [ [ 1, 2, 1 ] ] gap> SemisimpleSubgroup(G,z.Z0,3); Group( <1/3,2/3,1/3> ) gap> Elements(last); [ <0,0,0>, <1/3,2/3,1/3>, <2/3,1/3,2/3> ]
This function requires the package "chevie" (see RequirePackage).
73.11 IsIsolated
IsIsolated(W,s)
s should be a semi-simple element for the algebraic group G specified by the Weyl group record W. A semisimple element s of an algebraic group G is isolated if the connected component CG0(s) does not lie in a proper parabolic subgroup of G. This function tests this condition.
gap> W:=CoxeterGroup("E",6);; gap> QuasiIsolatedRepresentatives(W); [ <0,0,0,0,0,0>, <0,0,0,1/3,0,0>, <0,1/6,1/6,0,1/6,0>, <0,1/2,0,0,0,0>, <1/3,0,0,0,0,1/3> ] gap> Filtered(last,x->IsIsolated(W,x)); [ <0,0,0,0,0,0>, <0,0,0,1/3,0,0>, <0,1/2,0,0,0,0> ]
This function requires the package "chevie" (see RequirePackage).
73.12 IsQuasiIsolated
IsQuasiIsolated(W,s)
s should be a semi-simple element for the algebraic group G specified by the Weyl group record W. A semisimple element s of an algebraic group G is quasi-isolated if CG(s) does not lie in a proper parabolic subgroup of G. This function tests this condition.
gap> W:=CoxeterGroup("E",6);; gap> QuasiIsolatedRepresentatives(W); [ <0,0,0,0,0,0>, <0,0,0,1/3,0,0>, <0,1/6,1/6,0,1/6,0>, <0,1/2,0,0,0,0>, <1/3,0,0,0,0,1/3> ] gap> Filtered(last,x->IsQuasiIsolated(ReflectionSubgroup(W,[1,3,5,6]),x)); [ <0,0,0,0,0,0>, <0,0,0,1/3,0,0>, <0,1/2,0,0,0,0> ]
This function requires the package "chevie" (see RequirePackage).
73.13 QuasiIsolatedRepresentatives
QuasiIsolatedRepresentatives(W)
W should be a Weyl group record corresponding to an algebraic group G. This function returns a list of semisimple elements for G, which are representatives of the G-orbits of quasi-isolated semisimple elements. It follows the algorithm given by C. Bonnafé in Bon05.
gap> W:=CoxeterGroup("E",6);;QuasiIsolatedRepresentatives(W); [ <0,0,0,0,0,0>, <0,0,0,1/3,0,0>, <0,1/6,1/6,0,1/6,0>, <0,1/2,0,0,0,0>, <1/3,0,0,0,0,1/3> ] gap> List(last,x->IsIsolated(W,x)); [ true, true, false, true, false ] gap> W:=CoxeterGroup("E",6,"sc");;QuasiIsolatedRepresentatives(W); [ <0,0,0,0,0,0>, <1/3,0,2/3,0,1/3,2/3>, <1/2,0,0,1/2,0,1/2>, <2/3,0,1/3,0,1/3,2/3>, <2/3,0,1/3,0,2/3,1/3>, <2/3,0,1/3,0,2/3,5/6>, <5/6,0,2/3,0,1/3,2/3> ] gap> List(last,x->IsIsolated(W,x)); [ true, true, true, true, true, true, true ]
This function requires the package "chevie" (see RequirePackage).
73.14 StructureRationalPointsConnectedCentre
StructureRationalPointsConnectedCentre(G,q)
G should be a root datum or a twisted root datum representing a finite reductive group and q should be a prime power. The function returns the abelian invariants of the finite abelian group Z(q) where Z is the connected center of G.
In the following example one determines the structure of T(3) where T runs over all the maximal tori of SL4.
gap> G:=RootDatum("sl",4); RootDatum("sl",4) gap> List(Twistings(G,[]),T->StructureRationalPointsConnectedCentre(T,3)); [ [ 2, 2, 2 ], [ 2, 8 ], [ 4, 8 ], [ 26 ], [ 40 ] ]
This function requires the package "chevie" (see RequirePackage).
Previous Up Next
Index
GAP 3.4.4