Języki, automaty i obliczenia/Ćwiczenia 11: Automat ze stosem

Z Studia Informatyczne
Wersja z dnia 18:07, 22 sie 2006 autorstwa Arek (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

ĆWICZENIA 10

Ćwiczenie

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

(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

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

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

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

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

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

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).

ZADANIA DOMOWE

Ćwiczenie

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

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

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

Ćwiczenie

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

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

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

  1. nieskończny,
  2. niepusty.

Ćwiczenie

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.