Halting is the problem of figuring out whether an arbitrary computer program will finish executing or stop. This difficult yet fascinating problem is what we’ve been learning in the past week.
This topic is actually the one that is making the least to me in the entire course so far. I basically did understand almost nothing in the lecture, and I had to do a lot of extra reading in order to just grasp the basic idea of this computability theory problem.
We were presented with some examples in class, all written in the Python programming language. It is really cool the fact that there exists some program that is going to run forever and we are unable to prove them.
In the end, it all comes to this: we have a problem that we know the implementation, but we will never be able to prove it, and this is the truly compelling nature of this problem. Just as Neel said in his Slog:
It’s the computer programming equivalent of saying “I always lie”: if it’s true, then it’s not true, and if it’s not true, then it’s true.
In the last week, we were introduced to the last topic of the entire course, which is computability. It is an extension from the halting problem, and I learned a really useful tenique Reduction, that is, to reduce a computer program using halt to determine whether it is computable or not. Basically, the idea is to reach a contradiction: if we reach a contradiction that halt is computable, then by the fact that halt is not computable, we can prove that the original program is non-computable as well. How fascinating! I hope I can get more practice in tutorials, but sadly there weren’t any halting related problems in this week’s tutorial. Hopefully I can understand it better by working on questions in A3.