Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== Mai multe reduceri Turing ====== ===== 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): * $ f_{1010}(M) = TRUE \iff M[1010] \text{ nu mută niciodată capul de citire la stânga}$ /* <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 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> 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}$ /* <hidden> Și această problemă este **decidabilă**. Numărul de tranziții la stânga al mașinii este finit, si la fel și numărul de tranziții într-una din stările din care mașina poate face o tranziție la stânga. Continuând să construim "drumuri" înapoi de la tranzițiile la stânga până la starea inițială, vom avea atunci un număr finit de istorice computaționale până la o tranziție la stânga, deci un număr finit de prefixe ale input-ului după care urmează o primă tranziție la stânga. De fapt, putem reprezenta orice mașină Turing sub forma unui graf ([exemplu](https://turingmachine.io/)) si putem găsi toate drumurile de la starea inițială până la o stare în care ajungem printr-o tranziție la stânga. După aceea, verificăm dacă input-ul începe cu unul din prefixele construite. </hidden> */ * $ 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.