According to my understanding of first order logic, a first order formula in ZF must only contain the relation symbol $\in$ and no function symbols. However in most explanations of ZF formulas involving other functions such as $\cup$ are introduced early on.
My book explains for example that $\forall a \forall b \exists c \forall v_0\ (v_0 \in c \iff (v_0 \in a \vee v_0 \in b))$ is a theorem of ZF.
But then it goes on to treat this as a function. By my understanding $\forall v_0(v_0 \in a \cup b \iff (v_0 \in a \vee v_0 \in b))$ is not a first order formula in the language of ZF because it contains $\cup$ which is not a symbol in the language of ZF.
Is there a formal explanation of why this formula is allowed, and how to introduce new function symbols, or is this formula actually some slightly informal logic, and we just have to believe that there is a formula using only the $\in$ symbol equivalent to that formula?
Obviously stating any maths theorem using just $\in$ is really hard. For example how would one state $\forall x \ y \in \mathbb{N}, x + y = y + x$? Is there a formal method of doing it in a shorter way than the incredibly verbose way that would come from doing it using only $\in$?