Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
aa:lab:2 [2023/10/13 13:54] tpruteanu |
aa:lab:2 [2024/10/23 23:32] (current) dmihai |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Computing ====== | ====== Computing ====== | ||
- | /* | ||
- | <note important> | ||
- | Solutii: https://drive.google.com/file/d/1Y6JV-pDyuvejx3g8KL6SpWzbp52VMWnY/view?usp=sharing | ||
- | </note> | ||
- | */ | ||
===== Mașina Turing ===== | ===== Mașina Turing ===== | ||
Line 26: | Line 21: | ||
* scrieți care sunt configurațiile prin care trece mașina pentru inputul: 1011 | * scrieți care sunt configurațiile prin care trece mașina pentru inputul: 1011 | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | Soluție: | ||
- | |||
- | (ꞓ, q<sub>1</sub>, 100) ⊢ (1, q<sub>1</sub>, 00) ⊢ (10, q<sub>1</sub>, 0) ⊢ (100, q<sub>1</sub>, □) ⊢ (10, q<sub>2</sub>, 0) ⊢ (10, Y, 0) | ||
- | |||
- | (ꞓ, q<sub>1</sub>, 1011) ⊢ (1, q<sub>1</sub>, 011) ⊢ (10, q<sub>1</sub>, 11) ⊢ | ||
- | (101, q<sub>1</sub>, 1) ⊢ (1011, q<sub>1</sub>, □) ⊢ (101, q<sub>2</sub>, 1) ⊢ (101, N, 1) | ||
- | </hidden> | ||
- | */ | ||
^ ^ 0 ^ 1 ^ $\square$ ^ | ^ ^ 0 ^ 1 ^ $\square$ ^ | ||
Line 49: | Line 33: | ||
| $ q_1$ | $ q_1, 1, \rightarrow$ | $ q_1, 0, \rightarrow$ | $ q_2, \square, \leftarrow$ | | | $ q_1$ | $ q_1, 1, \rightarrow$ | $ q_1, 0, \rightarrow$ | $ q_2, \square, \leftarrow$ | | ||
| $ q_2$ | $ q_2, 1, \rightarrow$ | $ q_2, 0, \rightarrow$ | $ q_1, \square, \rightarrow$ | | | $ q_2$ | $ q_2, 1, \rightarrow$ | $ q_2, 0, \rightarrow$ | $ q_1, \square, \rightarrow$ | | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | Soluție: | ||
- | |||
- | |||
- | (ꞓ, q<sub>1</sub>, 1011) ⊢ (0, q<sub>1</sub>, 011) ⊢ (01, q<sub>1</sub>, 11) ⊢ (010, q<sub>1</sub>, 1) ⊢ (0100, q<sub>1</sub>, □) ⊢ | ||
- | (010, q<sub>2</sub>, 0) ⊢ (0101, q<sub>2</sub>, □) ⊢ (0101□, q<sub>1</sub>, □) ⊢ | ||
- | (0101, q<sub>2</sub>, □) ⊢ (0101□, q<sub>1</sub>, □) ⊢ (0101, q<sub>2</sub>, □) ⊢ ...\\ \\ | ||
- | |||
- | Se observă că mașina ciclează pentru acest input. | ||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
Line 70: | Line 41: | ||
| $ q_1$ | $ q_1, 0, \rightarrow$ | $ q_1, 1, \rightarrow$ | $ q_2, 1, \leftarrow$ | | | $ q_1$ | $ q_1, 0, \rightarrow$ | $ q_1, 1, \rightarrow$ | $ q_2, 1, \leftarrow$ | | ||
| $ q_2$ | $ q_2, 0, \leftarrow$ | $ q_2, 1, \leftarrow$ | $ q_1, 1, \rightarrow$ | | | $ q_2$ | $ q_2, 0, \leftarrow$ | $ q_2, 1, \leftarrow$ | $ q_1, 1, \rightarrow$ | | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | Soluție: | ||
- | |||
- | (ꞓ, q<sub>1</sub>, 01) ⊢ (0, q<sub>1</sub>, 1) ⊢ (01, q<sub>1</sub>, □) ⊢ (0, q<sub>2</sub>, 11) ⊢ (□, q<sub>2</sub>, 011) ⊢ (□, q<sub>2</sub>, □011) ⊢ | ||
- | (1, q<sub>1</sub>, 011) ⊢ (10, q<sub>1</sub>, 11) ⊢ | ||
- | |||
- | ⊢ (101, q<sub>1</sub>, 1) ⊢ (1011, q<sub>1</sub>, □) ⊢ (101, q<sub>2</sub>, 11) ⊢ | ||
- | (10, q<sub>2</sub>, 111) ⊢ (1, q<sub>2</sub>, 0111) ⊢ (□, q<sub>2</sub>, 10111) ⊢ (□, q<sub>2</sub>, □10111) ⊢ ...\\ \\ | ||
- | |||
- | Se observă că mașina ciclează pentru acest input. Ea va continua să scrie 1 la stânga și la dreapta pe bandă. | ||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
Line 103: | Line 60: | ||
<hidden> | <hidden> | ||
<note> | <note> | ||
- | **Hint:** soluția optimă pentru $ k = 1 $ este 1 tranziție, pentru $ k = 2 $ este 6 tranziții, iar pentru $ k = 3 $ este 21 tranziții. | + | **Hint:** soluția optimă pentru $ k = 1 $ este 2 tranziții, pentru $ k = 2 $ este 6 tranziții, iar pentru $ k = 3 $ este 21 tranziții. |
</note> | </note> | ||
</hidden> | </hidden> | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | |||
- | Acest exercițiu face referire la conceptul de Busy Beaver, mai precis cazurile cu 2 simboluri și 1,2 sau 3 stări. Aceasta este o problemă interesantă și deschisă din perspectiva teoriei calculabilității și a complexității algoritmice. Pentru a găsi numărul maxim de tranziții și funcția de tranziție $ \delta$, este nevoie de o abordare exploratorie și de un efort considerabil de analiză pentru fiecare configurație specifică a mașinii. \\ \\ | ||
- | |||
- | <note> | ||
- | |||
- | Mai multe informații găsiți aici: https://en.wikipedia.org/wiki/Busy_beaver | ||
- | |||
- | </note> | ||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
5. Arătați că, dacă $ f $ și $ g $ sunt două funcții //computabile//, atunci și compunerea lor $ f \circ g$ e computabilă. | 5. Arătați că, dacă $ f $ și $ g $ sunt două funcții //computabile//, atunci și compunerea lor $ f \circ g$ e computabilă. | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | Fie $ M_f$ o Mașină Turing care "computează" $ f \Rightarrow \forall w, M_f[w] \rightarrow f(w)$ \\ \\ | ||
- | Similar, fie $ M_g$ o Mașină Turing care "computează" $ g \Rightarrow \forall w, M_g[w] \rightarrow g(w)$ \\ \\ | ||
- | |||
- | Pentru a nu apărea probleme, este important ca $ M_f$ și $ M_g$ să nu aibă stări cu aceeași denumire. Construim $ M_{fg}$ care începe prin a rula tranzițiile din $ M_f$ pe inputul $ w \Rightarrow$ obținem pe bandă $ f(w)$. Folosind stări auxiliare, mutăm cursorul până la începutul rezultatului aflat pe bandă, lăsând mașina $ M_{fg}$ în configurația: $ (□, Stare-Inițială-M_g, f(w))$, care rulează apoi tranzițiile din $ M_g$ pe noul input, $ f(w)$. În final se obține $ g(f(w))$, adică $ (g \circ f)(w)$. | ||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
Line 140: | Line 75: | ||
Arătați că, oricare ar fi o mașină $ M $ conform definiției de la curs, există o mașină $ M' $ conform acestei definiții, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$ (cele două mașini dau același răspuns indiferent de input). | Arătați că, oricare ar fi o mașină $ M $ conform definiției de la curs, există o mașină $ M' $ conform acestei definiții, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$ (cele două mașini dau același răspuns indiferent de input). | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | Trebuie să demonstrăm că putem echivala orice tranziție a mașinii $ M$ cu o tranziție sau un set de tranziții în cadrul mașinii $ M'$.\\ \\ | ||
- | |||
- | Dacă mașina $ M$ are o tranziție care mută capul de citire la stânga sau la dreapta, atunci acea tranziție va arăta identic pentru mașina $ M'$, pentru că, în acest caz, nu există nici un fel de restricție. | ||
- | |||
- | Pentru $ \delta M(q,c) = (q',c',dir), dir \in \{\leftarrow, \rightarrow\}$, construim $ \delta M'(q,c) = (q',c',dir)$.\\ \\ | ||
- | |||
- | Dacă mașina $ M$ are o tranziție care nu modifică poziția capului de citire, putem simula acest comportament în cadrul mașinii $ M'$, mutând capul de citire la dreapta după care înapoi la stânga, trecând printr-o stare auxiliară. | ||
- | |||
- | Pentru $ \delta M(q,c) = (q',c',-)$ construim $ \delta M'(q,c) = (q_{aux},c',\rightarrow)$ și $ \delta M'(q_{aux},x) = (q',x,\leftarrow)$, $ \forall x \in \Gamma$. | ||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
Line 163: | Line 84: | ||
Cu alte cuvinte, la fiecare tranziție, capul mașinii citește simultan $ k $ simboluri și scrie $ k $ simboluri (în rest, ca și în definiția din curs, capul se mută apoi o celulă la stânga/dreapta sau rămâne pe loc **pe toate pistele simultan**, iar mașina trece într-o nouă stare). | Cu alte cuvinte, la fiecare tranziție, capul mașinii citește simultan $ k $ simboluri și scrie $ k $ simboluri (în rest, ca și în definiția din curs, capul se mută apoi o celulă la stânga/dreapta sau rămâne pe loc **pe toate pistele simultan**, iar mașina trece într-o nouă stare). | ||
Arătați că oricare ar fi o masină $ M'$ conform acestei definiții, există o mașină $ M$ conform definiției de la curs, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | Arătați că oricare ar fi o masină $ M'$ conform acestei definiții, există o mașină $ M$ conform definiției de la curs, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | |||
- | Soluția constă în a mapa fiecare tuplu $ t \in \Gamma ^k$ la un simbol din $ \Gamma'$. Pentru a putea face acest lucru, $ \vert \Gamma ' \vert = \vert \Gamma \vert ^k$. \\ \\ | ||
- | |||
- | Fie a și b simbolurile din $ \Gamma '$ la care se mapează tuplurile: $ (t_1,t_2 ... t_k)$, respectiv $ (t_1', t_2' ... t_k')$ din $ \Gamma ^k$. \\ \\ | ||
- | |||
- | Construim $ \delta M'$ în felul următor: | ||
- | |||
- | Pentru $ \delta M'(q, (t_1,t_2 ... t_k)) = (q', (t_1', t_2' ... t_k'), dir) \Rightarrow \delta M(q, a) = (q', b, dir), dir \in (\leftarrow, -, \rightarrow)$. | ||
- | |||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
Line 182: | Line 89: | ||
8. Fie o versiune de mașină Turing a cărei bandă se extinde arbitrar doar în partea dreaptă, //nu și în stânga//. La începutul computației, inputul e scris pe bandă, cu primul simbol pe prima celulă, unde se află și capul de citire. La orice moment de timp, dacă capul de citire se află pe prima celulă și mașina face o tranziție care îl mută la stânga, acesta rămâne pe loc. | 8. Fie o versiune de mașină Turing a cărei bandă se extinde arbitrar doar în partea dreaptă, //nu și în stânga//. La începutul computației, inputul e scris pe bandă, cu primul simbol pe prima celulă, unde se află și capul de citire. La orice moment de timp, dacă capul de citire se află pe prima celulă și mașina face o tranziție care îl mută la stânga, acesta rămâne pe loc. | ||
Arătați că oricare ar fi o masină $ M$ conform definiției de la curs, există o mașină $ M'$ conform acestei definiții, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | Arătați că oricare ar fi o masină $ M$ conform definiției de la curs, există o mașină $ M'$ conform acestei definiții, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | |||
- | Vom simula comportamentul mașinii $ M$ utilizând un caracter unic, care nu exista în $ \Gamma _M$, spre exemplu: $ ' \vert '$. Așadar, fie $ M'$ construită în următorul fel: | ||
- | |||
- | $ \delta M'(q,c) = \delta M(q,c), \forall q \in Q_M, c \in \Gamma _M$ | ||
- | |||
- | $ \Gamma _{M'} = \Gamma _M \cup \{ ' \vert ' \} , \{ ' \vert ' \} \notin \Gamma _M$ | ||
- | |||
- | $ Q_{M'} = Q_M \cup \{ q_1', q_{1aux}' \}$ \\ \\ | ||
- | |||
- | Pentru fiecare stare, vom insera tranziția care nu ne va permite depașirea acestui caracter spre stânga. | ||
- | |||
- | $ \delta M'(q, ' \vert ') = (q, ' \vert ', \rightarrow ), \forall q \in Q$ \\ \\ | ||
- | |||
- | În plus, în $ M'$ trebuie să schimbăm starea inițială pentru a scrie $ ' \vert '$ în stânga inputului. | ||
- | |||
- | $ \delta M'(q_1', c) = \delta M'(q_{1aux}', c, \leftarrow ), \forall c \in \Gamma _M$ | ||
- | |||
- | $ \delta M'(q_{1aux}', □) = (q_1, ' \vert ', \rightarrow ), q_1 -$ starea inițială a mașinii $ M$ | ||
- | |||
- | </hidden> | ||
- | |||
- | */ | ||
---- | ---- | ||
Line 212: | Line 94: | ||
9. Fie o versiune de mașină Turing cu singura diferență că, la orice tranziție, capul de citire poate sta pe loc, sau se poate mișca la stânga/dreapta cu orice număr $ n \in \mathbb{N}$ de poziții. | 9. Fie o versiune de mașină Turing cu singura diferență că, la orice tranziție, capul de citire poate sta pe loc, sau se poate mișca la stânga/dreapta cu orice număr $ n \in \mathbb{N}$ de poziții. | ||
Arătați că oricare ar fi o mașină $ M'$ conform acestei definiții, există o mașină $ M$ conform definiției de la curs, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | Arătați că oricare ar fi o mașină $ M'$ conform acestei definiții, există o mașină $ M$ conform definiției de la curs, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | ||
- | |||
- | /* | ||
- | <hidden> | ||
- | |||
- | Construim $ \delta M$ în felul următor: \\ \\ | ||
- | |||
- | Pentru o tranziție care nu modifică poziția capului de citire, nu se schimbă nimic. | ||
- | |||
- | Pentru $ \delta M'(q,c) = (q',c',-)$ construim $ \delta M(q,c) = (q',c',-)$, $ q,q' \in Q_M \cup \{ Y, N, H \} , c,c' \in \Gamma _M$ \\ \\ | ||
- | |||
- | Pentru orice stare în care se ajunge cu tranziție la dreapta, adăugăm $ (n-1)$ extra stări și $ (n-1)$ extra tranziții în $ M$. | ||
- | |||
- | Pentru $ \delta M'(q,c) = (q',c', n \rightarrow)$, construim: \\ \\ | ||
- | |||
- | $ \delta M(q,c) = (R_{n-1}q',c, \rightarrow)$ | ||
- | |||
- | $ \delta M(R_{n-1}q',x) = (R_{n-2}q',x, \rightarrow), \forall x \in \Gamma _M$ | ||
- | |||
- | $ \delta M(R_{n-2}q',x) = (R_{n-3}q',x, \rightarrow), \forall x \in \Gamma _M$ | ||
- | |||
- | $ ...$ | ||
- | |||
- | $ \delta M(R_1q',x) = (q',x, \rightarrow), \forall x \in \Gamma _M$ \\ \\ | ||
- | |||
- | Pentru orice stare în care se ajunge cu tranziție la stânga, se procedează similar. | ||
- | |||
- | </hidden> | ||
- | */ | ||
---- | ---- | ||
Line 246: | Line 100: | ||
Arătați că oricare ar fi o mașină $ M'$ conform acestei definiții, există o mașină $ M$ conform definiției de la curs, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | Arătați că oricare ar fi o mașină $ M'$ conform acestei definiții, există o mașină $ M$ conform definiției de la curs, astfel încât $ \forall w \in \Sigma^*, M[w] \equiv M'[w]$. | ||
+ | |||
+ | <note> | ||
+ | Soluțiile pentru exercițiile din laborator se pot găsi [[aa:lab:sol:2|aici]]. | ||
+ | </note> | ||