This is an old revision of the document!


Lab 02 - Introduction to Turing Machines

Key concepts

  1. How is a Turing Machine (TM) defined?
  2. What is a configuration?
  3. How is the execution of a TM defined?

1. Intro

A Turing Machine consists of:

  • an alphabet $ \Sigma$
  • a set of states $ K$
  • an initial state $ q_0$
  • a transition function $ \delta : K \times \Sigma \rightarrow K \times \Sigma \times \{L,H,R\}$
  • a set of final states $ F \subseteq K$

Which of the following components of an assembly language would best correspond to the above? $ K,\Sigma, \delta, q_0, F$

  • the processor
  • the memory
  • registers
  • assembly instructions

1. A few basic Turing Machines

1.1 What does the following TM do?

$ M=(K,\Sigma,q_0,\delta,F)$ where $ K=\{q_0,q_1,q_2\}$ , $ F=\{q_2\}$ , $ \Sigma=\{0,1,\#\}$ and $ \delta$ is defined as below:

0 1 #
$ q_0$ $ (q_0,1,R)$ $ (q_0,0,R)$ $ (q_1,0,L)$
$ q_1$ $ (q_1,0,L)$ $ (q_1,1,L)$ $ (q_2,\#,R)$

1.2 Write a TM which enters the final state only if the input is a binary encoding of an even natural number.

1.3 Write a TM which verifies if a given word over alphabet $ {A,B}$ contains the sequence ABA'. 1.4 Write a TM which adds 5 to a number encoded in binary on the tape. 1.5 Write a machine which checks if a symbol is present on the tape. The machine should accept if this is so. ==== 2. Algorithms and Turing Machines ==== How would the following algorithm be represented as a Turing Machine: <code> Algorithm(vector V, integer M) { integer s = 0 for-each x in V s += x if (s > M) then return 1 else return 0 } </code> Helpful questions: * how should the tape be organised? * when should the machine accept? * how would foreach x in V be implemented? * how would s += x be implemented? * how would if (s > M) then … else … be implemented ? Answer: * The input of the tape should contain each element of the vector v, encoded in binary, separated by a special character (e.g. @). The last number in the sequence will be separated by another character (e.g. !) from the value M. * The machine should accept if the algorithm returns 1, that is, if the sum of elements of the array is greater than M * Before executing the foreach, the TM should allocate part of its tape for the sum s which is initially 0. The LHS of the tape could be used. * The foreach can be easily implemented by moving the cursor between @ characters. * For a particular x, we can implement binary adding between x and the current s: * M should go back-and-forth between the location of s and that of the current x. * As each bit of x is processed, it should be erased (writing #) so that we can easily skip to the current x. * After ! is read on the tape, we know we have finished the foreach. We can then implement a bit-wise comparison of the values s and M, which would now be the current value of the tape. The machine accepts if s > M''.

More practice exercises

  • Write a TM which verifies if a string has the same number of ones and zeroes. Give hints - live (what should the machine do?)
  • write a TM which accepts a given regular expression
  • write a TM which reverses a given binary string (always accepts)