This blog post gets way too caught up in Gödel numbers, which are merely a technical detail (specifically how the encoding is done is irrelevant). A clever detail, but a detail nonetheless. Author gets lost in the sauce and kind of misses the forest for the trees. In class, we used Löb's Theorem[1] to prove Gödel, which is much more grokkable (and arguably even more clever). If you truly get Löb, it'll kind of blow your mind.
As a non-mathematician I always wondered about one thing. Because the way I interpret the Incompleteness Theory is that "you cannot have a universal system of infinite expressiveness, because you will need a more expressive one to prove it".
In other words, you can't have a top-down universal system. But you very well can have well described ones perfectly describe observable behaviour without defects.
We have these things called systems: a "system" is anything that follows rules: a board game, traffic, the English language, math, C++, etc. Some systems are smart and they can talk about themselves, but others can't. For example, Tic-Tac-Toe can't talk about Tic-Tac-Toe, but English can talk about English.
Gödel is interested in smart systems because dumb systems are boring.
Some systems are useful: they are "useful" if they always say true things. So math is more useful than English. I can lie in English, but I can't lie in math. (Formally, this is what we call consistency).
So here's a problem for you: suppose we have a smart-useful-system, call it SUS. SUS should be able to say "SUS is useful." It can talk about itself and it can't lie, so we should have no problem, right?
Gödel showed that if our system can actually say that about itself, it wasn't useful to begin with. For a few centuries, philosophers and mathematicians were trying to come up with the "one perfect system": useful, smart, and also complete (it can say all true things), and a few more properties. Turns out such a system is impossible.
NB: I use the words "say" or "talk about" in a very hand-wavy fashion, sometimes I mean Prove(), sometimes I mean Entail(). The details are very nuanced, and this isn't meant to be a deep dive.
Other names for Gödel encoding: Digital. Binary. Zorros and Unos.
Today Gödel encoding is so pervasive, it’s easy to miss that everything is trivially Gödel encladed. Because like most everything invisible, it’s right in front of us.
We Gödel our memes and gift cards, and (pick your poison) pr0ns. Colors and AI’s, lax ASMR’s and our (sneaky don’t read me) terms of service. Even this very small humble .
Gödel isn’t eating the world. Gödel already pööped it.
Yeah, I think it would be better to first explain the liar's paradox to give the broad brush strokes, and then go into the details of Gôdel numbering.
It seems like most expositions of Gödel's incompleteness theorem go into a surprising amount of detail about Gödel numbering. In a way it's nice though, because you see that the proof is actually pretty elementary and doesn't require fancy math as a prerequisite.
I feel like it's nice to get the gist before diving into the gory details. The proof works by showing that just within the axioms of arithmetic, you can formally state the sentence "this sentence is unprovable." This has some very strange consequences:
- It can't be false, because if it's false then it is provable, and 'provable' means ' can be proven to be true.' That would be a contraction.
- So therefore it must be true, implying that it can't be proven. Consequently there are statements that are true but unprovable, even just within the axioms of arithmetic.
This is Gödel's incompleteness theorem in a nutshell. Most of the proof is spent developing machinery for doing logic, talking about provability, and ultimately getting a statement to refer to itself all using integers and their properties. It's quite satisfying because it doesn't require any super-advanced math, and yet the result is very deep.
What Gödel showed is that (in any sufficiently powerful formal axiomatic system) the set of provable statements isn’t the same as the set of true statements. This means that either there are true statements that aren’t provable (incompleteness), or that there are provable statements that aren’t true (inconsistency), or both.
One way to see this is via the halting problem. For any program (with a fixed input), there is a truth of the matter of whether it will eventually halt or not. In the formal system, for every (Turing-machine) program P we can define a function s_P(n) that gives us the state of the program after n steps (by recursive definition). Then we can write for any program P the statement H(P) = “there exists a natural number n such that s_P(n) is a halting state”. Furthermore, we can write a program R that, given any program P as input, enumerates all proofs of the formal system (this is possible because proofs are strings, and we can write a program that enumerates all strings) and that for each proof checks if it is a proof of H(P) or of not H(P), and if it finds such a proof, stops and outputs the result (P halts or doesn’t halt). If such a proof exists, then R will eventually find it. And if R would find a proof for any P, then this would solve the halting problem.
But we know that the halting problem is undecidable, which means that there must be programs P for which there is neither a proof of H(P) nor of not H(P). This shows that there are truths (the program will halt or won’t halt) for which there is no proof in the formal system; or alternatively, that the formal system is inconsistent and proves falsities.
> could you encode in pure logic how a dog behaves
Assuming we knew enough about how a dog behaves (or less ambitiously, a more primitive organism) I would assume this could be described in a formal language. But why would Principia be needed for this? Math have been used to model natural phenomena a long time before Principia.
The proof will be more friendly to nowadays programmers if we treat all "Gödel numbers" as bytecode of a programming language.
It's trivial that functions like "prove" and "subst" can be implemented based on abilities like bytecode parsing and expression tree manipulation.
37 comments
[1] https://inference-review.com/article/loebs-theorem-and-curry...
In other words, you can't have a top-down universal system. But you very well can have well described ones perfectly describe observable behaviour without defects.
Or is this too reductive?
We have these things called systems: a "system" is anything that follows rules: a board game, traffic, the English language, math, C++, etc. Some systems are smart and they can talk about themselves, but others can't. For example, Tic-Tac-Toe can't talk about Tic-Tac-Toe, but English can talk about English.
Gödel is interested in smart systems because dumb systems are boring.
Some systems are useful: they are "useful" if they always say true things. So math is more useful than English. I can lie in English, but I can't lie in math. (Formally, this is what we call consistency).
So here's a problem for you: suppose we have a smart-useful-system, call it SUS. SUS should be able to say "SUS is useful." It can talk about itself and it can't lie, so we should have no problem, right?
Gödel showed that if our system can actually say that about itself, it wasn't useful to begin with. For a few centuries, philosophers and mathematicians were trying to come up with the "one perfect system": useful, smart, and also complete (it can say all true things), and a few more properties. Turns out such a system is impossible.
NB: I use the words "say" or "talk about" in a very hand-wavy fashion, sometimes I mean Prove(), sometimes I mean Entail(). The details are very nuanced, and this isn't meant to be a deep dive.
Today Gödel encoding is so pervasive, it’s easy to miss that everything is trivially Gödel encladed. Because like most everything invisible, it’s right in front of us.
We Gödel our memes and gift cards, and (pick your poison) pr0ns. Colors and AI’s, lax ASMR’s and our (sneaky don’t read me) terms of service. Even this very small humble .
Gödel isn’t eating the world. Gödel already pööped it.
It seems like most expositions of Gödel's incompleteness theorem go into a surprising amount of detail about Gödel numbering. In a way it's nice though, because you see that the proof is actually pretty elementary and doesn't require fancy math as a prerequisite.
https://www.youtube.com/watch?v=PpSxqde0af4
This is another good exposition.
Löb gets you to the main idea faster, but Gödel numbering is the part that makes it feel like the system is actually doing it itself.
Without that step, it can start to feel a bit too close to the liar paradox.
- It can't be false, because if it's false then it is provable, and 'provable' means ' can be proven to be true.' That would be a contraction.
- So therefore it must be true, implying that it can't be proven. Consequently there are statements that are true but unprovable, even just within the axioms of arithmetic.
This is Gödel's incompleteness theorem in a nutshell. Most of the proof is spent developing machinery for doing logic, talking about provability, and ultimately getting a statement to refer to itself all using integers and their properties. It's quite satisfying because it doesn't require any super-advanced math, and yet the result is very deep.
One way to see this is via the halting problem. For any program (with a fixed input), there is a truth of the matter of whether it will eventually halt or not. In the formal system, for every (Turing-machine) program P we can define a function s_P(n) that gives us the state of the program after n steps (by recursive definition). Then we can write for any program P the statement H(P) = “there exists a natural number n such that s_P(n) is a halting state”. Furthermore, we can write a program R that, given any program P as input, enumerates all proofs of the formal system (this is possible because proofs are strings, and we can write a program that enumerates all strings) and that for each proof checks if it is a proof of H(P) or of not H(P), and if it finds such a proof, stops and outputs the result (P halts or doesn’t halt). If such a proof exists, then R will eventually find it. And if R would find a proof for any P, then this would solve the halting problem.
But we know that the halting problem is undecidable, which means that there must be programs P for which there is neither a proof of H(P) nor of not H(P). This shows that there are truths (the program will halt or won’t halt) for which there is no proof in the formal system; or alternatively, that the formal system is inconsistent and proves falsities.
> could you encode in pure logic how a dog behaves
Assuming we knew enough about how a dog behaves (or less ambitiously, a more primitive organism) I would assume this could be described in a formal language. But why would Principia be needed for this? Math have been used to model natural phenomena a long time before Principia.
The actual German ö is hard for me to figure out without having a native speaker around to practice with.