Just a quick question on function notation. If specifying the function like this: $$f : X \times X \to Y,$$
what does the '$\times$' symbol mean exactly? Does it mean that 2 elements of domain $X$ are combined via some relation '$\times$' to give an element of codomain $Y$ or does it somehow represent a Cartesian product of the two sets, namely $X^2$. In the latter case I don't know what the above specification means.
As comments have noted, $A\times B:=\{(a,\,b)|a\in A,\,b\in B\}$. With $|S|$ denoting the number of elements of a set $S$, this notation has the motivation $|A\times B|=|A|\times|B|$.
As for the question of whether one should write $f(a,\,b)$ or $f((a,\,b))$, the former is usually used because it looks neater, but conceptually the latter has the advantage that we can define all functions in the same way. In particular, a function $f$ can be regarded as a set of ordered pairs with$$(u,\,v)\in f,\,(u,\,w)\in f\implies v=w.$$This does require identifying $u$ with $(a,\,b)$, though. The alternative would be to say that a function that "take two arguments" has a domain of the form $(A,\,B)$, and is a set of ordered triples with$$(q,\,r,\,s),\,(q,\,r,\,t)\in f\implies s=t.$$Such a context-dependent definition of what functions are under the hood isn't worth the hassle it would create in more complicated examples.
There's actually another way to think of all functions as having only one argument, called currying, after Haskell Curry. The idea is to regard a "function of $k$ arguments" as a function of one argument, which returns a function of $k-1$ arguments. In particular, is $S^T$ denotes the set of functions from $T$ to $S$ (so that $|S^T|=|S|^{|T|}$), each $f\in C^{A\times B}$ can be thought of as an element of $(C^B)^A$. That's not too surprising, since$$|C|^{|A|\times|B|}=\left(|C|^{|B|}\right)^{|A|}.$$