# Gödel numbering for sequences

In mathematics, a Gödel numbering for sequences provides an effective way to represent each finite sequence of natural numbers as a single natural number. While a set theoretical embedding is surely possible, the emphasis is on the effectiveness of the functions manipulating such representations of sequences: the operations on sequences (accessing individual members, concatenation) can be "implemented" using total recursive functions, and in fact by primitive recursive functions.
It is usually used to build sequential “data types” in arithmetic-based formalizations of some fundamental notions of mathematics. It is a specific case of the more general idea of Gödel numbering. For example, recursive function theory can be regarded as a formalization of the notion of an algorithm, and can be regarded as a programming language to mimic lists by encoding a sequence of natural numbers in a single natural number.

## Gödel numbering

Besides using Gödel numbering to encode unique sequences of symbols into unique natural numbers (i.e. place numbers into mutually exclusive or one-to-one correspondence with the sequences), we can use it to encode whole “architectures” of sophisticated “machines”. For example, we can encode Markov algorithms, or Turing machines into natural numbers and thereby prove that the expressive power of recursive function theory is no less than that of the former machine-like formalizations of algorithms.

## Accessing members

Any such representation of sequences should contain all the information as in the original sequence—most importantly, each individual member must be retrievable. However, the length does not have to match directly; even if we want to handle sequences of different length, we can store length data as a surplus member, or as the other member of an ordered pair by using a pairing function.
We expect that there is an effective way for this information retrieval process in form of an appropriate total recursive function. We want to find a totally recursive function f with the property that for all n and for any n-length sequence of natural numbers $\langle a_{0},\dots a_{n-1}\rangle$, there exists an appropriate natural number a, called the Gödel number of the sequence, such that for all i where $0\leq i\leq n-1$, $f(a,i)=a_{i}$.
There are effective functions which can retrieve each member of the original sequence from a Gödel number of the sequence. Moreover, we can define some of them in a constructive way, so we can go well beyond mere proofs of existence.

### Gödel's β-function lemma

By an ingenious use of the Chinese remainder theorem, we can constructively define such a recursive function $\beta$ (using simple number-theoretical functions, all of which can be defined in a total recursive way) fulfilling the specifications given above. Gödel defined the $\beta$ function using the Chinese remainder theorem in his article written in 1931. This is a primitive recursive function.
Thus, for all n and for any n-length sequence of natural numbers $\langle a_{0},\dots a_{n-1}\rangle$, there exists an appropriate natural number a, called the Gödel number of the sequence such that $\beta (a,i)=a_{i}$.

#### Using a pairing function

Our specific solution will depend on a pairing function—there are several ways to implement the pairing function, so one method must be selected. Now, we can abstract from the details of the implementation of the pairing function. We need only to know its “interface”: let $\pi$, K, and L denote the pairing function and its two projection functions, respectively, satisfying specification:
    $K\left(\pi \left(x,y\right)\right)=x$
    $L\left(\pi \left(x,y\right)\right)=y$

#### Remainder for natural numbers

We shall use another auxiliary function that will compute the remainder for natural numbers. Examples:
* $\mathrm {rem} (5,3)=2$
* $\mathrm {rem} (7,2)=1$
It can be proven that this function can be implemented as a recursive function.

#### Using the Chinese remainder theorem
##### Implementation of the β function

Using the Chinese remainder theorem, we can prove that implementing $\beta$ as
    $\beta (s,i)=\mathrm {rem} \left(K\left(s\right),\left(i+1\right)\cdot L\left(s\right)+1\right)$
will work, according to the specification we expect $\beta$ to satisfy. We can use a more concise form by an abuse of notation (constituting a sort of pattern matching):
    $\beta \left(\pi \left(x_{0},m\right),i\right)=\mathrm {rem} \left(x_{0},\left(i+1\right)\cdot m+1\right)$
Let us achieve even more readability by more modularity and reuse (as these notions are used in computer science): by defining $\forall i<n$ the sequence $m_{i}=(i+1)\cdot m+1$, we can write
    $\beta \left(\pi \left(x_{0},m\right),i\right)=\mathrm {rem} \left(x_{0},m_{i}\right)$.
We shall use this $m_{i}$ notation in the proof.

##### Hand-tuned assumptions

For proving the correctness of the above definition of the $\beta$ function, we shall use several lemmas. These have their own assumptions. Now we try to find out these assumptions, calibrating and tuning their strength carefully: they should not be said in an either superfluously sharp, or unsatisfactorily weak form.
Let $a_{0},\dots a_{n-1}$ be a sequence of natural numbers. Let m be chosen to satisfy
    $\forall i\in {\overline {n}}\setminus \left\{0\right\}\left(i\mid m\right)$
    $\forall i<n\left(a_{i}<m_{i}\right)$
The first assumption is meant as
    $1\mid m\land \dots \land n-1\mid m$
It is needed to meet an assumption of the Chinese remainder theorem (that of being pairwise coprime). In the literature, sometimes this requirement is replaced with a stronger one, e.g. constructively built with the factorial function, but the stronger premise is not required for this proof.
The second assumption does not concern the Chinese remainder theorem in any way. It will have importance in proving that the specification for $\beta$ is met eventually. It ensures that an ${\tilde {x}}$ solution of the simultaneous congruence system
    $x\equiv a_{i}{\pmod {m_{i}}}$ for each i where $0\leq i\leq n-1$
also satisfies
    $a_{i}=\mathrm {rem} ({\tilde {x}},m_{i})$.
A stronger assumption for m requiring $\forall i<n\;(a_{i}<m)$ automatically satisfies the second assumption (if we define the notation $m_{i}$ as above).

### Proof that (coprimality) assumption for Chinese remainder theorem is met

In the section Hand-tuned assumptions, we required that
    $\forall i\in {\overline {n}}\setminus \left\{0\right\}\left(i\mid m\right)$. What we want to prove is that we can produce a sequence of pairwise coprime numbers in a way that will turn out to correspond to the Implementation of the β function.
In detail:
    $\forall i<n,j<n\;\left(i\neq j\rightarrow \mathrm {coprime} \left(m_{i},m_{j}\right)\right)$
remembering that $\forall i<n$ we defined $m_{i}=(i+1)\cdot m+1$.
The proof is by contradiction; assume the negation of the original statement:
    $\exists i<n,j<n\;\left(i\neq j\land \lnot \mathrm {coprime} \left(m_{i},m_{j}\right)\right)$

#### First steps

We know what “coprime” relation means (in a lucky way, its negation can be formulated in a concise form); thus, let us substitute in the appropriate way:
    $\exists i<n,j<n\;\left(i\neq j\land \exists p\in \mathrm {Prime} \;\left(p\mid m_{i}\land p\mid m_{j}\right)\right)$
Using a “more” prenex normal form (but note allowing a constraint-like notation in quantifiers):
    $\exists i<n,j<n,p\in \mathrm {Prime} \;\left(i\neq j\land p\mid m_{i}\land p\mid m_{j}\right)$
Because of a theorem on divisibility, $p\mid m_{i}\land p\mid m_{j}$ allows us to also say
    $p\mid m_{i}-m_{j}$.
Substituting the definitions of $m_{k}$-sequence notation, we get $m_{i}-m_{j}=(i-j)\cdot m$, thus (as equality axioms postulate identity to be a congruence relation) we get
    $p\mid (i-j)\cdot m$.
Since p is a prime element (note that the irreducible element property is used), we get
    $p\mid i-j\lor p\mid m$.

#### Resorting to the first hand-tuned assumption

Now we must resort to our assumption
    $\forall i\in {\overline {n}}\setminus \left\{0\right\}\left(i\mid m\right)$.
The assumption was chosen carefully to be as weak as possible, but strong enough to enable us to use it now.
The assumed negation of the original statement contains an appropriate existential statement using indices $i<n\land j<n\land i\neq j$; this entails $i-j\in {\overline {n}}\setminus \left\{0\right\}$, thus the mentioned assumption can be applied, so $i-j\mid m$ holds.

#### Using an (object) theorem of the propositional calculus as a lemma

We can prove by several means known in propositional calculus that
    $\left(A\land \left(A\rightarrow B\right)\right)\rightarrow B$
holds.
Since $i-j\mid m$, by the transitivity property of the divisibility relation, $p\mid i-j\rightarrow p\mid m$. Thus (as equality axioms postulate identity to be a congruence relation)
    $p\mid m$
can be proven.

#### Reaching the contradiction

The negation of original statement contained
    $p\mid m_{i}$
and we have just proved
    $p\mid m$.
Thus,
    $p\mid m_{i}-\left(i+1\right)\cdot m$
should also hold. But after substituting the definition of $m_{i}$,
    $m_{i}-\left(i+1\right)\cdot m=1$
Thus, summarizing the above three statements, by transitivity of the equality,
    $p\mid 1$
should also hold.
However, in the negation of the original statement p is existentially quantified and restricted to primes $\exists p\in \mathrm {Prime}$. This establishes the contradiction we wanted to reach.

#### End of reductio ad absurdum

By reaching contradiction with its negation, we have just proven the original statement:
    $\forall i<n,j<n\;\left(i\neq j\rightarrow \mathrm {coprime} \left(m_{i},m_{j}\right)\right)$

### The system of simultaneous congruences

We build a system of simultaneous congruences
    $x\equiv a_{0}{\pmod {m_{0}}}$
       $\vdots$
    $x\equiv a_{n-1}{\pmod {m_{n-1}}}$
We can write it in a more concise way:
    $\forall i<n\;\left(x\equiv a_{i}{\pmod {m_{i}}}\right)$
Many statements will be said below, all beginning with "$\forall i<n\;\left(\dots \right)$". To achieve a more ergonomic treatment, from now on all statements should be read as being in the scope of an $\forall i<n\;\left(\dots \right)$ quantification. Thus, $\forall i<n($ begins here.
Let us chose a solution $x_{0}$ for the system of simultaneous congruences. At least one solution must exist, because $m_{0},\dots m_{n-1}$ are pairwise comprime as proven in the previous sections, so we can refer to the solution ensured by the Chinese remainder theorem. Thus, from now on we can regard $x_{0}$ as satisfying
    $x_{0}\equiv a_{i}{\pmod {m_{i}}}$,
which means (by definition of modular arithmetic) that
    $\mathrm {rem} \left(x_{0},m_{i}\right)=\mathrm {rem} \left(a_{i},m_{i}\right)$

#### Resorting to the second hand-tuned assumption

Recall the second assumption, “$\forall i<n\;\left(a_{i}<m_{i}\right)$”, and remember that we are now in the scope of an implicit quantification for i, so we don't repeat its quantification for each statement.
The second assumption $a_{i}<m_{i}$ implies that
    $\mathrm {rem} \left(a_{i},m_{i}\right)=a_{i}$.
Now by transitivity of equality we get
    $\mathrm {rem} \left(x_{0},m_{i}\right)=a_{i}$.

#### QED

Our original goal was to prove that the definition
    $\beta \left(\pi \left(x_{0},m\right),i\right)=\mathrm {rem} \left(x_{0},m_{i}\right)$
is good for achieving what we declared in the specification of $\beta$: we want $\beta \left(\pi \left(x_{0},m\right),i\right)=a_{i}$ to hold.
This can be seen now by transitivity of equality, looking at the above three equations.
(The large scope of i ends here.)

### Existence and uniqueness

We have just proven the correctness of the definition of $\beta$: its specification requiring
    $\forall a_{0},\dots ,a_{n-1}\;\exists s\;\forall i<n\;\beta (s,i)=a_{i}$
is met. Although proving this was most important for establishing an encoding scheme for sequences, we have to fill in some gaps yet. These are related notions similar to existence and uniqueness (although on uniqueness, “at most one” should be meant here, and the conjunction of both is delayed as a final result).

#### Uniqueness of encoding, achieved by minimalization

Our ultimate question is: what number should stand for the encoding of sequence $\left\langle a_{0},\dots ,a_{n-1}\right\rangle$? The specification declares only an existential quantification, not yet a functional connection. We want a constructive and algorithmic connection: a (total) recursive function that performs the encoding.

#### Totality, because minimalization is restricted to special functions

This gap can be filled in a straightforward way: we shall use minimalization, and the totality of the resulting function is ensured by everything we have proven till now (i.e. the correctness of the definition of $\beta$ by meeting its specification). In fact, the specification
    $\forall a_{0},\dots ,a_{n-1}\;\exists s\;\forall i<n\;\beta (s,i)=a_{i}$
plays a role here of a more general notion (“special function”). The importance of this notion is that it enables us to split off the (sub)class of (total) recursive functions from the (super)class of partial recursive functions. In brief, the specification says that a function f
satisfying the specification
    $f\left(a_{0},\dots ,a_{n-1},s\right)=0\leftrightarrow \forall i<n\;\left(\beta (s,i)=a_{i}\right)$
is a special function; that is, for each fixed combination of all-but-last arguments, the function f has root in its last argument:
    $\forall a_{0},\dots ,a_{n-1}\;\exists s\;\left(f\left(a_{0},\dots ,a_{n-1},s\right)=0\right)$

#### The Gödel numbering function g can be chosen to be total recursive

Thus, let us choose the minimal possible number that fits well in the specification of the $\beta$ function:
    $g:\mathbb {N} ^{n}\to \mathbb {N}$
    $\left\langle a_{0},\dots ,a_{n-1}\right\rangle \longmapsto \mu a.\left[\forall i<n\;\left(\beta \left(a,i\right)=a_{i}\right)\right]$.
It can be proven (using the notions of the previous section ) that g is (total) recursive.

### Access of length

If we use the above scheme for encoding sequences only in contexts where the length of the sequences is fixed, then no problem arises. In other words, we can use them in an analogous way as arrays are used in programming.
But sometimes we need dynamically stretching sequences, or we need to deal with sequences whose length cannot be typed in a static way. In other words, we may encode sequences in an analogous way to lists in programming.
To illustrate both cases: if we form the Gödel numbering of a Turing machine, then the each row in the matrix of the “program” can be represented with tuples, sequences of fixed length (thus, without storing the length), because the number of the columns is fixed. But if we want to reason about configuration-like things (of Turing-machines), and specifically if we want to encode the significant part of the tape of a running Turing machine, then we have to represent sequences together with their length. We can mimic dynamically stretching sequences by representing sequence concatenation (or at least, augmenting a sequence with one more element) with a totally recursive function.
Length can be stored simply as a surplus member:
    $g:\mathbb {N} ^{*}\to \mathbb {N}$
    $\left\langle a_{0},\dots ,a_{n-1},a_{n}\right\rangle \longmapsto \mu a.\left[a_{0}=n\land \forall i<n\;\left(\beta \left(a,i+1\right)=a_{i}\right)\right]$.
The corresponding modification of the proof is straightforward, by adding a surplus
    $x\equiv n{\pmod {m_{0}}}$
to the system of simultaneous congruences (provided that the surplus member index is chosen to be 0). Also, the assumptions have to be modified accordingly.