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 [2025/10/27 21:14] (current) lfa |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Mai multe reduceri Turing ====== | + | ====== Inducție structurală ====== |
| - | ===== Exerciții ===== | + | Demonstrați următoarele proprietăți folosind inducție structurală: |
| - | /* <note important> | + | |
| - | **Solutii** | + | |
| - | https://drive.google.com/file/d/1REQ1A2SjEUDwodPDqXkptWyqIbPB62e5/view?usp=sharing | + | 1. $ \forall l \in List. reverse(reverse(l)) = l$ |
| - | </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): | + | 2. $ \forall r \in Ring, size(move(r)) = size(r)$ |
| - | * $ f_{1010}(M) = TRUE \iff M[1010] \text{ nu mută niciodată capul de citire la stânga}$ | + | 3. $ \forall i \in \mathbb{N}, \forall r \in Ring, element(i,move(r)) = element(i+1,r)$ |
| - | /* | + | |
| - | <hidden> | + | |
| - | 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: | + | |
| - | <code> | + | |
| - | M_1010[M]: | + | |
| - | 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_{or}(M_1, M_2) = TRUE \iff M_1[111] \rightarrow TRUE \lor M_2[111] \rightarrow 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. | + | |
| - | + | ||
| - | 4. Dați exemplu de o Mașină Turing pentru care nu putem determina algoritmic dacă se termină sau nu. | + | |