A surjection is a function whose range equals its codomain. Thus, the distinction between functions and surjections requires the notion of a codomain. Similarly, a bijection is an injection whose range equals its codomain. So this distinction, too, requires the notion of a codomain.
However, codomains seem like a very artificial idea, to myself and many others; and so we avoid using them. Thus, we speak of functions $f:X \rightarrow Y$ and functions $f: X \twoheadrightarrow Y$, the latter being a substitute for the notion of a surjection. And we speak of injections $f:X \rightarrow Y$ and injections $f:X \twoheadrightarrow Y$, the latter being a substitute for the notion of a bijection.
That's all well and good, but there's a tension here lurking beneath the surface. The source of the tension is category theory, which stipulates that morphisms have not only domains but also codomains. So unless we can reformulate category theory without codomains, we're sort of trapped.
Has anyone managed to do this?
If not, here's my very preliminary attempt at doing so. A category* will consist of the following data: a class of objects, a class of isomorphisms (not homomorphisms), each of which has a unique domain and range; an operation that composes isomorphisms; and two partial order relations defined on the class of objects, namely the relation "is a subobject of" and "is a quotient object of".
So for example, the statement "$f$ is monomorphism $X \rightarrow Y$" would be interpreted as "There exists a subobject of $Y$, call it $B$, such that $f$ is an isomorphism with domain $X$ and range $B$." And the statement "$f$ is a morphism $X \twoheadrightarrow Y$" would be interpreted as "There exists a quotient object of $X$, call it $A$, such that $f$ is an isomorphism with domain $A$ and range $Y$."
Anyway, I'd be interested in hearing people's opinion on the matter.
EDIT. Just to clarify, this approach would appeal to people whom prefer to define functions (etc.) as their graph, rather than as a triple.