Codomains reconsidered

In my recent efforts to delve into the core of mathematics, I've uncovered an anomaly. Codomains are weird and there is something missing.

The classic definition of a function

Let $A$ and $B$ be sets and $f$ a set of tuples of elements respectively in $A$ and $B$. $f:\ A \rightarrow B$ is a function if $f$ is single-valued ...

$$ (x,y_{1}) \in f \wedge (x,y_{2}) \in f \Rightarrow y_{1} = y_{2} $$

... and $f$ is total:

$$ \forall x \in A, \exists y \in B: (x, y) \in f $$

The domain of a function $f:\ A \rightarrow B$ is defined as the set ${ x \mid \exists y \in B: (x, y) \in f }$ and the range (or image) is defined as ${ y \mid \exists x \in a: (x, y) \in f }$.

$B$ is called the codomain of $f$.

Preliminary notes

Note firstly that $A$ and $B$ are included in the definition of a function $f:\ A \rightarrow B$. This also means that the equality of two functions is defined as conjunction of equalities between the respective $A$'s, $B$'s and $f$'s.

Note also that the domain of a function $f:\ A \rightarrow B$ is equal to $A$ while the range of that function is not equal to $B$.

Lastly, because $B$ is not equal to the range of the function, $B$ can be an arbitrary superset of the range. There is no connection whatsoever between $B$ and the set of tuples $f$.

This codomain $B$ is only used to define things like surjectivity or in theorems like, for example, the isomorphism theorems.

Problems with this definition

That was a lot of theory that any mathematician should have known by heart for years.


The first problem with this definition is that it's ugly. The sets $A$ and $B$ are baked into the definition of a function while $f$ could just be a single-valued set of tuples! The domain and range definitions would stay the same because they are inherent to $f$ and can be defined irrespective of $A$ and $B$.

No partial functions

The second problem is that it doesn't allow for non-total functions.

Most mathematicians often have the luxury to only have to think about total functions. Ironically, people like information theorists and computer scientists often use the more abstract notion of partial functions.

To remind you, partial functions are functions where there isn't necessarily an output defined for every input. I would say $A$ is not equal to $dom(f)$ if the above definition hadn't disallowed that!

In the above definition of functions, there is no way to define non-total functions and that limits our thinking. Powerful mathematical concepts like Turing-machines can't be defined unless we allow for the more abstract notion of partial functions.


Now, suppose you really want to define a codomain each time, then there is a third problem. The definition is now asymmetric:

$$ f:\ dom(f) \rightarrow img(f) \subseteq B $$

I hope it's obvious that there is something missing here. Much nicer would be the following:

$$ f:\ dom(f) \subseteq A \rightarrow img(f) \subseteq B $$

We can't do this, however, because the above definition of a function dictates that $A$ must equal $dom(f)$.

A new definition

Now clear your mind and have a look at this new and improved definition:

Let $A$ and $B$ be sets and $f$ a set of tuples of elements respectively in $A$ and $B$. $f:\ A \rightarrow B$ is a function if $f$ is single-valued:

$$ (x,y_{1}) \in f \wedge (x,y_{2}) \in f \Rightarrow y_{1} = y_{2} $$

The domain of a function $f:\ A \rightarrow B$ is defined as the set ${ x \mid \exists y \in B: (x, y) \in f }$ and the range (or image) is defined as ${ y \mid \exists x \in A: (x, y) \in f }$.

$A$ is called the corange of $f$ and $B$ is called the codomain of $f$.

Note that we can't call $A$ the coimage because that name is taken.


This new definition solves all the problems of the last definition:

$f$ could (possibly) be defined independent of a corange and codomain, though that would still require another definition of equality. This definition is not as ugly as the last one.

Because the corange $A$ is now different from the domain of $f$: $dom(f) \subseteq A$, $f$ is no longer necessarily total. This means that a function can now be partial and still be a function. This is precisely the case when $dom(f)$ is a strict subset of $A$.

The definition of a function is now symmetric:

$$ f:\ dom(f) \subseteq A \rightarrow img(f) \subseteq B $$

... and as an added bonus, this new way of defining functions requires you to acknowledge the existence of partial functions.


While suggesting this idea to mathematicians, I have often been figuratively pelted by vegetables. However, they've never been able to tell me why it was that they couldn't be open to other definitions. After all, there is no such thing as a true definition.

I hope that, if there are any other mathematicians that feel deeply and personally offended by this, they will be able to explain to me what is mathematically (!) wrong with this new definition. As of yet, I have not been able to find any flaws.

Configuration design style guide

Know a technical team that could use strong technical leadership?

Hire me
Do away with predictable boiler-plate using Template Haskell