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

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu – „\displaystyle ” na „”
m Zastępowanie tekstu – „,...,” na „,\ldots,”
 
(Nie pokazano 8 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 3: Linia 3:
{{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>L=\left\{ a^{n}b^{m}c^{k}:k=\max \left\{ n,m\right\} \right\}</math>  
#  <math>L=\left\{ a^{n}b^{m}c^{k}:k=\max \left\{ n,m\right\} \right\}</math>  
#  <math>L=\left\{ a^{k}b^{n}c^{m}:k<n<m\right\}</math>  
#  <math>L=\left\{ a^{k}b^{n}c^{m}:k<n<m\right\}</math>  
#  <math>L=\left\{ w\overleftarrow{w}a^{|w|}:w\in \left\{ a,b\right\} ^{*}\right\}</math>  
#  <math>L=\left\{ w\overleftarrow{w}a^{|w|}:w\in \left\{ a,b\right\} ^{*}\right\}</math>  


}}
}}
Linia 14: Linia 14:


Punkt 1.<br>
Punkt 1.<br>
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.  
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.  
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   
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   
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
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
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>
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>
Punkt 2.<br>
Linia 25: Linia 25:


Punkt 3.<br>
Punkt 3.<br>
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  
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  
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 }
<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 }
Linia 43: Linia 43:
liczba naturalna <math>M \geqslant 1</math> taka, że każde słowo <math>w \in L</math>, w którym  
liczba naturalna <math>M \geqslant 1</math> taka, że każde słowo <math>w \in L</math>, w którym  
wyróżniono <math>M</math> lub więcej pozycji, można przedstawić w formie  
wyróżniono <math>M</math> lub więcej pozycji, 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>   
<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>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 86: Linia 86:
<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">
Wystarczy  udowodnić, że każdy język bezkontekstowy jest regularny. Niech  
Wystarczy  udowodnić, że każdy język bezkontekstowy jest regularny. Niech  
<math> L \subset \{a\}^*</math> będzie językiem bezkontekstowym. Z lematu o pompowaniu wynika, że  
<math>L \subset \{a\}^*</math> będzie językiem bezkontekstowym. Z lematu o pompowaniu wynika, że  
<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,\ldots,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>
</div></div>
</div></div>


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>L=L_1 \cap \overline{L}_2</math>, gdzie<br>
Język <math>L=L_1 \cap \overline{L}_2</math>, gdzie<br>
<math>L_1=\{ a^{n}b^{n}:n\geqslant 0\}   </math>    jest językiem bezkontekstowym,<br>
<math>L_1=\{ a^{n}b^{n}:n\geqslant 0\}</math>    jest językiem bezkontekstowym,<br>
<math>L_2=\left\{ w \in \{a,b\}^* : |w|=5k \text{ dla pewnego } k\geqslant 0 \right\} </math>  jest językiem regularnym.<br>
<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ę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 117: Linia 117:


{{cwiczenie|5||
{{cwiczenie|5||
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>
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>


jest jednoznaczna?
jest jednoznaczna?
Linia 128: Linia 128:
<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  
<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>
</div></div>


{{cwiczenie|6||
{{cwiczenie|6||
Określ gramatyki generujące języki:
Określ gramatyki generujące języki:
# <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>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>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>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 149: Linia 149:
Gramatyka ta nie jest jednoznaczna. Każde słowo w postaci <math>a^nb^nc^n</math> ma dwa różne wyprowadzenia.
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:
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>v_0 \mapsto v_1c \mapsto av_2bc \mapsto abc</math></center>


<center><math>v_0 \mapsto aw_1 \mapsto abw_2c \mapsto abc</math></center>
<center><math>v_0 \mapsto aw_1 \mapsto abw_2c \mapsto abc</math></center>


Język <math>L_2</math> jest  generowany przez  gramatykę <math>G_2</math>  o zbiorze praw<br>
Język <math>L_2</math> jest  generowany przez  gramatykę <math>G_2</math>  o zbiorze praw<br>
Linia 206: Linia 206:
{{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>L=\left\{ a^{n}b^{m}c^{k}:k=min\{m,n\}\right\}</math>  
#  <math>L=\left\{ a^{n}b^{m}c^{k}:k=min\{m,n\}\right\}</math>  
#  <math>L=\left\{ a^{n}b^{m}c^{k}:k=mn\right\}</math>  
#  <math>L=\left\{ a^{n}b^{m}c^{k}:k=mn\right\}</math>  
#  <math>L=\left\{ a^{n}b^{n^{2}}\right\}</math>  
#  <math>L=\left\{ a^{n}b^{n^{2}}\right\}</math>  


}}
}}
Linia 214: Linia 214:
{{cwiczenie|9||
{{cwiczenie|9||
Stosując lemat Ogdena, pokaż, że język <math>L=\{a^ib^jc^k: i,j,k>1,\ k  
Stosując lemat Ogdena, pokaż, że język <math>L=\{a^ib^jc^k: i,j,k>1,\ k  
\not = ir,\ k \not = js, </math> gdzie <math>r,s \in \{2,3,...\}\}</math> nie jest  
\not = ir,\ k \not = js</math> gdzie <math>r,s \in \{2,3,...\}\}</math> nie jest  
bezkontekstowy.
bezkontekstowy.
}}
}}
Linia 225: Linia 225:


{{cwiczenie|10||
{{cwiczenie|10||
Udowodnij, że język    <math>L=\left\{ w\overleftarrow{w } : w \in \{a,b\}^* \setminus \{ab^2a\} \right\}   </math>   
Udowodnij, że język    <math>L=\left\{ w\overleftarrow{w } : w \in \{a,b\}^* \setminus \{ab^2a\} \right\}</math>   
jest bezkontekstowy.
jest bezkontekstowy.
}}
}}
Linia 231: Linia 231:
{{cwiczenie|11||}}
{{cwiczenie|11||}}
Czy gramatyka poprawnych nawiasów   
Czy gramatyka poprawnych nawiasów   
<center><math>(\{v_0,v_1\},\{(,)\},v_0, P ), </math> gdzie <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>


Linia 238: Linia 238:
{{cwiczenie|12||
{{cwiczenie|12||
Określ gramatyki generujące języki:
Określ gramatyki generujące języki:
# <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>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>L_4 =\{a^n b^{2n} : n \geqslant 1 \}\cup \{a^n b^{3n} : n \geqslant 1 \}</math>.   
# <math>L_4 =\{a^n b^{2n} : n \geqslant 1 \}\cup \{a^n b^{3n} : n \geqslant 1 \}</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:

  1. L={anbmck:k=max{n,m}}
  2. L={akbncm:k<n<m}
  3. L={wwa|w|:w{a,b}*}
Rozwiązanie

Lemat 1 (Ogden)

Dla dowolnego języka bezkontekstowego LA* istnieje liczba naturalna M1 taka, że każde słowo wL, w którym wyróżniono M lub więcej pozycji, można przedstawić w formie w=u1w1uw2u2, gdzie w1,w2,v1,v2,uA* oraz

  1. w1w2 zawiera przynajmniej jedną wyróżnioną pozycję,
  2. w1uw2 zawiera co najwyżej M wyróżnionych pozycji,
  3. u1w1iuw2iu2L dla i=0,1,..

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 L={aibjck:i=j,j=k,k=i} nie jest bezkontekstowy.

Rozwiązanie

Ćwiczenie 3

Udowodnij, że dla dowolnego języka L nad alfabetem jednoelementowym

L3L2.
Rozwiązanie

Ćwiczenie 4

Udowodnij, że język L={anbn:n nie jest wielokrotnością liczby 5} jest bezkontekstowy.

Rozwiązanie

Ćwiczenie 5

Czy gramatyka poprawnych nawiasów
({v0},{(,)},v0,P) gdzie P:v0v0v0|(v0)|1

jest jednoznaczna?

Rozwiązanie

Ćwiczenie 6

Określ gramatyki generujące języki:

  1. L1={anbmcm:m,n0}{anbncm:m,n0},
  2. L2={anbnapbq:n,p,q1}{anbmapbp:n,m,p1}.

Czy gramatyki te są jednoznaczne?

Rozwiązanie

Ćwiczenie 7

Dana niech będzie gramatyka (v0 jest symbolem początkowym):

v0v0v1 | v3v1v1v1v2 | v2v3v2v4v1 | v3v3 | av3v1v2 | v4v2 | bv4v3v4 | v0v1 | c

Używając algorytmu Cocke'a-Youngera-Kasamiego, sprawdź, czy poniższe słowa należą do języka generowanego przez tę gramatykę:

  1. w1=bac,
  2. w2=babcab,
  3. w3=bcaaca.
Rozwiązanie
ZADANIA DOMOWE

Ćwiczenie 8

Wykorzystując lemat o pompowaniu, udowodnij, że następujące języki nie są bezkontekstowe:

  1. L={anbmck:k=min{m,n}}
  2. L={anbmck:k=mn}
  3. L={anbn2}

Ćwiczenie 9

Stosując lemat Ogdena, pokaż, że język L={aibjck:i,j,k>1, k=ir, k=js gdzie r,s{2,3,...}} nie jest bezkontekstowy.

Wskazówka

Ćwiczenie 10

Udowodnij, że język L={ww:w{a,b}*{ab2a}} jest bezkontekstowy.

Ćwiczenie 11

Czy gramatyka poprawnych nawiasów

({v0,v1},{(,)},v0,P) gdzie P:v0v1v0|1,v1(v0)

rozważana w przykładzie 1.2 jest jednoznaczna?

Ćwiczenie 12

Określ gramatyki generujące języki:

  1. L3={anbmcndp:m,n,p0}{anbmcpdm:m,n,p0},
  2. L4={anb2n:n1}{anb3n:n1}.

Czy gramatyki te są jednoznaczne? Wykaż, że język L4 jest jednoznaczny.

Ćwiczenie 13

Napisz algorytmy rozstrzygające, czy dany język bezkontekstowy jest:

  1. nieskończny,
  2. niepusty.

Ćwiczenie 14

Dana niech będzie gramatyka (v0 jest symbolem początkowym):

v0v0v1 | v3v1v1v2v1 | v3v2v2v1v4 | v3v3 | av3v2v2 | v4v2 | bv4v1v4 | v0v1 | c.

Używając algorytmu Cocke'a-Youngera-Kasamiego, sprawdź, czy poniższe słowa należą do języka generowanego przez tę gramatykę:

  1. w1=cabba,
  2. w2=baccab,
  3. w3=aabbcc.