
This is the third in a series of posts I’ve made recently concerning what I call the universal algorithm, which is a program that can in principle compute any function, if only you should run it in the right universe. Earlier, I had presented a few elementary proofs of this surprising theorem: see Every function can be computable! and A program that accepts exactly any desired finite set, in the right universe.
Those arguments established the universal algorithm, but they fell short of proving Woodin’s interesting strengthening of the theorem, which explains how the universal algorithm can be extended from any arithmetic universe to a larger one, in such a way so as to extend the given enumerated sequence in any desired manner. Woodin emphasized how his theorem raises various philosophical issues about the absoluteness or rather the non-absoluteness of finiteness, which I find extremely interesting.
Woodin’s proof, however, is a little more involved than the simple arguments I provided for the universal algorithm alone. Please see the paper Blanck, R., and Enayat, A. Marginalia on a theorem of Woodin, The Journal of Symbolic Logic, 82(1), 359-374, 2017. doi:10.1017/jsl.2016.8 for a further discussion of Woodin’s argument and related results.
What I’ve recently discovered, however, is that in fact one can prove Woodin’s stronger version of the theorem using only the method of the elementary argument. This variation also allows one to drop the countability requirement on the models, as was done by Blanck and Enayat. My thinking on this argument was greatly influenced by a comment of Vadim Kosoy on my original post.
It will be convenient to adopt an enumeration model of Turing computability, by which we view a Turing machine program as providing a means to computably enumerate a list of numbers. We start the program running, and it generates a list of numbers, possibly finite, possibly infinite, possibly empty, possibly with repetition. This way of using Turing machines is fully Turing equivalent to the usual way, if one simply imagines enumerating input/output pairs so as to code any given computable partial function.
Theorem.(Woodin) There is a Turing machine program with the following properties.
- proves that enumerates a finite sequence of numbers.
- For any finite sequence , there is a model of in which program enumerates exactly .
- For any model in which enumerates a (possibly nonstandard) sequence and any extending , there is an end-extension of in which enumerates exactly .
It is statement (3) that makes this theorem stronger than merely the universal algorithm that I mentioned in my earlier posts and which I find particularly to invite philosophical speculation on the provisional nature of finiteness. After all, if in one universe the program enumerates a finite sequence , then for any extending — we might imagine having painted some new pattern on top of — there is a taller universe in which enumerates exactly . So we need only wait long enough (into the next universe), and then our program will enumerate exactly the sequence we had desired.
Proof. This is the new elementary proof. Let’s begin by recalling the earlier proof of the universal algorithm, for statements (1) and (2) only. Namely, let be the program that undertakes a systematic exhaustive search through all proofs from for a proof of a statement of the form, “program does not enumerate exactly the sequence ,” where is an explicitly listed finite sequence of numbers. Upon finding such a proof (the first such proof found), it proceeds to enumerate exactly the numbers appearing in . Thus, at bottom, the program is a petulant child: it searches for a proof that it shouldn’t behave in a certain way, and then proceeds at once to behave in exactly the forbidden manner.
(The reader may notice an apparent circularity in the definition of program , since we referred to when defining . But this is no problem at all, and it is a standard technique in computability theory to use the Kleene recursion theorem to show that this kind of definition is completely fine. Namely, we really define a program that performs that task, asking about , and then by the recursion theorem, there is a program such that and compute the same function, provably so. And so for this fixed-point program , it is searching for proofs about itself.)
It is clear that the program will enumerate a finite list of numbers only, since either it never finds the sought-after proof, in which case it enumerates nothing, and the empty sequence is finite, or else it does find a proof, in which case it enumerates exactly the finitely many numbers explicitly appearing in the statement that was proved. So proves that in any case enumerates a finite list. Further, if is consistent, then you will not be able to refute any particular finite sequence being enumerated by , because if you could, then (for the smallest such instance) the program would in fact enumerate exactly those numbers, and this would be provable, contradicting . Precisely because you cannot refute that statement, it follows that the theory plus the assertion that enumerates exactly is consistent, for any particular . So there is a model of in which program enumerates exactly . This establishes statements (1) and (2) for this program.
Let me now modify the program in order to achieve the key third property. Note that the program described above definitely does not have property (3), since once a nonempty sequence is enumerated, then the program is essentially finished, and so running it in a taller universe will not affect the sequence it enumerates. To achieve (3), therefore, we modify the program by allowing it to add more to the sequence.
Specfically, for the new modified version of the program , we start as before by searching for a proof in that the list enumerated by is not exactly some explicitly listed finite sequence . When this proof is found, then immediately enumerates the numbers appearing in . Next, it inspects the proof that it had found. Since the proof used only finitely many axioms, it is therefore a proof from a certain fragment , the fragment of . Now, the algorithm continues by searching for a proof in a strictly smaller fragment that program does not enumerate exactly some explicitly listed sequence properly extending the sequence of numbers already enumerated. When such a proof is found, it then immediately enumerates (the rest of) those numbers. And now simply iterate this, looking for new proofs in still-smaller fragments of that a still-longer extension is not the sequence enumerated by .
Succinctly: the program searches for a proof, in a strictly smaller fragment of each time, that does not enumerate exactly a certain explicitly listed sequence extending whatever has been already enumerated so far, and when found, it enumerates those new elements, and repeats.
We can still prove in that enumerates a finite sequence, since the fragment of that is used each time is going down, and proves that this can happen only finitely often. So statement (1) holds.
Again, you cannot refute that any particular finite sequence is the sequence enumerated by , since if you could do this, then in the standard model, the program would eventually find such a proof, and then perhaps another and another, until ultimately, it would find some last proof that does not enumerate exactly some finite sequence , at which time the program will have enumerated exactly and never afterward add to it. So that proof would have proved a false statement. This is a contradiction, since that proof is standard.
So again, precisely because you cannot refute these statements, it follows that it is consistent with that program enumerates exactly , for any particular finite . So statement (2) holds.
Finally, for statement (3), suppose that is a model of in which enumerates exactly some finite sequence . If is the empty sequence, then thinks that there is no proof in that does not enumerate exactly , for any particular . And so it thinks the theory “ enumerates exactly ” is consistent. So in we may build the Henkin model of this theory, which is an end-extension of in which enumerates exactly , as desired.
If alternatively was nonempty, then it was enumerated by in because in there was ultimately a proof in some fragment that it should not do so, but it never found a corresponding proof about an extension of in any strictly smaller fragment of . So has a proof from that does not enumerate exactly , even though it did.
Notice that must be nonstandard, because has a definable -truth predicate for every standard , and using this predicate, can see that every -provable statement must be true.
Precisely because the model lacked the proofs from the strictly smaller fragment , it follows that for any particular finite extending in , the model thinks that the theory “ enumerates exactly ” is consistent. Since is nonstandard, this theory includes all the actual axioms. In we can build the Henkin model of this theory, which will be an end-extension of in which holds and program enumerates exactly , as desired for statement (3). QED
Corollary. Let be the universal algorithm program of the theorem. Then
- For any infinite sequence , there is a model of in which program enumerates a (nonstandard finite) sequence starting with .
- If is any model of in which program enumerates some (possibly nonstandard) finite sequence , and is any -definable infinite sequence extending , then there is an end-extension of in which enumerates a sequence starting with .
Proof. (1) Fix . By a simple compactness argument, there is a model of true arithmetic in which the sequence is the standard part of some coded nonstandard finite sequence . By the main theorem, there is some end-extension of in which enumerates , which extends , as desired.
(2) If enumerates in , a model of , and is an -infinite sequence definable in , then by a compactness argument inside , we can build a model inside in which is coded by an element, and then apply the main theorem to find a further end-extension in which enumerates that element, and hence which enumerates an extension of . QED
Really very nice, Joel!
I have come to learn that Rasmus Blanck’s dissertation is now available (see https://gupea.ub.gu.se/handle/2077/52271) and it contains many further interesting results on a similar theme. The arguments he gives in chapter 7 have a fundamental underlying affinitiy with the argument I presented above. It is not exactly the same argument, but the main idea appears to be very similar.
Pingback: The universal definition — it can define any object you like, in the right universe | Joel David Hamkins
Pingback: The universal finite set | Joel David Hamkins
Just a comment on the existence of the program . I think that circularity is not the main issue while trying to understand it. The real problem is that by Kleene’s theorem you end up with a program that is a petulant child. How can it be that a program that is first searching for a proof that it does not enumerate the sequence , in the end enumerates this sequence anyway?
Let me write explicitly how to apply Kleene’s theorem: such that: does not enumerate exactly the sequence . (not yet!) enumerates this sequence. that searches for the proof about itself and then behaves in a forbidden way.
We define the program
1. It searches for the proof that
2. Upon finding such a proof,
Then by the theorem we end up with a program
But if finds such a proof for some sequence , then is inconsistent. So in fact will not find such a proof in . That means, on the other hand, that is consistent with the fact that the program enumerates any sequence (since no proof of contrary has been found). So there is a model of in which the program enumerates exactly .
This is basically the same what you wrote, but for some reason rephrasing it made
it easier for me to understand. Maybe it will help some less experienced readers like me