In the formal language of the Zermelo-Fraenkel axioms, the axiom reads:
The axiom of extensionality is generally considered uncontroversial, and it or an equivalent appears in just about any alternative axiomatisation of set theory. However, it may require modifications for some purposes, as below.
The axiom given above assumes that equality is a primitive symbol in predicate logic.
Some treatments of axiomatic set theory prefer to do without this, and instead treat the above statement not as an axiom but as a definition of equality.
Then it's necessary to include the usual axioms of equality from predicate logic as axioms about this defined symbol, and it now these axioms that are referred to as the axioms of extensionality.
An ur-element is a member of a set that is not itself a set.
In the Zermelo-Fraenkel axioms, there are no ur-elements, but some alternative axiomatisations of set theory have them.
Ur-elements can be treated as a different logical type from sets; in this case, C ∈ A makes no sense if A is an ur-element, so the axiom of extensionality simply applies only to sets.
Alternatively, in untyped logic, we can require C ∈ A to be false whenever A is an ur-element.
In this case, the usual axiom of extensionality would imply that every ur-element is equal to the empty set.
To avoid this, we can modify the axiom of extensioality to apply only to nonempty sets, so that it reads:
In predicate logic without equality
In set theory with ur-elements
That is: