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
Matiunreal (dyskusja | edycje)
Matiunreal (dyskusja | edycje)
Nie podano opisu zmian
Linia 245: Linia 245:
# Przepisz słowa na taśmę nr <math>\displaystyle 4</math> według kolejności taśm <math>\displaystyle 2,3,1</math>.
# 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
# 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>.
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 [[##setp3|Uzupelnic setp3|]].
# 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 [[##setp3|Uzupelnic setp3|]].


Linia 274: Linia 273:
# 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ć
# 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).
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>.
# Dopisujemy do taśmy <math>\displaystyle S</math> słowo wejściowe. W tym momencie zaznaczyliśmy dokładnie <math>\displaystyle 3n</math> komórek taśmy.
# Dopisujemy do taśmy <math>\displaystyle S</math> słowo wejściowe. W tym momencie zaznaczyliśmy dokładnie <math>\displaystyle 3n</math> komórek taśmy.
# Zamieniamy symbole na <math>\displaystyle 1</math> (zapominamy o symulacji taśm), wracamy do lewego markera i przechodzimy
# 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>.
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.
Linia 296: Linia 293:
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
# Jeśli słowo początkowe jest puste wypisz <math>\displaystyle 1</math> i zatrzymaj się. W przeciwnym wypadku wykonaj następny krok.
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
# 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)
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.

Wersja z 10:19, 25 sie 2006

1. ĆWICZENIA 12

Ćwiczenie 1

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 2

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).
  2. Wykonaj symulację maszyny na słowie w1=110011
  3. słowie w2=01
  4. oraz słowie w3=0000110.
Wskazówka
Rozwiązanie

Ćwiczenie 3

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 4

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

Wskazówka
Rozwiązanie

Ćwiczenie 5

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

Wskazówka
Rozwiązanie

2. Zadania domowe

Ćwiczenie 1

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 2

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.