82 Reflections, and reflection groups

Central in CHEVIE is the notion of reflection groups.

Let V be a vector space over a subfield K of the complex numbers; in GAP3 this usually means the Rationals, the Cyclotomics, or a subfield. A complex reflection is an element s∈ GL(V) of finite order whose fixed point set is an hyperplane (we will in the following just call it a reflection to abbreviate; in some literature the term reflection is only employed when the order is 2 and the more general case is called a pseudo-reflection). Thus a reflection has a unique eigenvalue not equal to 1. If K is a subfield of the real numbers, we get a real reflection which is necessarily of order 2 and the non-trivial eigenvalue is equal to -1.

A reflection group W is a group generated by a finite number of complex reflections.

Since when W contains a reflection s it contains its powers, W is always generated by reflections s with eigenvalue E(d) where d is the order of s; we may in addition assume that s is not a power of another reflection with eigenvalue E(d') with d'>d. Such a reflection is called distinguished; we take it as the canonical generator of the cyclic subgroup it generates. The generators of reflection groups in CHEVIE are always distinguished reflections. In a real reflection group all reflections are distinguished.

Reflection groups in CHEVIE are groups W with the following fields (in the group record) defined


the number of reflections which generate W


a list of distinguished reflections, given as elements of W, such that a list of reflections which generate W is W.reflections{[1..W.nbGeneratingReflections]}.


a list (of length at least W.nbGeneratingReflections) such that its i-th element is the order of W.reflections[i]. By the above conventions W.reflections[i] thus has E(W.OrdersGeneratingReflections[i]) as its nontrivial eigenvalue.

Note that W does not need to be a matrix group. The meaning of the above fields is just that W has a representation (called the reflection representation of W) where the elements W.reflections operate as reflections. It is much more efficient to compute with permutation groups which have such fields defined, than with matrix groups, when possible. Information sufficient to determine a particular reflection representation is stored for such groups (see CartanMat).

Also note that, although .reflections is usually just initialized to the generating reflections, it is usually augmented by adding other reflections to it as computations require. For instance, when W is finite, the set of all reflections in W is finite (they are just the elements of the conjugacy classes of the generating reflections and their powers), and all the distinguished reflections in W are added to .reflections when required, for instance when calling Reflections(W) which returns the list of all (distinguished) reflections. Note that when W is finite, the distinguished reflections are in bijection with the reflecting hyperplanes.

There are very few functions in CHEVIE which deal with reflections groups in full generality. Usually the groups one wants to deal with is in a more restricted class (Coxeter groups, finite reflection groups) which are described in the following chapters.


  1. Reflection
  2. AsReflection
  3. CartanMat
  4. Rank
  5. SemisimpleRank

82.1 Reflection

Reflection( root, coroot)

A (complex) reflection s acting on the vector space V (over some subfield of the complex numbers), is a linear map of finite order whose fixed points are an hyperplane H (called the reflecting hyperplane of s); an eigenvector r for the non-trivial eigenvalue ζ (a root of unity) is called a root of s. We may chose a linear form r (called a coroot of s) defining H such that r(r)=1-ζ and then as a linear map s is given by x→ x-r(x)r.

A first way of specifying a reflection is by giving a root and a coroot, which are uniquely determined by the reflection up to multiplication of the root by a scalar and of the coroot by the inverse scalar. The function Reflection gives the matrix of the corresponding reflection in the standard basis of V, where the root and the coroot are vectors given in the standard bases of V and V (thus in GAP3 r(r) is obtained as root*coroot).

    gap> r:=Reflection([1,0,0],[2,-1,0]);
    [ [ -1, 0, 0 ], [ 1, 1, 0 ], [ 0, 0, 1 ] ]
    gap> r=CoxeterGroup("A",3).matgens[1];
    gap> [1,0,0]*r;
    [ -1, 0, 0 ]

As we see in the last line, in GAP3 the matrices operate from the right on the vector space.

Reflection( root [, eigenvalue] )

We may give slightly less information if we assume that the standard hermitian scalar product (x,y) on V (given in GAP3 by x*ComplexConjugate(y)) is s-invariant. Then, identifying V and V via this scalar product, s is given by the formula

x→ x-(1-ζ)(x,r)/(r,r)r

so s is specified by just root and eigenvalue. When eigenvalue is omitted it is assumed to be equal to -1. The function Reflection gives again the matrix of the reflection.

    gap> Reflection([0,0,1],E(3));
    [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, E(3) ] ]
    gap> last=ComplexReflectionGroup(25).matgens[1];

Reflection( W, i )

This form returns the reflection with respect to the i-th root in the finite reflection group W (this works only for groups represented as permutation groups of the roots, see Finite Reflection Groups). Note that one would not get the same result with W.reflections[i] since this entry might not yet be bound (not yet have been computed), and also it is not guaranteed apart from the generating roots (and the positive roots of Weyl groups) that the i-th reflection corresponds to the i-th root, since two roots corresponding to the same reflection may have been obtained before all the reflections have been obtained.

    gap> Reflection(CoxeterGroup("A",3),6);
    ( 1,11)( 3,10)( 4, 9)( 5, 7)( 6,12)

82.2 AsReflection

AsReflection( s [,r])

Here s is a square matrix with entries cyclotomic numbers, and if given r is a vector of the same length as s of cyclotomic numbers. The function determines if s is the matrix of a reflection (resp. if r is given if it is the matrix of a reflection of root r; the point of giving r is to specify exactly the desired root and coroot, which otherwise are determined only up to a scalar and its inverse). The returned result is false if s is not a reflection (resp. not a reflection with root r), and otherwise is a record with four fields :


the root of the reflection s (equal to r if given)


the coroot of s


the non-trivial eigenvalue of s


a boolean which is true if and only if s is orthogonal with respect to the usual scalar product (then the root and eigenvalue are sufficient to determine s)

    gap> AsReflection([[-1,0,0],[1,1,0],[0,0,1]]);
      root := [ 2, 0, 0 ],
      coroot := [ 1, -1/2, 0 ],
      eigenvalue := -1,
      isOrthogonal := false )
    gap> AsReflection([[-1,0,0],[1,1,0],[0,0,1]],[1,0,0]);
      root := [ 1, 0, 0 ],
      coroot := [ 2, -1, 0 ],
      eigenvalue := -1,
      isOrthogonal := false )

82.3 CartanMat

CartanMat( W )

Let s1,...,sn be a list of reflections with associated root vectors ri and coroots ri. Then the matrix Ci,j of the ri(rj) is called the Cartan matrix of the list of reflections. It is uniquely determined by the reflections up to conjugating by diagonal matrices.

If s1,...,sn are the generators of a reflection group W, the matrix C up to conjugation by diagonal matrices is an invariant of the reflection representation of W. It actually completely determines this representation if the ri are linearly independent (which is e.g. the case if C is invertible), since in the ri basis the matrix for the si differs from the identity only on the i-th line, where the corresponding line of C has been subtracted.

    gap> W:=CoxeterGroup("A",3);;
    gap> CartanMat(W);
    [ [ 2, -1, 0 ], [ -1, 2, -1 ], [ 0, -1, 2 ] ]

CartanMat( W, l )

Returns the Cartan matrix of the roots of W specified by the list of integers l (for a finite reflection group represented as a group of permutation of root vectors, these integers are indices in the list of roots of the parent reflection group).

CartanMat( type )

This form returns the Cartan matrix of some standard reflection representations for Coxeter groups, taking a symbolic description of the Coxeter group given by the arguments. See CartanMat for Dynkin types

82.4 Rank

Rank( W )

Let W be a reflection group in the vector space V. This function returns the dimension of V, if known. If reflections of W are generated by a root and a coroot, it is the length of the root as a list. If W is a matrix group it is the dimension of the matrices.

    gap> W:=ReflectionSubgroup(CoxeterGroup("A",3),[1,3]);
    ReflectionSubgroup(CoxeterGroup("A",3), [ 1, 3 ])
    gap> Rank(W);

82.5 SemisimpleRank

SemisimpleRank( W )

Let W be a reflection group in the vector space V. This function returns the dimension of the subspace V' of V where W effectively acts, which is the subspace generated by the roots of the reflections of W. The space V' is W-stable and has a W-stable complement on which W acts trivially. The SemisimpleRank is independent of the reflection representation. W is called essential if V'=V.

    gap> W:=ReflectionSubgroup(CoxeterGroup("A",3),[1,3]);
    ReflectionSubgroup(CoxeterGroup("A",3), [ 1, 3 ])
    gap> SemisimpleRank(W);

Previous Up Next

24 Apr 2021