The finite-state machine is too limited to even be able to recognize simple sets like , where stands for n copies of a. In 1936 Alan Turing proposed a machine (now called a ``Turing Machine'') which is general enough to implement any algorithm to date. It is a simple modification of the finite-state machine, as we see below.
Definition: Let S be a finite set of states and I a finite set of tape symbols, including a special symbol b (for ``blank''). A Turing Machine is a set of quintuples of the form (s,i,i',s',d) where
The machine acts on an ``infinite tape'' (so it's hard to implement...), with at most a finite number of non-blank entries (so it has unlimited memory, only a finite amount of which is actually non-blank).
The Turing machine processes the tape until it arrives at a state and input which is not found in the set SxI, at which point it terminates.
This is very similar to the finite state machine in some ways: we think of
``...[A] finite-state machine is a very special case of a Turing machine, one that always prints the old symbol on the cell read, always moves to the right, and always halts on the symbol b.'' p. 591.
Turing machines can be used as
Since any algorithm can be implemented in a Turing machine, the next questions to ask might be:
You've got your work cut out for you: to tackle these and other difficult problems. Go to it!