Computing
Exerciții
1.
0 | 1 | $\square$ | |
---|---|---|---|
$ q_1$ | $ q_1, 0, \rightarrow$ | $ q_1, 1, \rightarrow$ | $ q_2, \square, \leftarrow$ |
$ q_2$ | $ Y, 0, -$ | $ N, 1, -$ | $ N, \square, -$ |
(ꞓ, q1, 100) ⊢ (1, q1, 00) ⊢ (10, q1, 0) ⊢ (100, q1, □) ⊢ (10, q2, 0) ⊢ (10, Y, 0)
(ꞓ, q1, 1011) ⊢ (1, q1, 011) ⊢ (10, q1, 11) ⊢ (101, q1, 1) ⊢ (1011, q1, □) ⊢ (101, q2, 1) ⊢ (101, N, 1)
2.
0 | 1 | $\square$ | |
---|---|---|---|
$ 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$ |
(ꞓ, q1, 1011) ⊢ (0, q1, 011) ⊢ (01, q1, 11) ⊢ (010, q1, 1) ⊢ (0100, q1, □) ⊢
(010, q2, 0) ⊢ (0101, q2, □) ⊢ (0101□, q1, □) ⊢
(0101, q2, □) ⊢ (0101□, q1, □) ⊢ (0101, q2, □) ⊢ …
Se observă că mașina ciclează pentru acest input.
3. Soluție:
0 | 1 | $\square$ | |
---|---|---|---|
$ 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$ |
(ꞓ, q1, 01) ⊢ (0, q1, 1) ⊢ (01, q1, □) ⊢ (0, q2, 11) ⊢ (□, q2, 011) ⊢ (□, q2, □011) ⊢
(1, q1, 011) ⊢ (10, q1, 11) ⊢
(101, q1, 1) ⊢ (1011, q1, □) ⊢ (101, q2, 11) ⊢
(10, q2, 111) ⊢ (1, q2, 0111) ⊢ (□, q2, 10111) ⊢ (□, q2, □10111) ⊢ …
Se observă că mașina ciclează pentru acest input. Ea va continua să scrie 1 la stânga și la dreapta pe bandă.
4.
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.
5.
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)$.
6.
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$.
7.
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 \ldots t_k)$, respectiv $ (t_1', t_2' \ldots t_k')$ din $ \Gamma ^k$.
Construim $ \delta M'$ în felul următor:
Pentru $ \delta M'(q, (t_1,t_2 \ldots t_k)) = (q', (t_1', t_2' \ldots t_k'), dir) \Rightarrow \delta M(q, a) = (q', b, dir), dir \in (\leftarrow, -, \rightarrow)$.
8.
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$
9.
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$
$ \ldots$
$ \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.