Differences

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

Link to this comparison view

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]