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
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:

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

ROZWIĄZANIE. We wszystkich przypadkach dowód przeprowadzimy nie wprost zakładając, że język L jest bezkontekstowy, a więc spełnia tezę lematu o pompowaniu.
Punkt 1. Rozważmy słowo anbncnL, dla 3nN, gdzie N 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 anbncn=u1w1uw2u2 zgodnym z lematem o pompowaniu jest przyjęcie jako w1 i w2 potęgi jednej z liter a,b,c. To wyklucza dla pewnych i przynależność do języka L słów u1w1iuw2iu2.
Punkt 2. Podobnie jak w punkcie 1 rozważmy szczególne dostatecznie długie słowo z języka L, a mianowicie anbn+1cn+2L i niech 3n+3N, gdzie N jest stałą z lematu o pompowaniu. Dalsze rozumowanie jest analogicze jak w punkcie 1.
Punkt 3. Dostatecznie długie słowo wwa|w|L możemy rozłożyć na katenację pięciu słów tak by był spełniony warunek pompowania z lematu. Jeśli w=a1...an, to

wwa|w|=a1...aku1ak+1...anan....ak+1w1ak...a1ua2(nk)w2a2knu2

dla dowolnego k takiego, że k<n2k. Dla n>M (M jest stałą z lematu o pompowaniu) |w1uw2|>M. Innej możliwości rozkładu słowa z języka L już nie ma. Dalej postępujemy standardowo.

{.3cm} Wprowadzimy uogólnienie lematu o pompowaniu dla języków bezkontekstowych. Dla słowa wA* o długości n dowolną liczbę ze zbioru {1,.....,n} nazywamy pozycją w słowie w. Ustalając dowolny podzbiór P{1,.....,n} będziemy mówić, że w słowie w wyróżniono pozycje ze zbioru P.

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. Nie wprost, załóżmy, że L jest bezkontekstowy i niech M będzie stałą z lematu Ogdena. Rozważmy słowo w=aMbM!+Mc2M!+M. Wyróżnijmy wszystkie pozycje, na których znajdują się litery a.

Weźmy rozkład w=u1w1uw2u2. Zauważmy, że jeśli w w1 lub w2 występują co najmniej dwie różne litery, to w∉L (np. jeśli w1 składa się z liter a i b to w słowie w12 przynajmniej jedna litera a znajdzie się za jakąś literą b). Ponieważ zaznaczyliśmy pozycje liter a, to z założenia lematu musi być w1a+ lub w2a+.

Jeśli w2b* lub w2a* to w1a+. Jeśli natomiast w2a+, to w1a* (dlaczego?). Rozważmy przypadek, gdy w1a+ oraz w2b* (pozostałe przypadki traktowane są analogicznie). Niech p=|w1|. Ponieważ 1pM, to p dzieli M!. Niech q=M!p. Słowo z=u1w12q+1uw22q+1u2 należy do L, ale w12q+1=ap(2q+1)=a2pq+p=a2M!+p. Ponieważ au1uu2=Mp, to mamy az=2M!+p+(Mp)=2M!+M, ale jednocześnie cz=2M!+M=az. Otrzymaliśmy sprzeczność.

W pozostałych przypadkach w analogiczny sposób dochodzimy do takiej sprzeczności. Zatem L nie jest bezkontekstowy.

Ćwiczenie 3

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

L3L2

Rozwiązanie. Wystarczy udowodnić, że każdy język bezkontekstowy jest regularny. Niech L{a}* będzie językiem bezkontekstowym. Z lematu o pompowaniu wynika, że N,M1 takie, że każde słowo wL o długości |w|>N można przedstawić w formie w=u1w1uw2u2, gdzie w1,w2,v1,v2,uA* oraz |w1uw2|M, w1w21, u1w1iuw2iu2L dla i=0,1,...
Stąd, że L{a}* wynika, że w=apak dla pewnego kM oraz ap(ak)iL dla i=0,1,....
Przyjmijmy n=M!. Wówczas dla każdego słowa wL o długości |w|>N mamy w(an)*=w(ak)nkL{a}*.
Dla i=1,...,n oznaczmy przez

Li=ap+i(an)*L

Jeśli Li, to niech wiLi będzie słowem o najmniejszej długości. Wówczas

wL:|w|>Nwi=1nwi(an)*.

Zatem

L={wL:|w|p}i=1nwi(an)*.

Ćwiczenie 4

Udowodnij, że język L={anbn:nnie jest wielokrotnością liczby5} jest bezkontekstowy.

ROZWIĄZANIE. Język L=L1L2, gdzie
L1={anbn:n0} jest językiem bezkontekstowym,
L2={w{a,b}*:|w|=5kdla pewnegok0} 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

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

jest jednoznaczna?

ROZWIĄZANIE. Gramatyka nie jest jednoznaczna. Oto dwie pochodne lewostronne słowa (())():
v0v0v0(v0)v0((v0))v0(())v0(())(v0)(())()
v0v0v0v0v0v0(v0)v0v0((v0))v0v0(())v0v0(())(v0)v0(())()v0(())()

Ć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.
Język L1 jest generowany przez gramatykę G1 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 anbncn ma dwa różne wyprowadzenia. Na przykład dla słowa abc mamy

v0v1cav2bcabc
v0aw1abw2cabc

Język L2 jest generowany przez gramatykę G2 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 G2 też nie jest jednoznaczna. Każde słowo w postaci anbnapbp ma dwa różne wyprowadzenia. Natomiast język L2 jest również generowany przez gramatykę G3 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 L2 jest jednoznaczny.
Uwaga. Język L2 można rozłożyć na sumę trzech rozłącznych i bezkontekstowych języków.
L2={anbnapbp:n,p1}{anbnapbq:n,p,q1,pq}{anbmapbp:m,n,p1,nm}.
Gramatyka G3 generuje niezależnie od siebie te trzy zbiory. Rozkładając analogicznie język L1 otrzymujemy
L1={anbncn:n0}{anbncm:k,m,n0,nm}{anbmcm:m,n0,nm}.
Tym razem nie jest to rozkład na sumę języków bezkontekstowych.

Ćwiczenie 7

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

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \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}

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 w1∉L(G), w2,w3L(G).

2. ZADANIA DOMOWE

Ćwiczenie 1

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 2

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. Rozważ słowo aPbPc(P1)!, gdzie P jest liczbą pierwszą większą niż M+1 i większą niż 3, gdzie M jest stałą z lematu. Jako pozycje oznaczone wybierz wszystkie pozycje liter c.

Ćwiczenie 3

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

Ćwiczenie 4

Czy gramatyka poprawnych nawiasów

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

rozważana w przykładzie Uzupelnic lekcja9-w-ex1.2| jest jednoznaczna?

Ćwiczenie 5

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 6

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

  1. nieskończny,
  2. niepusty.

Ćwiczenie 7

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

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \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}

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.