00010001001001001011000100010010100011001001001000100011001000100100100011001010101011110010001001using the encoding scheme below. Simulate the machine on this input. What happens? Congrats. You are now a Universal Turing Machine!
No matter how we try to extend our TM model, it never seems to increase its computational power. In fact, other completely different computational models have been proposed, and none of them are any more powerful than our basic Turing machine. This leads to the Church-Turing Hypothesis which, roughly, says this: "If a Turing machine can't compute it, nothing can!"
More precisely, the Church-Turing hypothesis says that a Turing machine can be taken as the definition of what it means to compute --- i.e. by definition what a TM computes is what's computable --- because any computational device can be simulated by a Turing machine. This is not a mathematical fact, it's a philosophical statement. It's a definition of a term (computable) which, otherwise is vague. In the next few classes, we'll show that there are problems that cannot be computed by Turing machines, which means there are problems that are "uncomputable".
To make things clear, let's fix names for every possible character, and while we're at it, every possible state. Let S = {a0 , a1 , a2 , ...} be the set of all possible symbols for a machine. Let A = {q0 , q1 , q2 , ...} be the set of all possible states for Turing Machines. Thus, any machine M = (Q,Σ,Γ,δ,s) will satisfy Σ ⊂ S and Q ⊂ A.
We'll let e be our ``encoding function'', which takes any object and encodes it as a string of zeros and ones. First let's look at characters:
e( ) = 0Next we'll come up with an encoding scheme for states ... including the halt state
e(ai) = 0i+2
e(h) = 0Finally we must encode the three possible moves of the tape head:
e(qi) = 0i+2
e(S) = 0
e(L) = 00
e(R) = 000
At this point, we have a scheme for encoding the building blocks of
a machine, but the real heart of the machine is
. If transition
in a TM is
, we encode
as
Now we can encode a Turing Machine. Let T be a Turing Machine
with initial state
and ``transitions'' (i.e. values of
)
. We encode
as:
Since we've come so far, I should also point out that we could
encode an input string
as:
This machine gets encoded as:![]()
0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 \__/ \____________________________/ \______________________/ start transition 1 transition 2 state
Input string w = ai1 ai2 ... aik gets encoded as e(w) = 11e(ai1 ) e(ai2 ) ... e(aik )This input string can then simply be appended to the encoded machine.
0010010101010110010010001001000110001010001010001100010010010010001111001001001
\_________/ \_______________/ \______________/ \_______________/ \_________/
t1 t2 t3 t4 input
00+1(00+10+10+10+1(0|00|000)11)*11(00+1)*