Hacker News new | past | comments | ask | show | jobs | submit login

I think the question is a bit more specific in the context of the halting problem

We know by contradiction that we cannot write a program that determines if any program halts, if the program being checked also contains the program that determines if itself halts.

Is this the only class of program that cannot be determined to halt?




It's a tough question to answer because it highly depends on interpretation, after all what does it mean for a program to check whether it itself halts, what does it mean for a program to be self referential? There are many sneaky and indirect ways to make a program self referential.

All undecidable languages that are recognizable in some sense contain a self referential program sneaking within it. This is because the halting problem is complete for its complexity class and hence any undecidable but recognizable language is Turing reducible to the halting problem.

However for undecidable and unrecognizable languages, there are proofs of undecidability that are independent of diagonalization and instead use other proof techniques that in a very strong sense are entirely independent of self-reference. Of course this isn't a formal answer mostly because the idea of a self referential program is not a formal concept but there are techniques such as reverse mathematics [1] that can be used to determine a minimal set of axioms needed to prove a theorem along with proof techniques that depend on the Low basis theorem [2] that are able to prove that some languages are undecidable and unrecognizable that do not in any way depend on diagonalization, which is the proof technique that is associated with self referential programs.

[1] https://en.wikipedia.org/wiki/Reverse_mathematics

[2] https://en.wikipedia.org/wiki/Low_basis_theorem


No, is not the only class of program. An easy example is to take any of the unsolved math problems (like the Goldbach conjeture) and write a program for it, if the program halts it proves the conjeture.

Can you tell if the program halts? You can’t without proving the conjeture.


Well, maybe you can actually prove the conjecture? So wouldn't you have to take an unsolvable math problem first?

Also, a lot of problems are proven unsolvable because solving them would imply solving the halting problem, but hey.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: