Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
aa:lab:sol:4 [2023/11/07 15:02] 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) | ||
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] |