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
m Zastępowanie tekstu - "\aligned" na "\begin{align}" |
|||
Linia 103: | Linia 103: | ||
{{cwiczenie|4|| | {{cwiczenie|4|| | ||
Udowodnij, że język <math>\displaystyle L= | Udowodnij, że język <math>\displaystyle L=\{ a^{n}b^{n}:n \text{ nie jest wielokrotnością liczby } 5 \}</math> | ||
jest bezkontekstowy. | jest bezkontekstowy. | ||
Linia 110: | Linia 110: | ||
<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"> | <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>\displaystyle L=L_1 \cap \overline{L}_2</math>, gdzie<br> | Język <math>\displaystyle L=L_1 \cap \overline{L}_2</math>, gdzie<br> | ||
<math>\displaystyle L_1= | <math>\displaystyle L_1=\{ a^{n}b^{n}:n\geqslant 0\} </math> jest językiem bezkontekstowym,<br> | ||
<math>\displaystyle L_2=\left\{ w \in \{a,b\}^* : |w|=5k | <math>\displaystyle 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ę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. | ||
Linia 141: | Linia 141: | ||
<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"> | <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>\displaystyle L_1</math> jest generowany przez gramatykę <math>\displaystyle G_1</math> o zbiorze praw<br> | Język <math>\displaystyle L_1</math> jest generowany przez gramatykę <math>\displaystyle 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 ,\\ | ||
& w_1 \rightarrow aw_1 \; |\; bw_2 c \; |\;1,\;\; w_2 \rightarrow bw_2 c \; |\;1. | |||
\end{align} | |||
</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: | ||
Linia 151: | Linia 154: | ||
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> | ||
<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. | ||
\end{align} | |||
</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> | ||
o zbiorze praw<br> | o zbiorze praw<br> | ||
<math>\displaystyle | <math>\displaystyle | ||
\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>\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> |
Wersja z 15:20, 28 wrz 2020
Ć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ę:
- ,
- ,
- .