TITLE: Proving that an algorithm can generate all permutations of a matrix
QUESTION [4 upvotes]: I have a matrix
$$\begin{bmatrix}a & b\\\ c & d\end{bmatrix}$$
and I want to generate all 24 possible permutations of the elements of the matrix, e.g.
$$\begin{bmatrix}b & a\\\ c & d\end{bmatrix}, \begin{bmatrix}a & c\\\ d & b\end{bmatrix}...$$
using a particular procedure:

for each column, permute the elements of the column
for each row, permute the elements of the row
for each column, again permute the elements of the column

In each of these cases, the permutation applied need not be the same between rows/columns.
It's my gut feeling that this set of permutations could generate any permutation of a starting $M\times N$ matrix, but I'm not really sure how to go about proving it. I've shown that it works for $2\times 2$ and $3\times 3$ matrices, but I was wondering how should I approach proving this for $M\times N$ matrices?
I saw these two posts, but neither of them quite answered my question, since the row/column permutations they considered were constrained:
What permutations of matrix entries do row and column transpositions generate?
Do cyclic permutations of rows and column entries generate all permutations?
I also saw a third post that was asking a very similar question, but only did the first two steps (column permutation followed by a row permutation). Clearly in their case, they couldn't generate all permutations of a $2\times 2$ matrix since the procedure could only generate $16$ unique matrices from a starting $2\times 2$ matrix, less than the $24$ unique permutations of the starting matrix.

REPLY [2 votes]: Ok, I think I may have a proof that is satisfactory for my purposes.
Proof by induction. If a permutation $\sigma$ of a matrix $\mathbf{A}$ comprised of $n$ individual row and column permutations can be written in the form $C_{post}RC_{pre}$ (where $C$ is a sequence of permutations applied to individual columns of the matrix and $R$ is a sequence of permutations applied to individual rows of the matrix), then a sequence of $n+1$ individual row/column permutations formed by applying an additional permutation after $\sigma$ can also be written in the form $C_{post}RC_{pre}$.
Base case: the identity permutation $\sigma_I(\mathbf{A}) = \mathbf{A}$ is of the form $C_{post}RC_{pre}$ where $C_{post}$, $C_{pre}$ and $R$ are all empty sequences.
Consider now the permutation $\sigma$ which is comprised of $n$ row and column permutations:
$$\sigma(\mathbf{A}) = (C_{post}R_0C_{pre})(\mathbf{A})$$
Now consider adding a single permutation (either a row permutation $\sigma_{R_i}$ or a column permutation $\sigma_{C_j}$). There are two cases:
$$\sigma^{\prime}(\mathbf{A}) = (\sigma_{R_i}\sigma)(\mathbf{A})$$
$$\sigma^{\prime\prime}(\mathbf{A}) = (\sigma_{C_j}\sigma)(\mathbf{A})$$
In the case of $\sigma^{\prime\prime}$, an additional column permutation is applied, which does not change the form of $\sigma$, so $\sigma^{\prime\prime}$ can be written as $C^{\prime}_{post}R_0C_{pre}$.
In the case of $\sigma^{\prime}$, we notice that the last three terms are in the form $R_{post}CR_{pre}$:
$$\sigma^{\prime} = \sigma_{R_i}C_{post}R_0$$
A sequence of row permutations followed by a sequence of column permutations, followed by a sequence of row permutations can also be written as a sequence of column permutations followed by a sequence of row permutations followed by a sequence of column permutations. That is,
$$\exists R^{\prime}, C^{\prime}_{pre}, C^{\prime}_{post} : R_{post}CR_{pre} = C^{\prime}_{post}R^{\prime}C^{\prime}_{pre}$$
Therefore, we can rewrite $\sigma^{\prime}$:
$$\sigma^{\prime} = C^{\prime}_{post}R^{\prime}C^{\prime}_{pre}C_{pre}$$
Therefore, a sequence of $n + 1$ individual row/column permutations formed by applying an additional permutation after a sequence of $n$ row/column permutations which is in the form $C_{post}RC_{pre}$ can also be written in the form $C_{post}RC_{pre}$. Since this is true for the base case ($n = 0$), and is true for $n + 1$ if $n$ is true, then it is true generally for any number of individual row/column permutations.
{"set_name": "stack_exchange", "score": 4, "question_id": 4166622}