Skip to contents

To cite the permutations package in publications, please use Hankin (2020). Here we consider S9S_9, the symmetric group on 9 elements, and representations of its elements. First we will load the package and change the default print method:

library("permutations")
options("print_word_as_cycle" = FALSE)

Now we will generate a couple of permutations, a and b:

a <- as.word(char2cycle("(175296)(348)"))
b <- as.word(char2cycle("(27)(45)(89)"))
a
#>     1 2 3 4 5 6 7 8 9
#> [1] 7 9 4 8 2 1 5 3 6
b
#>     1 2 3 4 5 6 7 8 9
#> [1] . 7 . 5 4 . 2 9 8

Now we will show a representation of S9S_9, using permutation matrices:

M <- diag(9)
rownames(M) <- 1:9
colnames(M) <- 1:9
M
#>   1 2 3 4 5 6 7 8 9
#> 1 1 0 0 0 0 0 0 0 0
#> 2 0 1 0 0 0 0 0 0 0
#> 3 0 0 1 0 0 0 0 0 0
#> 4 0 0 0 1 0 0 0 0 0
#> 5 0 0 0 0 1 0 0 0 0
#> 6 0 0 0 0 0 1 0 0 0
#> 7 0 0 0 0 0 0 1 0 0
#> 8 0 0 0 0 0 0 0 1 0
#> 9 0 0 0 0 0 0 0 0 1

We will use the map ϕ:S9Aut(9)\phi\colon S_9\longrightarrow\operatorname{Aut}\left(\mathbb{R}^9\right) given by ϕ(a)=\phi(a)=M[a,]. Then

M[a, ]
#>   1 2 3 4 5 6 7 8 9
#> 7 0 0 0 0 0 0 1 0 0
#> 9 0 0 0 0 0 0 0 0 1
#> 4 0 0 0 1 0 0 0 0 0
#> 8 0 0 0 0 0 0 0 1 0
#> 2 0 1 0 0 0 0 0 0 0
#> 1 1 0 0 0 0 0 0 0 0
#> 5 0 0 0 0 1 0 0 0 0
#> 3 0 0 1 0 0 0 0 0 0
#> 6 0 0 0 0 0 1 0 0 0

permutes the rows of MM with permutation a. Note how the row names are permuted as well as the elements of MM. Verifying that ϕ\phi is indeed a homomorphism—that is, ϕ(ι)=I9\phi(\iota)=I_9 and ϕ(a)ϕ(b)=ϕ(ab)\phi(a)\phi(b)=\phi(a\circ b)—is straightforward:

all(M[as.word(id, 9), ] == diag(9))
#> [1] TRUE
all(M[a * b, ] == M[a, ] %*% M[b, ])
#> [1] TRUE

In the second line above, note that the left hand side of the equality is group composition, while the right hand side is matrix multiplication. We can further verify that ϕ(a1)=ϕ(a)1\phi\left(a^{-1}\right)=\phi(a)^{-1}:

all(M[inverse(a), ] == solve(M[a, ]))
#> [1] TRUE

again with group inversion on the left and matrix inversion on the right.

The map ϕ(a)=\phi(a)=M[,a] is not a homomorphism:

all(M[, a * b] == M[, a] %*% M[, b])
#> [1] FALSE

but we can “rescue” it by considering a group operation \star defined by ab=baa\star b=b\circ a:

all(M[, b * a] == M[, a] %*% M[, b])
#> [1] TRUE

See how the operation has a and b in opposite order from the matrix multiplication; see vignette order_of_ops for a discussion of this phenomenon from a different perspective.

References

Hankin, R. K. S. 2020. “Introducing the Permutations R Package.” SoftwareX 11. https://doi.org/10.1016/j.softx.2020.100453.