Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
aa:lab:sol:4 [2023/10/28 14:43]
stefan.sterea
aa:lab:sol:4 [2023/11/10 21:00] (current)
stefan.sterea
Line 7: Line 7:
 Această problemă este **decidabilă**. Observăm că dacă mașina nu mută capul de citire la stânga, având un număr finit $ n = |K| $ de stări si un număr finit $ m = |\Gamma| $ de simboluri de bandă, mașina fie se oprește după un număr finit de tranziții, fie nu se termină prin a ajunge într-un șir de tranziții de forma $ (q,\ a) \to (q',\ a',\ -) \to (q'',​\ a'',​\ -) \to \dots \to (q,\ a,\ -) $ (cel mult $ n\cdot m $ tranziții),​ fie parcurge tot conținutul benzii ajungând la capătul din dreapta pe un simbol blank, după care tranzițiile au forma $ (p,\ \square) \to (p',\ b',\ \rightarrow/​-) \to (p'',​\ b'',​\ \rightarrow/​-) \to \dots \to (p,\ \square,\ \rightarrow/​-) $ (cel mult $ n\cdot m $ tranziții) (exceptând cazul anterior în care mașina rămâne la nesfârșit în hold schimbând stările și/sau simbolurile,​ mașina avansează la dreapta la nesfârșit,​ făcând eventual hold între avansări, schimbând stările și/sau simbolurile). Așadar, sunt suficiente $ n\cdot m + 1 + {\rm len}(1010) $ = $ n\cdot m + 5 $ tranziții pentru a verifica dacă mașina mută capul de citire la stânga. Putem descrie masina care decide această problemă astfel: Această problemă este **decidabilă**. Observăm că dacă mașina nu mută capul de citire la stânga, având un număr finit $ n = |K| $ de stări si un număr finit $ m = |\Gamma| $ de simboluri de bandă, mașina fie se oprește după un număr finit de tranziții, fie nu se termină prin a ajunge într-un șir de tranziții de forma $ (q,\ a) \to (q',\ a',\ -) \to (q'',​\ a'',​\ -) \to \dots \to (q,\ a,\ -) $ (cel mult $ n\cdot m $ tranziții),​ fie parcurge tot conținutul benzii ajungând la capătul din dreapta pe un simbol blank, după care tranzițiile au forma $ (p,\ \square) \to (p',\ b',\ \rightarrow/​-) \to (p'',​\ b'',​\ \rightarrow/​-) \to \dots \to (p,\ \square,\ \rightarrow/​-) $ (cel mult $ n\cdot m $ tranziții) (exceptând cazul anterior în care mașina rămâne la nesfârșit în hold schimbând stările și/sau simbolurile,​ mașina avansează la dreapta la nesfârșit,​ făcând eventual hold între avansări, schimbând stările și/sau simbolurile). Așadar, sunt suficiente $ n\cdot m + 1 + {\rm len}(1010) $ = $ n\cdot m + 5 $ tranziții pentru a verifica dacă mașina mută capul de citire la stânga. Putem descrie masina care decide această problemă astfel:
 <​code>​ <​code>​
-M_1010[enc(M)]:+M_1010[M]:
     k = 0     k = 0
     n = nr_stari(M)     n = nr_stari(M)
     m = nr_simboluri_banda(M)     m = nr_simboluri_banda(M)
     while k < n * m + 5:     while k < n * m + 5:
-        simuleaza un pas din M[w]+        simuleaza un pas din M[1010]
         k = k + 1         k = k + 1
         if tranzitia a fost la stanga:         if tranzitia a fost la stanga:
Line 32: Line 32:
 2. Determinați exact unde se află următoarele probleme ($ {\rm R}$, $ {\rm RE} \setminus {\rm R}$, $ \mathbb{D} \setminus {\rm RE}$): 2. Determinați exact unde se află următoarele probleme ($ {\rm R}$, $ {\rm RE} \setminus {\rm R}$, $ \mathbb{D} \setminus {\rm RE}$):
  
-  * $ f_{or}(M_1, M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \lor M_2[111] \rightarrow {\rm TRUE}$ ​   ​+  * $ f_{\rm or}(M_1, M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \lor M_2[111] \rightarrow {\rm TRUE}$ ​   ​
 <​note>​ <​note>​
 Din faptul că ar trebui să decidem dacă mașinile se termină, în primul rând, pe inputul 111, pentru a vedea dacă vreuna din ele acceptă inputul, ne dăm seama că problema nu este decidabilă (și vom demonstra mai jos printr-o reducere). Totuși, din moment ce putem vedea dacă una din mașini a acceptat inputul atunci când îl acceptă, intuim că am putea face o astfel de verificare pentru ambele mașini simultan și atunci problema ar fi în $ {\rm RE} \setminus {\rm R}$. Într-adevăr,​ putem scrie următoarea mașină care acceptă problema: Din faptul că ar trebui să decidem dacă mașinile se termină, în primul rând, pe inputul 111, pentru a vedea dacă vreuna din ele acceptă inputul, ne dăm seama că problema nu este decidabilă (și vom demonstra mai jos printr-o reducere). Totuși, din moment ce putem vedea dacă una din mașini a acceptat inputul atunci când îl acceptă, intuim că am putea face o astfel de verificare pentru ambele mașini simultan și atunci problema ar fi în $ {\rm RE} \setminus {\rm R}$. Într-adevăr,​ putem scrie următoarea mașină care acceptă problema:
 <​code>​ <​code>​
-M_or[enc((M1, M2))]:+M_or[(M1, M2)]:
     while (M1 nu s-a terminat) sau (M2 nu s-a terminat):     while (M1 nu s-a terminat) sau (M2 nu s-a terminat):
         simulează un pas din M1[111]         simulează un pas din M1[111]
Line 45: Line 45:
 </​code>​ </​code>​
 Demonstrăm că problema nu este decidabilă prin urmatoarea reducere $ \mathtt{HALT} \leq_m f_{or}$: \\    Demonstrăm că problema nu este decidabilă prin urmatoarea reducere $ \mathtt{HALT} \leq_m f_{or}$: \\   
-$ t(M, w) = (M_1, M_2) $ a.î $ \mathtt{HALT}(M,​ w) = {\rm TRUE} \iff f_{or}(M_1, M_2) = {\rm TRUE} $    ​+$ t(M, w) = (M_1, M_2) $ a.î $ \mathtt{HALT}(M,​ w) = {\rm TRUE} \iff f_{\rm or}(M_1, M_2) = {\rm TRUE} $    ​
 <​code>​ <​code>​
 M1[u]: M1[u]:
Line 55: Line 55:
 </​code>​ </​code>​
 $ (=>) $ $$ \mathtt{HALT}(M,​ w) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \\ $ (=>) $ $$ \mathtt{HALT}(M,​ w) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \\
-\Rightarrow M_1[111] \to {\rm TRUE} \vee M_2[111] \to {\rm TRUE} \Rightarrow f_{or}(M_1, M_2) = {\rm TRUE} $$ +\Rightarrow M_1[111] \to {\rm TRUE} \vee M_2[111] \to {\rm TRUE} \Rightarrow f_{\rm or}(M_1, M_2) = {\rm TRUE} $$ 
-$ (<=) $ $$ f_{or}(M_1, M_2) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \vee M_2[111] \to {\rm TRUE} \\+$ (<=) $ $$ f_{\rm or}(M_1, M_2) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \vee M_2[111] \to {\rm TRUE} \\
 \forall v, M_2[v] \to {\rm FALSE} \Rightarrow M_2[111] \nrightarrow {\rm TRUE} \\ \forall v, M_2[v] \to {\rm FALSE} \Rightarrow M_2[111] \nrightarrow {\rm TRUE} \\
 \Rightarrow M_1[111] \to {\rm TRUE} \Rightarrow \mathtt{HALT}(M,​ w) = {\rm TRUE} \\ \Rightarrow M_1[111] \to {\rm TRUE} \Rightarrow \mathtt{HALT}(M,​ w) = {\rm TRUE} \\
 (\text{deoarece } \mathtt{HALT}(M,​ w) = {\rm FALSE} \Rightarrow M_1[111] \to \bot) $$ (\text{deoarece } \mathtt{HALT}(M,​ w) = {\rm FALSE} \Rightarrow M_1[111] \to \bot) $$
 </​note>​ </​note>​
-    * $ f_{and}(M_1,​ M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \land M_2[111] \rightarrow {\rm TRUE}$ ​+    * $ f_{\rm and}(M_1, M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \land M_2[111] \rightarrow {\rm TRUE}$ ​
 <​note>​ <​note>​
 La fel ca în cazul anterior, problema se află în $ {\rm RE} \setminus {\rm R}$, în mod analog. Mașina care acceptă problema este: La fel ca în cazul anterior, problema se află în $ {\rm RE} \setminus {\rm R}$, în mod analog. Mașina care acceptă problema este:
 <​code>​ <​code>​
-M_and[enc((M1, M2))]:+M_and[(M1, M2)]:
     while (M1 nu s-a terminat) sau (M2 nu s-a terminat):     while (M1 nu s-a terminat) sau (M2 nu s-a terminat):
         simulează un pas din M1[111]         simulează un pas din M1[111]
Line 73: Line 73:
     tranziție la Y     tranziție la Y
 </​code>​ </​code>​
-Iar pentru a demonstra că problema nu este decidabilă,​ folosim următoarea reducere $ \mathtt{HALT} \leq_m f_{and}$: \\    +Iar pentru a demonstra că problema nu este decidabilă,​ folosim următoarea reducere $ \mathtt{HALT} \leq_m f_{\rm and}$: \\    
-$ t(M, w) = (M_1, M_2) $ a.î $ \mathtt{HALT}(M,​ w) = {\rm TRUE} \iff f_{and}(M_1,​ M_2) = {\rm TRUE} $    ​+$ t(M, w) = (M_1, M_2) $ a.î $ \mathtt{HALT}(M,​ w) = {\rm TRUE} \iff f_{\rm and}(M_1, M_2) = {\rm TRUE} $    ​
 <​code>​ <​code>​
 M1[u]: M1[u]:
Line 84: Line 84:
 </​code>​ </​code>​
 $ (=>) $ $$ \mathtt{HALT}(M,​ w) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \\ $ (=>) $ $$ \mathtt{HALT}(M,​ w) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \\
-M_2[111] \to {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \to {\rm TRUE} \Rightarrow f_{and}(M_1,​ M_2) = {\rm TRUE} $$ +M_2[111] \to {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \to {\rm TRUE} \Rightarrow f_{\rm and}(M_1, M_2) = {\rm TRUE} $$ 
-$ (<=) $ $$ f_{and}(M_1,​ M_2) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \to {\rm TRUE} \\+$ (<=) $ $$ f_{\rm and}(M_1, M_2) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \to {\rm TRUE} \\
 \Rightarrow M_1[111] \to {\rm TRUE} \Rightarrow \mathtt{HALT}(M,​ w) = {\rm TRUE} \\ \Rightarrow M_1[111] \to {\rm TRUE} \Rightarrow \mathtt{HALT}(M,​ w) = {\rm TRUE} \\
 (\text{deoarece } \mathtt{HALT}(M,​ w) = {\rm FALSE} \Rightarrow M_1[111] \to \bot) $$ (\text{deoarece } \mathtt{HALT}(M,​ w) = {\rm FALSE} \Rightarrow M_1[111] \to \bot) $$
 </​note>​ </​note>​
-    * $ f_{diff}(M_1,​ M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \land M_2[111] \not\rightarrow {\rm TRUE}$+    * $ f_{\rm diff}(M_1, M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \land M_2[111] \not\rightarrow {\rm TRUE}$
 <​note>​ <​note>​
-Exercițiile anterioare ne-au ajutat să ne dăm seama că această problemă nu este decidabilă,​ și am putea face o reducere $ \mathtt{HALT} \leq_m f_{diff}$ ca mai devreme pentru a demonstra acest lucru. Totuși, ne punem întrebarea acum dacă această problemă mai este acceptabilă. Problema dacă $ M_1[111] \rightarrow {\rm TRUE}$ este acceptabilă (doar simulăm mașina), dar pentru a vedea dacă $ M_2[111] \not\rightarrow {\rm TRUE}$, ar trebui să vedem dacă M2 **nu** se termină. Știm că problema $ \mathtt{coHALT}$ nu este acceptabilă și atunci ne dăm seama că problema $ f_{diff}$ nu este nici ea acceptabilă. Putem face reducerea $ \mathtt{coHALT} \leq_m f_{diff}$ pentru a demonstra acest lucru (și prin urmare și nedecidabilitatea - nu e nevoie să facem și reducerea menționată la început):  +Exercițiile anterioare ne-au ajutat să ne dăm seama că această problemă nu este decidabilă,​ și am putea face o reducere $ \mathtt{HALT} \leq_m f_{\rm diff}$ ca mai devreme pentru a demonstra acest lucru. Totuși, ne punem întrebarea acum dacă această problemă mai este acceptabilă. Problema dacă $ M_1[111] \rightarrow {\rm TRUE}$ este acceptabilă (doar simulăm mașina), dar pentru a vedea dacă $ M_2[111] \not\rightarrow {\rm TRUE}$, ar trebui să vedem dacă $ M_2$ **nu** se termină. Știm că problema $ \mathtt{coHALT}$ nu este acceptabilă și atunci ne dăm seama că problema $ f_{\rm diff}$ nu este nici ea acceptabilă. Putem face reducerea $ \mathtt{coHALT} \leq_m f_{\rm diff}$ pentru a demonstra acest lucru (și prin urmare și nedecidabilitatea - nu e nevoie să facem și reducerea menționată la început):  
-$ t(M, w) = (M_1, M_2) $ a.î $ \mathtt{coHALT}(M,​ w) = {\rm TRUE} \iff f_{diff}(M_1,​ M_2) = {\rm TRUE} $    ​+$ t(M, w) = (M_1, M_2) $ a.î $ \mathtt{coHALT}(M,​ w) = {\rm TRUE} \iff f_{\rm diff}(M_1, M_2) = {\rm TRUE} $    ​
 <​code>​ <​code>​
 M1[u]: M1[u]:
Line 102: Line 102:
 </​code>​ </​code>​
 $ (=>) $ $$ \mathtt{coHALT}(M,​ w) = {\rm TRUE} \Rightarrow M[w] \to \bot \Rightarrow M_2[111] \to \bot \\ $ (=>) $ $$ \mathtt{coHALT}(M,​ w) = {\rm TRUE} \Rightarrow M[w] \to \bot \Rightarrow M_2[111] \to \bot \\
-M_1[111] \to {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \nrightarrow {\rm TRUE} \Rightarrow f_{diff}(M_1,​ M_2) = {\rm TRUE} $$ +M_1[111] \to {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \nrightarrow {\rm TRUE} \Rightarrow f_{\rm diff}(M_1, M_2) = {\rm TRUE} $$ 
-$ (<=) $ $$ f_{diff}(M_1,​ M_2) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \nrightarrow {\rm TRUE} \\ +$ (<=) $ $$ f_{\rm diff}(M_1, M_2) = {\rm TRUE} \Rightarrow M_1[111] \to {\rm TRUE} \land M_2[111] \nrightarrow {\rm TRUE} \\ 
-\Rightarrow M_2[111] \nrightarrow {\rm TRUE} \Rightarrow M[w] \to \bot\ (\text{deoarece } M[w] \nrightarrow \bot \Rightarrow M_2[111] \to {\rm TRUE} \text{ din construcția mașinii}) \\+\Rightarrow M_2[111] \nrightarrow {\rm TRUE} \Rightarrow M[w] \to \bot \\ (\text{deoarece } M[w] \nrightarrow \bot \Rightarrow M_2[111] \to {\rm TRUE} \text{ din construcția mașinii}) \\
 \Rightarrow \mathtt{coHALT}(M,​ w) = {\rm TRUE} $$ \Rightarrow \mathtt{coHALT}(M,​ w) = {\rm TRUE} $$
 </​note>​ </​note>​
    
 +<note tip>​Răspunsurile la următoarele două probleme sunt nelimitate. Puteți găsi multe variante creative. Vom prezenta doar câteva exemple.</​note>​
 3. Dați exemplu de o Mașină Turing pentru care putem determina algoritmic, pentru orice input, dacă se termină sau nu. 3. Dați exemplu de o Mașină Turing pentru care putem determina algoritmic, pentru orice input, dacă se termină sau nu.
 +<​note>​Dacă luăm orice problemă decidabilă și într-o mașină care o decide înlocuim toate tranzițiile la N cu tranziții ce determină neterminarea mașinii și eventual înlocuim o parte (sau toate) din tranzițiile la Y cu tranziții la N, obținem o mașină pentru care putem determina algoritmic dacă se termină, deoarece acum problema decidabilă de la care am plecat este echivalentă cu problema terminării acestei mașini.</​note>​ 
 +<​note>​Exemplu 1: O mașină care ar trebui să decidă dacă inputul nu conține același număr de 1 și de 0, modificată după transformarea descrisă 
 +^ $ Q$ \ $ \Gamma$ ^ $ 0$                   ^ $ 1$                   ^ $ \square$ ​                                              ^ $ X$                   ^ 
 +| $ q_0$           | $ f_1, X, \rightarrow$ | $ f_0, X, \rightarrow$ |<color #​ed1c24><​del>​N</​del></​color>​$ r,​\square,​\leftarrow$| $ q_0,​X,​\rightarrow$ ​  | 
 +| $ f_0$           | $ r, X, \leftarrow$ ​   | $ f_0, 1, \rightarrow$ | <color #​ed1c24><​del>​Y</​del></​color>​$ N, \square, -$      | $ f_0, X, \rightarrow$ | 
 +| $ f_1$           | $ f_1, 0, \rightarrow$ | $ r, 1, \leftarrow$ ​   | $ Y, \square, -$                                         | $ f_1, X, \rightarrow$ | 
 +| $ r$             | $ r, 0, \leftarrow$ ​   | $ r, 1, \leftarrow$ ​   | $ q_0, \square, \rightarrow$ ​                            | $ r, X, \leftarrow$ ​   |  
 +Mașina originală decide dacă această mașină se termină ​        
 +</​note>​ 
 +<​note>​Exemplu 2: O mașină care caută înainte și înapoi simbolul X în input (când ajunge la capăt se întoarce). Această mașină se termină dacă și numai dacă inputul conține X. Observație:​ dacă folosim o mașină care se termină cu reject când ajunge la capăt, atunci aceasta decide terminarea mașinii descrise și poate fi transformată în ea prin înlocuirea tranziției pe blank.  
 +</​note>​
 4. Dați exemplu de o Mașină Turing pentru care nu putem determina algoritmic dacă se termină sau nu. 4. Dați exemplu de o Mașină Turing pentru care nu putem determina algoritmic dacă se termină sau nu.
 +<​note>​Mașina Turing Universală:​ existența unui algoritm/​mașină Turing care să decidă terminarea MTU-ului este echivalentă cu decidabilitatea problemei HALT.</​note>​