Sorry I had no cellphone connection for a while :D
Yeah those definitions are correct! But nothing is stopping us from defining custom operators, which are just 2-parameter functions.
Granted I was a bit sloppy with notation in the above posts. What I mean exactly is that given a function `f`, it is commutative iff, for all `a` and `b`:
f(a, b) == f(b, a)
So, for example, this function is commutative:
f(a, b) = a + b
How so? We can swap the parameters:
f(b, a) = b + a
And from the commutative property of `+` we know that `a + b == b + a` is correct.
This function is not:
g(a, b) = a + b + b
Since, if we swap the parameters
g(b, a) = b + a + a
We clearly see that `a + b + b ≠ b + a + a`.
Now all we need is some symbol we can put in between the operands, like `a ⭕ b` which we take to mean `g(a, b)` and we are back in operator-land. Our operator `⭕` is non-commutative which is what I meant in my original post :)