Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
aa:lab:4 [2023/10/15 15:47] stefan.sterea |
aa:lab:4 [2024/11/07 13:32] (current) dmihai |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
- | /* <note important> | ||
- | **Solutii** | ||
- | https://drive.google.com/file/d/1REQ1A2SjEUDwodPDqXkptWyqIbPB62e5/view?usp=sharing | ||
- | </note> */ | ||
1. Pentru fiecare dintre problemele următoare, determinați dacă sunt decidabile sau nu (demonstrația nedecidablității poate fi realizată printr-o reducere Turing, cea a decidabilității prin schițarea unui algoritm): | 1. Pentru fiecare dintre problemele următoare, determinați dacă sunt decidabile sau nu (demonstrația nedecidablității poate fi realizată printr-o reducere Turing, cea a decidabilității prin schițarea unui algoritm): | ||
- | * $ f_{1010}(M) = TRUE \iff M[1010] \text{ nu mută niciodată capul de citire la stânga}$ | + | * $ f_{1010}(M) = {\rm TRUE} \iff M[1010] \text{ nu mută niciodată capul de citire la stânga}$ |
- | /* | + | * $ f_{s}(M) = {\rm TRUE} \iff \forall w, M[w] \text{ nu mută niciodată capul de citire la stânga}$ |
- | <hidden> | + | * $ f_{50a}(M) = {\rm TRUE} \iff M[1010] \text{ nu trece prin mai mult de 50 de tranziții}$ |
- | 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 ciclează 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 ciclează prin a face hold schimbând stările și/sau simbolurile, mașina ciclează prin a avansa la dreapta și a face 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: | + | * $ f_{50b}(M) = {\rm TRUE} \iff \forall w, M[w] \text{ nu trece prin mai mult de 50 de tranziții}$ |
- | <code> | + | |
- | M_1010[M]: | + | 2. Determinați exact unde se află următoarele probleme ($ {\rm R}$, $ {\rm RE} \setminus {\rm R}$, $ \mathbb{D} \setminus {\rm RE}$): |
- | k = 0 | + | |
- | n = nr_stari(M) | + | |
- | m = nr_simboluri_banda(M) | + | |
- | while k < n * m + 5: | + | |
- | simuleaza un pas din M[w] | + | |
- | k = k + 1 | + | |
- | if tranzitia a fost la stanga: | + | |
- | tranzitie la N | + | |
- | tranzitie la Y | + | |
- | </code> | + | |
- | </hidden> | + | |
- | */ | + | |
- | * $ f_{s}(M) = TRUE \iff \forall w, M[w] \text{ nu mută niciodată capul de citire la stânga}$ | + | |
- | * $ f_{50a}(M) = TRUE \iff M[1010] \text{ nu trece prin mai mult de 50 de tranziții}$ | + | |
- | * $ f_{50b}(M) = TRUE \iff \forall w, M[w] \text{ nu trece prin mai mult de 50 de tranziții}$ | + | |
- | 2. Determinați exact unde se află următoarele probleme (R, RE \ R, $ ⅅ \setminus RE$): | + | * $ f_{\rm or}(M_1, M_2) = {\rm TRUE} \iff M_1[111] \rightarrow {\rm TRUE} \lor 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}$ | |
- | * $ f_{or}(M_1, M_2) = TRUE \iff M_1[111] \rightarrow TRUE \lor M_2[111] \rightarrow 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}$ |
- | * $ f_{and}(M_1, M_2) = TRUE \iff M_1[111] \rightarrow TRUE \land M_2[111] \rightarrow TRUE$ | + | |
- | * $ f_{diff}(M_1, M_2) = TRUE \iff M_1[111] \rightarrow TRUE \land M_2[111] \not\rightarrow TRUE$ | + | |
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. | ||
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> | ||
+ | Soluțiile acestui laborator se găsesc [[https://ocw.cs.pub.ro/ppcarte/doku.php?id=aa:lab:sol:4|aici]] | ||
+ | </note> | ||