Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
aa:lab:02 [2020/10/07 15:31]
pdmatei created
aa:lab:02 [2020/10/22 10:25] (current)
pdmatei
Line 1: Line 1:
-====== Lab 02 - Turing Machines =======+====== Lab 02 - Introduction to Turing Machines ======= 
 + 
 +**Key concepts** 
 +  - How is a Turing Machine (TM) defined? 
 +  - What is a **configuration**?​ 
 +  - How is the execution of a TM defined? 
 + 
 +==== 1. Intro ==== 
 +A **Turing Machine** consists of: 
 +    * an **alphabet** $math[\Sigma] 
 +    * a set of **states** $math[K] 
 +    * an **initial** state $math[q_0] 
 +    * a **transition function** $math[\delta : K \times \Sigma \rightarrow K \times \Sigma \times \{L,​H,​R\}] 
 +    * a set of **final** states $math[F \subseteq K] 
 + 
 +Which of the following components of an **assembly language** would best correspond to the above? $math[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?  
 + 
 +$math[M=(K,​\Sigma,​q_0,​\delta,​F)] where $math[K=\{q_0,​q_1,​q_2\}],​ $math[F=\{q_2\}],​ $math[\Sigma=\{0,​1,​\#​\}] and $math[\delta] is defined as below: 
 + 
 +^              ^ 0                ^ 1                ^ #                 ^ 
 +| $math[q_0] ​  | $math[(q_0,​1,​R)] | $math[(q_0,​0,​R)] | $math[(q_1,​0,​L)] ​ | 
 +| $math[q_1] ​  | $math[(q_1,​0,​L)] | $math[(q_1,​1,​L)] | $math[(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 $math[{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 TM which checks if a binary number ''​x''​ is strictly larger than ''​y''​. Hint: use a separator symbol between words. 
 + 
 +==== 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)