Checking the order of a
matrix group
Introduction
We are given a set
of
-matrices
which generate a faithful
-dimensional
representation
of a finite group G. Our goals are:
- Compute the order of the group.
- Determine whether the representation
defined by
is reducible or irreducible.
Assuming that the order of
is not too large, we can solve both problems by explicitly computing all
elements of
in the defining representation
.
The number of found elements is the order of the group.
is irreducible if and only if
Specification
for computationally solving the problem
Module complex numbers
We assume that there is a data structure which can store a real
number (or a floating point approximation to it). If the programming
language does not provide complex numbers:
- ComplexNumber
- Tuple of two real numbers:
- RealNumber Re
- RealNumber Im
- In the following we use the notation (Re, Im).
- ComplexNumber Add(ComplexNumber a, ComplexNumber b):
- result = (a.Re + b.Re, a.Im + b.Im).
- In the following we use the notation result = a + b.
- Unit tests for implementation:
- (3, 4) + (-8, 13) –> (-5, 17)
- (0, -1) + (0, 1) –> (0, 0)
- (,
1.5) + (1, -0.5) –>
(1+)
- ComplexNumber Subtract(ComplexNumber a, ComplexNumber b):
- result = (a.Re - b.Re, a.Im - b.Im).
- In the following we use the notation result = a - b.
- ComplexNumber Multiply(ComplexNumber a, ComplexNumber b):
- result = (a.Re * b.Re - a.Im * b.Im, a.Re * b.Im + a.Im *
b.Re).
- In the following we use the notation result = a * b.
- Unit tests for implementation:
- (3, 4) * (0, 0) –> (0, 0)
- (-1, 8) * (2, -1) –> (6, 17)
- ()
*
(,
)
–>
(,
)
- RealNumber AbsoluteValue(ComplexNumber a):
- result =
.
- In the following we use the notation result =
.
- Unit tests for implementation:
- |(1,1)| –>
- |(0,-1)| –> 1
- |(3,-4)| –> 5
- |(1/2,
)|
–> 1
Module matrices
If programming the language does not provide matrices:
- record SquareMatrix:
- Stores the
elements of a complex
-matrix.
- Methods
- ComplexNumber GetElement(index i, index j). In the following we use
the notation value =
.
- SetElement(index i, index j, ComplexNumber value). In the following
we use the notation
= value.
- The indices i, j above denote the row and column indices of the
matrix, so they can assume
different values.
- Bool AreNumericallyEqual(SquareMatrix A, SquareMatrix B):
- If for all index pairs (i,j):
–> true; else: false
- Unit tests for implementation:
- For all X in {A, B, C, D}: AreNumericallyEqual(X, X) –> true
- AreNumericallyEqual(A, B) –> false
- AreNumericallyEqual(A, C) –> false
- SquareMatrix Add(SquareMatrix A, SquareMatrix B):
- For all index pairs (i,j):
-
=
+
- In the following we use the notation result =
.
- Unit tests for implementation:
- AreNumericallyEqual(A+B, C) –> true
- AreNumericallyEqual(A+B, D) –> false
- SquareMatrix Multiply(SquareMatrix A, SquareMatrix B):
- For all index pairs (i,j):
-
=
.
- The sum in the above equation uses the addition of complex
numbers.
- In the following we use the notation result = A * B.
- Unit tests for implementation:
- AreNumericallyEqual(A*B, C) –> false
- AreNumericallyEqual(A*B, D) –> true
- ComplexNumber Trace(SquareMatrix A):
- result =
.
- In the following we use the notation result = Tr(A).
- Unit tests for implementation:
- Tr(A) –> (3,4)
- Tr(B) –> (2,2)
- Tr(C) –> (5,6)
- Tr(D) –> (-12,51)
Main Program
- Start of program: Given
.
The
are complex
-matrices.
- List L of known group elements: L = S.
- We now construct the whole group by multiplication of each group
element with any other element. How to do this is described in the
following.
- Bool IsIn(ComplexSquareMatrix A, L):
- For each B in L:
- If AreNumericallyEqual(A, B): return true
- return false
- In the following we will use the notation result =
- i,j = 1.
- While(i<= Number of elements of L):
- While(j<= Number of elements of L):
- If
:
-
is a new group element. –> Add it to
:
.
- j = j+1
- i = i+1
- L contains all group elements.
- ord = Number of elements of L.
- Bool isIrreducible =
().
- Display: The order of the group is {ord}.
- Display: The representation is irreducible: {isIrreducible}.
- Unit tests for implementation:
- ,
where
and
- ,
where
-
–> Order = 27, Irreducible: true.
- ,
where
-
–> Order = 192, Irreducible: true.
- ,
where
-
–> Order = 4, Irreducible: false.
Call of main program on an
example
-
where
-
where
- Compute the order and irreducibility property of the group generated
by
.
- Measure the time needed for the computation and display it.