Języki, automaty i obliczenia/Ćwiczenia 11: Automat ze stosem
ĆWICZENIA 10
Ćwiczenie
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe:
ROZWIĄZANIE. We wszystkich przypadkach dowód przeprowadzimy nie wprost zakładając, że język jest
bezkontekstowy, a więc spełnia tezę lematu o pompowaniu.
Punkt 1. Rozważmy słowo , dla , gdzie jest stałą z lematu o pompowaniu.
Podobnie jak w przykładzie Uzupelnic lekcja11-w -ex1.1| pokazujemy, że jedyną możliwością rozłożenia
słowa zgodnym z lematem o pompowaniu jest przyjęcie jako i potęgi
jednej z liter . To wyklucza dla pewnych przynależność do języka słów .
Punkt 2. Podobnie jak w punkcie 1 rozważmy szczególne dostatecznie długie słowo z języka , a mianowicie
i niech , gdzie jest stałą z lematu o pompowaniu. Dalsze rozumowanie
jest analogicze jak w punkcie 1.
Punkt 3. Dostatecznie długie słowo możemy rozłożyć na katenację pięciu słów
tak by był spełniony warunek pompowania z lematu. Jeśli , to
dla dowolnego takiego, że . Dla ( jest stałą z lematu o pompowaniu) . Innej możliwości rozkładu słowa z języka już nie ma. Dalej postępujemy standardowo.
{.3cm} Wprowadzimy uogólnienie lematu o pompowaniu dla języków bezkontekstowych. Dla słowa o długości dowolną liczbę ze zbioru nazywamy pozycją w słowie . Ustalając dowolny podzbiór będziemy mówić, że w słowie wyróżniono pozycje ze zbioru .
Lemat
(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
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
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
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
jest jednoznaczna?
ROZWIĄZANIE. Gramatyka nie jest jednoznaczna. Oto dwie pochodne lewostronne słowa :
Ćwiczenie
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
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 , .
ZADANIA DOMOWE
Ćwiczenie
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe:
Ćwiczenie
Stosując lemat Ogdena pokaż, że język gdzie nie jest bezkontekstowy.
WSKAZÓWKA. Rozważ słowo , gdzie jest liczbą pierwszą większą niż i większą niż 3, gdzie jest stałą z lematu. Jako pozycje oznaczone wybierz wszystkie pozycje liter .
Ćwiczenie
Udowodnij, że język jest bezkontekstowy.
Ćwiczenie
Czy gramatyka poprawnych nawiasów
rozważana w przykładzie Uzupelnic lekcja9-w-ex1.2| jest jednoznaczna?
Ćwiczenie
Określ gramatyki generujące języki
- ,
- .
Czy gramatyki te są jednoznaczne? Wykaż, że język jest jednoznaczny.
Ćwiczenie
Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest
- nieskończny,
- niepusty.
Ćwiczenie
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ę.
- ,
- ,
- .