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/29 00:31]
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 36: Line 36:
 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 65: Line 65:
 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 111: Line 111:
 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>​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>​