Języki, automaty i obliczenia/Ćwiczenia 12: Języki kontekstowe i automat liniowo ograniczony. Maszyna Turinga: Różnice pomiędzy wersjami
Matiunreal (dyskusja | edycje) Nie podano opisu zmian |
|||
Linia 5: | Linia 5: | ||
język palindromów, czyli: | język palindromów, czyli: | ||
<center><math>\displaystyle | <center><math>\displaystyle | ||
L=\left\{w \overleftarrow{w} \: : \: w\in \left\{0,1\right\}^*\right\} | L=\left\{w \overleftarrow{w} \: : \: w\in \left\{0,1\right\}^*\right\}. | ||
</math></center> | </math></center> | ||
Sprawdź, że | Sprawdź, że: | ||
# <math>\displaystyle 101101\in L(TM_2)</math> oraz | # <math>\displaystyle 101101\in L(TM_2)</math> | ||
oraz że | |||
# <math>\displaystyle 1010101\not\in L(TM_2)</math>. | # <math>\displaystyle 1010101\not\in L(TM_2)</math>. | ||
Linia 15: | Linia 16: | ||
<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"> | <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 | 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ść | \sharp</math>, a następnie wykonuj przejścia, zgodnie z diagramem przejść | ||
maszyny <math>\displaystyle TM_2</math> z wykładu. | maszyny <math>\displaystyle TM_2</math> z wykładu. | ||
</div></div> | </div></div> | ||
Linia 67: | Linia 68: | ||
Wykazaliśmy, że <math>\displaystyle \sharp \:s_0 1\: 01101 \sharp \mapsto^* | Wykazaliśmy, że <math>\displaystyle \sharp \:s_0 1\: 01101 \sharp \mapsto^* | ||
\sharp\sharp\sharp\sharp \: s_A \sharp\: \sharp\sharp\sharp</math>. Stan | \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>. | <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: | '''(Ad. 2)''' Wykonujemy identyczną symulację na drugim ze słów: | ||
Linia 130: | Linia 131: | ||
Niech będzie dany alfabet <math>\displaystyle \Sigma_I =\left\{0,1,\clubsuit\right\}</math>. Zaprojektuj maszynę Turinga akceptująca język postaci: | 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 | <center><math>\displaystyle | ||
L=\left\{u\clubsuit w\: : \: u,w\in \left\{0,1\right\}^*\right\} | L=\left\{u\clubsuit w\: : \: u,w\in \left\{0,1\right\}^*\right\}. | ||
</math></center> | </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: | 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>). | # 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> | # 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> | # na słowie <math>\displaystyle w_2=\clubsuit 01 \clubsuit</math>, | ||
# oraz słowie <math>\displaystyle w_3=0000110</math>. | # oraz na słowie <math>\displaystyle w_3=0000110</math>. | ||
}} | }} | ||
Linia 144: | Linia 145: | ||
Projektowana maszyna może działać według schematu: | Projektowana maszyna może działać według schematu: | ||
# Przejdź słowo wejściowe od lewego do prawego ogranicznika. | # 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>, oznacz to w stanach maszyny. | ||
# Jeśli napotkasz symbol <math>\displaystyle \clubsuit</math> ponownie to odrzuć. | # 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ć | # Gdy dotarłeś do prawego ogranicznika i nie napotkałeś <math>\displaystyle \clubsuit</math>, to odrzuć; w przeciwnym przypadku akceptuj. | ||
</div></div> | </div></div> | ||
Linia 152: | Linia 153: | ||
<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"> | <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. | '''(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 | 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 | <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\} | \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\} | ||
Linia 221: | Linia 222: | ||
W trakcie wykładu rozważaliśmy język | W trakcie wykładu rozważaliśmy język | ||
<center><math>\displaystyle | <center><math>\displaystyle | ||
L=\left\{3^k\: : \: k=i\cdot j </math> dla pewnych <math>\displaystyle i,j> 1\right\} | L=\left\{3^k\: : \: k=i\cdot j </math> dla pewnych <math>\displaystyle i,j> 1\right\}, | ||
</math></center> | </math></center> | ||
Linia 230: | Linia 231: | ||
<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"> | <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"> | ||
Zastanów się, ile maksymalnie trzeba wykonać mnożeń aby zweryfikować istnienie <math>\displaystyle i,j>1</math> dla których | Zastanów się, ile maksymalnie trzeba wykonać mnożeń, aby zweryfikować istnienie <math>\displaystyle i,j>1</math>, dla których | ||
<math>\displaystyle k=i\cdot j</math> | <math>\displaystyle k=i\cdot j</math>. | ||
</div></div> | </div></div> | ||
Linia 239: | Linia 240: | ||
Pozostaje zaprojektować deterministyczną maszynę generującą ciągi. Można to zrobić według schematu | Pozostaje zaprojektować deterministyczną maszynę generującą ciągi. Można to zrobić według schematu | ||
(maszyna | (maszyna czterotaśmowa): | ||
# Taśma nr <math>\displaystyle 1</math> jest tylko do odczytu. Mamy na niej słowo <math>\displaystyle 3^k</math>. | # Taśma nr <math>\displaystyle 1</math> jest tylko do odczytu. Mamy na niej słowo <math>\displaystyle 3^k</math>. | ||
# Rozpocznij od zapisania słowa <math>\displaystyle 11</math> na taśmie nr <math>\displaystyle 2</math> i słowa <math>\displaystyle 22</math> na taśmie nr <math>\displaystyle 3</math> | # Rozpocznij od zapisania słowa <math>\displaystyle 11</math> na taśmie nr <math>\displaystyle 2</math> i słowa <math>\displaystyle 22</math> na taśmie nr <math>\displaystyle 3</math>. | ||
# {{kotwica|prz.3|}}Przepisz słowa na taśmę nr <math>\displaystyle 4</math> według kolejności taśm <math>\displaystyle 2,3,1</math>. | # {{kotwica|prz.3|}}Przepisz słowa na taśmę nr <math>\displaystyle 4</math> według kolejności taśm <math>\displaystyle 2,3,1</math>. | ||
# Sprawdź na taśmie nr <math>\displaystyle 4</math> czy <math>\displaystyle k=i\cdot j</math>. Jeśli tak to akceptuj. Inaczej krok następny. | # Sprawdź na taśmie nr <math>\displaystyle 4</math> czy <math>\displaystyle k=i\cdot j</math>. Jeśli tak, to akceptuj. Inaczej krok następny. | ||
# Dopisz symbol <math>\displaystyle 1</math> na taśmie nr <math>\displaystyle 2</math>. Gdy powstało słowo dłuższe niż <math>\displaystyle k</math> dopisz symbol <math>\displaystyle 2</math> na taśmie nr <math>\displaystyle 3</math> a słowo na taśmie nr <math>\displaystyle 2</math> usuń i zapisz na niej słowo <math>\displaystyle 11</math>. | # Dopisz symbol <math>\displaystyle 1</math> na taśmie nr <math>\displaystyle 2</math>. Gdy powstało słowo dłuższe niż <math>\displaystyle k</math>, dopisz symbol <math>\displaystyle 2</math> na taśmie nr <math>\displaystyle 3</math>, a słowo na taśmie nr <math>\displaystyle 2</math> usuń i zapisz na niej słowo <math>\displaystyle 11</math>. | ||
# Jeśli słowo na taśmie nr <math>\displaystyle 3</math> jest dłuższe niż <math>\displaystyle k</math> to odrzuć. W przeciwnym przypadku przejdź do kroku [[#prz.3|3]]. | # Jeśli słowo na taśmie nr <math>\displaystyle 3</math> jest dłuższe niż <math>\displaystyle k</math>, to odrzuć. W przeciwnym przypadku przejdź do kroku [[#prz.3|3]]. | ||
Idea tej maszyny jest bardzo prosta. Wykorzystaj taśmy nr <math>\displaystyle 2</math> (licznik 1) i <math>\displaystyle 3</math> (licznik 2) jako liczniki a na taśmie <math>\displaystyle 4</math> wykonuj symulacje. | Idea tej maszyny jest bardzo prosta. Wykorzystaj taśmy nr <math>\displaystyle 2</math> (licznik 1) i <math>\displaystyle 3</math> (licznik 2) jako liczniki, a na taśmie <math>\displaystyle 4</math> wykonuj symulacje. | ||
Zacznij od stanu liczników na <math>\displaystyle 2</math> i zwiększaj kolejno licznik 1 a po jego przepełnieniu zeruj go (do wartości początkowej <math>\displaystyle 2</math>) | Zacznij od stanu liczników na <math>\displaystyle 2</math> i zwiększaj kolejno licznik 1, a po jego przepełnieniu zeruj go (do wartości początkowej <math>\displaystyle 2</math>) | ||
i zwiększ licznik <math>\displaystyle 2</math>. Gdy on także się przepełni, to iloczyn stanów liczników przekracza <math>\displaystyle k</math> zatem | i zwiększ licznik <math>\displaystyle 2</math>. Gdy on także się przepełni, to iloczyn stanów liczników przekracza <math>\displaystyle k</math>, zatem można zakończyć generowanie ciągów. | ||
można zakończyć generowanie ciągów. | |||
W oczywisty sposób otrzymujemy, że ilość wymaganych kroków czasowych maszyny jest ograniczona przez wielomian (dla dużych <math>\displaystyle n</math>). | W oczywisty sposób otrzymujemy, że ilość wymaganych kroków czasowych maszyny jest ograniczona przez wielomian (dla dużych <math>\displaystyle n</math>). | ||
Dla małych <math>\displaystyle n</math> możemy zawsze rozbudować maszynę tak aby akceptowała słowa bez żadnego testowania. | Dla małych <math>\displaystyle n</math> możemy zawsze rozbudować maszynę tak, aby akceptowała słowa bez żadnego testowania. | ||
Zatem <math>\displaystyle L\in </math> '''P''' . | Zatem <math>\displaystyle L\in </math> '''P''' . | ||
</div></div> | </div></div> | ||
{{cwiczenie|4|| | {{cwiczenie|4|| | ||
Uzasadnij że funkcja <math>\displaystyle s(n)=3n</math> jest konstruowalna pamięciowo. | Uzasadnij, że funkcja <math>\displaystyle s(n)=3n</math> jest konstruowalna pamięciowo. | ||
}} | }} | ||
Linia 266: | Linia 266: | ||
<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"> | <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"> | ||
Bierzemy maszynę <math>\displaystyle MT_4</math> z wykładu konstruującą funkcję <math>\displaystyle 2n</math>. Dodajemy | Bierzemy maszynę <math>\displaystyle MT_4</math> z wykładu konstruującą funkcję <math>\displaystyle 2n</math>. Dodajemy jedną dodatkową taśmę (oznaczmy taśmy przez <math>\displaystyle I</math> oraz <math>\displaystyle S</math>). | ||
Drugą taśmę realizujemy poprzez rozszerzenie alfabetu. Jest to spowodowane faktem, że w definicji konstruowalności | Drugą taśmę realizujemy poprzez rozszerzenie alfabetu. Jest to spowodowane faktem, że w definicji konstruowalności | ||
pamięciowej wymagane jest istnienie | pamięciowej wymagane jest istnienie jednotaśmowej deterministycznej maszyny Turinga. | ||
Konstruujemy maszynę <math>\displaystyle \mathcal{M}</math> według schematu | Konstruujemy maszynę <math>\displaystyle \mathcal{M}</math> według schematu: | ||
# Jeśli słowo wejściowe jest puste to stop. | # Jeśli słowo wejściowe jest puste, to stop. | ||
# 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ć. | ||
# Przepisz słowo wejściowe tak aby znajdowało się na taśmie <math>\displaystyle I</math> a taśma <math>\displaystyle S</math> była pusta (gdy zaczynamy symulować dwie taśmy musimy przejść do innego zestawu symboli w którym rozróżniamy taśmy). | # Przepisz słowo wejściowe tak, aby znajdowało się na taśmie <math>\displaystyle I</math>, a taśma <math>\displaystyle S</math> była pusta (gdy zaczynamy symulować dwie taśmy musimy przejść do innego zestawu symboli, w którym rozróżniamy taśmy). | ||
# Kopiujemy słowo wejściowe na taśmę <math>\displaystyle S</math>. | # Kopiujemy słowo wejściowe na taśmę <math>\displaystyle S</math>. | ||
# Symulujemy maszynę <math>\displaystyle MT_4</math> na taśmie <math>\displaystyle S</math>. | # Symulujemy maszynę <math>\displaystyle MT_4</math> na taśmie <math>\displaystyle S</math>. | ||
Linia 278: | Linia 278: | ||
# Zamieniamy symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy do lewego markera i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>. | # Zamieniamy symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy do lewego markera i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>. | ||
Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3n} \sharp</math> co było wymagane w definicji. | Po zakończeniu cyklu doszliśmy do konfiguracji <math>\displaystyle \sharp s_1 1^{3n} \sharp</math>, co było wymagane w definicji. | ||
</div></div> | </div></div> | ||
{{cwiczenie|5|| | {{cwiczenie|5|| | ||
Uzasadnij że funkcja <math>\displaystyle s(n)=3^n</math> jest konstruowalna pamięciowo. | Uzasadnij, że funkcja <math>\displaystyle s(n)=3^n</math> jest konstruowalna pamięciowo. | ||
}} | }} | ||
Linia 292: | Linia 292: | ||
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ę. W przeciwnym wypadku 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>. | ||
# {{kotwica|prz.4|}}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 przebiegu ilość symboli na taśmie <math>\displaystyle S</math> wzrasta trzykrotnie) | # {{kotwica|prz.4|}}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 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 [[#prz.4|4]]. | # 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 [[#prz.4|4]]. | ||
# 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. | ||
Zamieniamy wypisane symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy nad pierwszy symbol (przed lewym markerem) | Zamieniamy wypisane symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy nad pierwszy symbol (przed lewym markerem) | ||
i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>. | i przechodzimy do konfiguracji końcowej <math>\displaystyle s_1\in S_F</math>. | ||
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> | </div></div> | ||
Linia 310: | Linia 310: | ||
Skonstruuj maszynę Turinga <math>\displaystyle \mathcal{MT}</math> akceptującą język: | Skonstruuj maszynę Turinga <math>\displaystyle \mathcal{MT}</math> akceptującą 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> | ||
Linia 324: | Linia 324: | ||
''Podpowiedź:'' wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego <math>\displaystyle w</math> przeprowadź weryfikację w trzech | ''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>. | 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>. | ||
}} | }} |
Wersja z 18:17, 2 wrz 2006
Ćwiczenia 12
Ćwiczenie 1
Rozważmy maszynę Turinga z wykładu (Przykład 1.2) akceptującą język palindromów, czyli:
Sprawdź, że:
oraz że
- .
Ćwiczenie 2
Niech będzie dany alfabet . Zaprojektuj maszynę Turinga akceptująca język postaci:
Zaprojektuj maszynę Turinga , która akceptuje język . Następnie:
- Wypisz elementy składowe maszyny , tzn. zbiory oraz funkcję przejścia (zapewnij, aby ).
- Wykonaj symulację maszyny na słowie ,
- na słowie ,
- oraz na słowie .
Ćwiczenie 3
W trakcie wykładu rozważaliśmy język
wykazując, że NP .
Uzasadnij, że takżeĆwiczenie 4
Uzasadnij, że funkcja jest konstruowalna pamięciowo.
Ćwiczenie 5
Uzasadnij, że funkcja jest konstruowalna pamięciowo.
Ćwiczenie 6
Skonstruuj maszynę Turinga akceptującą język:
Ćwiczenie 7
Uzasadnij, że język
jest rozpoznawany przez pewną niedeterministyczna maszynę Turinga .
Podpowiedź: wykorzystaj konstrukcję z wyrocznią. Dla słowa wejściowego przeprowadź weryfikację w trzech etapach: konstrukcja słów , gdzie (wyrocznia), sklejanie, weryfikacja, czy .