Lecture 13: Turing Machine Variants

- The following programmming techniques can be used to make the behavior of a TM clearer but none of these techniques adds any additional computational power to a basic TM.
- Storage in the state
- We can make a state a tuple with a fixed number of fixed-size components.
- Components of the tuple can hold a fixed amount of data to simplify the behavior of a TM program.
- Multiple tracks
- We can make each symbol of the input alphabet a tuple with a fixed number of fixed-size components.
- Components of the tuple can hold marks and other other information to indicate that an input tape square has been previously visited or has been given some fixed value.
- Sets of states as subroutines
- We can group states into "subroutines" where a subroutine has its own start state and another state which can serve as a "return" state.

- The following extended models of Turing machines can make programming a TM more convenient but none of these extended versions adds any additional computational power to a basic TM. These extended models can be simulated by a basic TM.
- Multitape Turing machines
- Nondeterministic Turing machines
- All these machines are equivalent to a basic Turing machine.

- The following restricted models of computation can simulate a Turing machine and so can recognize any recursively enumerable language.
- Turing machines with semi-infinite tapes
- Pushdown automata with two or more stacks
- Two-counter machines
- All of these machines can be simulated by a basic TM.

- There are many other models of computation that are equivalent in computational power to a Turing machine. Here are a few:
- Chomsky type 0 grammars. A type 0 grammar is like a context-free grammar (V, T, P, S) except that productions can be of the form α → β where α is a string of nonterminals and terminals with at least one nonterminal and β is any string of nonterminals and nonterminals.
- The lambda calculus
- Two-counter machines
- Random access machines
- Turing-complete programming languages. (Programming languages for doing computation such as C and Python are Turing complete. Markup languages used to represent structured data such as HTML and JSON are not Turing complete.)
- Real computers with potentially an unlimited amount of memory

- A Turing machine computes a function from an input to an output by reading the input, making a sequence of moves, and then halting, leaving only the output of the function on the tape.
- A recursive function is one that can be computed by a Turing machine that halts on all inputs.
- A partial-recursive function is one that can be computed by a Turing machine that need not halt on all inputs. The output of the function on an input for which the Turing machine does not halt is said to be undefined.
- The Church-Turing thesis says that any general way to compute will allow us to compute only the partial-recursive functions. The Church-Turing thesis is unprovable because there is no precise definition for "any general way to compute."
- An informal way of expressing the Church-Turing thesis is that any function that can be effectively computed can be computed by a Turing machine.

- Describe at a high level how a deterministic multitape TM can simulate a one-tape nondeterministic TM.
- Describe how a TM with a tape that is infinite only to the right can simulate a basic TM.
- Describe how a PDA with two stacks can simulate a TM.

- HMU: Ch. 8

aho@cs.columbia.edu verma@cs.columbia.edu