Holy cow! What a thread!
It’s really late, so I’m just going to chime in with some clarification of some of the terms and concepts I see getting bandied about, then go to bed.
Turing Machine
A symbol manipulation device. Strings of symbols go in, and other strings of symbols come out. Internally, the TM consists of a set of states with rules for having the machine transition from one state to another (and what sort of output to create) depending on the current state and the symbol present at the input of the machine. A TM also has a (theoretically) infinite tape on which to store symbols as it does its thing. Certain states within the machine are called “stop” or “halt” or “accept” states, because each TM is created to recognize certain strings as valid input for it. The full set of strings accepted by a TM is known as the “language” of the machine. If a string in the machine’s language is fed to it, then the machine will halt in an accepting state some time after the point where the end of the input string is reached. If a string is fed in, and the machine stops in a non-accepting state at the end of input, it is said to crash. If, at the end of input, the TM is stuck transitioning continuously around a subset of its states without accepting or crashing (yes it can happen), it is in an infinite loop.
Universal Turing Machine
A UTM is a Turing machine with the special property that it can simulate the operation of ANY Turing Machine, even other UTMs. The computer to which you have been glued for all this time is a real-world approximation of a UTM (it lacks the infinity of tape, otherwise it’s there in the flesh). It can simulate a TM that is a word processor, or a TM that is a pocket calculator, etc. It will behave exactly as the TM would, halting, crashing or looping on various input.
Any computer program is essentially creating a TM on a UTM, and running some appropriate input through it to see what happens.
The Halting Problem and its Undecidability
There is no upper limit as to how many transitions a TM must go through before halting on (accepting) a particular input string. So if I wish to see if a machine halts on a string by feeding the string into it, how do I know whether the machine is in an infinite loop, or just needs to make 864 trillion transistions before halting on this string? I wonder if there’s a way to DECIDE, without having to run it through, whether a particular string will cause a particular TM to loop, crash, or halt? Turns out the mathematically proven answer is: NO.
Translated into real world terms, "Can I write a program that can tell absolutely by some magic means, other than tediously tracing through the code, if my other new program will never crash or hang my machine? Again: NO. This is why the Halting Problem is also known as Programmer’s Employment Insurance.
What computers and TMs have to do with Goedel
Absolutely everything. UTMs existed as a mathematical construct before anyone ever tried to build one. They were used to take strings of symbols that represented statements of number theory and use them to create other statements of number theory.
A trivial example: the fact that 3 + 5 = 8 means that I can construct a TM, put in the string 3 + 5 (or some string of symbols that represents this) and the machine will simultaneously halt on the input, and output a symbol that means “8”. I can also construct it to take ANY two numbers and give the correct sum as an output. Whether I construct it on paper and trace the state transitions with a pencil or build a pocket calculator, it works essentially the same way.
A better example: I could even build machines to do trig identities, for example: It would take sin (x) / cos (x) , and output tan(x).
Once TMs had begun to show how useful they were for generating statements of number theory, the great mathematician Hilbert called upon the world math community to use these wonderful concepts to prove once and for all that mathematics was COMPLETE (all true mathematical statements could be generated from the starting axioms by using the standard symbol replacement techniques) and CONSISTENT (by applying all applicable replacement techniques to the inital axioms and their successors, the only statements generated, known as “proveable” statements, would be in fact true statements, i.e. no falsehoods.)
Goedel screwed everything up for everybody by creating a statement of number theory that, if it were proveable, would be false, but if it were unproveable, would be true, showing that an axiomatic system could either be complete OR consistent, BUT NOT BOTH.
Good night.