In my first programming course, I learnt how to swap two variables, suppose denoted by $x$ and $y$, without holding a value in a third variable. Run this code snippet in C.
int x=5, y=6;
x=x+y;
y=x-y;
x=x-y;
if(!(x-6 || y-5)) printf("Variables Swapped.");
So, as it shows, interchanging rows and columns can be achieved in exactly the same way, a series of scalar multiplications and addition. So, if the interchanging is essentially a composition of other operations, is it fair to call it an elementary operation?
What you're basically saying is:
This is correct.
Proof. Each line equals the next:
$$(R_i := R_i-R_j)\circ(R_j := R_i-R_j)\circ(R_i := R_i+R_j)$$
$$(R_i := R_i-(R_i-R_j); R_j := R_i-R_j)\circ(R_i := R_i+R_j)$$
$$(R_i := (R_i+R_j)-((R_i+R_j)-R_j); R_j := (R_i+R_j)-R_j)$$
$$(R_i := R_j; R_j := R_i)$$
It follows that:
Hence technically, we don't really need $R_i \leftrightarrow R_j$ if our goal is to generate all row operations by composition; the other two are enough.
That's also correct. It might even be useful occasionally. On the other hand, I don't really agree with the idea that the only interesting generating sets are the minimal generating sets. It's okay to have a few extra elements in there imvho.