FYI -- I wonder how many math proofs down through the centuries have been put into verse? http://m-phi.blogspot.nl/2012/03/geoff-pullum-seusses-out-halting.html Wednesday, 21 March 2012 Pullum S(e)usses Out the Halting Problem Since 2012 is the Turing Centenary Year, and since incompleteness/diagonalization has been the dominant theme on M-Phi of late, I thought it would be both fun and appropriate to repost Geoff Pullum's delightful Seussification of Turing's proof of the undecidabilty of the halting problem. (H/t to John Baez over on Google+.) Scooping the Loop Snooper No program can say what another will do. Now, I wonÂt just assert that, IÂll prove it to you: I will prove that although you might work til you drop, You canÂt predict whether a program will stop. Imagine we have a procedure called P That will snoop in the source code of programs to see There arenÂt infinite loops that go round and around; And P prints the word ÂFine! if no looping is found. You feed in your code, and the input it needs, And then P takes them both and it studies and reads And computes whether things will all end as they should (As opposed to going loopy the way that they could). Well, the truth is that P cannot possibly be, Because if you wrote it and gave it to me, I could use it to set up a logical bind That would shatter your reason and scramble your mind. HereÂs the trick I would use  and itÂs simple to do. IÂd define a procedure  weÂll name the thing Q  That would take any program and call P (of course!) To tell if it looped, by reading the source; And if so, Q would simply print ÂLoop! and then stop; But if no, Q would go right back to the top, And start off again, looping endlessly back, Til the universe dies and is frozen and black. And this program called Q wouldnÂt stay on the shelf; I would run it, and (fiendishly) feed it itself. What behaviour results when I do this with Q? When it reads its own source, just what will it do? If P warns of loops, Q will print ÂLoop! and quit; Yet P is supposed to speak truly of it. So if QÂs going to quit, then P should say, ÂFine!  Which will make Q go back to its very first line! No matter what P would have done, Q will scoop it: Q uses PÂs output to make P look stupid. If P gets things right then it lies in its tooth; And if it speaks falsely, itÂs telling the truth! IÂve created a paradox, neat as can be  And simply by using your putative P. When you assumed P you stepped into a snare; Your assumptions have led you right into my lair. So, how to escape from this logical mess? I donÂt have to tell you; IÂm sure you can guess. By reductio, there cannot possibly be A procedure that acts like the mythical P. You can never discover mechanical means For predicting the acts of computing machines. ItÂs something that cannot be done. So we users Must find our own bugs; our computers are losers! _______ Pullum, Geoffrey K. (2000) ÂScooping the loop snooper: An elementary proof of the undecidability of the halting problem. Mathematics Magazine 73.4 (October 2000), 319-320.