A **partial function** is like a Function $~$f: A \to B$~$, but where we relax the requirement that $~$f(a)$~$ must be defined for all $~$a \in A$~$.
That is, it must still be the case that "$~$a = b$~$ and $~$f(a)$~$ is defined" implies "$~$f(b)$~$ is defined and $~$f(a) = f(b)$~$", but now we no longer need $~$f(a)$~$ to be defined everywhere.
We can write $~$f: A \rightharpoonup B$~$ %%note:In LaTeX, this symbol is given by `\rightharpoonup`

.%%to denote that $~$f$~$ is a partial function with **domain** $~$A$~$ and **codomain** $~$B$~$: that is, whenever $~$f(x)$~$ is defined then we have $~$x \in A$~$ and $~$f(x) \in B$~$.

This idea is essentially the "flip side" to the distinction between the Codomain vs image dichotomy.

# Implementation in set theory

Just as a function can be implemented as a set $~$f$~$ of ordered pairs $~$(a, b)$~$ such that:

- every $~$x \in A$~$ appears as the first element of some ordered pair in $~$f$~$
- if $~$(a, b)$~$ is an ordered pair in $~$f$~$ then $~$a \in A$~$ and $~$b \in B$~$
- if $~$(a, b)$~$ and $~$(a, c)$~$ are ordered pairs in $~$f$~$, then $~$b=c$~$

so we can define a *partial* function as a set $~$f$~$ of ordered pairs $~$(a,b)$~$ such that:

- if $~$(a, b)$~$ is an ordered pair in $~$f$~$ then $~$a \in A$~$ and $~$b \in B$~$
- if $~$(a, b)$~$ and $~$(a, c)$~$ are ordered pairs in $~$f$~$, then $~$b=c$~$

(That is, we omit the first listed requirement from the definition of a *bona fide* function.)

# Relationship to Turing machines

[todo: maybe this should be under Turing machine rather than partial function?]

Morally speaking, every Turing machine $~$\mathcal{T}$~$ may be viewed as computing some function $~$f: \mathbb{N} \to \mathbb{N}$~$, by defining $~$f(n)$~$ to be the state of the tape after $~$\mathcal{T}$~$ has been allowed to execute on the tape which has been initialised with the value $~$n$~$.

However, if $~$\mathcal{T}$~$ does not terminate on input $~$n$~$ (for example, it may be the machine "if $~$n = 3$~$ then return $~$1$~$; otherwise loop indefinitely"), then this "morally correct" state of affairs is not accurate: how should we define $~$f(4)$~$?
The answer is that we should instead view $~$f$~$ as a *partial* function which is just undefined if $~$\mathcal{T}$~$ fails to halt on the input in question.
So with the example $~$\mathcal{T}$~$ above, $~$f$~$ is the partial function which is only defined at $~$3$~$, and $~$f(3) = 1$~$.