Języki, automaty i obliczenia/Ćwiczenia 10: Lemat o pompowaniu dla języków bezkontekstowych. Własności języków bezkontekstowych. Problemy rozstrzygalne: Różnice pomiędzy wersjami
Matiunreal (dyskusja | edycje) Nie podano opisu zmian |
Matiunreal (dyskusja | edycje) |
||
Linia 9: | Linia 9: | ||
}} | }} | ||
<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"> | |||
We wszystkich przypadkach dowód przeprowadzimy nie wprost zakładając, że język <math>\displaystyle L</math> jest | |||
bezkontekstowy, a więc spełnia tezę lematu o pompowaniu.<br> | bezkontekstowy, a więc spełnia tezę lematu o pompowaniu.<br> | ||
Punkt 1. | |||
Punkt 1.<br> | |||
Rozważmy słowo <math>\displaystyle a^{n}b^{n}c^n \in L</math>, dla <math>\displaystyle 3n \geqslant N</math>, gdzie <math>\displaystyle N</math> jest stałą z lematu o pompowaniu. | |||
Podobnie jak w przykładzie [[##lekcja11-w -ex1.1|Uzupelnic lekcja11-w -ex1.1|]] pokazujemy, że jedyną możliwością rozłożenia | Podobnie jak w przykładzie [[##lekcja11-w -ex1.1|Uzupelnic lekcja11-w -ex1.1|]] pokazujemy, że jedyną możliwością rozłożenia | ||
słowa <math>\displaystyle a^{n}b^{n}c^n = u_1w_1uw_2u_2</math> zgodnym z lematem o pompowaniu jest przyjęcie jako <math>\displaystyle w_1</math> i <math>\displaystyle w_2</math> potęgi | słowa <math>\displaystyle a^{n}b^{n}c^n = u_1w_1uw_2u_2</math> zgodnym z lematem o pompowaniu jest przyjęcie jako <math>\displaystyle w_1</math> i <math>\displaystyle w_2</math> potęgi | ||
jednej z liter <math>\displaystyle a,b,c</math>. To wyklucza dla pewnych <math>\displaystyle i</math> przynależność do języka <math>\displaystyle L</math> słów <math>\displaystyle u_1w_1^i uw_2^iu_2</math>.<br> | jednej z liter <math>\displaystyle a,b,c</math>. To wyklucza dla pewnych <math>\displaystyle i</math> przynależność do języka <math>\displaystyle L</math> słów <math>\displaystyle u_1w_1^i uw_2^iu_2</math>.<br> | ||
Punkt 2. Podobnie jak w punkcie 1 rozważmy szczególne dostatecznie długie słowo z języka <math>\displaystyle L</math>, a mianowicie | |||
Punkt 2.<br> | |||
Podobnie jak w punkcie 1 rozważmy szczególne dostatecznie długie słowo z języka <math>\displaystyle L</math>, a mianowicie | |||
<math>\displaystyle a^{n}b^{n+1}c^{n+2} \in L</math> i niech <math>\displaystyle 3n+3 \geqslant N</math>, gdzie <math>\displaystyle N</math> jest stałą z lematu o pompowaniu. Dalsze rozumowanie | <math>\displaystyle a^{n}b^{n+1}c^{n+2} \in L</math> i niech <math>\displaystyle 3n+3 \geqslant N</math>, gdzie <math>\displaystyle N</math> jest stałą z lematu o pompowaniu. Dalsze rozumowanie | ||
jest analogicze jak w punkcie 1.<br> | jest analogicze jak w punkcie 1.<br> | ||
Punkt 3. Dostatecznie długie słowo <math>\displaystyle w\overleftarrow{w}a^{|w|}\in L</math> możemy rozłożyć na katenację pięciu słów | |||
Punkt 3.<br> | |||
Dostatecznie długie słowo <math>\displaystyle w\overleftarrow{w}a^{|w|}\in L</math> możemy rozłożyć na katenację pięciu słów | |||
tak by był spełniony warunek pompowania z lematu. Jeśli <math>\displaystyle w=a_1...a_n</math>, to | tak by był spełniony warunek pompowania z lematu. Jeśli <math>\displaystyle w=a_1...a_n</math>, to | ||
<center><math>\displaystyle w\overleftarrow{w}a^{|w|}=\underbrace {a_1...a_k}_{u_1} \underbrace{a_{k+1}...a_n a_n....a_{k+1}}_{w_1 } | <center><math>\displaystyle w\overleftarrow{w}a^{|w|}=\underbrace {a_1...a_k}_{u_1} \underbrace{a_{k+1}...a_n a_n....a_{k+1}}_{w_1 } | ||
Linia 26: | Linia 33: | ||
Innej możliwości rozkładu słowa z języka <math>\displaystyle L</math> już nie ma. Dalej postępujemy standardowo. | Innej możliwości rozkładu słowa z języka <math>\displaystyle L</math> już nie ma. Dalej postępujemy standardowo. | ||
Wprowadzimy uogólnienie lematu o pompowaniu dla języków bezkontekstowych. Dla słowa <math>\displaystyle w \in A^*</math> | Wprowadzimy uogólnienie lematu o pompowaniu dla języków bezkontekstowych. Dla słowa <math>\displaystyle w \in A^*</math> | ||
o długości <math>\displaystyle n</math> dowolną liczbę ze zbioru <math>\displaystyle \{1,.....,n\}</math> nazywamy pozycją w słowie <math>\displaystyle w</math>. Ustalając | o długości <math>\displaystyle n</math> dowolną liczbę ze zbioru <math>\displaystyle \{1,.....,n\}</math> nazywamy pozycją w słowie <math>\displaystyle w</math>. Ustalając | ||
dowolny podzbiór <math>\displaystyle P \subset \{1,.....,n\}</math> będziemy mówić, że w słowie <math>\displaystyle w</math> wyróżniono pozycje ze zbioru <math>\displaystyle P</math>. | dowolny podzbiór <math>\displaystyle P \subset \{1,.....,n\}</math> będziemy mówić, że w słowie <math>\displaystyle w</math> wyróżniono pozycje ze zbioru <math>\displaystyle P</math>. | ||
</div></div> | |||
{{lemat|1|| | {{lemat|1|| |
Wersja z 10:57, 25 sie 2006
1. ĆWICZENIA 10
Ćwiczenie 1
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe:
Lemat 1
(Ogden)
Dla dowolnego języka bezkontekstowego istnieje liczba naturalna taka, że każde słowo , w którym wyróżniono lub więcej pozycji, można przedstawić w formie , gdzie oraz
- zawiera przynajmniej jedną wyróżnioną pozycję,
- zawiera co najwyżej wyróżnionych pozycji,
- dla
Lemat o pompowaniu jest szczególnym przypadkiem lematu Ogdena. Lemat Ogdena można próbować stosować w tych przypadkach, w których lemat o pompowaniu nie działa.
Ćwiczenie 2
Stosując lemat Ogdena pokaż, że język nie jest bezkontekstowy.
ROZWIĄZANIE. Nie wprost, załóżmy, że jest bezkontekstowy i niech będzie stałą z lematu Ogdena. Rozważmy słowo . Wyróżnijmy wszystkie pozycje, na których znajdują się litery .
Weźmy rozkład . Zauważmy, że jeśli w lub występują co najmniej dwie różne litery, to (np. jeśli składa się z liter i to w słowie przynajmniej jedna litera znajdzie się za jakąś literą ). Ponieważ zaznaczyliśmy pozycje liter , to z założenia lematu musi być lub .
Jeśli lub to . Jeśli natomiast , to (dlaczego?). Rozważmy przypadek, gdy oraz (pozostałe przypadki traktowane są analogicznie). Niech . Ponieważ , to dzieli . Niech . Słowo należy do , ale . Ponieważ , to mamy , ale jednocześnie . Otrzymaliśmy sprzeczność.
W pozostałych przypadkach w analogiczny sposób dochodzimy do takiej sprzeczności. Zatem nie jest bezkontekstowy.
Ćwiczenie 3
Udowodnij, że dla dowolnego języka nad alfabetem jednoelementowym
Rozwiązanie. Wystarczy udowodnić, że każdy język bezkontekstowy jest regularny. Niech
będzie językiem bezkontekstowym. Z lematu o pompowaniu wynika, że
takie, że każde słowo o długości można
przedstawić w formie , gdzie oraz
, , dla
Stąd, że wynika, że dla pewnego oraz dla .
Przyjmijmy . Wówczas dla każdego słowa o długości mamy
.
Dla oznaczmy przez
Jeśli , to niech będzie słowem o najmniejszej długości. Wówczas
Zatem
Ćwiczenie 4
Udowodnij, że język jest bezkontekstowy.
ROZWIĄZANIE. Język , gdzie
jest językiem bezkontekstowym,
jest językiem regularnym.
Języki regularne są domknięte ze względu na uzupełnienie, a przecięcie języka bezkontekstowego z regularnm jest
językiem bezkontekstowym.
Ćwiczenie 5
jest jednoznaczna?
ROZWIĄZANIE. Gramatyka nie jest jednoznaczna. Oto dwie pochodne lewostronne słowa :
Ćwiczenie 6
Określ gramatyki generujące języki
- ,
- .
Czy gramatyki te są jednoznaczne?
ROZWIĄZANIE.
Język jest generowany przez gramatykę o zbiorze praw
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle P_1 : v_0 \rightarrow v_1c \; |\; a w_1 \; |\;av_2 b\; |\; 1 ,\;\; v_1 \rightarrow v_1c \; |\;av_2 b \; |\;1 , \;\; v_2 \rightarrow a v_2 b \; |\;1 ,\\ w_1 \rightarrow aw_1 \; |\; bw_2 c \; |\;1,\;\; w_2 \rightarrow bw_2 c \; |\;1}
Gramatyka ta nie jest jednoznaczna. Każde słowo w postaci ma dwa różne wyprowadzenia.
Na przykład dla słowa mamy
Język jest generowany przez gramatykę o zbiorze praw
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle P_2 : v_0 \rightarrow v_1 \; |\; v_2 , \;\; v_1 \rightarrow av_1 \; |\;av_3 , \;\; v_2 \rightarrow v_2 b \; |\;v_4 b , \;\; v_3 \rightarrow bv_3 \; |\; bv_5, \\ v_4 \rightarrow v_4 a \; |\;v_6 a, \;\; v_5 \rightarrow av_5 b \; |\; ab ,\;\; v_6 \rightarrow a v_6 b \; |\;ab}
Gramatyka też nie jest jednoznaczna. Każde słowo w postaci ma dwa różne wyprowadzenia.
Natomiast język jest również generowany przez gramatykę
o zbiorze praw
Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle P_3 : v_0 \rightarrow v_1 v_1\; |\; v_1 v_2 \; |\; v_2 v_1, \;\; v_1 \rightarrow av_1b \; |\;ab , \;\; v_2 \rightarrow av_3 \; |\;v_4 b , \;\; v_3 \rightarrow av_3 , \\ v_4 \rightarrow v_4 b \; |\;v_1 b, \;\; }
i ta gramatyka jest jednoznaczna, co oznacza, że język jest jednoznaczny.
Uwaga. Język można rozłożyć na sumę trzech rozłącznych i bezkontekstowych języków.
.
Gramatyka generuje niezależnie od siebie te trzy zbiory. Rozkładając analogicznie język otrzymujemy
.
Tym razem nie jest to rozkład na sumę języków bezkontekstowych.
Ćwiczenie 7
Dana niech będzie gramatyka ( jest symbolem początkowym):
Używając algorytmu Cocke'a-Youngera-Kasamiego sprawdź, czy poniższe słowa należą do języka generowanego przez tę gramatykę.
- ,
- ,
- .
ROZWIĄZANIE , .
2. ZADANIA DOMOWE
Ćwiczenie 1
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe:
Ćwiczenie 2
Stosując lemat Ogdena pokaż, że język gdzie nie jest bezkontekstowy.
Ćwiczenie 3
Udowodnij, że język jest bezkontekstowy.
Ćwiczenie 4
Czy gramatyka poprawnych nawiasów
rozważana w przykładzie Uzupelnic lekcja9-w-ex1.2| jest jednoznaczna?
Ćwiczenie 5
Określ gramatyki generujące języki
- ,
- .
Czy gramatyki te są jednoznaczne? Wykaż, że język jest jednoznaczny.
Ćwiczenie 6
Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest
- nieskończny,
- niepusty.
Ćwiczenie 7
Dana niech będzie gramatyka ( jest symbolem początkowym):
Używając algorytmu Cocke'a-Youngera-Kasamiego sprawdź, czy poniższe słowa należą do języka generowanego przez tę gramatykę.
- ,
- ,
- .