Języki, automaty i obliczenia/Ćwiczenia 12: Języki kontekstowe i automat liniowo ograniczony. Maszyna Turinga: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Arek (dyskusja | edycje)
Nie podano opisu zmian
 
Arek (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
{Złożoność obliczeniowa. Języki maszyn Turinga i typu '''(0)'''. Rozstrzygalność.}
{Języki kontekstowe i automat liniowo ograniczony. Maszyna Turinga}


==ĆWICZENIA 13==
==ĆWICZENIA 12==
 
{{cwiczenie|||
Rozważmy maszynę Turinga <math>\displaystyle TM_2</math> z wykładu (Przykład 1.2) akceptującą
język palindromów, czyli:
<center><math>\displaystyle
L=\left\{w \overleftarrow{w} \: : \: w\in \left\{0,1\right\}^*\right\}
</math></center>
 
Sprawdź, że
# <math>\displaystyle 101101\in L(TM_2)</math> oraz, że
# <math>\displaystyle 1010101\not\in L(TM_2)</math>.
 
}}
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> 
Aby wykonać (1) rozpocznij od konfiguracji <math>\displaystyle \sharp \: s_0 1 \: 01101
\sharp</math> a następnie wykonuj przejścia zgodnie z diagramem przejść
maszyny <math>\displaystyle TM_2</math> z wykładu.
</div></div>
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
'''(Ad. 1)''' Wykonujemy symulację maszyny <math>\displaystyle TM_2</math> na pierwszym ze
słów:
<center><math>\displaystyle
\begin{array} {c c c c c c c c}
&\sharp \:s_0 1\: 01101 \sharp & \mapsto & \sharp  \sharp \: r_1 0\:
1101 \sharp &\mapsto & \sharp  \sharp 0 \: r_1' 1\: 101 \sharp
&\mapsto & \sharp  \sharp 01 \: r_1' 1\: 01 \sharp
\\
\mapsto & \sharp  \sharp 011 \: r_1' 0\: 1 \sharp & \mapsto & \sharp
\sharp 0110 \: r_1' 1 \: \sharp &\mapsto & \sharp \sharp 0110  1 \:
r_1' \sharp &\mapsto & \sharp 0110
\: q_1 1\: \sharp
\\
\mapsto & \sharp \sharp 011 \: l 0\: \sharp \sharp & \mapsto &
\sharp \sharp 01 \: l 1\: 0 \sharp \sharp &\mapsto & \sharp \sharp 0
\: l 1\: 10 \sharp \sharp &\mapsto & \sharp \sharp \: l 0\: 110
\sharp \sharp
\\
\mapsto & \sharp  \: l \sharp\: 0110 \sharp \sharp & \mapsto &
\sharp\sharp \: s_0 0\: 110 \sharp\sharp  &\mapsto &
\sharp\sharp\sharp \: r_0 1\: 10 \sharp\sharp &\mapsto &
\sharp\sharp\sharp 1 \: r_0' 1\: 0 \sharp\sharp
\\
\mapsto & \sharp\sharp\sharp 11 \: r_0' 0\:  \sharp\sharp & \mapsto
& \sharp\sharp\sharp 110 \: r_0' \sharp\: \sharp &\mapsto &
\sharp\sharp\sharp 11 \: q_0 0\: \sharp\sharp &\mapsto &
\sharp\sharp\sharp 1 \: l 1\: \sharp\sharp\sharp
\\
\mapsto & \sharp\sharp\sharp \: l 1\: 1\sharp\sharp\sharp & \mapsto
& \sharp\sharp \: l \sharp \: 1 1\sharp\sharp\sharp &\mapsto &
\sharp\sharp\sharp \: s_0 1\: 1\sharp\sharp\sharp &\mapsto &
\sharp\sharp\sharp\sharp \: r_1 1\: \sharp\sharp\sharp
\\
\mapsto & \sharp\sharp\sharp\sharp 1 \: r_1' \sharp\: \sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp  \: q_1 1\: \sharp\sharp\sharp
&\mapsto & \sharp\sharp\sharp \: l \sharp \:
\sharp\sharp\sharp\sharp &\mapsto & \sharp\sharp\sharp\sharp  \: s_0
\sharp\: \sharp\sharp\sharp
\\
\mapsto & \sharp\sharp\sharp\sharp \: s_A \sharp\:
\sharp\sharp\sharp & \circlearrowleft&
\end{array}
</math></center>
 
Wykazaliśmy, że <math>\displaystyle \sharp \:s_0 1\: 01101 \sharp \mapsto^*
\sharp\sharp\sharp\sharp \: s_A \sharp\: \sharp\sharp\sharp</math>. Stan
<math>\displaystyle s_A\in S_F</math> zatem wprost z definicji <math>\displaystyle 101101\in L(TM_2)</math>.
 
'''(Ad. 2)''' Wykonujemy identyczną symulację na drugim ze słów:
<center><math>\displaystyle
\begin{array} {c c c c c c c c c}
&\sharp \:s_0 1\: 010101 \sharp & \mapsto & \sharp  \sharp \: r_1
0\: 10101 \sharp &\mapsto & \sharp  \sharp 0 \: r_1' 1\: 0101 \sharp
&\mapsto & \sharp  \sharp 01 \: r_1' 0\: 101 \sharp
&\\
\mapsto & \sharp  \sharp 010 \: r_1' 1\: 01 \sharp & \mapsto &
\sharp \sharp 0101 \: r_1' 0\: 1 \sharp & \mapsto & \sharp \sharp
01010 \: r_1' 1 \: \sharp &\mapsto & \sharp \sharp 01010  1 \: r_1'
\sharp
&\\
\mapsto & \sharp 01010 \: q_1 1\: \sharp& \mapsto & \sharp \sharp
0101 \: l 0\: \sharp \sharp & \mapsto & \sharp \sharp 010 \: l 1\: 0
\sharp \sharp &\mapsto & \sharp \sharp 0 1\: l 0\: 10 \sharp
\sharp
&\\
\mapsto & \sharp \sharp 0 \: l 1\: 010 \sharp \sharp& \mapsto &
\sharp \sharp \: l 0\: 1010 \sharp \sharp& \mapsto & \sharp \: l
\sharp\: 01010 \sharp \sharp & \mapsto & \sharp\sharp \: s_0 0\: 1010
\sharp\sharp
&\\
\mapsto & \sharp\sharp\sharp \: r_0 1\: 010 \sharp\sharp & \mapsto &
\sharp\sharp\sharp 1 \: r_0' 0\: 10 \sharp\sharp & \mapsto &
\sharp\sharp\sharp 10 \: r_0' 1\: 0 \sharp\sharp & \mapsto &
\sharp\sharp\sharp 101 \: r_0' 0\:  \sharp\sharp
&\\
\mapsto &
\sharp\sharp\sharp 1010 \: r_0' \sharp\: \sharp &
\mapsto & \sharp\sharp\sharp 101 \: q_0 0\: \sharp\sharp & \mapsto &
\sharp\sharp\sharp 10 \: l 1\: \sharp\sharp\sharp & \mapsto &
\sharp\sharp\sharp \: 1 l 0\: 1\sharp\sharp\sharp
&\\
\mapsto &
\sharp\sharp\sharp \: l 1\: 01\sharp\sharp\sharp &
\mapsto & \sharp\sharp \: l \sharp \: 101\sharp\sharp\sharp &
\mapsto & \sharp\sharp\sharp \: s_0 1\: 01\sharp\sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp \: r_1 0\: 1 \sharp\sharp\sharp
&\\
\mapsto & \sharp\sharp\sharp\sharp 0 \: r_1 1\: \sharp\sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp 01 \: r_1' \sharp\: \sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp  0\: q_1 1\: \sharp\sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp  \: l 0\: \sharp \sharp\sharp\sharp
&\\
\mapsto & \sharp\sharp\sharp \: l \sharp \: 0 \sharp\sharp\sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp  \: s_0 0 \: \sharp
\sharp\sharp\sharp &
\mapsto & \sharp\sharp\sharp\sharp \sharp \: r_0 \sharp \: \sharp\sharp\sharp & \mapsto&
\sharp\sharp\sharp\sharp \sharp \: s_R \sharp \: \sharp\sharp\sharp& \circlearrowleft\\
\end{array}
</math></center>
 
Na ostatniej otrzymanej konfiguracji maszyna się zatrzymuje (następne konfiguracje są identyczne).
Zatem konfiguracja początkowa <math>\displaystyle \sharp \:s_0 1\: 010101 \sharp</math> prowadzić może poprzez relację <math>\displaystyle \mapsto^*</math> tylko do
konfiguracji (obliczeń wykonanych) wypisanych powyżej. Żadna z otrzymanych konfiguracji pośrednich
nie zawiera stanu ze zbioru <math>\displaystyle S_F</math>. To z kolei oznacza, że <math>\displaystyle 1010101\not\in L(TM_2)</math>.
</div></div>
 
{{cwiczenie|||
Niech będzie dany alfabet <math>\displaystyle \Sigma_I =\left\{0,1,\clubsuit\right\}</math>. Zaprojektuj maszynę Turinga akceptująca język postaci:
<center><math>\displaystyle
L=\left\{u\clubsuit w\: : \: u,w\in \left\{0,1\right\}^*\right\}
</math></center>
 
Zaprojektuj maszynę Turinga <math>\displaystyle \mathcal{M}=(\Sigma _{T},S,f,s_{0},S_{F})</math> która akceptuje język <math>\displaystyle L</math>. Następnie:
# Wypisz elementy składowe maszyny <math>\displaystyle \mathcal{M}</math>, tzn. zbiory <math>\displaystyle \Sigma_T,S,S_{F}</math> oraz funkcję przejścia <math>\displaystyle f</math>
(zapewnij aby <math>\displaystyle s_0\in  S</math>).
# Wykonaj symulację maszyny <math>\displaystyle \mathcal{M}</math> na słowie <math>\displaystyle w_1=1100\clubsuit 11</math>
# słowie <math>\displaystyle w_2=\clubsuit 01 \clubsuit</math>
# oraz słowie <math>\displaystyle w_3=0000110</math>.
 
}}
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> 
Projektowana maszyna może działać według schematu:
# Przejdź słowo wejściowe od lewego do prawego ogranicznika.
# Jeśli napotkasz symbol <math>\displaystyle \clubsuit</math> oznacz to w stanach maszyny.
# Jeśli napotkasz symbol <math>\displaystyle \clubsuit</math> ponownie to odrzuć.
# Gdy dotarłeś do prawego ogranicznika i nie napotkałeś <math>\displaystyle \clubsuit</math> to odrzuć, w przeciwnym przypadku akceptuj.
 
</div></div>
 
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
'''(Ad. 1)''' Wypiszemy maszynę <math>\displaystyle \mathcal{M}=(\Sigma _{T},S,f,s_{0},S_{F})</math> działającą według zaproponowanego we wskazówce schematu.
Zbiór <math>\displaystyle \Sigma_I</math> oraz stan początkowy <math>\displaystyle s_0</math> zostały narzucone treścią zadania. Oznaczamy kolejno
<center><math>\displaystyle
\Sigma_T=\left\{0,1,\clubsuit,\sharp\right\}\quad,\quad S=\left\{s_0,s_1,s_R,s_A\right\}\quad,\quad S_F=\left\{s_A\right\}
</math></center>
 
oraz definiujemy funkcję przejścia według tabeli:
 
{| border=1
|+ <span style="font-variant:small-caps">Uzupelnij tytul</span>
|-
|
<math>\displaystyle (s_0,0)\mapsto (s_0,0,1)</math>  ||  <math>\displaystyle (s_0,1)\mapsto (s_0,1,1)</math>  ||  <math>\displaystyle (s_0,\clubsuit)\mapsto (s_1,\clubsuit,1)</math>
||  <math>\displaystyle (s_0,\sharp)\mapsto (s_R,\sharp,0)</math>
|-
|
<math>\displaystyle (s_1,0)\mapsto (s_1,0,1)</math>  ||  <math>\displaystyle (s_1,1)\mapsto (s_1,1,1)</math>  ||  <math>\displaystyle (s_1,\clubsuit)\mapsto (s_R,\clubsuit,0)</math>  ||
<math>\displaystyle (s_1,\sharp)\mapsto (s_A,\sharp,0)</math>
|-
|
||  ||  <math>\displaystyle (s_R,\clubsuit)\mapsto (s_R,\clubsuit,0)</math>  ||  <math>\displaystyle (s_R,\sharp)\mapsto (s_R,\sharp,0)</math>
|-
|
||  ||  ||  <math>\displaystyle (s_A,\sharp)\mapsto (s_A,\sharp,0)</math>
|-
|
 
|}
 
Wykonujemy kolejno symulację maszyny Turinga <math>\displaystyle \mathcal{M}</math> na słowach:<br>
'''(Ad. 2)''' <math>\displaystyle w_1=1100\clubsuit 11</math><br>
<center><math>\displaystyle
\begin{array} {c c c c c c c c}
&\sharp s_0 1100\clubsuit 11\sharp & \mapsto & \sharp 1 s_0 100\clubsuit 11\sharp &\mapsto &
\sharp 11 s_0 00\clubsuit 11\sharp &\mapsto & \sharp 110 s_0 0\clubsuit 11\sharp
\\
\mapsto & \sharp 1100 s_0 \clubsuit 11\sharp & \mapsto &  \sharp 1100\clubsuit s_1 11\sharp  &\mapsto &
\sharp 1100\clubsuit 1 s_1 1\sharp &\mapsto & \sharp 1100\clubsuit 11  s_1 \sharp
\\
\mapsto & \sharp 1100\clubsuit 11  s_A \sharp & \circlearrowleft
\end{array}
</math></center>
 
Konfiguracja końcowa jest akceptująca, zatem rzeczywiście <math>\displaystyle w_1\in L(\mathcal{M})</math>.
 
<br>
'''(Ad. 3)''' <math>\displaystyle w_2=\clubsuit 01 \clubsuit</math><br>
<center><math>\displaystyle
\begin{array} {c c c c c c c c}
& \sharp s_0 \clubsuit 01 \clubsuit \sharp & \mapsto & \sharp\clubsuit s_1 01 \clubsuit\sharp  &\mapsto &
\sharp\clubsuit 0 s_1 1 \clubsuit\sharp &\mapsto & \sharp\clubsuit 01 s_1 \clubsuit\sharp
\\
\mapsto & \sharp\clubsuit 01 s_R \clubsuit\sharp & \circlearrowleft
\end{array}
</math></center>
 
Żadna z otrzymanych konfiguracji nie była akceptująca, zatem <math>\displaystyle w_2\not\in L(\mathcal{M})</math>.
 
<br>
'''(Ad. 4)''' <math>\displaystyle w_3=0000110</math><br>
<center><math>\displaystyle
\begin{array} {c c c c c c c c}
& \sharp s_0 0000110 \sharp & \mapsto & \sharp 0 s_0 000110 \sharp &\mapsto & \sharp 00 s_0 00110 \sharp &\mapsto &
\sharp 000 s_0 0110 \sharp
\\
\mapsto & \sharp 0000 s_0 110 \sharp & \mapsto & \sharp 00001 s_0 10 \sharp  &\mapsto & \sharp 000011  s_0 0 \sharp  &\mapsto &
\sharp 0000110 s_0 \sharp
\\
\mapsto & \sharp 0000110 s_R \sharp & \circlearrowleft
\end{array}
</math></center>
 
Tak jak w poprzednim przypadku <math>\displaystyle w_3\not\in L(\mathcal{M})</math>.
</div></div>


{{cwiczenie|||
{{cwiczenie|||
Linia 80: Linia 306:
Wykorzystujemy trzy taśmy (<math>\displaystyle I</math>, <math>\displaystyle C</math>, <math>\displaystyle S</math>) oraz maszynę <math>\displaystyle \mathcal{M}</math> konstruującą pamięciowo funkcję <math>\displaystyle g(n)=3n</math>.
Wykorzystujemy trzy taśmy (<math>\displaystyle I</math>, <math>\displaystyle C</math>, <math>\displaystyle S</math>) oraz maszynę <math>\displaystyle \mathcal{M}</math> konstruującą pamięciowo funkcję <math>\displaystyle g(n)=3n</math>.
Docelowa maszyna <math>\displaystyle \mathcal{N}</math> działa według schematu.
Docelowa maszyna <math>\displaystyle \mathcal{N}</math> działa według schematu.
# Jeśli słowo początkowe jest puste wypisz <math>\displaystyle 1</math> i zatrzymaj się. Inaczej wykonaj następny krok.
# Jeśli słowo początkowe jest puste wypisz <math>\displaystyle 1</math> i zatrzymaj się. W przeciwnym wypadku
wykonaj następny krok.
# Jeśli słowo wejściowe jest inne niż <math>\displaystyle 1^n</math> to odrzuć.
# Jeśli słowo wejściowe jest inne niż <math>\displaystyle 1^n</math> to odrzuć.
# Na taśmie <math>\displaystyle I</math> wypisz słowo wejściowe, na taśmach <math>\displaystyle C</math> i <math>\displaystyle S</math> wypisz słowo <math>\displaystyle 1</math>.
# Na taśmie <math>\displaystyle I</math> wypisz słowo wejściowe, na taśmach <math>\displaystyle C</math> i <math>\displaystyle S</math> wypisz słowo <math>\displaystyle 1</math>.
# Wykonaj symulację maszyny <math>\displaystyle \mathcal{M}</math> na taśmie <math>\displaystyle S</math> oraz dopisz symbol <math>\displaystyle 1</math> do taśmy <math>\displaystyle C</math> (po jednym
# Wykonaj symulację maszyny <math>\displaystyle \mathcal{M}</math> na taśmie <math>\displaystyle S</math> oraz dopisz symbol <math>\displaystyle 1</math> do
przebiegu ilość symboli na taśmie <math>\displaystyle S</math> potraja się)
taśmy <math>\displaystyle C</math> (po jednym przebiegu ilość symboli na taśmie <math>\displaystyle S</math> wzrasta trzykrotnie)
# Jeśli słowo na taśmie <math>\displaystyle C</math> jest krótsze niż słowo na taśmie <math>\displaystyle I</math> wykonaj ponownie krok&nbsp;[[##step4|Uzupelnic step4|]].
# Jeśli słowo na taśmie <math>\displaystyle C</math> jest krótsze niż słowo na taśmie <math>\displaystyle I</math> wykonaj ponownie krok&nbsp;[[##step4|Uzupelnic step4|]].
# W tym momencie na taśmie <math>\displaystyle S</math> zostało zaznaczone <math>\displaystyle 3^n</math>  komórek.
# W tym momencie na taśmie <math>\displaystyle S</math> zostało zaznaczone <math>\displaystyle 3^n</math>  komórek.
Linia 92: Linia 319:
Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3^n} \sharp</math> co było wymagane w definicji konstruowalności
Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3^n} \sharp</math> co było wymagane w definicji konstruowalności
pamięciowej.
pamięciowej.
</div></div>
{{cwiczenie|||
Skonstruuj maszynę Turinga rozpoznającą język zadany gramatyką:
<center><math>\displaystyle
S\rightarrow aTb|b \quad, \quad T\rightarrow Ta|1
</math></center>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> 
Zacznij od wypisania języka opisanego przez daną gramatykę.
</div></div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
Analizując postać gramatyki, dochodzimy do wniosku, że zadana
maszyna ma rozpoznawać język postaci:
<center><math>\displaystyle
L=\left\{a^n b\: :\; n\geq 0\right\}
</math></center>
Jest to język regularny, więc
rozpoznawany przez automat skończenie stanowy. Zatem do akceptacji tego języka wystarczy,
aby maszyna przeszła taśmę z lewej strony do prawej według zasad:
# Jeśli czytasz symbol <math>\displaystyle a</math> wypisz <math>\displaystyle a</math> i przejdź w prawo
powtarzając ten krok. Jeśli czytasz <math>\displaystyle b</math> przejdź w prawo i wykonaj
krok następny.
# Jeśli jesteś na ograniczniku to akceptuj, inaczej odrzuć.
</div></div>
{{cwiczenie|||
Przedstaw ideę działania maszyny Turinga rozpoznającej język
<center><math>\displaystyle
L=\left\{a^n b^{2n} c^{3n} \;:\; n>1\right\}
</math></center>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> 
Wykorzystaj kilka taśm oraz konstruowalność pamięciową.
</div></div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
Idea działania poszukiwanej maszyny (cztero taśmowej) jest
następująca:
# Sprawdź czy słowo wjeściowe <math>\displaystyle w</math> zawiera jako pierwszy symbol <math>\displaystyle a</math>. Jeśli nie
odrzuć.
# Skopiuj najdłuższy prefiks słowa wejściowego <math>\displaystyle w</math> postaci <math>\displaystyle a^k</math> na
taśmę nr dwa.
# Korzystając z konstruowalności pamięciowej funkcji <math>\displaystyle 2k</math> oraz
<math>\displaystyle 3k</math> wypisz słowo <math>\displaystyle b^{2k}</math> na taśmie nr <math>\displaystyle 3</math> oraz słowo <math>\displaystyle c^{3k}</math> na
taśmie nr <math>\displaystyle 4</math>.
# Dopisz słowo z taśmy nr <math>\displaystyle 3</math> i <math>\displaystyle 4</math> do słowa na taśmie nr <math>\displaystyle 2</math>. W
tym momencie na taśmie nr <math>\displaystyle 2</math> znajduje się słowo <math>\displaystyle a^k b^{2k}
c^{3k}</math>.
# Porównaj słowo z taśmy nr <math>\displaystyle 2</math> ze słowem <math>\displaystyle w</math>. Jeśli są
identyczne to akceptuj.
</div></div>
{{cwiczenie|||
W trakcie wykładu rozważaliśmy zamkniętość klas języków w
klasyfikacji Chomsky'ego ze względu na różne działania. Podaj
uzasadnienie (ideę konstrukcji) następującego faktu:
Dla dowolnych maszyn Turinga <math>\displaystyle TM_1</math>, <math>\displaystyle TM_2</math> istnieje maszyna
<math>\displaystyle \mathcal{M}</math> o własności:
# <math>\displaystyle  L( \mathcal{M})=L(TM_1)\cup L(TM_2) </math>
# <math>\displaystyle  L( \mathcal{M})=L(TM_1)\cap L(TM_2) </math>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> 
Wykonaj odpowiednią symulację maszyn <math>\displaystyle TM_1</math> oraz <math>\displaystyle TM_2</math>.
</div></div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
'''(Ad. 1)''' Konstruujemy maszynę dwu-taśmową która działa
według zasady:
# Kopiuj słowo wejściowe na taśmę nr 2. Symuluj kolejno jeden
krok czasowy <math>\displaystyle TM_1</math> na taśmie <math>\displaystyle 1</math> i jeden krok <math>\displaystyle TM_2</math> na taśmie <math>\displaystyle 2</math>.
# Jeśli któraś z maszyn zaakceptowała to akceptuj.
'''(Ad. 2)''' Konstrukcja jest niemalże identyczne. Jedynie w
kroku (2) akceptujemy gdy obie maszyny zaakceptowały. Ponieważ może
to się stać w różnych krokach czasowych, w momencie gdy jedna z
maszyn zaakceptuje, kończymy jej symulację i symulujemy tylko drugą
aż do momentu gdy zaakceptuje (o ile to nastąpi).
</div></div>
{{cwiczenie|||
Czy któraś z poniższych list słów ma własność Posta?
# <center><math>\displaystyle
(u_1,v_1)=\left [ \begin{array} {c} a^2 \\ a^2 b\end{array} \right]\;
,\; (u_2,v_2)=\left [
\begin{array} {c} b^2 \\ ba
\end{array} \right]\; ,\; (u_3,v_3)=\left [ \begin{array} {c} ab^2 \\ b\end{array} \right]
</math></center>
# <center><math>\displaystyle
(u_1,v_1)=\left [ \begin{array} {c} a \\ b^2\end{array} \right]\; ,\;
(u_2,v_2)=\left [
\begin{array} {c}
a^2
\\b
\end{array} \right]
</math></center>
# <center><math>\displaystyle
(u_1,v_1)=\left [ \begin{array} {c} ba \\ abab\end{array} \right]\;
,\; (u_2,v_2)=\left [
\begin{array} {c}
b
\\a
\end{array} \right]\;,\;
(u_3,v_3)=\left [
\begin{array} {c}
aba
\\b
\end{array} \right]\;,\;
(u_4,v_4)=\left [
\begin{array} {c}
aa
\\a
\end{array} \right]
</math></center>
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
'''(Ad. 1)''' Rozważmy ciąg indeksów <math>\displaystyle (1,2,1,3)</math>. Otrzymujemy:
<center><math>\displaystyle
\left [ \begin{array} {c} a^2 \\ a^2 b\end{array} \right] \left
[\begin{array} {c} b^2 \\ ba\end{array} \right] \left [
\begin{array} {c} a^2 \\ a^2 b\end{array} \right] \left [
\begin{array} {c} ab^2 \\ b\end{array} \right]
=\left [ \begin{array} {c} a^2 b^2 a^2 ab^2\\ a^2 b ba a^2 b b
\end{array} \right]=\left [ \begin{array} {c} a^2 b^2 a^3 b^2\\ a^2 b^2 a^3 b^2
\end{array} \right]
</math></center>
Zatem własność Posta zachodzi dla tej listy.
'''(Ad. 2)''' Dany ciąg nie ma własności Posta. bez względu na
kolejność indeksów pierwsze ze słów zawsze jest postaci <math>\displaystyle a^k</math> a
drugi <math>\displaystyle b^j</math> dla pewnych <math>\displaystyle k,j>0</math>. Ale zawsze <math>\displaystyle a^k \neq b^j</math> czyli
własność Posta nie może zachodzić.
'''(Ad. 3)''' Rozważmy ciąg indeksów <math>\displaystyle (4,2,3,2,3,1,1)</math>.
Zestawiając zadane pary słów w tej kolejności otrzymujemy:
<center><math>\displaystyle
\left [\begin{array} {c} aa\\a\end{array} \right] \left [
\begin{array} {c} ba \\ abab\end{array} \right]
\left [ \begin{array} {c} ba \\ abab\end{array} \right] \left [
\begin{array} {c} b\\a \end{array} \right] \left [
\begin{array} {c} aba \\b \end{array} \right] \left [
\begin{array} {c} b\\a \end{array} \right]
\left [\begin{array} {c} aa\\a\end{array} \right]
</math></center>
<center><math>\displaystyle
= \left [\begin{array} {c}
aabababababaa\\aabababababaa\end{array} \right]
</math></center>
W ten sposób wykazaliśmy, że własność Posta zachodzi.
</div></div>
{{cwiczenie|||
W definicji problemu Posta zakłada się, że alfabet <math>\displaystyle \mathcal{A}</math>
zawiera co najmniej dwa elementy. Wykaż, że gdy to założenie nie
jest spełnione (tzn. <math>\displaystyle \mathcal{A}=\left\{1\right\}</math>) problem Posta jest
problemem rozstrzygalnym.
}}
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> 
Rozważ dwa przypadki, zależnie od tego czy lista zawiera tylko pary
słów postaci <math>\displaystyle (a^k,a^j)</math>, gdzie <math>\displaystyle k>j</math> (lub tylko <math>\displaystyle k<j</math>) czy też
jeszcze jakieś inne pary słów.
</div></div>
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"> 
Rozważmy listę par słów <math>\displaystyle (u_1,v_1),\dots, (u_n,v_n)</math> nad alfabetem
<math>\displaystyle \mathcal{A}</math>. Przedstawimy algorytm sprawdzający czy lista ma
własność Posta.
# Jeśli lista zawiera parę <math>\displaystyle (1^k,1^k)</math> to mamy własność Posta.
# Jeśli jedyne pary to takie w których
<math>\displaystyle (u_i,v_i)=(1^{k_i},1^{l_i})</math> oraz <math>\displaystyle k_i>l_i</math> (lub <math>\displaystyle k_i<l_i</math>) dla
<math>\displaystyle i=1,\dots,n</math> to własność posta nie jest spełniona (słowo dane przez
katenację dowolnych <math>\displaystyle u_i</math> zawsze zawiera więcej (odp. mniej) symboli
niż odpowiadająca mu katenacja słow <math>\displaystyle v_i</math> )
# W ostatnim przypadku istnieją indeksy <math>\displaystyle i,j</math> takie, że
<center><math>\displaystyle
(u_i,v_i)=(1^k,1^l)\quad , \quad (u_j,v_j)=(1^p,1^q)
</math></center>
przy czym <math>\displaystyle k<l</math> i <math>\displaystyle p>q</math>. W tej sytuacji zachodzi własność Posta.
Uzasadnienie jest następujące. Biorąc ciąg:
<center><math>\displaystyle
\begin{array} {c c c}
(\underbrace{i\;,\; \dots\;,\;i}&,&\underbrace{j\;,\;\dots\;,\;j})\\
</math> {<math>\displaystyle p-q</math> razy} <math>\displaystyle  &&  </math> { <math>\displaystyle l-k </math> razy } <math>\displaystyle 
\end{array}
</math></center>
Otrzymujemy słowa:
<center><math>\displaystyle
\left [ \begin{array} {c} u_1\\ v_1 \end{array} \right ]^{p-q} \left [
\begin{array} {c} u_2\\ v_2 \end{array} \right ]^{l-k}=
\left [ \begin{array} {c} 1^k\\ 1^l \end{array} \right ]^{p-q}\left [
\begin{array} {c} 1^p\\ 1^1 \end{array} \right ]^{l-k}=
\left [ \begin{array} {c} 1^{k(p-q)}\\1^{l(p-q)}\end{array} \right ]
\left [
\begin{array} {c}1^{p (l-k)}\\
1^{q(l-k)} \end{array} \right ]
</math></center>
<center><math>\displaystyle
=\left [ \begin{array} {c} 1^{kp-kq+pl-pk}\\1^{lp-lq+ql-qk}
\end{array} \right ]=\left [ \begin{array} {c} 1^{lp-kq}\\1^{lp-kq}
\end{array} \right ]
</math></center>
Dla danej listy, można rostrzygnąć w czasie wielomianowym który z
przypadków (1), (2), (3) zachodzi. Otrzymaliśmy rostrzygalność
problemu Posta dla tej sytuacji.
</div></div>
</div></div>


Linia 323: Linia 324:


{{cwiczenie|||
{{cwiczenie|||
Zadanie domowe 2.1 do wykładu 12 polegało na konstrukcji maszyny Turinga
Skonstruuj maszynę Turinga <math>\displaystyle \mathcal{MT}</math> akceptującą język:
<math>\displaystyle \mathcal{MT}</math> akceptującej język:
<center><math>\displaystyle  
<center><math>\displaystyle  
L_1=\left\{www\: : \: w\in \left\{\circ,\bullet,\star\right\}^*\right\}
L_1=\left\{www\: : \: w\in \left\{\circ,\bullet,\star\right\}^*\right\}
</math></center>
</math></center>


Zmodyfikuj, ewentualnie, tę konstrukcję <math>\displaystyle \mathcal{MT}</math> aby udowodnić <math>\displaystyle L_1 \in  </math> '''P''' .
}}
}}


{{cwiczenie|||
{{cwiczenie|||
Zadanie domowe 2.2 do wykładu 12 polegało na konstrukcji niedeterministycznej maszyny Turinga
Uzasadnij, że język
<math>\displaystyle \mathcal{NMT}</math> akceptującej język:
<center><math>\displaystyle  
<center><math>\displaystyle  
L_2=\left\{w_1 w_1 w_2 w_2 \dots w_n w_n \: : \: w_i \in \left\{\circ,\bullet\right\}^+, n>0 \right\}
L_2=\left\{w_1 w_1 w_2 w_2 \dots w_n w_n \: : \: w_i \in \left\{\circ,\bullet\right\}^+, n>0 \right\}
</math></center>
</math></center>


Zmodyfikuj, ewentualnie, tę konstrukcję <math>\displaystyle \mathcal{NMT}</math> aby udowodnić, że
jest rozpoznawany przez pewną niedeterministyczna maszynę Turinga <math>\displaystyle \mathcal{NMT}</math>. <br>
<math>\displaystyle L_2 \in  </math> '''NP''' .<br>
 
''Podpowiedź:'' wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego <math>\displaystyle w</math>
przeprowadź weryfikację w trzech
etapach: konstrukcja słów <math>\displaystyle w_1, \dots ,w_n</math> gdzie <math>\displaystyle n< |w|</math> (wyrocznia), sklejanie,
weryfikacja czy <math>\displaystyle w=w_1w_1 w_2 w_2 \dots w_n w_n</math>.
}}
 
{{cwiczenie|||
Uzasadnij, że jeśli funkcja <math>\displaystyle s(n)</math> jest konstruowalna pamięciowo to obliczenie <math>\displaystyle d_1 \mapsto^* d_2</math> z definicji
konstruowalności pamięciowej (tzn. <math>\displaystyle d_1=\sharp s_0 1^n \sharp</math>,
<math>\displaystyle d_2=\sharp s_1 1^{s(n)} w \sharp</math>) następuję w conajwyżej <math>\displaystyle c 2^{s(n)}</math> krokach gdzie <math>\displaystyle c</math> jest pewną
stałą niezależną od <math>\displaystyle n</math>.<br>
''Podpowiedź:'' przeanalizuj ilość możliwych konfiguracji.
}}
 
{{cwiczenie|||
Uzasadnij że funkcja <math>\displaystyle n^3</math> jest konstruowalna pamięciowo.
}}
 
{{cwiczenie|||
Skonstruuj maszynę Turinga akceptującą słowo <math>\displaystyle u=1^n</math> w dokładnie <math>\displaystyle n^2</math> krokach. Jak zmodyfikować konstrukcję maszyny aby
akceptowała słowo <math>\displaystyle u</math> dokładnie w <math>\displaystyle 2^n</math> krokach?
}}
 
{{cwiczenie|||
Wypisz dokładnie wszystkie elementy składowe maszyn Turinga
rozpoznających języki zadane gramatykami:
# <math>\displaystyle S\rightarrow AbC</math>  ,  <math>\displaystyle A\rightarrow
aAb|\varepsilon</math>, <math>\displaystyle C\rightarrow bCc|\varepsilon</math>
# <math>\displaystyle S\rightarrow ABACA\quad , \quad A\rightarrow Aa|a \quad,\quad B\rightarrow bb|b\quad ,\quad C\rightarrow c|\varepsilon</math>
 
}}
 
{{cwiczenie|||
Wykaż (podając ideę kontrukcji) że dla maszyn Turinga <math>\displaystyle TM_1</math>, <math>\displaystyle TM_2</math>
istnieje maszyna Turinga <math>\displaystyle \mathcal{M}</math> rozpoznająca język:
<center><math>\displaystyle  L(
\mathcal{M})=\left\{uv\; : \; u\in L(TM_1), v\in L(TM_2)\right\}</math></center>
 
}}
 
{{cwiczenie|||
Czy któraś z poniższych list słów ma własność Posta?
# <center><math>\displaystyle
(u_1,v_1)=\left [ \begin{array} {c} a\\a^2 b\end{array} \right]\; ,\;
(u_2,v_2)=\left [ \begin{array} {c} ba^2\\a^2 \end{array} \right]
</math></center>
# <center><math>\displaystyle
(u_1,v_1)=\left [ \begin{array} {c} a^b\\a \end{array} \right]\; ,\;
(u_2,v_2)=\left [ \begin{array} {c} a\\b a^2 \end{array} \right]
</math></center>
# <center><math>\displaystyle
(u_1,v_1)=\left [ \begin{array} {c} aaa\\a \end{array} \right]\; ,\;
(u_2,v_2)=\left [ \begin{array} {c} b\\b a \end{array} \right]
(u_3,v_3)=\left [ \begin{array} {c} bb\\b \end{array} \right]
(u_4,v_4)=\left [ \begin{array} {c} ba\\ab \end{array} \right]
</math></center>
 
}}
 
{{cwiczenie|||
Udowodnij Twierdzenie&nbsp;2.1 z wykładu:


'''Twierdzenie.''' Dla każdej gramatyki istnieje
''Podpowiedź:'' wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego <math>\displaystyle w</math> przeprowadź weryfikację w trzech
równoważna gramatyka tego samego typu taka, że każda produkcja, w
etapach: konstrukcja słów <math>\displaystyle w_1, \dots ,w_n</math> gdzie <math>\displaystyle n< |w|</math> (wyrocznia), sklejanie, weryfikacja czy <math>\displaystyle w=w_1w_1 w_2 w_2 \dots w_n w_n</math>.
której występuje symbol terminalny  <math>\displaystyle </math> , jest postaci  <math>\displaystyle v\longrightarrow a  </math> .
}}
}}

Wersja z 18:33, 22 sie 2006

{Języki kontekstowe i automat liniowo ograniczony. Maszyna Turinga}

ĆWICZENIA 12

Ćwiczenie

Rozważmy maszynę Turinga TM2 z wykładu (Przykład 1.2) akceptującą język palindromów, czyli:

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L=\left\{w \overleftarrow{w} \: : \: w\in \left\{0,1\right\}^*\right\} }

Sprawdź, że

  1. 101101L(TM2) oraz, że
  2. 1010101∉L(TM2).
Wskazówka
Rozwiązanie

Ćwiczenie

Niech będzie dany alfabet ΣI={0,1,}. Zaprojektuj maszynę Turinga akceptująca język postaci:

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L=\left\{u\clubsuit w\: : \: u,w\in \left\{0,1\right\}^*\right\} }

Zaprojektuj maszynę Turinga =(ΣT,S,f,s0,SF) która akceptuje język L. Następnie:

  1. Wypisz elementy składowe maszyny , tzn. zbiory ΣT,S,SF oraz funkcję przejścia f

(zapewnij aby s0S).

  1. Wykonaj symulację maszyny na słowie w1=110011
  2. słowie w2=01
  3. oraz słowie w3=0000110.
Wskazówka
Rozwiązanie

Ćwiczenie

W trakcie wykładu rozważaliśmy język

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L=\left\{3^k\: : \: k=i\cdot j } dla pewnych Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle i,j> 1\right\} }

wykazując, że L NP .

Uzasadnij, że także
L P .
Wskazówka
Rozwiązanie

Ćwiczenie

Uzasadnij że funkcja s(n)=3n jest konstruowalna pamięciowo.

Wskazówka
Rozwiązanie

Ćwiczenie

Uzasadnij że funkcja s(n)=3n jest konstruowalna pamięciowo.

Wskazówka
Rozwiązanie

Zadania domowe

Ćwiczenie

Skonstruuj maszynę Turinga 𝒯 akceptującą język:

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_1=\left\{www\: : \: w\in \left\{\circ,\bullet,\star\right\}^*\right\} }

Ćwiczenie

Uzasadnij, że język

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L_2=\left\{w_1 w_1 w_2 w_2 \dots w_n w_n \: : \: w_i \in \left\{\circ,\bullet\right\}^+, n>0 \right\} }

jest rozpoznawany przez pewną niedeterministyczna maszynę Turinga 𝒩𝒯.

Podpowiedź: wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego w przeprowadź weryfikację w trzech etapach: konstrukcja słów w1,,wn gdzie n<|w| (wyrocznia), sklejanie, weryfikacja czy w=w1w1w2w2wnwn.