|
|
Linia 47: |
Linia 47: |
| # <math>w_1w_2</math> zawiera przynajmniej jedną wyróżnioną pozycję, | | # <math>w_1w_2</math> zawiera przynajmniej jedną wyróżnioną pozycję, |
| # <math>w_1uw_2</math> zawiera co najwyżej <math>M</math> wyróżnionych pozycji, | | # <math>w_1uw_2</math> zawiera co najwyżej <math>M</math> wyróżnionych pozycji, |
| # <math>u_1w_1^iuw_2^iu_2 \in L</math> dla <math>i=0,1,...</math> | | # <math>u_1w_1^iuw_2^iu_2 \in L</math> dla <math>i=0,1,..</math>. |
|
| |
|
| }} | | }} |
Linia 80: |
Linia 80: |
| {{cwiczenie|3|| | | {{cwiczenie|3|| |
| Udowodnij, że dla dowolnego języka <math>L</math> nad alfabetem jednoelementowym | | Udowodnij, że dla dowolnego języka <math>L</math> nad alfabetem jednoelementowym |
| <center><math>L \in \mathcal{L}_3 \Leftrightarrow L \in \mathcal{L}_2.</math></center> | | <center><math>L \in \mathcal{L}_3 \Leftrightarrow L \in \mathcal{L}_2</math>.</center> |
|
| |
|
| }} | | }} |
Linia 89: |
Linia 89: |
| <math>\exists N,M \geqslant 1</math> takie, że każde słowo <math>w \in L</math> o długości <math>|w| > N</math> można | | <math>\exists N,M \geqslant 1</math> takie, że każde słowo <math>w \in L</math> o długości <math>|w| > N</math> można |
| przedstawić w formie <math>w=u_1w_1uw_2u_2</math>, gdzie <math>w_{1,}w_{2},v_{1},v_{2},u\in A^{*} </math> oraz | | przedstawić w formie <math>w=u_1w_1uw_2u_2</math>, gdzie <math>w_{1,}w_{2},v_{1},v_{2},u\in A^{*} </math> oraz |
| <math>|w_1uw_2 |\leqslant M</math>, <math>w_1w_2 \neq 1</math>, <math>u_1w_1^iuw_2^iu_2 \in L</math> dla <math>i=0,1,...</math><br> | | <math>|w_1uw_2 |\leqslant M</math>, <math>w_1w_2 \neq 1</math>, <math>u_1w_1^iuw_2^iu_2 \in L</math> dla <math>i=0,1,..</math>.<br> |
| Stąd, że <math> L \subset \{a\}^*</math> wynika, że <math>w=a^pa^k</math> dla pewnego <math>k\leqslant M</math> oraz <math>a^p(a^k)^i \in L</math> dla <math>i=0,1,...</math>.<br> | | Stąd, że <math> L \subset \{a\}^*</math> wynika, że <math>w=a^pa^k</math> dla pewnego <math>k\leqslant M</math> oraz <math>a^p(a^k)^i \in L</math> dla <math>i=0,1,..</math>..<br> |
| Przyjmijmy <math>n=M!</math>. Wówczas dla każdego słowa <math>w \in L</math> o długości <math>|w| > N</math> mamy | | Przyjmijmy <math>n=M!</math>. Wówczas dla każdego słowa <math>w \in L</math> o długości <math>|w| > N</math> mamy |
| <math>w(a^n)^*=w(a^k)^{\frac{n}{k}}\subset L \subset \{a\}^*</math>. <br> | | <math>w(a^n)^*=w(a^k)^{\frac{n}{k}}\subset L \subset \{a\}^*</math>. <br> |
| Dla <math>i=1,...,n</math> oznaczmy przez | | Dla <math>i=1,...,n</math> oznaczmy przez |
| <center><math>L_i = a^{p+i}(a^n)^* \cap L.</math></center> | | <center><math>L_i = a^{p+i}(a^n)^* \cap L</math>.</center> |
|
| |
|
| Jeśli <math>L_i \neq \emptyset</math>, to niech <math>w_i \in L_i</math> będzie słowem o najmniejszej długości. Wówczas | | Jeśli <math>L_i \neq \emptyset</math>, to niech <math>w_i \in L_i</math> będzie słowem o najmniejszej długości. Wówczas |
| <center><math>\forall w \in L:|w|>N \;\;w \in \bigcup_{i=1}^n w_i(a^n)^*.</math></center> | | <center><math>\forall w \in L:|w|>N \;\;w \in \bigcup_{i=1}^n w_i(a^n)^*</math>.</center> |
|
| |
|
| Zatem <center><math>L=\{w \in L : |w|\leqslant p\} \cup \bigcup_{i=1}^n w_i(a^n)^*. </math></center> | | Zatem <center><math>L=\{w \in L : |w|\leqslant p\} \cup \bigcup_{i=1}^n w_i(a^n)^*. </math></center> |
Ćwiczenia 10
Ćwiczenie 1
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 1.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.
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 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 regularnym jest
językiem bezkontekstowym.
Ćwiczenie 5
Czy gramatyka poprawnych nawiasów
gdzie
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
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
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
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ę:
- ,
- ,
- .
ZADANIA DOMOWE
Ćwiczenie 8
Wykorzystując lemat o pompowaniu, udowodnij, że następujące języki nie są bezkontekstowe:
Ćwiczenie 9
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 10
Udowodnij, że język
jest bezkontekstowy.
Czy gramatyka poprawnych nawiasów
gdzie
rozważana w przykładzie 1.2 jest jednoznaczna?
Ćwiczenie 12
Określ gramatyki generujące języki:
- ,
- .
Czy gramatyki te są jednoznaczne? Wykaż, że język jest jednoznaczny.
Ćwiczenie 13
Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest:
- nieskończny,
- niepusty.
Ćwiczenie 14
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ę:
- ,
- ,
- .