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 |
m Zastępowanie tekstu – „,...,” na „,\ldots,” |
||
(Nie pokazano 38 wersji utworzonych przez 4 użytkowników) | |||
Linia 1: | Linia 1: | ||
== | ==Ćwiczenia 10== | ||
{{cwiczenie|1|| | {{cwiczenie|1|| | ||
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe: | Wykorzystując lemat o pompowaniu, udowodnij, że następujące języki nie są bezkontekstowe: | ||
# <math> | # <math>L=\left\{ a^{n}b^{m}c^{k}:k=\max \left\{ n,m\right\} \right\}</math> | ||
# <math> | # <math>L=\left\{ a^{k}b^{n}c^{m}:k<n<m\right\}</math> | ||
# <math> | # <math>L=\left\{ w\overleftarrow{w}a^{|w|}:w\in \left\{ a,b\right\} ^{*}\right\}</math> | ||
}} | }} | ||
<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>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. | |||
Podobnie jak w przykładzie [ | Punkt 1.<br> | ||
słowa <math> | Rozważmy słowo <math>a^{n}b^{n}c^n \in L</math>, dla <math>3n \geqslant N</math>, gdzie <math>N</math> jest stałą z lematu o pompowaniu. | ||
jednej z liter <math> | Podobnie jak w przykładzie [http://osilek.mimuw.edu.pl/index.php?title=J%C4%99zyki%2C_automaty_i_obliczenia/Wyk%C5%82ad_10:_Lemat_o_pompowaniu_dla_j%C4%99zyk%C3%B3w_bezkontekstowych._W%C5%82asno%C5%9Bci_j%C4%99zyk%C3%B3w_bezkontekstowych._Problemy_rozstrzygalne#prz.1 1.1] pokazujemy, że jedyną możliwością rozłożenia | ||
Punkt 2. Podobnie jak w punkcie 1 rozważmy szczególne dostatecznie długie słowo z języka <math> | słowa <math>a^{n}b^{n}c^n = u_1w_1uw_2u_2</math> zgodnym z lematem o pompowaniu jest przyjęcie jako <math>w_1</math> i <math>w_2</math> potęgi | ||
<math> | jednej z liter <math>a,b,c</math>. To wyklucza dla pewnych <math>i</math> przynależność do języka <math>L</math> słów <math>u_1w_1^i uw_2^iu_2</math>.<br> | ||
Punkt 2.<br> | |||
Podobnie jak w punkcie 1 rozważmy szczególne dostatecznie długie słowo z języka <math>L</math>, a mianowicie | |||
<math>a^{n}b^{n+1}c^{n+2} \in L</math> i niech <math>3n+3 \geqslant N</math>, gdzie <math>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> | |||
tak by był spełniony warunek pompowania z lematu. Jeśli <math> | Punkt 3.<br> | ||
<center><math> | Dostatecznie długie słowo <math>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>w=a_1...a_n</math>, to | |||
<center><math>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> | \underbrace{a_k ...a_1}_u \underbrace{a^{2(n-k)}}_{w_2} \underbrace{a^{2k-n}} _{u_2}</math></center> | ||
dla dowolnego <math> | dla dowolnego <math>k</math> takiego, że <math>k<n\leqslant 2k</math>. Dla <math>n> M</math> (<math>M</math> jest stałą z lematu o pompowaniu) <math>|w_1 uw_2|>M</math>. | ||
Innej możliwości rozkładu słowa z języka <math> | Innej możliwości rozkładu słowa z języka <math>L</math> już nie ma. Dalej postępujemy standardowo. | ||
Wprowadzimy uogólnienie lematu o pompowaniu dla języków bezkontekstowych. Dla słowa <math>w \in A^*</math> | |||
Wprowadzimy uogólnienie lematu o pompowaniu dla języków bezkontekstowych. Dla słowa <math> | o długości <math>n</math> dowolną liczbę ze zbioru <math>\{1,.....,n\}</math> nazywamy pozycją w słowie <math>w</math>. Ustalając | ||
o długości <math> | dowolny podzbiór <math>P \subset \{1,.....,n\}</math>, będziemy mówić, że w słowie <math>w</math> wyróżniono pozycje ze zbioru <math>P</math>. | ||
dowolny podzbiór <math> | </div></div> | ||
{{lemat|1 | {{lemat|1 (Ogden)|| | ||
(Ogden) | |||
Dla dowolnego języka bezkontekstowego <math> | Dla dowolnego języka bezkontekstowego <math>L \subset A^*</math> istnieje | ||
liczba naturalna <math> | liczba naturalna <math>M \geqslant 1</math> taka, że każde słowo <math>w \in L</math>, w którym | ||
wyróżniono <math> | wyróżniono <math>M</math> lub więcej pozycji, można przedstawić w formie | ||
<math> | <math>w=u_1w_1uw_2u_2</math>, gdzie <math>w_{1,}w_{2},v_{1},v_{2},u\in A^{*}</math> | ||
oraz | oraz | ||
# <math> | # <math>w_1w_2</math> zawiera przynajmniej jedną wyróżnioną pozycję, | ||
# <math> | # <math>w_1uw_2</math> zawiera co najwyżej <math>M</math> wyróżnionych pozycji, | ||
# <math> | # <math>u_1w_1^iuw_2^iu_2 \in L</math> dla <math>i=0,1,.</math>. | ||
}} | }} | ||
Linia 50: | Linia 56: | ||
{{cwiczenie|2|| | {{cwiczenie|2|| | ||
Stosując lemat Ogdena pokaż, że język <math> | Stosując lemat Ogdena pokaż, że język <math>L=\{a^ib^jc^k: i \not = j, j | ||
\not = k, k \not = i\}</math> nie jest bezkontekstowy. | \not = k, k \not = i\}</math> nie jest bezkontekstowy. | ||
}} | }} | ||
<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"> | |||
<math> | Nie wprost, załóżmy, że <math>L</math> jest bezkontekstowy i niech | ||
<math> | <math>M</math> będzie stałą z lematu Ogdena. Rozważmy słowo | ||
znajdują się litery <math> | <math>w=a^Mb^{M!+M}c^{2M!+M}</math>. Wyróżnijmy wszystkie pozycje, na których | ||
znajdują się litery <math>a</math>. | |||
Weźmy rozkład <math> | Weźmy rozkład <math>w=u_1w_1uw_2u_2</math>. Zauważmy, że jeśli w <math>w_1</math> lub <math>w_2</math> występują co najmniej dwie różne litery, to <math>w \not \in L</math> (np. jeśli <math>w_1</math> składa się z liter <math>a</math> i <math>b</math> to w słowie <math>w_1^2</math> przynajmniej jedna litera <math>a</math> znajdzie się za jakąś literą <math>b</math>). Ponieważ zaznaczyliśmy pozycje liter <math>a</math>, to z założenia lematu musi | ||
<math> | być <math>w_1 \in a^+</math> lub <math>w_2 \in a^+</math>. | ||
(np. jeśli <math> | |||
przynajmniej jedna litera <math> | |||
Ponieważ zaznaczyliśmy pozycje liter <math> | |||
być <math> | |||
Jeśli <math> | Jeśli <math>w_2 \in b^*</math> lub <math>w_2 \in a^*</math> to <math>w_1 \in a^+</math>. Jeśli natomiast <math>w_2 \in a^+</math>, to <math>w_1 \in a^*</math> (dlaczego?). | ||
natomiast <math> | Rozważmy przypadek, gdy <math>w_1 \in a^+</math> oraz <math>w_2 \in b^*</math> (pozostałe przypadki | ||
przypadek, gdy <math> | traktowane są analogicznie). Niech <math>p=|w_1|</math>. Ponieważ <math>1 \leqslant p | ||
traktowane są analogicznie). Niech <math> | \leqslant M</math>, to <math>p</math> dzieli <math>M!</math>. Niech <math>q=\frac{M!}{p}</math>. Słowo <math>z=u_1w_1^{2q+1}uw_2^{2q+1}u_2</math> należy do <math>L</math>, ale <math>w_1^{2q+1}=a^{p(2q+1)}=a^{2pq+p}=a^{2M!+p}</math>. Ponieważ <math>\sharp_a | ||
\leqslant M</math>, to <math> | u_1uu_2=M-p</math>, to mamy <math>\sharp_a z = 2M!+p+(M-p)=2M!+M</math>, ale jednocześnie <math>\sharp_c z = 2M!+M = \sharp_a z</math>. Otrzymaliśmy sprzeczność. | ||
<math> | |||
<math> | |||
u_1uu_2=M-p</math>, to mamy <math> | |||
jednocześnie <math> | |||
sprzeczność. | |||
W pozostałych przypadkach w analogiczny sposób dochodzimy do takiej | W pozostałych przypadkach w analogiczny sposób dochodzimy do takiej sprzeczności. Zatem <math>L</math> nie jest bezkontekstowy. | ||
sprzeczności. Zatem <math> | </div></div> | ||
{{cwiczenie|3|| | {{cwiczenie|3|| | ||
Udowodnij, że dla dowolnego języka <math> | Udowodnij, że dla dowolnego języka <math>L</math> nad alfabetem jednoelementowym | ||
<center><math> | <center><math>L \in \mathcal{L}_3 \Leftrightarrow L \in \mathcal{L}_2</math>.</center> | ||
}} | }} | ||
Rozwiązanie | <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"> | ||
<math> | Wystarczy udowodnić, że każdy język bezkontekstowy jest regularny. Niech | ||
<math> | <math>L \subset \{a\}^*</math> będzie językiem bezkontekstowym. Z lematu o pompowaniu wynika, że | ||
przedstawić w formie <math> | <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> | 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 | ||
Stąd, że <math> | <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> | ||
Przyjmijmy <math> | 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> | ||
<math> | 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 | ||
Dla <math> | <math>w(a^n)^*=w(a^k)^{\frac{n}{k}}\subset L \subset \{a\}^*</math>. <br> | ||
<center><math> | Dla <math>i=1,\ldots,n</math> oznaczmy przez | ||
<center><math>L_i = a^{p+i}(a^n)^* \cap L</math>.</center> | |||
Jeśli <math> | 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> | <center><math>\forall w \in L:|w|>N \;\;w \in \bigcup_{i=1}^n w_i(a^n)^*</math>.</center> | ||
Zatem <center><math> | Zatem <center><math>L=\{w \in L : |w|\leqslant p\} \cup \bigcup_{i=1}^n w_i(a^n)^*</math></center> | ||
</div></div> | |||
{{cwiczenie|4|| | {{cwiczenie|4|| | ||
Udowodnij, że język <math> | Udowodnij, że język <math>L=\{ a^{n}b^{n}:n \text{ nie jest wielokrotnością liczby } 5 \}</math> | ||
jest bezkontekstowy. | jest bezkontekstowy. | ||
}} | }} | ||
<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"> | |||
<math> | Język <math>L=L_1 \cap \overline{L}_2</math>, gdzie<br> | ||
<math> | <math>L_1=\{ a^{n}b^{n}:n\geqslant 0\}</math> jest językiem bezkontekstowym,<br> | ||
Języki regularne są domknięte ze względu na uzupełnienie, a przecięcie języka bezkontekstowego z | <math>L_2=\left\{ w \in \{a,b\}^* : |w|=5k \text{ dla pewnego } k\geqslant 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 regularnym jest | |||
językiem bezkontekstowym. | językiem bezkontekstowym. | ||
</div></div> | |||
{{cwiczenie|5|| | {{cwiczenie|5|| | ||
Czy gramatyka poprawnych nawiasów <center><math> | Czy gramatyka poprawnych nawiasów <center><math>(\{v_0\},\{(,)\},v_0, P )</math> gdzie <math>P: v_0 \rightarrow v_0 v_0\;|\;(v_0)\;|\;1</math></center> | ||
P: v_0 \rightarrow v_0 v_0\;|\;(v_0)\;|\;1</math></center> | |||
jest jednoznaczna? | jest jednoznaczna? | ||
}} | }} | ||
<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"> | |||
<math> | Gramatyka nie jest jednoznaczna. Oto dwie pochodne lewostronne słowa <math>(())()</math>:<br> | ||
<math>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><br> | ||
<math> | <math>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 | \mapsto (())v_0v_0 \mapsto (())(v_0) v_0 \mapsto | ||
(())()v_0 \mapsto (())() </math> | (())()v_0 \mapsto (())()</math> | ||
</div></div> | |||
{{cwiczenie|6|| | {{cwiczenie|6|| | ||
Określ gramatyki generujące języki | Określ gramatyki generujące języki: | ||
# <math> | # <math>L_1 =\{a^n b^m c^m : m,n \geqslant 0 \} \cup \{a^n b^n c^m : m,n \geqslant 0 \}</math>, | ||
# <math> | # <math>L_2 =\{a^n b^n a^p b^q : n,p,q \geqslant 1 \}\cup \{a^n b^m a^p b^p : n,m,p \geqslant 1 \}</math>. | ||
Czy gramatyki te są jednoznaczne? | Czy gramatyki te są jednoznaczne? | ||
}} | }} | ||
<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"> | |||
Język <math> | Język <math>L_1</math> jest generowany przez gramatykę <math>G_1</math> o zbiorze praw<br> | ||
<math>\ | <math> | ||
v_2 \rightarrow a v_2 b \ | \begin{align} | ||
w_1 \rightarrow aw_1 \; |\; bw_2 c \; |\;1,\;\; w_2 \rightarrow bw_2 c \; |\;1</math><br> | & 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 ,\\ | ||
Gramatyka ta nie jest jednoznaczna. Każde słowo w postaci <math> | & w_1 \rightarrow aw_1 \; |\; bw_2 c \; |\;1,\;\; w_2 \rightarrow bw_2 c \; |\;1. | ||
Na przykład dla słowa <math> | \end{align} | ||
<center><math> | </math><br> | ||
Gramatyka ta nie jest jednoznaczna. Każde słowo w postaci <math>a^nb^nc^n</math> ma dwa różne wyprowadzenia. | |||
Na przykład dla słowa <math>abc</math> mamy: | |||
<center><math>v_0 \mapsto v_1c \mapsto av_2bc \mapsto abc</math></center> | |||
<center><math> | <center><math>v_0 \mapsto aw_1 \mapsto abw_2c \mapsto abc</math></center> | ||
Język <math> | Język <math>L_2</math> jest generowany przez gramatykę <math>G_2</math> o zbiorze praw<br> | ||
<math>\ | <math> | ||
v_2 \rightarrow v_2 b \; |\;v_4 b , \;\; v_3 \rightarrow bv_3 \; |\; bv_5, \\ | \begin{align} | ||
v_4 \rightarrow v_4 a \; |\;v_6 a, \;\; | & 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_5 \rightarrow av_5 b \; |\; ab ,\;\; v_6 \rightarrow a v_6 b \; |\;ab</math><br> | & 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 <math> | \end{align} | ||
Natomiast język <math> | </math><br> | ||
Gramatyka <math>G_2</math> też nie jest jednoznaczna. Każde słowo w postaci <math>a^n b^n a^p b^p</math> ma dwa różne wyprowadzenia. | |||
Natomiast język <math>L_2</math> jest również generowany przez gramatykę <math>G_3</math> | |||
o zbiorze praw<br> | o zbiorze praw<br> | ||
<math>\ | <math> | ||
\begin{align} | |||
& 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_2 \rightarrow av_3 \; |\;v_4 b , \;\; v_3 \rightarrow av_3 , \\ | ||
v_4 \rightarrow v_4 b \; |\;v_1 b | & v_4 \rightarrow v_4 b \; |\;v_1 b \;\; | ||
\end{align} | |||
</math><br> | </math><br> | ||
i ta gramatyka jest jednoznaczna, co oznacza, że język <math> | i ta gramatyka jest jednoznaczna, co oznacza, że język <math>L_2</math> jest jednoznaczny.<br> | ||
Uwaga. Język <math> | Uwaga. Język <math>L_2</math> można rozłożyć na sumę trzech rozłącznych i bezkontekstowych języków.<br> | ||
<math> | <math>L_2 = \{a^n b^n a^p b^p : n,p \geqslant 1\}\cup \{a^n b^n a^p b^q : n,p,q \geqslant 1, \;p\neq q \}\cup | ||
\{a^n b^m a^p b^p : m,n,p \geqslant 1, n\neq m \}</math>.<br> | \{a^n b^m a^p b^p : m,n,p \geqslant 1, n\neq m \}</math>.<br> | ||
Gramatyka <math> | Gramatyka <math>G_3</math> generuje niezależnie od siebie te trzy zbiory. Rozkładając analogicznie język <math>L_1</math>, otrzymujemy:<br> | ||
<math> | <math>L_1 =\{a^n b^n c^n : n \geqslant 0 \} \cup \{a^n b^n c^m : k,m,n \geqslant 0, n\neq m \}\cup | ||
\{a^n b^m c^m : m,n \geqslant 0, n\neq m \}</math>.<br> | \{a^n b^m c^m : m,n \geqslant 0, n\neq m \}</math>.<br> | ||
Tym razem nie jest to rozkład na sumę języków bezkontekstowych. | Tym razem nie jest to rozkład na sumę języków bezkontekstowych. | ||
</div></div> | |||
{{cwiczenie|7|| | {{cwiczenie|7|| | ||
Dana niech będzie gramatyka (<math> | Dana niech będzie gramatyka (<math>v_0</math> jest symbolem początkowym): | ||
<center><math>\ | <center><math>\begin{align} v_0 & \rightarrow & v_0v_1\ |\ v_3v_1 \\ | ||
v_1 & \rightarrow & v_1v_2\ |\ v_2v_3 \\ | v_1 & \rightarrow & v_1v_2\ |\ v_2v_3 \\ | ||
v_2 & \rightarrow & v_4v_1\ |\ v_3v_3\ |\ a \\ | v_2 & \rightarrow & v_4v_1\ |\ v_3v_3\ |\ a \\ | ||
v_3 & \rightarrow & v_1v_2\ |\ v_4v_2\ |\ b \\ | v_3 & \rightarrow & v_1v_2\ |\ v_4v_2\ |\ b \\ | ||
v_4 & \rightarrow & v_3v_4\ |\ v_0v_1\ |\ c | v_4 & \rightarrow & v_3v_4\ |\ v_0v_1\ |\ c | ||
\ | \end{align}</math></center> | ||
Używając algorytmu Cocke'a-Youngera-Kasamiego sprawdź, czy poniższe | Używając algorytmu Cocke'a-Youngera-Kasamiego, sprawdź, czy poniższe | ||
słowa należą do języka generowanego przez tę gramatykę | słowa należą do języka generowanego przez tę gramatykę: | ||
# <math> | # <math>w_1=bac</math>, | ||
# <math> | # <math>w_2=babcab</math>, | ||
# <math> | # <math>w_3=bcaaca</math>. | ||
}} | }} | ||
<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"> | |||
<math>w_1 \not \in L(G)</math>, <math>w_2, w_3 \in L(G)</math>. | |||
</div></div> | |||
<center>ZADANIA DOMOWE</center> | |||
{{cwiczenie| | {{cwiczenie|8|| | ||
Wykorzystując lemat o pompowaniu udowodnij, że następujące języki nie są bezkontekstowe: | Wykorzystując lemat o pompowaniu, udowodnij, że następujące języki nie są bezkontekstowe: | ||
# <math> | # <math>L=\left\{ a^{n}b^{m}c^{k}:k=min\{m,n\}\right\}</math> | ||
# <math> | # <math>L=\left\{ a^{n}b^{m}c^{k}:k=mn\right\}</math> | ||
# <math> | # <math>L=\left\{ a^{n}b^{n^{2}}\right\}</math> | ||
}} | }} | ||
{{cwiczenie| | {{cwiczenie|9|| | ||
Stosując lemat Ogdena pokaż, że język <math> | Stosując lemat Ogdena, pokaż, że język <math>L=\{a^ib^jc^k: i,j,k>1,\ k | ||
\not = ir,\ k \not = js | \not = ir,\ k \not = js</math> gdzie <math>r,s \in \{2,3,...\}\}</math> nie jest | ||
bezkontekstowy. | bezkontekstowy. | ||
}} | }} | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span><div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span><div class="mw-collapsible-content" style="display:none"> | ||
Rozważ słowo <math> | Rozważ słowo <math>a^Pb^Pc^{(P-1)!}</math>, gdzie <math>P</math> jest liczbą | ||
pierwszą większą niż <math> | pierwszą większą niż <math>M+1</math> i większą niż 3, gdzie <math>M</math> jest stałą z | ||
lematu. Jako pozycje oznaczone wybierz wszystkie pozycje liter <math> | lematu. Jako pozycje oznaczone wybierz wszystkie pozycje liter <math>c</math>. | ||
</div></div> | </div></div> | ||
{{cwiczenie| | {{cwiczenie|10|| | ||
Udowodnij, że język <math> | Udowodnij, że język <math>L=\left\{ w\overleftarrow{w } : w \in \{a,b\}^* \setminus \{ab^2a\} \right\}</math> | ||
jest bezkontekstowy. | jest bezkontekstowy. | ||
}} | }} | ||
{{cwiczenie| | {{cwiczenie|11||}} | ||
Czy gramatyka poprawnych nawiasów | Czy gramatyka poprawnych nawiasów | ||
<center><math> | <center><math>(\{v_0,v_1\},\{(,)\},v_0, P )</math> gdzie <math> | ||
P: v_0 \rightarrow v_1 v_0\;|\;1, \;\; v_1 \rightarrow (v_0)</math></center> | P: v_0 \rightarrow v_1 v_0\;|\;1, \;\; v_1 \rightarrow (v_0)</math></center> | ||
rozważana w przykładzie | rozważana w przykładzie [http://osilek.mimuw.edu.pl/index.php?title=J%C4%99zyki%2C_automaty_i_obliczenia/Wyk%C5%82ad_9:_J%C4%99zyki_bezkontekstowe_i_ich_gramatyki#przykl.1.2 1.2] jest jednoznaczna? | ||
{{cwiczenie| | {{cwiczenie|12|| | ||
Określ gramatyki generujące języki | Określ gramatyki generujące języki: | ||
# <math> | # <math>L_3 =\{a^n b^m c^nd^p : m,n,p \geqslant 0 \} \cup \{a^n b^m c^p d^m : m,n,p \geqslant 0 \}</math>, | ||
# <math> | # <math>L_4 =\{a^n b^{2n} : n \geqslant 1 \}\cup \{a^n b^{3n} : n \geqslant 1 \}</math>. | ||
Czy gramatyki te są jednoznaczne? Wykaż, że język <math> | Czy gramatyki te są jednoznaczne? Wykaż, że język <math>L_4</math> jest jednoznaczny. | ||
}} | }} | ||
{{cwiczenie| | {{cwiczenie|13|| | ||
Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest | Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest: | ||
# nieskończny, | # nieskończny, | ||
# niepusty. | # niepusty. | ||
Linia 238: | Linia 251: | ||
}} | }} | ||
{{cwiczenie| | {{cwiczenie|14|| | ||
Dana niech będzie gramatyka (<math> | Dana niech będzie gramatyka (<math>v_0</math> jest symbolem początkowym): | ||
<center><math>\ | <center><math>\begin{align} v_0 & \rightarrow & v_0v_1\ |\ v_3v_1 \\ | ||
v_1 & \rightarrow & v_2v_1\ |\ v_3v_2 \\ | v_1 & \rightarrow & v_2v_1\ |\ v_3v_2 \\ | ||
v_2 & \rightarrow & v_1v_4\ |\ v_3v_3\ |\ a \\ | v_2 & \rightarrow & v_1v_4\ |\ v_3v_3\ |\ a \\ | ||
v_3 & \rightarrow & v_2v_2\ |\ v_4v_2\ |\ b \\ | v_3 & \rightarrow & v_2v_2\ |\ v_4v_2\ |\ b \\ | ||
v_4 & \rightarrow & v_1v_4\ |\ v_0v_1\ |\ c. | v_4 & \rightarrow & v_1v_4\ |\ v_0v_1\ |\ c. | ||
\ | \end{align}</math></center> | ||
Używając algorytmu Cocke'a-Youngera-Kasamiego sprawdź, czy poniższe | Używając algorytmu Cocke'a-Youngera-Kasamiego, sprawdź, czy poniższe | ||
słowa należą do języka generowanego przez tę gramatykę | słowa należą do języka generowanego przez tę gramatykę: | ||
# <math> | # <math>w_1=cabba</math>, | ||
# <math> | # <math>w_2=baccab</math>, | ||
# <math> | # <math>w_3=aabbcc</math>. | ||
}} | }} |
Aktualna wersja na dzień 21:58, 15 wrz 2023
Ć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.
Ćwiczenie 3
Udowodnij, że dla dowolnego języka nad alfabetem jednoelementowym
Ćwiczenie 4
Udowodnij, że język jest bezkontekstowy.
Ćwiczenie 5
jest jednoznaczna?
Ćwiczenie 6
Określ gramatyki generujące języki:
- ,
- .
Czy gramatyki te są jednoznaczne?
Ć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ę:
- ,
- ,
- .
Ć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.
Ćwiczenie 10
Udowodnij, że język jest bezkontekstowy.
Ćwiczenie 11
Czy gramatyka poprawnych nawiasów
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ę:
- ,
- ,
- .