\section{Multiple Precision Arithmetic}
We need to go back to school and remember how we did basic arithmetic!
Recall that we first learnt how to operate with small numbers i.~e.\
the digits. Then we learnt how to represent and manipulate bigger
numbers. Thus for us ``human''-sized symbols are the symbols 0-9 which
we consider ``small''; in a similar way the numbers 0--$2^{32}-1$ or the
numbers made (in base 2) of thirty-two 0's and 1's are ``small'' for a
computer. We must already know the following operations with these
numbers; we use $W$ to denote the set of basic symbols which represent
natural numbers from 0 to $M-1$ ($M=10$ for humans and $M=2^{32}$ for
computers):
\begin{description}
\item[addition] The operation of addition with carry
\[ \add: W \times W \times \{0,1\} \to W \times \{0,1\} \]
where $(a,b,\mu)\mapsto(c,\rho)$ which satisfies
\[ a + b + \mu = c + \rho\cdot M\]
\item[subtraction] The operation of subtraction with borrow
\[ \sub: W \times W \times \{0,1\} \to W \times \{0,1\} \]
where $(a,b,\mu)\mapsto(c,\rho)$ which satisfies
\[ a - b - \mu = c - \rho\cdot M\]
\item[multiplication] The operation of multiplication with
remainder
\[ \mul: W \times W \to W \times W \]
where $(a,b)\mapsto(c,d)$ which satisfies
\[ a \cdot b = c\cdot M + d\]
\item[division] The operation of division with
remainder (this is a partial function)
\[ \div: W \times W \times W \to W \times W \]
where $(a,b,c)\mapsto(d,e)$ when $b