“Does a program halt on a given input ?” I would like to react to this question as a sort-of-constructivist.
Turing machines are great, but they are one model of computation among many “equivalent” models. It suffices to think of a program written in C or Python, except that we idealize the concrete situation by abstracting from the materiality, cost, and finitude of concrete calculation.
We can specify our program further. It is provided with an positive integer input, and then we hope that after a certain number of discrete steps that it will return a positive integer output. We further idealize the situation by allowing arbitrarily large integers in both cases.
We understand that some programs fall into infinite loops. We can easily create such programs. We “know” with practical certainty that the program will never return an output.
We also know that some programs will obviously always return an output. We can easily create simple programs that do this. For instance, it is trivial to write a constant function that always returns 0.
These are the extreme cases. “Of course” the program will halt, terminate, return. And “obviously” the program will loop forever.
What about the difficult cases ? The program is huge. Note that we do not limit the size or complexity of programs in this model. We also understand that some programs need an astronomical number of steps to complete their task. Many crucial cryptographic systems are vulnerable to brute force. Try every key ! But there are too many keys for that to be likely to work in the real world. Still, the time we expect to have to wait is bounded above on actual ( finite ) computers. With Turing machines, which are infinite in terms of memory, there is no upper bound on the steps a good program may need to complete its task.
Now consider a massive randomly generated program, much larger than MacOS. Does this program halt on an input of 0 ?
Turing showed that we have no method — no single program that always returns an answer — that can answer this question for us.
I suggest that Turing’s result be interpreted as throwing into question the predicate of “halts or not.”
The “platonist” will likely say that “it does in fact halt or not” but we can’t know the truth. The truth is out there. The predicate “halts or not” is semantically secure. The issue is epistemic.
I call this dominant position “platonistic” because it abstracts away from time. For the “platonist,” time is not real.
What’s the alternative ? The program has not already halted-or-not “in eternity.” Instead mathematical reality is “in progress.” We have “certain that it halts” and “certain that it loops” and “currently indeterminate.” The situation might crystallize.
The problem with the halting problem for the quasi-constructivist is that it takes a metaphysics for granted. Uncomputable predicates are at the fuzzy limit of sense, where objectivity fades out.