Differences
This shows you the differences between two versions of the page.
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> | ||