# ~/Blog

## Brandon Rozek

PhD Student @ RPI studying Automated Reasoning in AI and Linux Enthusiast.

# Symmetric Groups in Python

Published on

Updated on

Warning: This post has not been modified for over 2 years. For technical posts, make sure that it is still relevant.

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:

• There exists an identity element.
• The operation is associative.
• For every element, there exists an inverse of that element in the set.

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