We know that no register machine can solve the halting problem. Thus, to show that any other problem is too hard for register machines, it suffices to show that, given a machine that solves the problem, we could use it to solve the halting problem.

We work by contradiction: suppose the problem is solved by machine M, and then we show how to build a machine that solves the halting problem using M as a piece, to obtain the required contradiction.

There is a slightly different way of viewing the same procedure: we show that a machine, given an "oracle" for M could solve the halting problem. It may be, and indeed in interesting cases will be, the case that there are other problems you still couldn't solve (for example, the halting problem for machines that have M as an oracle). That gives a hierarchy of increasingly difficult problems.

Since we can't "really" solve any above the first level, the most basic part of the theory has to do with that level. Since this is a basic course, we're going to spend the rest of the semester reducing the halting problem to various problems to show that they are hard. We will work through a bag of tricks for coding one problem in terms of another. The ones selected are selected for the intrinsic and historical interest of the problems we show to be hard.

There are several whole different directions we could take. I want to mention two.

First, the halting problem is (trivially) solvable by a register machine with an oracle for the halting problem. The same proof we already gave (in the case of the last version, not just a similar proof, but literally the same proof) shows that such machines can't solve the halting problem for machines with an oracle. Of course, the new problem, the halting problem for machines with an oracle for the halting problem can be solved by a machine with a better oracle, namely an oracle for the halting problem for machines with an oracle for the halting problem. ...

The other direction worth mentioning is understanding the argument for the undecidability of the halting problem better: giving a general account of the diagonalization method. One can formalize the minimum requirements on a language to be able to formulate the argument so that, for example, the proof that the halting problem is unsolvable and the proof that there are uncountably many sets of numbers are special cases of the same theorem. It's a pretty amazing theorem, and that is a good way of understanding it better. So far as I know, however, it doesn't yield much new important mathematics, and so it isn't a good way to go in a basic course. It is worth doing just to help get clear on how diagonalization works.

-- ProfessorShaughanLavine? - 21 Mar 2005