Turing Machine: the accepted formalization for the concept of an algorithm (effective procedure).
TM M = (Q, S, T, d, q0, B, F)
where:
Q = finite set of states
S = input alphabet (S T T) for example {0, 1}
T = allowable tape symbols for example {0, 1, B}
d: QxT Y QxTx {left, right} where all the work is done
q0 = initial or start state
B = blank symbol where B T T - S
F = finite set of final states
A move consists of:
1) calculating a new state
2) replacing the current symbol on the tape under the r/w head
3) moving the r/w head either left or right one position
The language accepted by a TM M is L(M) = {x X S* | q0x # a1qa2 where q X F}.
If L = L(M) for some TM M and x X L then M must terminate on x (enter a final state).
The class of languages accepted by TMs is the set of recursively enumerable (re) languages:
i.e., (if x X L then M halts otherwise M might halt or it might run forever).
A language L that is accepted by a TM M that halts on all inputs is known as a recursive set (recursive language).
The recursive languages are considered decidable while the recursively enumerable languages are considered undecidable.
Halting Problem: does there exist an algorithm which can determine whether TM M eventually halts on input w?
Input: <M, w>
Process: run M on w
Output: if M halts on w, then we're done
If not, what?