Functions are defined as particular kinds of relations and relations themselves relie on the concept of Cartesian Product. It can be proved from ZF the Cartesian Product of two sets exists but this requires using either the Axiom of Separation or the Axiom of Replacement. In both of them we make use of the concept of predicate, so it should be a difference to avoid falling in circularity.
Am I right? Am I missing something?
Thanks in advance :)
In first-order logic theories, like $\mathsf {ZFC}$, a predicate symbol is part of the language used to develop the theory.
In set theory, there is only one basic predicate symbol : $\in$.
With it (and the logical symbols of first-order logic with equality) we can build formulae expressing properties of sets, like $\exists x \ \forall y \ \lnot (y \in x)$, that means : there is an emptys set.
Some of them are assumed as axioms, like e.g. the $\text {Axiom (schema) of Separation}$.
With the rules of logic, starting form the said axioms, we can prove theorems about sets.
A particular kind of set is that of relations : as you say, a binary relation is a subsets of the cartesian product of two sets.
A function is a particular kind of relation, and thus a set.
Conclusion : in set theory a function is a set defined by a "condition" expressed in the language of the theory with a formula that uses the predicate $\in$.