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) Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
==1. ĆWICZENIA 10== | |||
{{cwiczenie|1|| | |||
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe: | |||
# <math>\displaystyle L=\left\{ a^{n}b^{m}c^{k}:k=\max \left\{ n,m\right\} \right\} </math> | |||
# <math>\displaystyle L=\left\{ a^{k}b^{n}c^{m}:k<n<m\right\} </math> | |||
# <math>\displaystyle L=\left\{ w\overleftarrow{w}a^{|w|}:w\in \left\{ a,b\right\} ^{*}\right\} </math> | |||
}} | |||
ROZWIĄZANIE. 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> | |||
Punkt 1. Rozważmy słowo <math>\displaystyle a^{n}b^{n}c^n \in L</math>, dla <math>\displaystyle 3n \geq 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 | |||
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> | |||
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 | |||
<math>\displaystyle a^{n}b^{n+1}c^{n+2} \in L</math> i niech <math>\displaystyle 3n+3 \geq N</math>, gdzie <math>\displaystyle N</math> jest stałą z lematu o pompowaniu. Dalsze rozumowanie | |||
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 | |||
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 } | |||
\underbrace{a_k ...a_1}_u \underbrace{a^{2(n-k)}}_{w_2} \underbrace{a^{2k-n}} _{u_2}</math></center> | |||
dla dowolnego <math>\displaystyle k</math> takiego, że <math>\displaystyle k<n\leq 2k</math>. Dla <math>\displaystyle n> M</math> (<math>\displaystyle M</math> jest stałą z lematu o pompowaniu) <math>\displaystyle |w_1 uw_2|>M</math>. | |||
Innej możliwości rozkładu słowa z języka <math>\displaystyle L</math> już nie ma. Dalej postępujemy standardowo. | |||
{.3cm} | |||
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 | |||
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>. | |||
{{lemat|1|| | |||
(Ogden) | |||
Dla dowolnego języka bezkontekstowego <math>\displaystyle L \subset A^*</math> istnieje | |||
liczba naturalna <math>\displaystyle M \geq 1</math> taka, że każde słowo <math>\displaystyle w \in L</math>, w którym | |||
wyróżniono <math>\displaystyle M</math> lub więcej pozycji, można przedstawić w formie | |||
<math>\displaystyle w=u_1w_1uw_2u_2</math>, gdzie <math>\displaystyle w_{1,}w_{2},v_{1},v_{2},u\in A^{*} </math> | |||
oraz | |||
# <math>\displaystyle w_1w_2</math> zawiera przynajmniej jedną wyróżnioną pozycję, | |||
# <math>\displaystyle w_1uw_2</math> zawiera co najwyżej <math>\displaystyle M</math> wyróżnionych pozycji, | |||
# <math>\displaystyle u_1w_1^iuw_2^iu_2 \in L</math> dla <math>\displaystyle i=0,1,...</math> | |||
}} | |||
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. | |||
{{cwiczenie|2|| | |||
Stosując lemat Ogdena pokaż, że język <math>\displaystyle L=\{a^ib^jc^k: i \not = j, j | |||
\not = k, k \not = i\}</math> nie jest bezkontekstowy. | |||
}} | |||
ROZWIĄZANIE. Nie wprost, załóżmy, że <math>\displaystyle L</math> jest bezkontekstowy i niech | |||
<math>\displaystyle M</math> będzie stałą z lematu Ogdena. Rozważmy słowo | |||
<math>\displaystyle w=a^Mb^{M!+M}c^{2M!+M}</math>. Wyróżnijmy wszystkie pozycje, na których | |||
znajdują się litery <math>\displaystyle a</math>. | |||
Weźmy rozkład <math>\displaystyle w=u_1w_1uw_2u_2</math>. Zauważmy, że jeśli w <math>\displaystyle w_1</math> lub | |||
<math>\displaystyle w_2</math> występują co najmniej dwie różne litery, to <math>\displaystyle w \not \in L</math> | |||
(np. jeśli <math>\displaystyle w_1</math> składa się z liter <math>\displaystyle a</math> i <math>\displaystyle b</math> to w słowie <math>\displaystyle w_1^2</math> | |||
przynajmniej jedna litera <math>\displaystyle a</math> znajdzie się za jakąś literą <math>\displaystyle b</math>). | |||
Ponieważ zaznaczyliśmy pozycje liter <math>\displaystyle a</math>, to z założenia lematu musi | |||
być <math>\displaystyle w_1 \in a^+</math> lub <math>\displaystyle w_2 \in a^+</math>. | |||
Jeśli <math>\displaystyle w_2 \in b^*</math> lub <math>\displaystyle w_2 \in a^*</math> to <math>\displaystyle w_1 \in a^+</math>. Jeśli | |||
natomiast <math>\displaystyle w_2 \in a^+</math>, to <math>\displaystyle w_1 \in a^*</math> (dlaczego?). Rozważmy | |||
przypadek, gdy <math>\displaystyle w_1 \in a^+</math> oraz <math>\displaystyle w_2 \in b^*</math> (pozostałe przypadki | |||
traktowane są analogicznie). Niech <math>\displaystyle p=|w_1|</math>. Ponieważ <math>\displaystyle 1 \leq p | |||
\leq M</math>, to <math>\displaystyle p</math> dzieli <math>\displaystyle M!</math>. Niech <math>\displaystyle q=\frac{M!}{p}</math>. Słowo | |||
<math>\displaystyle z=u_1w_1^{2q+1}uw_2^{2q+1}u_2</math> należy do <math>\displaystyle L</math>, ale | |||
<math>\displaystyle w_1^{2q+1}=a^{p(2q+1)}=a^{2pq+p}=a^{2M!+p}</math>. Ponieważ <math>\displaystyle \sharp_a | |||
u_1uu_2=M-p</math>, to mamy <math>\displaystyle \sharp_a z = 2M!+p+(M-p)=2M!+M</math>, ale | |||
jednocześnie <math>\displaystyle \sharp_c z = 2M!+M = \sharp_a z</math>. Otrzymaliśmy | |||
sprzeczność. | |||
W pozostałych przypadkach w analogiczny sposób dochodzimy do takiej | |||
sprzeczności. Zatem <math>\displaystyle L</math> nie jest bezkontekstowy. | |||
{{cwiczenie|3|| | |||
Udowodnij, że dla dowolnego języka <math>\displaystyle L</math> nad alfabetem jednoelementowym | |||
<center><math>\displaystyle L \in \mathcal{L}_3 \Leftrightarrow L \in \mathcal{L}_2</math></center> | |||
}} | |||
Rozwiązanie. Wystarczy udowodnić, że każdy język bezkontekstowy jest regularny. Niech | |||
<math>\displaystyle L \subset \{a\}^*</math> będzie językiem bezkontekstowym. Z lematu o pompowaniu wynika, że | |||
<math>\displaystyle \exists N,M \geq 1</math> takie, że każde słowo <math>\displaystyle w \in L</math> o długości <math>\displaystyle |w| > N</math> można | |||
przedstawić w formie <math>\displaystyle w=u_1w_1uw_2u_2</math>, gdzie <math>\displaystyle w_{1,}w_{2},v_{1},v_{2},u\in A^{*} </math> oraz | |||
<math>\displaystyle |w_1uw_2 |\leq M</math>, <math>\displaystyle w_1w_2 \neq 1</math>, <math>\displaystyle u_1w_1^iuw_2^iu_2 \in L</math> dla <math>\displaystyle i=0,1,...</math><br> | |||
Stąd, że <math>\displaystyle L \subset \{a\}^*</math> wynika, że <math>\displaystyle w=a^pa^k</math> dla pewnego <math>\displaystyle k\leq M</math> oraz <math>\displaystyle a^p(a^k)^i \in L</math> dla <math>\displaystyle i=0,1,...</math>.<br> | |||
Przyjmijmy <math>\displaystyle n=M!</math>. Wówczas dla każdego słowa <math>\displaystyle w \in L</math> o długości <math>\displaystyle |w| > N</math> mamy | |||
<math>\displaystyle w(a^n)^*=w(a^k)^{\frac{n}{k}}\subset L \subset \{a\}^*</math>. <br> | |||
Dla <math>\displaystyle i=1,...,n</math> oznaczmy przez | |||
<center><math>\displaystyle L_i = a^{p+i}(a^n)^* \cap L</math></center> | |||
Jeśli <math>\displaystyle L_i \neq \emptyset</math>, to niech <math>\displaystyle w_i \in L_i</math> będzie słowem o najmniejszej długości. Wówczas | |||
<center><math>\displaystyle \forall w \in L:|w|>N \;\;w \in \bigcup_{i=1}^n w_i(a^n)^*.</math></center> | |||
Zatem <center><math>\displaystyle L=\{w \in L : |w|\leq p\} \cup \bigcup_{i=1}^n w_i(a^n)^*. </math></center> | |||
{{cwiczenie|4|| | |||
Udowodnij, że język <math>\displaystyle L=\left\{ a^{n}b^{n}:n \;\text{nie jest wielokrotnością liczby}\; 5\right\} </math> | |||
jest bezkontekstowy. | |||
}} | |||
ROZWIĄZANIE. Język <math>\displaystyle L=L_1 \cap \overline{L}_2</math>, gdzie<br> | |||
<math>\displaystyle L_1=\left\{ a^{n}b^{n}:n\geq 0\right\} </math> jest językiem bezkontekstowym,<br> | |||
<math>\displaystyle L_2=\left\{ w \in \{a,b\}^* : |w|=5k \; \text{dla pewnego}\; k\geq 0 \right\} </math> jest językiem regularnym.<br> | |||
Języki regularne są domknięte ze względu na uzupełnienie, a przecięcie języka bezkontekstowego z regularnm jest | |||
językiem bezkontekstowym. | |||
{{cwiczenie|5|| | |||
Czy gramatyka poprawnych nawiasów <center><math>\displaystyle (\{v_0\},\{(,)\},v_0, P ),\; \text{ gdzie} \; | |||
P: v_0 \rightarrow v_0 v_0\;|\;(v_0)\;|\;1</math></center> | |||
jest jednoznaczna? | |||
}} | |||
ROZWIĄZANIE. Gramatyka nie jest jednoznaczna. Oto dwie pochodne lewostronne słowa <math>\displaystyle (())()</math>:<br> | |||
<math>\displaystyle v_0\mapsto v_0v_0 \mapsto (v_0)v_0 \mapsto ((v_0))v_0\mapsto (())v_0 \mapsto (())(v_0) \mapsto | |||
(())()</math><br> | |||
<math>\displaystyle v_0\mapsto v_0v_0 \mapsto v_0v_0 v_0 \mapsto (v_0)v_0v_0 \mapsto ((v_0))v_0v_0 | |||
\mapsto (())v_0v_0 \mapsto (())(v_0) v_0 \mapsto | |||
(())()v_0 \mapsto (())() </math> | |||
{{cwiczenie|6|| | |||
Określ gramatyki generujące języki | |||
# <math>\displaystyle L_1 =\{a^n b^m c^m : m,n \geq 0 \} \cup \{a^n b^n c^m : m,n \geq 0 \} </math>, | |||
# <math>\displaystyle L_2 =\{a^n b^n a^p b^q : n,p,q \geq 1 \}\cup \{a^n b^m a^p b^p : n,m,p \geq 1 \}</math>. | |||
Czy gramatyki te są jednoznaczne? | |||
}} | |||
ROZWIĄZANIE.<br> | |||
Język <math>\displaystyle L_1</math> jest generowany przez gramatykę <math>\displaystyle G_1</math> o zbiorze praw<br> | |||
<math>\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</math><br> | |||
Gramatyka ta nie jest jednoznaczna. Każde słowo w postaci <math>\displaystyle a^nb^nc^n</math> ma dwa różne wyprowadzenia. | |||
Na przykład dla słowa <math>\displaystyle abc</math> mamy | |||
<center><math>\displaystyle v_0 \mapsto v_1c \mapsto av_2bc \mapsto abc </math></center> | |||
<center><math>\displaystyle v_0 \mapsto aw_1 \mapsto abw_2c \mapsto abc </math></center> | |||
Język <math>\displaystyle L_2</math> jest generowany przez gramatykę <math>\displaystyle G_2</math> o zbiorze praw<br> | |||
<math>\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</math><br> | |||
Gramatyka <math>\displaystyle G_2</math> też nie jest jednoznaczna. Każde słowo w postaci <math>\displaystyle a^n b^n a^p b^p</math> ma dwa różne wyprowadzenia. | |||
Natomiast język <math>\displaystyle L_2</math> jest również generowany przez gramatykę <math>\displaystyle G_3</math> | |||
o zbiorze praw<br> | |||
<math>\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, \;\; | |||
</math><br> | |||
i ta gramatyka jest jednoznaczna, co oznacza, że język <math>\displaystyle L_2</math> jest jednoznaczny.<br> | |||
Uwaga. Język <math>\displaystyle L_2</math> można rozłożyć na sumę trzech rozłącznych i bezkontekstowych języków.<br> | |||
<math>\displaystyle L_2 = \{a^n b^n a^p b^p : n,p \geq 1\}\cup \{a^n b^n a^p b^q : n,p,q \geq 1, \;p\neq q \}\cup | |||
\{a^n b^m a^p b^p : m,n,p \geq 1, n\neq m \}</math>.<br> | |||
Gramatyka <math>\displaystyle G_3</math> generuje niezależnie od siebie te trzy zbiory. Rozkładając analogicznie język <math>\displaystyle L_1</math> otrzymujemy<br> | |||
<math>\displaystyle L_1 =\{a^n b^n c^n : n \geq 0 \} \cup \{a^n b^n c^m : k,m,n \geq 0, n\neq m \}\cup | |||
\{a^n b^m c^m : m,n \geq 0, n\neq m \}</math>.<br> | |||
Tym razem nie jest to rozkład na sumę języków bezkontekstowych. | |||
{{cwiczenie|7|| | |||
Dana niech będzie gramatyka (<math>\displaystyle v_0</math> jest symbolem początkowym): | |||
<center><math>\displaystyle \aligned v_0 & \rightarrow & v_0v_1\ |\ v_3v_1 \\ | |||
v_1 & \rightarrow & v_1v_2\ |\ v_2v_3 \\ | |||
v_2 & \rightarrow & v_4v_1\ |\ v_3v_3\ |\ a \\ | |||
v_3 & \rightarrow & v_1v_2\ |\ v_4v_2\ |\ b \\ | |||
v_4 & \rightarrow & v_3v_4\ |\ v_0v_1\ |\ c. | |||
\endaligned</math></center> | |||
Używając algorytmu Cocke'a-Youngera-Kasamiego sprawdź, czy poniższe | |||
słowa należą do języka generowanego przez tę gramatykę. | |||
# <math>\displaystyle w_1=bac</math>, | |||
# <math>\displaystyle w_2=babcab</math>, | |||
# <math>\displaystyle w_3=bcaaca</math>. | |||
}} | |||
ROZWIĄZANIE <math>\displaystyle w_1 \not \in L(G)</math>, <math>\displaystyle w_2, w_3 \in L(G)</math>. | |||
==2. ZADANIA DOMOWE== | |||
{{cwiczenie|1|| | |||
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe: | |||
# <math>\displaystyle L=\left\{ a^{n}b^{m}c^{k}:k=min\{m,n\}\right\} </math> | |||
# <math>\displaystyle L=\left\{ a^{n}b^{m}c^{k}:k=mn\right\} </math> | |||
# <math>\displaystyle L=\left\{ a^{n}b^{n^{2}}\right\} </math> | |||
}} | |||
{{cwiczenie|2|| | |||
Stosując lemat Ogdena pokaż, że język <math>\displaystyle L=\{a^ib^jc^k: i,j,k>1,\ k | |||
\not = ir,\ k \not = js, </math> gdzie <math>\displaystyle r,s \in \{2,3,...\}\}</math> nie jest | |||
bezkontekstowy. | |||
}} | |||
WSKAZÓWKA. Rozważ słowo <math>\displaystyle a^Pb^Pc^{(P-1)!}</math>, gdzie <math>\displaystyle P</math> jest liczbą | |||
pierwszą większą niż <math>\displaystyle M+1</math> i większą niż 3, gdzie <math>\displaystyle M</math> jest stałą z | |||
lematu. Jako pozycje oznaczone wybierz wszystkie pozycje liter <math>\displaystyle c</math>. | |||
{{cwiczenie|3|| | |||
Udowodnij, że język <math>\displaystyle L=\left\{ w\overleftarrow{w } : w \in \{a,b\}^* \setminus \{ab^2a\} \right\} </math> | |||
jest bezkontekstowy. | |||
}} | |||
{{cwiczenie|4|| | |||
Czy gramatyka poprawnych nawiasów | |||
<center><math>\displaystyle (\{v_0,v_1\},\{(,)\},v_0, P ),\; \text{ gdzie} \; | |||
P: v_0 \rightarrow v_1 v_0\;|\;1, \;\; v_1 \rightarrow (v_0)</math></center> | |||
rozważana w przykładzie [[##lekcja9-w-ex1.2|Uzupelnic lekcja9-w-ex1.2|]] jest jednoznaczna? | |||
}} | |||
{{cwiczenie|5|| | |||
Określ gramatyki generujące języki | |||
# <math>\displaystyle L_3 =\{a^n b^m c^nd^p : m,n,p \geq 0 \} \cup \{a^n b^m c^p d^m : m,n,p \geq 0 \} </math>, | |||
# <math>\displaystyle L_4 =\{a^n b^{2n} : n \geq 1 \}\cup \{a^n b^{3n} : n \geq 1 \}</math>. | |||
Czy gramatyki te są jednoznaczne? Wykaż, że język <math>\displaystyle L_4</math> jest jednoznaczny. | |||
}} | |||
{{cwiczenie|6|| | |||
Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest | |||
# nieskończny, | |||
# niepusty. | |||
}} | |||
{{cwiczenie|7|| | |||
Dana niech będzie gramatyka (<math>\displaystyle v_0</math> jest symbolem początkowym): | |||
<center><math>\displaystyle \aligned v_0 & \rightarrow & v_0v_1\ |\ v_3v_1 \\ | |||
v_1 & \rightarrow & v_2v_1\ |\ v_3v_2 \\ | |||
v_2 & \rightarrow & v_1v_4\ |\ v_3v_3\ |\ a \\ | |||
v_3 & \rightarrow & v_2v_2\ |\ v_4v_2\ |\ b \\ | |||
v_4 & \rightarrow & v_1v_4\ |\ v_0v_1\ |\ c. | |||
\endaligned</math></center> | |||
Używając algorytmu Cocke'a-Youngera-Kasamiego sprawdź, czy poniższe | |||
słowa należą do języka generowanego przez tę gramatykę. | |||
# <math>\displaystyle w_1=cabba</math>, | |||
# <math>\displaystyle w_2=baccab</math>, | |||
# <math>\displaystyle w_3=aabbcc</math>. | |||
}} |
Wersja z 10:28, 25 sie 2006
1. Ć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 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 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.
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 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ę.
- ,
- ,
- .