Issue regarding computable functions in Godel's Incompleteness Theorem.

67 Views Asked by At

$L$ is the set of all finite length strings.

Some subset of $L$ are legitimate computer programs, call this set $F$.

Some subset of $F$ are functions that turn a Natural Number into a 1 or 0, call this set $A$.

Here the proof states that $A$ contains all computable functions that fit its requirements.

If we define the function $f_i$, such that it takes the $n$-th function from $A$ and returns it with the $n$-th output of that function flipped, then we can say that we now have a function which is not in $A$, therefore we have a function which is not computable.

The trouble I have with this proof centers on either a mistake in the proof, or my misunderstanding of what computable means, being: the program which creates $L$ is a finite string, and with a finite modification to $L$, we could determine which outputs are part of $A$, order them, and change the $n$-th values just as $f_i$ does.

Since this can all be written in a finite program, despite the arguments above, I am not convinced that $f_i$ is not a member of $L$, and admittedly, not certain what the term computability really means.

This is the source of this proof: https://youtu.be/9JeIG_CsgvI?t=1272 Timestamped hopefully so those informed can skip to the meat of it.

1

There are 1 best solutions below

2
On BEST ANSWER

First of all, you say

I am (...) not certain what the term computability really means.

We call a set computable, if there exists a program that will list all the elements of the set. We call a function computable if there exists a program that returns the function value of the input (in a finite amount of steps). The actual definition is of course a lot more technical, and involves the concept of a Turing machine, but for now this informal notion will suffice.


Now, you also state the following:

the program which creates $L$ is a finite string, and with a finite modification to $L$, we could determine which outputs are part of $A$,

This is problematic. If a set is computable, this does not imply that any subset of such a set is computable.

To see this, note that $L$ is countable and computable: we can first list all strings of length $0$ (of which there is only $1$, namely the empty string), then the strings of length $1$ (of which there are finitely many, since the alphabet of $L$ is finite), then the strings of length $2$, etc.

But since $L$ is infinite, the number of subsets of $L$ is uncountable (see Cantor's theorem), and thus we would need an uncountable number of programs to compute each specific subset. But every program is an element of $L$, which was countable (and thus does not contain uncountably many programs).

So although there exists a program that lists all of $L$ (first listing all strings of length $0$, then listing all strings of length $1$, etc.), there does not have to exist a program that lists $A$.


What this variant of the Incompleteness Theorem states, is that, indeed, there does not exist any program that lists all of $A$, the set of computable functions from the natural numbers to $\{0,1\}$.

Suppose such a program $g$ computing the elements of $A$ existed, then we could create the following program $g'$:

  1. take a natural number $n$ and return the $n$-th element $f_n$ of $A$, by letting $g$ compute the $n$-th element of $A$,
  2. compute $f_n(n)$ (as $f_n$ is an element of $A$, hence computable),
  3. return $0$ if $f_n(n)=1$ and return $1$ if $f_n(n)=0$.

But this is a computable function (all of its steps are computable) that takes a natural number $n$ and returns a $1$ or a $0$, so $g'$ is a computable function in $A$. This leads to a contradiction, since then $g'=f_k$ for some natural number $k$, and $g'(k)$ cannot have a value.

What this shows is that there exists no program $g$ that computes the elements of $A$: we can not compute all computable functions.


Gödel's Incompleteness Theorem is a slight variant of this, that doesn't work with "computable functions", but with "provably true statements". Using some technical tools, it shows that we can look at proofs as if they are computable functions. Then his theorem shows that there are true statements that can not be proved, just as there are computable functions in $L$ of which we cannot show that they are computable.

Another variant is the Halting problem, which states that it is impossible to compute if a program will halt, or if it will keep running forever.