Construction of Pseudo- reflections#

Let \(V\) be a vector space of dimension \(n\) over a field \(F\). As defined in Bourbaki [Bourbaki, 1968], a pseudo-reflection in Magma is a linear transformation of \(V\) whose space of fixed points is a subspace of dimension \(n-1\), namely a hyperplane. (Some authors require a pseudo-reflection to be invertible and diagonalisable.)

A reflection, as defined above, is a pseudo-reflection and so too is a transvection. The Magma package described in this chapter includes code for the construction of transvections but the emphasis is on groups generated by reflections.

If \(r\) is a pseudo-reflection, then \(\dim(\im(1-r)) = 1\) and a basis element of \(\im(1-r)\) is called a root of \(r\).

Let \(a\) be a root of the pseudo-reflection \(r\) and let \(H = \ker(1-r)\) be the hyperplane of fixed points of \(r\). For all \(v\in V\) there exists \(\phi(v) \in F\) such that \(v - vr = \phi(v)a\). Then \(\phi\in V^*\) and \(\ker\phi = H\). This means that every pseudo-reflection has the form

\[vr = v - \phi(v)a\]

and its determinant is \(1-\phi(a)\). The linear functional \(\phi\) is a coroot of \(r\).

\(\bullet\) If \(\phi(a) = 1\), then \(r\) is not invertible; it is the projection of \(V\) onto \(H\) along \(a\).

\(\bullet\) If \(\phi(a) = 0\) (equivalently, \(a\in H\)), then \(r\) is by definition a transvection.

\(\bullet\) If \(\phi(a) \ne 0,1\), then \(r\) is called a reflection. For the most part we consider only reflections of finite order, but not necessarily of order two.

In “ both \(V\) and its dual space \(V^*\) are identified with the space \(F^n\) of row vectors of length \(n\) and the standard bilinear pairing between \(V\) and \(V^*\) is \((a,b) \mapsto ab^\tr\), where \(b^\tr\) denotes the column vector which is the transpose of \(b\).

The row vector \(b\) which represents the coroot \(\phi\) is also called a coroot of the pseudo-reflection; it is uniquely determined by \(r\) and \(a\). The matrix of \(r\) is

\[I - b^\tr a\]

and, in particular, \(ar = (1-ab^\tr)a\). Thus \(r\) is a reflection of finite order \(d\) if and only if \(ab^\tr \ne 0, 1\) and \(1-ab^\tr\) is a \(d\)-th root of unity.

PseudoReflection(a, b): ModTupRngElt, ModTupRngElt AlgMatElt#

The matrix of the pseudo-reflection with root \(a\) and coroot \(b\).

Transvection(a, b): ModTupRngElt, ModTupRngElt AlgMatElt#

The matrix of the transvection with root \(a\) and coroot \(b\). The input is checked to ensure that the root and coroot define a transvection.

Reflection(a, b): ModTupRngElt, ModTupRngElt AlgMatElt#

The matrix of the reflection with root \(a\) and coroot \(b\). The input is checked to ensure that the root and coroot define a reflection.

IsPseudoReflection(r): Mtrx BoolElt, ModTupRngElt, ModTupRngElt#

Returns true if \(r\) is the matrix of a pseudo-reflection, in which case a root and a coroot are returned as well.

IsTransvection(r): Mtrx BoolElt, ModTupRngElt, ModTupRngElt#

Returns true if \(r\) is the matrix of a transvection, in which case a root and a coroot are returned as well.

IsReflection(r): Mtrx BoolElt, ModTupRngElt, ModTupRngElt#

Returns true if \(r\) is the matrix of a reflection, in which case a root and a coroot are returned as well.

IsReflectionGroup(G): GrpMat BoolElt#

Strict : BoolElt : true

The default action is to return true if every generator of \(G\) is a reflection. If Strict is false, the function checks if \(G\) can be generated by some of its reflections, not necessarily those returned by Generators(G).

Example: pseudoreflection#

Create a pseudo-reflection directly and then check that it is a transvection.

> V := VectorSpace(GF(5), 3);
> t := PseudoReflection(V![1,0,0],V![0,1,0]);
> t;
[1 0 0]
[4 1 0]
[0 0 1]
> IsTransvection(t);
true (1 0 0)
(0 1 0)
> IsReflection(t);
false
%%a> assert not $1;
Example: Ref Group#

An example of a group which can be generated by reflections even though not every given generator is a reflection.

To find reflection generators for this group we look for a reflection which, together with the reflection \(r\), generates \(G\). (This is a rather special example; not every finite reflection group of rank two can be generated by two reflections.)

> F<omega> := CyclotomicField(3);
> r := Matrix(F,2,2,[1,omega^2,0,omega]);
> IsReflection(r);
true (         0 -omega + 1)
(1/3*(2*omega + 1)                 1)
> s := Matrix(F,2,2,[0,-1,1,0]);
> IsReflection(s);
false
%%a> assert not $1;
> G := MatrixGroup<2,F | r,s >;
> IsReflectionGroup(G);
false
%%a> assert not $1;
> IsReflectionGroup(G : Strict := false);
true
%%a> assert $1;
> #G;
24
%%a> assert $1 eq 24;
> exists(t){ t : t in G | IsReflection(t) and G eq sub<G|r,t> };
true
%%a> assert $1;
> t;
[        0 omega + 1]
[        1    -omega]
Example: transvections#

The groups \({\operatorname{SL}}(n,q)\) are generated by transvections. To illustrate this we find representatives for the conjugacy classes of \({\operatorname{GL}}(3,25)\) which are transvections and then check that the normal closure is \({\operatorname{SL}}(3,25)\).

> G := GL(3,25);
> ccl := Classes(G);
> T := [ c : c in ccl | IsTransvection(c[3]) ];
> #T;
1
%%a> assert $1 eq 1;
> t := T[1][3]; t;
[     1      0      0]
[     0      1      1]
[     0      0      1]
> S := ncl< G | t >;
> S eq SL(3,25);
true
%%a> assert $1;

Pseudo-reflections Preserving Reflexive Forms#

Let \(J\) be the matrix of a non-degenerate reflexive bilinear or sesquilinear form \(\beta\) on the vector space \(V\) over a field \(F\). Then \(\beta\) is either a symmetric, alternating or hermitian form.

We may assume that \(F\) is equipped with an automorphism \(\sigma\) such that \(\sigma^2 = 1\). If \(\beta\) is a symmetric or alternating form, \(\sigma\) is the identity; if \(\beta\) is hermitian, the order of \(\sigma :\alpha \mapsto \bar\alpha\) is two and \(J = \bar J^\tr\). If \(a\) is the row vector \((\alpha_1,\alpha_2,\dots,\alpha_n)\), define \(\sigma(a) = (\sigma(\alpha_1),\sigma(\alpha_2),\dots,\sigma(\alpha_n))\).

If \(a\) is a root of a pseudo-reflection \(r\) and if \(r\) preserves \(\beta\), then the coroot of \(r\) is \(\alpha \sigma(a) J^\tr\) for some \(\alpha\in F\). Thus the matrix of \(r\) is \(I-\alpha J^\tr\sigma(a)^\tr a\).

SymplecticTransvection(a, alpha): ModTupRngElt, FldElt AlgMatElt#

The symplectic transvection with root \(a\) and multiplier \(\alpha\) with respect to the form attached to the parent of \(a\). If the form is not alternating a runtime error is generated.

If \(\beta\) is a non-degenerate alternating form preserved by a pseudo-reflection \(r\), then the dimension of \(V\) is even and \(r\) must be a transvection. If \(a\) is a root of \(r\), the coroot is \(\alpha aJ^\tr\) and the matrix of \(r\) is \(I - \alpha J a^\tr a\), for some \(\alpha\ne 0\) in \(F\).

UnitaryTransvection(a, alpha): ModTupRngElt, FldElt AlgMatElt#

The unitary transvection with root \(a\) and multiplier \(\alpha\) with respect to the hermitian form attached to the parent of \(a\).

The matrix of the unitary transvection is \(I - \alpha J\bar a^\tr a\), where \(a\) is isotropic and the trace of \(\alpha\) is \(0\); that is, \(a J \bar a^\tr = 0\) and \(\alpha + \bar\alpha = 0\).

A runtime error is generated if the form is not hermitian, if \(a\) is not isotropic, or if the trace of \(\alpha\) is not \(0\).

UnitaryReflection(a, zeta): ModTupRngElt, FldElt AlgMatElt#

The unitary reflection with root \(a\) and determinant \(\zeta\), where \(\zeta\) is a root of unity. The reflection preserves the hermitian form attached to the ambient space of \(a\) and sends \(a\) to \(\zeta a\).

In the case of a unitary reflection \(r\) with matrix \(I-\alpha J^\tr\sigma(a)^\tr a\), the root \(a\) must be non-isotropic and \(ar = \zeta a\), where \(\zeta\) is a root of unity. Therefore, \(\alpha = (1-\zeta)/aJ\bar a^\tr\).

The vector \(a^\vee = \bar\alpha a\) is the coroot of \(a\) and the definition of \(r\) becomes

\[v r = v - \beta(v,a^\vee)a.\]
OrthogonalReflection(a): ModTupFldElt AlgMatElt#

The reflection determined by a non-singular vector \(a\) of a quadratic space.

A quadratic space is a vector space \(V\) equipped with a quadratic form \(Q\) (see Chapter AlgClff for more details). The polar form of \(Q\) is the symmetric bilinear form \(\beta(u,v) = Q(u+v)-Q(u)-Q(v)\). Thus \(\beta(v,v) = 2Q(v)\) and therefore, if the characteristic of \(F\) is not two, \(Q\) is uniquely determined by \(\beta\).

If \(a\) is non-singular (that is, \(Q(a) \ne 0\)), the formula

\[vr = v - Q(a)^{-1}\beta(v,a)a\]

defines a pseudo-reflection. If the characteristic of \(F\) is 2, this is a transvection; in all other cases it is a reflection. However, in characteristic 2 there is a certain ambivalence in the literature and the pseudo-reflections just defined are often called reflections.

The coroot of \(a\) is \(a^\vee = Q(a)^{-1}a\). If the characteristic of \(F\) is not two, then \(a^\vee = 2a/\beta(a,a)\) and this coincides with the usual notion of coroot, as found in [Humphreys, 1990], for example. In particular, if \(\beta(u,v)\) is the standard inner product \((u,v) = uv^\tr\), then the inner product and the pairing between \(V\) and its dual are essentially the same and the concepts of coroot and coroot coincide.

Example: Unitary Transvection#

We create an hermitian space by attaching an hermitian form \(J\) to a vector space \(V\) over a field with complex conjugation. The vector \(a = (1,0,0,0)\) is isotropic with respect to this form and therefore we can use it to create a unitary transvection.

Continuing the previous example we note that \(b = (1,1,1,1)\) is non-isotropic and we create a unitary reflection of order 4 with \(b\) as root.

> K<i> := CyclotomicField( 4 );
> sigma := hom< K -> K | x :-> ComplexConjugate(x) >;
> J := Matrix(4,4,[K|0,0,0,1, 0,0,1,0, 0,1,0,0, 1,0,0,0]);
> V := UnitarySpace(J,sigma);
> a := V![1,0,0,0];
> t := UnitaryTransvection(a,i);
> t;
[ 1  0  0  0]
[ 0  1  0  0]
[ 0  0  1  0]
[-i  0  0  1]
> b := V![1,1,1,1];
> InnerProduct(b,b);
4
%%a> assert $1 eq 4;
> r := UnitaryReflection(b,i);
> r, Eigenvalues(r);
[1/4*(i + 3) 1/4*(i - 1) 1/4*(i - 1) 1/4*(i - 1)]
[1/4*(i - 1) 1/4*(i + 3) 1/4*(i - 1) 1/4*(i - 1)]
[1/4*(i - 1) 1/4*(i - 1) 1/4*(i + 3) 1/4*(i - 1)]
[1/4*(i - 1) 1/4*(i - 1) 1/4*(i - 1) 1/4*(i + 3)]
{
    <i, 1>,
    <1, 3>
}