# Construction of Pseudo-reflections

Let $V$ be a vector space of dimension $n$ over a field $F$. As defined in Bourbaki [[Bourbaki, 1968](../../references.md#cite-bourbakilie)], 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(\mathop {\rm im}(1-r)) = 1$ and a basis element of $\mathop {\rm 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$.

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

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

- 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 Magma 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^\mathrm{tr}$, where $b^\mathrm{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^\mathrm{tr}a
$$

and, in particular, $ar = (1-ab^\mathrm{tr})a$. Thus $r$ is a reflection of finite order $d$ if and only if $ab^\mathrm{tr}\ne 0, 1$ and $1-ab^\mathrm{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`

```magma
Strict: BoolElt                    Default: 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 (ex-0f9614)`

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

```magma
> 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

```

## `Example: Ref Group (ex-077df3)`

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

```magma
> 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
> G := MatrixGroup<2,F | r,s >;
> IsReflectionGroup(G);
false
> IsReflectionGroup(G : Strict := false);
true
> #G;
24

```

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.)

```magma
> exists(t){ t : t in G | IsReflection(t) and G eq sub<G|r,t> };
true
> t;
[        0 omega + 1]
[        1    -omega]

```

## `Example: transvections (ex-d1b70e)`

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)$.

```magma
> G := GL(3,25);
> ccl := Classes(G);
> T := [ c : c in ccl | IsTransvection(c[3]) ];
> #T;
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

```

## 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^\mathrm{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^\mathrm{tr}$ for some $\alpha\in F$. Thus the matrix of $r$ is $I-\alpha J^\mathrm{tr}\sigma(a)^\mathrm{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^\mathrm{tr}$ and the matrix of $r$ is $I - \alpha J a^\mathrm{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^\mathrm{tr}a$, where $a$ is isotropic and the trace of $\alpha$ is $0$; that is, $a J \bar a^\mathrm{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^\mathrm{tr}\sigma(a)^\mathrm{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^\mathrm{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 [Clifford Algebras](../../Algebras/CliffordAlgebras/index-clifford-algebras.md#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](../../references.md#cite-humphreysrefl)], for example. In particular, if $\beta(u,v)$ is the standard inner product $(u,v) = uv^\mathrm{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 (ex-0b2ca4)`

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.

```magma
> 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]

```

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.

```magma
> b := V![1,1,1,1];
> InnerProduct(b,b);
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>
}

```
