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) |
|||
Linia 2: | Linia 2: | ||
{{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>\displaystyle L=\left\{ a^{n}b^{m}c^{k}:k=\max \left\{ n,m\right\} \right\} </math> | # <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>\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>\displaystyle L=\left\{ w\overleftarrow{w}a^{|w|}:w\in \left\{ a,b\right\} ^{*}\right\}. </math> | ||
}} | }} | ||
Linia 26: | Linia 26: | ||
Punkt 3.<br> | 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 | 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 } | ||
\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> | ||
Linia 35: | Linia 35: | ||
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> | </div></div> | ||
Linia 90: | Linia 90: | ||
{{cwiczenie|3|| | {{cwiczenie|3|| | ||
Udowodnij, że dla dowolnego języka <math>\displaystyle L</math> nad alfabetem jednoelementowym | 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> | <center><math>\displaystyle L \in \mathcal{L}_3 \Leftrightarrow L \in \mathcal{L}_2.</math></center> | ||
}} | }} | ||
Linia 104: | Linia 104: | ||
<math>\displaystyle w(a^n)^*=w(a^k)^{\frac{n}{k}}\subset L \subset \{a\}^*</math>. <br> | <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 | Dla <math>\displaystyle i=1,...,n</math> oznaczmy przez | ||
<center><math>\displaystyle L_i = a^{p+i}(a^n)^* \cap L</math></center> | <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 | 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 | ||
Linia 122: | Linia 122: | ||
<math>\displaystyle L_1=\left\{ a^{n}b^{n}:n\geqslant 0\right\} </math> jest językiem bezkontekstowym,<br> | <math>\displaystyle L_1=\left\{ a^{n}b^{n}:n\geqslant 0\right\} </math> jest językiem bezkontekstowym,<br> | ||
<math>\displaystyle L_2=\left\{ w \in \{a,b\}^* : |w|=5k </math> dla pewnego <math> k\geqslant 0 \rbrace </math> jest językiem regularnym.<br> | <math>\displaystyle L_2=\left\{ w \in \{a,b\}^* : |w|=5k </math> dla pewnego <math> k\geqslant 0 \rbrace </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 | 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> | </div></div> | ||
Linia 138: | Linia 138: | ||
<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 | <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 | \mapsto (())v_0v_0 \mapsto (())(v_0) v_0 \mapsto | ||
(())()v_0 \mapsto (())() </math> | (())()v_0 \mapsto (())(). </math> | ||
</div></div> | </div></div> | ||
{{cwiczenie|6|| | {{cwiczenie|6|| | ||
Określ gramatyki generujące języki | Określ gramatyki generujące języki: | ||
# <math>\displaystyle 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>\displaystyle 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>\displaystyle 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>. | # <math>\displaystyle 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>. | ||
Linia 153: | Linia 153: | ||
<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 , \;\; | <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 ,\\ | 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> | 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. | 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 | 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 v_1c \mapsto av_2bc \mapsto abc, </math></center> | ||
<center><math>\displaystyle v_0 \mapsto aw_1 \mapsto abw_2c \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> | Język <math>\displaystyle L_2</math> jest generowany przez gramatykę <math>\displaystyle G_2</math> o zbiorze praw<br> | ||
Linia 164: | Linia 164: | ||
v_2 \rightarrow v_2 b \; |\;v_4 b , \;\; v_3 \rightarrow bv_3 \; |\; bv_5, \\ | 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_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> | 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. | 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> | Natomiast język <math>\displaystyle L_2</math> jest również generowany przez gramatykę <math>\displaystyle G_3</math> | ||
Linia 170: | Linia 170: | ||
<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 , \;\; | <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_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 \;\; | ||
</math><br> | </math><br> | ||
i ta gramatyka jest jednoznaczna, co oznacza, że język <math>\displaystyle L_2</math> jest jednoznaczny.<br> | i ta gramatyka jest jednoznaczna, co oznacza, że język <math>\displaystyle L_2</math> jest jednoznaczny.<br> | ||
Linia 176: | Linia 176: | ||
<math>\displaystyle 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 | <math>\displaystyle 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>\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> | 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 \geqslant 0 \} \cup \{a^n b^n c^m : k,m,n \geqslant 0, n\neq m \}\cup | <math>\displaystyle 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> | ||
Linia 192: | Linia 192: | ||
\endaligned</math></center> | \endaligned</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>\displaystyle w_1=bac</math>, | # <math>\displaystyle w_1=bac</math>, | ||
# <math>\displaystyle w_2=babcab</math>, | # <math>\displaystyle w_2=babcab</math>, | ||
Linia 207: | Linia 207: | ||
{{cwiczenie|8|| | {{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>\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=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^{m}c^{k}:k=mn\right\}, </math> | ||
# <math>\displaystyle L=\left\{ a^{n}b^{n^{2}}\right\} </math> | # <math>\displaystyle L=\left\{ a^{n}b^{n^{2}}\right\}. </math> | ||
}} | }} | ||
{{cwiczenie|9|| | {{cwiczenie|9|| | ||
Stosując lemat Ogdena pokaż, że język <math>\displaystyle L=\{a^ib^jc^k: i,j,k>1,\ k | 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 | \not = ir,\ k \not = js, </math> gdzie <math>\displaystyle r,s \in \{2,3,...\}\}</math> nie jest | ||
bezkontekstowy. | bezkontekstowy. | ||
Linia 239: | Linia 239: | ||
{{cwiczenie|12|| | {{cwiczenie|12|| | ||
Określ gramatyki generujące języki | Określ gramatyki generujące języki: | ||
# <math>\displaystyle 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>\displaystyle 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>\displaystyle L_4 =\{a^n b^{2n} : n \geqslant 1 \}\cup \{a^n b^{3n} : n \geqslant 1 \}</math>. | # <math>\displaystyle L_4 =\{a^n b^{2n} : n \geqslant 1 \}\cup \{a^n b^{3n} : n \geqslant 1 \}</math>. | ||
Linia 247: | Linia 247: | ||
{{cwiczenie|13|| | {{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 263: | Linia 263: | ||
\endaligned</math></center> | \endaligned</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>\displaystyle w_1=cabba</math>, | # <math>\displaystyle w_1=cabba</math>, | ||
# <math>\displaystyle w_2=baccab</math>, | # <math>\displaystyle w_2=baccab</math>, |
Wersja z 10:07, 27 sie 2006
Ć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 Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L=\left\{ a^{n}b^{n}:n \;} nie jest wielokrotnością liczby 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ę:
- ,
- ,
- .