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