Języki, automaty i obliczenia/Wykład 7: Twierdzenie Kleene'ego. Własności języków i gramatyk regularnych: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Rogoda (dyskusja | edycje)
Rogoda (dyskusja | edycje)
(Brak różnic)

Wersja z 08:42, 23 sie 2006

Wprowadzenie
W wykładzie udowodnimy twierdzenie Kleene'ego, które orzeka, że

rodzina języków regularnych jest identyczna z rodziną języków rozpoznawanych przez automaty o skończonej liczbie stanów. Przedstawimy własności języków regularnych i gramatyk typu (3). Na koniec uzasadnimy, że rodziny języków regularnych, rozpoznawalnych oraz generowanych przez gramatyki typu (3), są tożsame.

Słowa kluczowe
twierdzenie Kleene, języki regularne, języki rozpoznawane, języki typu (3)

zamkniętość na działania, gramatyka typu (3), gramatyka prawoliniowa i lewoliniowa.

Twierdzenie Kleene

Wiemy już, z poprzednich wykładów, że rodzina wyrażeń regularnych określa rodzinę języków regularnych. Celem pierwszej części tego wykładu jest ustalenie związku pomiędzy rodziną języków regularnych a rodziną języków rozpoznawanych przez automaty o skończonej liczbie stanów. Twierdzenie, udowodnione przez S.C.Kleene'ego w roku 1956, orzeka, iż te dwie rodziny języków są identyczne.

Twierdzenie

Dla dowolnego skończonego alfabetu A

𝒢(A*)=𝒞(A*)

.

Dowód

Dowód pierwszej części twierdzenia, czyli inkluzja 𝒢(A*)𝒞(A*) , będzie prowadzony zgodnie ze strukturą definicji rodziny języków regularnych 𝒢(A*) .

1. Język pusty jest rozpoznawany przez dowolny automat 𝒜=(S,A,f,s0,T), w którym zbiór stanów końcowych T jest pusty.

2. Język a złożony z dowolnej litery aA jest rozpoznawany przez automat

RYSUNEK ja-lekcja7-w-rys1

Dla dalszej części dowodu ustalmy, iż dane są języki L1,L2 rozpoznawane odpowiednio przez automaty deterministyczne 𝒜i=(Si,fi,s0i,Ti), gdzie i=1,2.

3. Sumę mnogościową języków L1,L2, czyli język L=L1L2 rozpoznaje automat 𝒜=(S,f,s0,T), dla którego S=S1×S2, s0=(s01,s02), Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle \: \displaystyle T = T_1 \times S_2\; \cup \;S_1 \times T_2} oraz dla dowolnego stanu (s1,s2)S i litery aA funkcja przejść określona jest równością

f((s1,s2),a)=(f1(s1,a),f2(s2,a)).

4. Katenację języków L1,L2, czyli język L=L1L2 rozpoznaje automat 𝒜=(S,f,s0,T), dla którego S=S1×𝒫(S2),s0=(s01,) oraz dla dowolnego stanu (s1,S'2)S i litery aA funkcja przejść określona jest następująco:

f((s1,S'2),a)={(f1(s1,a),f2(S'2,a))gdyf1(s1,a)T1,(f1(s1,a),f2(S'2,a){s02})gdyf1(s1,a)T1,

a zbiorem stanów końcowych jest

T=S1×{S𝒫(S2):ST2}.

5. Załóżmy, że język L rozpoznaje automat 𝒜=(S,f,s0,T). Określimy automat niedeterministyczny, który będzie rozpoznawał gwiazdkę Kleene języka L, czyli L*. Automat niedeterministyczny 𝒜=(S,f,{s0},T), w którym

f(s,a)={{f(s,a)}gdyf(s,a)T,{f(s,a),s0}gdyf(s,a)T

rozpoznaje język język L+. Dowód tego faktu jest indukcyjny i pozostawiamy go na ćwiczenia. Zauważmy teraz, że język {1} rozpoznaje automat

RYSUNEK ja-lekcja7-w-rys2

Ponieważ L*=L+{1} , to korzystając z udowodnionej już zamkniętości języków rozpoznawanych ze względu na sumę mnogościową, stwierdzamy, że istnieje automat rozpoznający język L*.

Zatem dowód inkluzji 𝒢(A*)𝒞(A*) jest zakończony.

{ Przejdziemy teraz do dowodu inkluzji 𝒢(A*)C(A*) . }

Niech L oznacza dowolny język rozpoznawany przez automat 𝒜=(S,f,s0,T). Dowód polega na rozbiciu języka L na fragmenty, dla których stwierdzenie, że są to języki regularne będzie dość oczywiste. Natomiast sam język L będzie wynikiem operacji regularnych określonych na tych właśnie fragmentach. Poniżej przeprowadzamy defragmentację języka L.

Dla s,tS niech

L(s,t)={wA*:f(s,w)=t}.

Jest to język złożony ze słów, które przeprowadzają stan s automatu 𝒜 w stan t . Ogół liter alfabetu A przeprowadzających stan s w t oznaczymy przez

A(s,t)={aA:f(s,a)=t}.

Dla stanów s,tS i zbioru S1S niech

L(s,S1,t)={wA*:f(s,w)=t,f(s,w1)S1:w=w1v,w1,vA*}.

Jest to język, który można przedstawić graficznie następująco:

RYSUNEK ja-lekcja7-w-rys3

Na koniec przyjmijmy
L(s,S2,t)={wA*:f(s,w)=t,f(s,w1)S2:w=w1v,w1,vA+},

określony dla S2S i s,tSS2

Język ten jest graficznie interpretowany poniżej.

RYSUNEK ja-lekcja7-w-rys4

Wprost z określeń wynika, że wszystkie wprowadzone powyżej języki są regularne, czyli należą do rodziny 𝒢(A*) . Dowód tego faktu przebiega indukcyjnie ze względu na liczbę elementów zbiorów S1 i S2. Szczegóły tego dowodu pominiemy. Natomiast warto wskazać rolę, jaką spełniają w dowodzie wprowadzone wyżej języki. A mianowicie:

L(s,{s},s)=A(s,s)*

,

L(s,{r},t)=A(s,r)A(r,r)*A(r,t)

,

Parser nie mógł rozpoznać (nieznana funkcja „\Large”): {\displaystyle \displaystyle L(s,S_1,t) = \overline{L}(s,S_1 \setminus \{s\},s)^*\; {\Large [}\bigcup_{r \in S_1 \setminus \{s\}}A(s,r)L(r,S_1 - \{s\},t)\;{\Large ]}.}

Tę ostatnią równość przedstawia poniższy rysunek.

RYSUNEK ja-lekcja7-w-rys5

L(s,S2,t)=r,rS2A(s,r)L(r,S2,r)A(r,t),

co graficznie można przedstawić następująco:

RYSUNEK ja-lekcja7-w-rys6

Dochodzimy więc do konkluzji, iż jezyki L(s,S1,t) oraz L(s,S2,t) są regularne. W szczególności zatem regularny jest język L(s0,S,t)=L(s0,t).

Język L możemy przedstawić w następującej postaci:

L=tT{wA*:f(s0,w)=t}=tTL(s0,t),

co w połączeniu z ustaleniami punktu 3 z poprzedniej części dowodu uzasadnia tezę, że

język L należy do rodziny 𝒢(A*).

Własności języków regularnych i gramatyk regularnych

W tej części wykładu omówimy własności rodziny języków i gramatyk regularnych, czyli typu (3) w hierarchii Chomsky'ego. Ustalimy też związek pomiędzy językami a gramatykami regularnymi. Zbadamy zamkniętość rodziny języków regularnych ze względu na operacje mnogościowe, czyli ze względu na sumę, przecięcie, różnicę i uzupełnienie. Rozpoczniemy jednak tę część wykładu od wprowadzenia jednoargumentowego działania na słowach zwanego odbiciem zwierciadlanym.

Definicja

Odbiciem zwierciadlanym słowa w=a1anA* nazywamy słowo w=ana1. Odbiciem zwierciadlanym języka LA* nazywamy język L={wA*:wL}.

Twierdzenie

Rodzina 𝒢(A*)=𝒞(A*) jest zamknięta ze względu na:

  1. sumę mnogościową, przecięcie, różnicę i uzupełnienie,
  2. katenację i operację iteracji `{} * `{},
  3. obraz homomorficzny,
  4. podstawienie regularne,
  5. przeciwobraz homomorficzny,
  6. odbicie zwierciadlane.

Dowód

{}

Uzupelnic uw:bool|. Zamkniętość rodziny języków 𝒢(A*) ze względu na sumę mnogościową wynika z twierdzenia Kleene'ego. Automat akceptujący iloczyn języków otrzymujemy, zmieniając odpowiednio zbiór stanów końcowych w automacie rozpoznającym sumę. Bowiem pozostając przy oznaczeniach punktu 3 z dowodu twierdzenia Kleene'ego, automat 𝒜=(S,f,s0,F), gdzie F=T1×T2, rozpoznaje język L1L2. Jeśli automat 𝒜=(S,f,s0,T) akceptuje język L, to automat 𝒜=(S,f,s0,ST) akceptuje język L=A*L. Ostatnia własność implikuje zamkniętość ze względu na uzupełnienie.

Uzupelnic uw:kat|. Z twierdzenia Kleene'ego, punkt 4 i 5, wynika zamkniętość ze względu na katenację i operację iteracji `{} * `{}.

Uzupelnic uw:hom|. Niech h:A*B* będzie homomorfizmem. Dowód implikacji

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L\in \mathcal{REG}(A^{*})\Longrightarrow \: h(L)\in \mathcal{REG}(B^{*})}

przeprowadzimy zgodnie ze strukturą definicji rodziny języków regularnych. Dla L= i dla L={a} , gdzie a jest dowolną literą alfabetu A , implikacja jest oczywista. W pierwszym przypadku obrazem homomorficznym jest język pusty, a w drugim język {w} , gdzie w jest pewnym słowem nad alfabetem B . Dla dowolnych języków regularnych X,Y𝒢(A*) prawdziwe są równości:

  • h(XY)=h(X)h(Y)𝒢(B*) ,
  • h(XY)=h(X)h(Y)𝒢(B*) ,
  • h(X*)=h(n=0Xn)=n=0(h(X))n=(h(X))*𝒢(B*),

co kończy dowód tego punktu.

Uzupelnic uw:podst|. Uzasadnienie jest podobne jak dla homomorfizmu. Jedyna różnica tkwi w tym, że dla podstawienia regularnego s:A*𝒫(B*) i dla dowolnej litery aA wartość podstawienia na literze jest pewnym językiem regularnym s(a)=L𝒢(B*) , a nie słowem jak w przypadku homomorfizmu.

Uzupelnic uw:przec|. Niech h:A*B* będzie homomorfizmem. Aby udowodnić implikację

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L\in \mathcal{REG}(B^{*})\Longrightarrow \: h^{-1}(L)\in \mathcal{REG}(A^{*})}

, odwołamy się do własności, że dla języka L𝒢(B*) istnieje skończony monoid M i homomorfizm φ:B*M taki, że L=φ1(φ(L)). Dla homomorfizmu φh:A*M mamy

równość:
((φh)1(φh))(h1(L))=h1(L).

Korzystając teraz z punktu Uzupelnic 4| twierdzenia Uzupelnic ja-lekcja3-w tw2.1|, wnioskujemy, że h1(L)𝒢(A*) .

Uzupelnic uw:odb|. Wykorzystamy tutaj zapis języka regularnego przez wyrażenie regularne. Niech dla języka L𝒢(A*) wyrażenie regularne α𝒲 będzie takie, że L=α. Wtedy język L jest opisany przez wyrażenie regularne α, które uzyskujemy z α przez odbicie zwierciadlane, a dokładniej odwrócenie kolejności katenacji w każdej sekwencji tego działania występującej w wyrażeniu regularnym.

W wykładzie drugim wprowadziliśmy pojęcie gramatyki. Wracamy do tego pojęcia, a w szczególności do gramatyki typu (3), czyli regularnej. Przypomnijmy, że produkcje takiej gramatyki G=(VN,VT,v0,P) mają postać:

vvxlubvx,

gdzie v,vVN,xVT*. Gramatykę typu (3), nazywamy inaczej lewostronną lub lewoliniową. Określa się też gramatykę regularną prawostronną (prawoliniową). Jest to gramatyka G=(VN,VT,v0,P), której produkcje są postaci:

vxvlubvx,

gdzie v,vVN,xVT*. Jeśli język L=L(G) jest generowany przez gramatykę typu (3) (lewoliniową), to jego odbiciem zwierciadlanym jest L=L(G), gdzie G jest gramatyką prawoliniową, którą uzyskuje się z gramatyki G przez odbicie zwierciadlane prawych stron produkcji. Oznacza to, iż zmieniamy produkcje według następujących zasad:

vvx zastępujemy przez vxv,
vx zastępujemy przez vx.

Oczywiście, jeśli L jest językiem generowanym przez gramatykę prawoliniową, to L jest generowany przez odpowiednią gramatykę lewoliniową.

Podamy teraz charakterystykę rodziny języków regularnych 𝒢(A*) przez rodzinę gramatyk prawoliniowych.

Twierdzenie

Niech LA*. Język L𝒢(A*) wtedy i tylko wtedy, gdy L=L(G) dla pewnej gramatyki prawoliniowej G.

Dowód

Załóżmy, że automat 𝒜=(S,A,f,s0,T) rozpoznaje język L . Definiujemy gramatykę G=(VN,VT,v0,P) przyjmując VN=S,VT=A,v0=s0 oraz określając w następujący sposób zbiór produkcji

P={saf(s,a):sS,aA}{s1:sT}.

Dla dowolnego stanu sS i słowa wA+ prawdziwa jest równoważność

s0*wsf(s0,w)=s.

Dowód przeprowadzimy indukcyjnie ze względu na długość słowa w. Niech w=a, dla pewnego aA. Z definicji zbioru produkcji P wynika równoważność

s0ass=f(s0,a).

Rozważmy teraz w=a1an oraz s0*ws. Z założenia indukcyjnego

wynika, że
f(s0,a1an1)=ss0*a1an1s

oraz, że s=f(s,an) wtedy i tylko wtedy, gdy sans. A więc fakt, że s=f(s0,w)=f(s0,a1an)=f(f(s0,a1an1),an) jest równoważny temu, że s=f(s0,a1an1)ans . A to z kolei równoważne jest

s0*a1an1s,sans

i ostatecznie równoważne faktowi, że s0*a1an1ans . A zatem dowodzona równoważność jest prawdziwa dla wA+, ponieważ

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle w\in L(\mathcal{A})\: \Longleftrightarrow \: s=f(s_{0},w)\in T\: \Longleftrightarrow \: s_{o}\mapsto ^{*}ws,\, s\rightarrow 1\in P\: \Longleftrightarrow \: w\in L(G).}

Dla w=1 mamy Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle 1\in L(\mathcal{A})\: \Longleftrightarrow \: s_{0}\rightarrow 1\in P\: \Longleftrightarrow \: 1\in L(G), } co kończy dowód w jedną stronę.

Rozważmy teraz język L=L(G) generowany przez pewna gramatykę prawoliniową G=(VN,VT,v0,P). Skonstruujemy gramatykę równoważną G i taką, w której wszystkie produkcje są postaci vav lub v1, gdzie v,vVN,aA. Będziemy zamieniać produkcje występujące w gramatyce G na inne, o żądanej postaci, zgodnie z następująmi zasadami:

1. Produkcje typu vv, gdzie v,vVN

Z symbolem nieterminalnym vVN kojarzymy określony poniżej zbiór

VN(v)={vVN:vv1vnvwG}

oraz zbiór produkcji

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle P(v) = \{ v \rightarrow xv" \; : \; x \neq 1 , \; \exists v' \in V_N(v) , v' \rightarrow xv" \in P \} \cup}
{vx:vVN(v),vxP}.

Dla każdego takiego symbolu vVN usuwamy ze zbioru P wszystkie produkcje vv i wprowadzamy na to miejsce wszystkie produkcje ze zbioru P(v).

2. Produkcje typu vx dla x1.

Jeśli produkcja taka występuje w P i x1, to do alfabetu nieterminalnego VN dodajemy nowy symbol vx. Następnie ze zbioru P usuwamy powyższą produkcję i dodajemy dwie nowe:

vxvx,vx1.

Zauważmy, że jeśli xy, to vxvy.

3. Produkcje typu vxv dla x>1.

Jeśli va1anvP, przy czym n2, to do alfabetu nieterminalnego VN dodajemy nowe symbole v1,vn, produkcję va1anv usuwamy ze zbioru P i

dodajemy produkcje:
va1v1,v1a2v2,,vn1anv.

Po opisanych powyżej trzech modyfikacjach gramatyki G generowany język, co łatwo zauważyć, nie ulega zmianie. Zatem skonstruowana gramatyka jest równoważna wyjściowej. Dla otrzymanej gramatyki określamy teraz automat niedeterministyczny 𝒜=(S,A,f,{s0},T), przyjmując S=VN, A=VT oraz s0=v0 i definiując następująco funkcję przejść: f(v,a)={vVN:vavP}. Przjmując T={vVN:v1P} jako zbiór stanów końcowych, stwierdzamy, że automat 𝒜 rozpoznaje język

Parser nie mógł rozpoznać (błąd składni): {\displaystyle \displaystyle L(\mathcal{A})=\{w\in V_{T}^{*}\: :\: f(s_{0})\cap T\neq \emptyset \}=L. }

Uzyskany rezultat, w świetle równości 𝒢(A*)=C(A*) , kończy dowód twierdzenia.

Algorytmiczną stroną równoważności udowodnionej w powyższym twierdzeniu zajmiemy się w następnym wykładzie. Przykłady ilustrujące twierdzenie zamieszczamy poniżej.

Przykład

  1. Niech 𝒜=(S,A,f,s0,T) będzie automatem takim, że

S={s0,s1,s2},A={a,b},T={s1}, a graf przejść wygląda następująco:

RYSUNEK ja-lekcja7-w-rys7

Gramatyka G=(S,A,s0,P), gdzie

P={s0as1,s0bs2,s1as2,s1bs0,s11,s2as0,s2bs1}

akceptuje język L(𝒜).

Zauważmy, że język
L(𝒜)=L(G)={wA*:#aw#bw=1mod3}.
  1. Niech G=({v0,v1},{a,b},v0,P), gdzie
P={v0av0,v0ab,v0bv1,v11}.

Gramatykę G przekształcamy w równoważną gramatykę

G=({v0,v1,v2,vb},{a,b},v0,P),

gdzie

P={v0av0,v0av2,v0bv1,v2bvb,v11,vb1}.

Niedeterministyczny automat 𝒜ND=({v0,v1,v2,vb},{a,b},f,v0,{v1,vb}), gdzie graf przejśc wygląda następująco:

RYSUNEK ja-lekcja7-w-rys8

L(G)=L(𝒜ND)=a*b

Wykorzystując udowodnione do tej pory własności rodziny języków generowanych przez gramatyki regularne, uzasadnimy teraz, iż ta właśnie rodzina, czyli ogół języków typu (3) w hierarchii Chomsky'ego pokrywa się z rodziną 𝒢(A*) .

Twierdzenie

Dla dowolnego alfabetu A rodziny języków regularnych A* oraz języków generowanych przez gramatyki regularne są równe, czyli 𝒢(A*)=3 .

Dowód

Odbicie zwierciadlane dowolnego języka L𝒢(A*) , czyli język L należy również do rodziny 𝒢(A*) , co oznacza, że LC(A*) . Na podstawie twierdzenia Uzupelnic twprawlin| istnieje więc gramatyka prawoliniowa G taka, że L=L(G) . A stąd wniosek, że L=L=L(G) dla pewnej gramatyki G typu (3). Zatem L3 .

Rozważmy teraz język L typu (3), czyli L=L(G) dla pewnej gramatyki regularnej. A więc L=L(G) dla pewnej gramatyki prawoliniowej i LC(A*) . Z twierdzenia Kleene'ego wynika, że L𝒢(A*) i ostatecznie L=L𝒢(A*) , co kończy dowód twierdzenia.

Zamkniemy rozważania następującą konkluzją podsumowującą główne rezultaty tego wykładu.

Dla dowolnego skończonego alfabetu A prawdziwe są równości:

𝒢(A*)=𝒞(A*)=3

, czyli wprowadzone pojęcia rodziny języków regularnych, rozpoznawalnych oraz generowanych przez gramatyki typu (3) są tożsame.