# Turing machine

*For Alan Turing's test devised to determine the quality of an artificial intelligence, see Turing test*

**Turing machines** are extremely basic symbol-manipulating devices which—despite their simplicity—can be adapted to simulate the logic of any computer that could possibly be constructed. The concept is derived from Alan Turing's thought-experiment in 1936 about an infinite number of ordered sheets of paper, each containing one of a finite set of symbols, which could only be studied or modifed one sheet at a time. It is not generally *practical* to use a Turing machine to do any significant computation, but studying its abstract properties yields many insights in computer science and complexity theory.

A Turing machine that is able to simulate any other Turing machine is called a **universal Turing machine** (or simply a **universal machine**). A more mathematically-oriented definition with a similar "universal" nature was introduced by Alonzo Church, whose work on lambda calculus intertwined with Turing's in a formal theory of computation known as the Church-Turing thesis. The thesis that states that Turing machines indeed capture the informal notion of effective method in logic and mathematics, and provide a precise definition of an algorithm or 'mechanical procedure'.

## Contents

## Definition

**Informal description**

The concept of the Turing machine is based on the idea of a person executing a well-defined procedure by changing the contents of an unlimited number of ordered paper sheets that can contain one of a finite set of symbols. The person needs to remember one of a finite set of states and the procedure is formulated in very basic steps in the form of "If your state is 42 and the symbol you see is a '0' then replace this with a '1', move one symbol to the right, and assume state 17 as your new state."

A Turing machine is a pushdown automaton made more powerful by relaxing the last-in-first-out requirement of its stack. (Interestingly, this seemingly minor relaxation enables the Turing machine to perform such a wide variety of computations that it can serve as a model for the computational capabilities of all modern computer software.)

More precisely, a Turing machine consists of:

- A
*tape*which is divided into cells, one next to the other. Each cell contains a symbol from some finite alphabet. The alphabet contains a special*blank*symbol (here written as '0') and one or more other symbols. The tape is assumed to be arbitrarily extendible to the left and to the right, i.e., the Turing machine is always supplied with as much tape as it needs for its computation. Cells that have not been written to before are assumed to be filled with the blank symbol. - A
*head*that can read and write symbols on the tape and move left and right. - A
*state register*that stores the state of the Turing machine. The number of different states is always finite and there is one special*start state*with which the state register is initialized. - An
*action table*(or*transition function*) that tells the machine what symbol to write, how to move the head ('L' for one step left, and 'R' for one step right) and what its new state will be, given the symbol it has just read on the tape and the state it is currently in. If there is no entry in the table for the current combination of symbol and state then the machine will halt.

Note that every part of the machine is finite; it is the potentially unlimited amount of tape that gives it an unbounded amount of storage space.

### Formal definition

#### One-tape Turing machine

More formally, a (one-tape) Turing machine is usually defined as a 6-tuple , where

- is a finite set of states
- is a finite set of the tape alphabet
- is the initial state
- is the blank symbol (the only symbol allowed to occur on the tape infinitely often at any step during the computation)
- is the set of final or accepting states
- is a partial function called the transition function, where L is left shift, R is right shift.

Definitions in the literature sometimes differ slightly, to make arguments or proofs easier or clearer, but this is always done in such a way that the resulting machine has the same computational power. For example, changing the set to , where *S* would allow the machine to stay on the same tape cell instead of moving left or right, does not increase the machine's computational power.

#### k-tape Turing machine

A k-tape Turing machine can similarly be described as a 6-tuple , where

- is a finite set of states
- is a finite set of the tape alphabet
- is the initial state
- is the blank symbol
- is the set of final or accepting states
- is a partial function called the transition function, where L is left shift, R is right shift, S is no shift.

Note that a k-tape Turing Machine is no more powerful than a standard Turing Machine.

## Example

The following Turing machine has an alphabet {'0', '1'}, with 0 being the blank symbol. It expects a series of 1s on the tape, with the head initially on the leftmost 1, and doubles the 1s with a 0 in between, i.e., "111" becomes "1110111". The set of states is {s1, s2, s3, s4, s5} and the start state is s1. The action table is as follows.

Old Read Wr. New Old Read Wr. New St. Sym. Sym. Mv. St. St. Sym. Sym. Mv. St. - - - - - - - - - - - - - - - - - - - - - - - - s1 1 -> 0 R s2 s4 1 -> 1 L s4 s2 1 -> 1 R s2 s4 0 -> 0 L s5 s2 0 -> 0 R s3 s5 1 -> 1 L s5 s3 0 -> 1 L s4 s5 0 -> 1 R s1 s3 1 -> 1 R s3

A computation of this Turing machine might for example be: (the position of the head is indicated by displaying the cell in bold face)

Step State Tape Step State Tape - - - - - - - - - - - - - - - - - 1 s111 9 s2 1001 2 s2 0110 s3 10013 s2 01011 s3 100104 s3 010012 s4 10011 5 s4 0101 13 s4 10011 6 s5 0101 14 s5 10011 7 s50101 15 s1 11011 8 s1 1101 -- halt --

The behavior of this machine can be described as a loop: it starts out in s1, replaces the first 1 with a 0, then uses s2 to move to the right, skipping over 1s and the first 0 encountered. S3 then skips over the next sequence of 1s (initially there are none) and replaces the first 0 it finds with a 1. S4 moves back to the left, skipping over 1s until it finds a 0 and switches to s5. s5 then moves to the left, skipping over 1s until it finds the 0 that was originally written by s1. It replaces that 0 with a 1, moves one position to the right and enters s1 again for another round of the loop. This continues until s1 finds a 0 (this is the 0 in the middle of the two strings of 1s) at which time the machine halts.

## Deterministic and non-deterministic Turing machines

If the action table has at most one entry for each combination of symbol and state then the machine is a **deterministic Turing machine** (DTM). If the action table contains multiple entries for a combination of symbol and state then the machine is a **non-deterministic Turing machine** (NDTM or NTM).

## Universal Turing machines

Every Turing machine computes a certain fixed partial computable function from the input strings over its alphabet. In that sense it behaves like a computer with a fixed program. However, as Alan Turing already described, we can encode the action table of any Turing machine in a string. Thus we might try to construct a Turing machine that expects on its tape a string describing an action table followed by a string describing the input tape, and then computes the tape that the encoded Turing machine would have computed.

In 1947, Turing said:

It can be shown that a single special machine of that type can be made to do the work of all. It could in fact be made to work as a model of any other machine. The special machine may be called the universal machine.

With this encoding of action tables as strings, it becomes possible in principle for Turing machines to answer questions about the behaviour of other Turing machines. Most of these questions, however, are undecidable, meaning that the function in question cannot be calculated by any Turing machine. For instance, the problem of determining whether any particular Turing machine will halt on a particular input, or on all inputs, known as the Halting problem, was shown to be, in general, undecidable in Turing's original paper. Rice's theorem shows that any non-trivial question about the behaviour or output of a Turing machine is undecidable.

If we broaden the definition to include any Turing machine that simulates some Turing-complete computational model, not just Turing machines that directly simulate other Turing machines, a universal Turing machine can be fairly simple, using just a few states and a few symbols. For example, only 2 states are needed, since a 2×18 (meaning 2 states, 18 symbols) universal Turing machine is known.

For some time, the smallest known universal Turing machines, which simulated a computational model called a tag system, had the following numbers of states and symbols : 2×18, 3×10, 4×6, 5×5, 7×4, 10×3, 22×2. Wolfram reports in his book, *A New Kind of Science,* a smaller universal Turing machine with 2 states and just 5 symbols, which emulates a cellular automaton also shown to be universal, making this the simplest known universal Turing machine.

A universal Turing machine is Turing-complete.
It can calculate any recursive function, decide any recursive language, and accept any recursively enumerable language.
According to the Church-Turing thesis, the problems solvable by a universal Turing machine are exactly those problems solvable by an *algorithm* or an *effective method of computation*, for any reasonable definition of those terms.

An abstract version of the universal Turing machine is the universal function, a computable function which can be used to calculate any other computable function. The utm theorem proves the existence of such a function.

## Comparison with real machines

It's often said that Turing machines, unlike simpler automata, are as powerful as real machines, and are able to execute any operation that a real program can. What is missed in this statement is that almost any particular program running on *a particular machine* is in fact nothing but a deterministic finite automaton, since the machine it runs on can only be in finitely many *configurations*. Turing machines would actually only be equivalent to a machine that had an unlimited amount of storage space. We might ask, then, why Turing machines are useful models of real computers. There are a number of ways to answer this:

- Anything a real computer can compute, a Turing machine can also compute. Thus, a statement about the limitations of Turing machines (for instance, the minimum time required to calculate something) will also apply to real computers.
- The difference lies only with the ability of a Turing machine to manipulate an unbounded amount of data. However, given a finite amount of time, a Turing machine (like a real machine) can only manipulate a finite amount of data.
- Like a Turing machine, a real machine can have its storage space enlarged as needed, by acquiring more disks or other storage media. If the supply of these runs short, the Turing machine may become less useful as a model. But the fact is that neither Turing machines nor real machines need astronomical amounts of storage space in order to perform useful computation. The processing time required is usually much more of a problem.
- Real machines are much more complex than a Turing machine. For example, a Turing machine describing an algorithm may have a few hundred states, while the equivalent deterministic finite automaton on a given real machine has quadrillions.
- Turing machines describe algorithms independent of how much memory they utilize. There is a maximum to the amount of memory that any machine which we know of has, but this limit can rise arbitrarily in time. Turing machines allow us to make statements about algorithms which will (theoretically) hold forever, regardless of advances in
*conventional*computing machine architecture. - Turing machines simplify the statement of algorithms. Algorithms running on Turing-equivalent abstract machines are usually more general than their counterparts running on real machines, because they have arbitrary-precision data types available and never have to deal with unexpected conditions (including, but not limited to, running out of memory).

One way in which Turing machines are a poor model for programs is that many real programs, such as operating systems and word processors, are written to receive unbounded input over time, and therefore do not halt. Turing machines do not model such ongoing computation well (but can still model portions of it, such as individual procedures).

Another limitation of Turing Machines is that they do not model the strengths of a particular arrangement well. For instance, modern computers are actually instances of a more specific form of computing machine, known as the random access machine. The primary difference between this machine and the Turing Machine is that the Turing Machine uses an infinite tape, while the random access machine uses a numerically indexed sequence (typically an integer field). The upshot of this distinction is that there are computational optimizations that can be performed based on the memory indices, which are not possible in a general Turing Machine; thus when Turing Machines are used as the basis for bounding running times, a 'false lower bound' can be proven on certain algorithms' running times (due to the false simplifying assumption of a Turing Machine). An example of this is counting sort, which seemingly violates the lower bound on sorting algorithms.

The concept of a Turing machine was used as an educational tool in the science fiction novel *The Diamond Age* (1995), by Neal Stephenson. The main character, Nell, possesses an interactive book which teaches her creative thinking and logic by presenting puzzles in a story as Turing machines which become more and more complex as the story progresses. They begin as a simple chain-fed clockwork device and progresses to abstract economic processes, trades, and finally the interaction of entire fictional kingdoms.

## See also

- Langton's ant, a simple two-dimensional analogue of the Turing machine.
- Probabilistic Turing machine
- Church-Turing thesis, which says Turing machines can perform any computation that can be performed.
- Busy Beaver
- Computability logic
- Turing completeness
- Turing tarpit, any computing system or language which, like the Turing machine, is not only Turing-complete but also useless for practical computing.
- A Turing Machine in Conway's Game of Life by Paul Rendell - See also: Conway's Game of Life
- Neal Stephenson's Cryptonomicon

## References

- Rolf Herken:
*The Universal Turing Machine - A Half-Century Survey*, Springer Verlag, ISBN 3-211-82637-8 - Paul Strathern:
*Turing and the Computer - The big idea*, Anchor Books/Doubleday, ISBN 0-385-49243-X - Turing, A.,
*On Computable Numbers, With an Application to the Entscheidungsproblem*, Proceedings of the London Mathematical Society, Series 2, Volume 42, 1936; reprinted in M. David (ed.),*The Undecidable*, Hewlett, NY: Raven Press, 1965; - Boolos, G. and Jeffrey, R.,
*Computability and Logic*, 2nd ed., Cambridge: Cambridge University Press, 1980. - Rogozhin, Yurii, "A Universal Turing Machine with 22 States and 2 Symbols",
*Romanian Journal Of Information Science and Technology*, 1(3), 259-265, 1998. (surveys known results about small universal Turing machines) - Wolfram, Stephen,
*A New Kind of Science*, Wolfram Media, ISBN 1-57955-008-8

## External links

- Turing Machine on Stanford Encyclopedia of Philosophy
- Detailed info on the Church-Turing Hypothesis (Stanford Encyclopedia of Philosophy)

## Simulators

- Visual Turing Machine, a visual designer and simulator, (free software, platform independent).
- Visual Turing, a Turing machine interactive simulator/IDE (free software for Windows).
- Suzanne Britton's Turing Machine Simulator (java applet).
- C++ Simulator of a Nondeterministic and Deterministic Multitape Turing Machine (free software).
- C++ Simulator of a Universal Turing Machine (which accepts Multitape Turing Machine) (free software).
- Turing Train Terminal - A working Turing machine built out of scale trains.
- TMML - Describing a Turing Machine with XML

Template:Formal languages and grammars

ar:آلة تورنج bg:Машина на Тюринг cs:Turingův stroj de:Turingmaschine et:Turingi masin es:Máquina de Turing fr:Machine de Turing ko:튜링 기계 id:Mesin Turing it:Macchina di Turing he:מכונת טיורינג lt:Tiuringo mašina lb:Turingmaschinn hu:Turing-gép nl:Turingmachine ja:チューリングマシン pl:Maszyna Turinga pt:Máquina de Turing ru:Универсальная машина Тьюринга sk:Turingov stroj sl:Turingov stroj fi:Turingin kone sv:Turingmaskin th:เครื่องจักรทัวริง tr:Turing Makinesi zh:图灵机