Symmetric Groups in Python

Brandon Rozek

May 22, 2019

Warning: This post is meant for someone whose familiar with concepts of Abstract Algebra.

Refresher

Definitions

An operation on a set is a calculation that maps one element in a set onto another element of the set.

A group in mathematics is a set and an operation that follows the three properties:

Symmetric Groups are groups whose elements are all bijections from the set onto itself and operation which is composition of functions.

Example

Let’s look at the group $\mathbb{Z}_3$. Here is an example of an element of its symmetric group. $$ \begin{pmatrix} 0 & 1 & 2
1 & 2 & 0 \end{pmatrix} $$ This element maps $0 \rightarrow 1$, $1 \rightarrow 2$, and $2 \rightarrow 0$.

A good way to check if something similar to the above is an element of a symmetric group is pay attention to the second row. Make sure that it only contains the elements of the set you care about (ex: $\mathbb{Z}_3$) and that there are no repeats.

Let’s look at an example of composing two elements from this symmetric group. $$ \begin{pmatrix} 0 & 1 & 2
1 & 2 & 0 \end{pmatrix} \circ \begin{pmatrix} 0 & 1 & 2
0 & 2 & 1 \

\end{pmatrix}

\begin{pmatrix} 0 & 1 & 2
1 & 0 & 2
\end{pmatrix} $$ The main thing to remember here is that you must compose from right to left.

$0 \rightarrow 0$ and then $0 \rightarrow 1$, so ultimately $0 \rightarrow 1$.

$1 \rightarrow 2$ and $2 \rightarrow 0$, so ultimately $1 \rightarrow 0$.

$2 \rightarrow 1$ and $1 \rightarrow 2$, so ultimately $2 \rightarrow 2$.

Finding Inverses

Finding the inverse is simple, since all you need to do is flip the two rows and sort it again. $$ \begin{pmatrix} 0 & 1 & 2
1 & 2 & 0 \end{pmatrix}^{-1} = \begin{pmatrix} 1 & 2 & 0
0 & 1 & 2 \end{pmatrix} = \begin{pmatrix} 0 & 1 & 2
2 & 0 & 1 \end{pmatrix} $$

### Code Implementation

For Abstract Algebra homework, there was a lot of compositions of these symmetric elements. Sadly, I get pretty lazy doing these by hand for many hours. So like any Computer Scientist, I created a simple script in Python to help me compute these.

The code is located in this gist.

Basic Usage

SymmetricElement takes in the second row of the matrices we were playing with. You can find the inverse with element.inverse() and you can compose two symmetric elements together with the * operation.

SymmetricElement(1,2,3)
# array([[1., 2., 3.],
#       [1., 2., 3.]])
SymmetricElement(1,2,3) * SymmetricElement(2,1,3)
#array([[1., 2., 3.],
#       [2., 1., 3.]])

SymmetricElement(1,2,3).inverse()
#array([[1., 2., 3.],
#       [1., 2., 3.]])