6. előadás Környezetfüggetlen nyelvtanok/1. Dr. Kallós Gábor 2013 2014 1 Tartalom Bevezetés CF nyelv példák Nyelvek és nyelvtanok egy- és többértelműsége Bal- és jobboldali levezetések Levezetési fák A fák magassága és határa A derivációk és a levezetési fák kapcsolata Felépítés, konfigurációk és átmenetek Szavak felismerése, felismert nyelv Az elfogadó állapottal és az üres veremmel felismerő automaták ekvivalenciája Feladatok 2
Bevezetés, példa Eml.: környezetfüggetlen (CF) nyelvtan: 2-típusú, csak A α alakú levezetési szabályai lehetnek A helyettesítési szabály a környezettől függetlenül bárhol alkalmazható Itt nagyobb a szabadság a helyettesítési szabályoknál, mint a reguláris nyelveket generáló nyelvtanoknál Ez viszont több olyan problémát is felvet, amivel eddig még nem találkoztunk Példa Legyen G ar = (N, T, P, S), ahol N = {E, T, F} T = {+, *, (, ), a} S = E P = {E E + T T, T T *F F, F (E) a} Megj.: Itt megszegtük a korábbi konvenciót a nemterminális és terminális jelek használatáról, de ez szándékos, a szimbólumoknak itt fontos szerepük van, ezek kellenek (E expression, T term, F factor; az a pedig egy azonosító) A nyelvtan egy additív és egy multiplikatív operátort tartalmazó, és a zárójelezést megengedő aritmetikai kifejezéseket generálja (van precedencia) Be lehetne vezetni hasonlóan a, / és ^ műveleteket, ill. előjeleket is, egy igazi számítástechnikai nyelv aritmetikai kifejezéseket generáló CF nyelvtana tartalmazza ezeket is (de a mi céljainkra most ez kissé szegényes nyelv is elég) 3 CF nyelv példa Példa (folyt.) (Eml.: P = {E E + T T, T T *F F, F (E) a}) A nyelvnek eleme az a + a*a jelsorozat, hiszen egy levezetése E E+ T T+ T F+ T a + T a + T*F a + F*F a + a*f a + a*a De a kifejezést másként is le lehet vezetni E E+ T E + T*F E + T*a E + F*a E + a*a T + a*a F + a*a a + a*a Okoz-e a több levezetés megléte zavart? A levezetéseket egy rendezett, irányított gráffal (fával) ábrázoljuk A fa gyökere a mondatszimbólum Minden csomópontból annyi él (olyan sorrendben) fut ki, amennyi a szabály jobboldalán található szimbólumok száma, és a kifutó élek végén a jobboldal megfelelő szimbólumai találhatók Az egy csomópontból kiinduló élek sorrendje kötött, nem változtatható meg Minden levezetésnek egy levezetési fa felel meg, de egy levezetési fához több levezetés is tartozhat (!) Ha egy kifejezéshez pontosan egy levezetési fa tartozik, akkor a nyelvtant egyértelműnek mondjuk Nevezetes levezetések: mindig a legbaloldalibb nemterminális szimbólumot helyettesítjük (bal (oldali) levezetés); hasonlóan jobb (oldali) levezetés (lásd fent) 4
CF nyelv példa, elemzés Megjegyzések Vigyázat, a levezetési fa nem a nyelvtanhoz tartozik egyértelműen, hanem a levezetéshez! (Egy nyelvtannak sok levezetési fája van/lehet) Az egyes csomópontokhoz tartozó részfákat (a leveleket is) szintaktikai egységeknek nevezzük Példa (folyt.) (Eml.: P = {E E + T T, T T *F F, F (E) a}) Most módosítjuk a nyelvtant, legyen P = {E E + E E *E (E) a} Ez a nyelvtan (G ar2 ) ugyanazt a nyelvet generálja, mint fenti párja Két különböző levezetés az a + a*a jelsorozatra E E+ E E + E*E a + E*E a + a*e a + a*a E E*E E*a E + E*a E + a*a a + a*a Itt azonban két különböző levezetési fa adható meg! A két levezetés tehát lényegesen eltérő 5 Egy- és többértelműség A természetes nyelvekre nagyon jellemző a többértelműség/többalakúság Például: Láttam Zsókát egy távcsővel, lehet Zsóka vitt egy távcsövet, és én láttam Én néztem Zsókát távcsővel messziről Itt a szövegkörnyezet vagy a beszédhelyzet segít eldönteni a helyes jelentést A fordítóprogramoktól ilyet nem nagyon várhatunk Egyszerű példák, amikor a Word helyesírás-ellenőrzője nem jelez: Be nem fejezet, fejezett Jelenjen megy, meg Nem sok szó eset, esett Feladatok Mutassuk meg, hogy a G 2 = ({S}, {2, +, *}, {S S + S, S S*S, S 2}, S) nyelvtanban a 2 + 2*2 szónak két lényegesen különböző levezetése és két levezetési fája van! Milyen eredményt ad a kifejezésre ezekben az esetekben a fordító? A csellengő else probléma (nem egyértelmű, hogy az else melyik feltételehez tartozik): if a then if b then do else print Milyen megoldásokat kínálnak erre a problémára az általunk használt programozási nyelvek? 6
Egy- és többértelműség Ha pusztán csak azt vizsgálnánk, hogy generálható-e valamely jelsorozat egy adott nyelvtannal, akkor az eredeti és a módosított nyelvtan egyenértékű (lenne) De a számítástechnikai nyelvészet szempontjából nem közömbös, hogy milyen szintaktikai egységeken keresztül jutottunk el a levezetés során a mondathoz (!) Utolsó példáinkban (G ar2 és G 2 ) nagyon fontos lenne tudni, hogy melyik műveletet kell előbb elvégezni, az összeadást vagy a szorzást! A számítástechnikai nyelvészetben (automatizált működés) a nem egyértelmű nyelvtanok lényegében használhatatlanok G ar2 -nél az egy- és többértelműséget nyelvtanhoz, és nem a nyelvhez kapcsoltuk Vajon mindig ez a helyzet, vagy lehet a többértelműség nyelvi tulajdonság? Vá.: Léteznek olyan nyelvek, amelyekről bizonyítható, hogy nem lehet egyértelmű nyelvtannal generálni Ekkor a többértelműség nyelvi tulajdonság (azaz: nincs minden CF nyelvnek egyértelmű nyelvtana) Tehát: az egy- és többértelműség tartozhat nyelvhez és nyelvtanhoz is Példa (nem egyértelmű nyelv; csak a helyettesítési szabályokat soroljuk): S aabx YbCc A aab ab C bcc bc X cx c Y ay a Ez a nyelvtan az L = a i b i c j a j b i c i nyelvet generálja Ezzel a nyelvtannal az a i b i c i alakú kifejezések két lényegesen különböző levezetéssel állíthatók elő Igazolható, hogy nincs olyan egyértelmű CF nyelvtan, ami ezt a nyelvet generálja 7 Egy- és többértelműség Az egyértelműség eldöntése: Sajnos nincs olyan módszer, amelynek segítségével általánosan, minden esetre alkalmazhatóan meg lehetne mondani, hogy egy CF nyelvtan vagy nyelv egyértelmű-e Persze ettől még sok konkrét esetben a probléma megoldható (egyedi tulajdonságok vagy szerencsés ötletek felhasználásával) Például a G ar nyelvtan egyértelműsége igazolható Visszatekintés: Felmerül-e egyáltalán az egyértelműség/többértelműség kérdése a reguláris nyelveknél? Itt a levezetési fa nagyon egyszerű, csupán egy szárból áll, amelynek jobb- ill. baloldalán vannak levelek attól függően, hogy bal- vagy jobbreguláris nyelvtanról van-e szó Egy levezetési fához itt csak egy levezetés tartozik, ami abból nyilvánvaló, hogy minden mondatszerű formában csak egyetlen nemterminális szimbólum szerepel (Nemdeterminisztikus automaták mintájára lehet: nemdet. nyelvtan, ekkor egy kifejezésnek több, lényegesen eltérő levezetése van; de: minden reguláris, nemdet. nyelvtanhoz szerkeszthető vele egyenértékű, determinisztikus nyelvtan automatákkal) Tehát: Minden reguláris nyelv egyértelmű, és szerkeszthető hozzá egyértelmű nyelvtan 8
Bal- és jobboldali levezetések Legyen G = (N, T, P, S) egy tetszőleges környezetfüggetlen nyelvtan Definíciók Az α 0 α 1 α 2 α n alakú kifejezéseket levezetéseknek (derivációknak) hívjuk Ha a deriváció során minden i = 1, 2,, n esetén α i -t úgy kapjuk, hogy α i 1 -ben a bal oldalról nézve legelső nemterminálist helyettesítjük egy rá vonatkozó szabály jobb oldalával, akkor a derivációt bal (oldali) derivációnak hívjuk, és rá az α 0 l α 1 l α 2 l l α n jelölést használjuk. Ha egy deriváció minden lépésében a jobbról nézve legelső nemterminálist helyettesítjük, akkor jobb (oldali) derivációról beszélünk, ennek jelölése α 0 r α 1 r α 2 r r α n. Továbbá, ha α olyan, hogy S * α, akkor α-t mondatformának nevezzük Hasonlóan, ha S l * α (ill. S r * α) áll fent, akkor α-t bal (ill. jobb) mondatformának nevezzük Megj.: Minden mondatforma egy speciális (N T)*-beli szó (lásd még: 1. slidesor.) Feladat: Nézzük meg az előző fóliákon, hogy melyik levezetés milyen típusú, ill. milyen mondatformát állít elő! Vigyázzunk arra, hogy a bal oldalról első, második, szabály következetes alkalmazása általában nem eredményez bal (oldali) levezetést A CF nyelvek (nyelvtanok) fontos tulajdonsága, hogy a levezetések fa alakban ábrázolhatók Ez népszerűségükben is központi szerepet játszik 9 Levezetési fák Definíció Legyen X (N T). Az X gyökerű derivációs fák halmazán címkézett, rendezett fák legszűkebb olyan D X halmazát értjük, amelyre teljesülnek az alábbi feltételek: Az a fa, amelynek egyetlen szögpontja (csak gyökere) van, és annak címkéje X, eleme D X - nek (ezt a fát X-szel jelöljük) Ha X λ P, akkor az a fa, amelynek gyökere X-szel van címkézve, és gyökerének egyetlen leszármazottja van, aminek címkéje λ, eleme D X -nek (ezt a fát X[λ]-val jelöljük) Ha X X 1 X 2 X n P és t 1 D X1, t 2 D X2,, t n D Xn (gyermek fák), akkor az a fa, amelynek gyökere X-szel van címkézve, és a gyökérből n él indul rendre a t 1, t 2,, t n fák gyökeréhez, eleme D X -nek (ezt a fát X[t 1, t 2,, t n ]-nel jelöljük) Ha X T, akkor a 2. és 3. feltételek soha nem teljesülnek, ekkor tehát D X = {X} Megjegyzések A derivációs fa levélelemeihez terminális vagy nemterminális szimbólumokat, közbülső csúcsaihoz pedig nemterminális jeleket rendelünk Ha minden levélelem terminális, akkor befejezett levezetésről beszélünk A levezetési fákat szintaxisfának is nevezzük (szintaktikai elemzés) Feladatok Rajzoljuk le a definícióban szereplő levezetési fákat! Rajzoljuk le a következő módon adott levezetési fákat (a G ar nyelvtanhoz): t 1 = E[T[T[F], *, F[(, E, )]]] t 2 = F[(, E[E[T[F[a]]], +, T[F[a]]], )] Rajzoljuk le ugyanezen nyelvtanhoz az a*(a + a) + a levélelemeket tartalmazó levezetési fát! (Cs. Z. 32. old.) 10
Levezetési fák Definíció Legyen t egy X gyökerű levezetési fa. A t fa magasságát h(t)-vel, határát pedig fr(t)-vel jelöljük és az alábbi módon definiáljuk: Ha t = X, akkor h(t) = 0 és fr(t) = X Ha t = X[λ], akkor h(t) = 1 és fr(t) = λ Ha t = X[t 1, t 2,, t n ], akkor h(t) = 1 + max{ h(t i ) 1 i n} és fr(t) = fr(t 1 ) fr(t 2 ) fr(t n ). Azaz: Egy t levezetési fa esetén h(t) a t-ben levő olyan utak hosszának a maximuma, amelyek t gyökerétől annak valamely leveléig vezetnek, fr(t) pedig az az (N T)*- beli szó, amelyet t leveleinek balról jobbra történő leolvasásával kapunk Megj.: h(t)-t a levezetési gráf mélységének is nevezzük Példa Az előző feladatban szereplő t 1 és t 2 fákra h(t 1 ) = 3, fr(t 1 ) = F*(E), h(t 2 ) = 5 és fr(t 2 ) = (a + a) Feladatok Határozzuk meg az előző oldalakon szereplő további levezetési fák határát és magasságát! Térjünk vissza az 1. slidesor levezetési fáira (41. old.), és ott is végezzük el ugyanezt a feladatot (2-es, 2.5-es, 3-as típusú nyelvtanok) Adjunk meg az előző példák alapján 0, 1 és 2 magasságú levezetési fákat! A levezetések és a levezetési fák közötti szoros kapcsolatot mutatja a következő tétel 11 Levezetési fák Tétel: Tetszőleges X (N T) és α (N T)* esetén X * α akkor és csak akkor áll fent, ha van olyan t D X levezetési fa, amelyre fr(t) = α Bizonyítás a) A feltétel szerint ekkor X n α teljesül valamely n 0-ra. A jobb oldal igazolása: n szerinti indukcióval. Az n = 0 esetben X = α. Itt az egyetlen szögpontú t = X fa megfelelő, mert erre t D X és fr(t) = X (= α). Legyen most n 1, és tfh. az állítás minden n-nél nem nagyobb számra teljesül. Tegyük fel továbbá, hogy X n + 1 α. Ekkor X X 1 X 2 X k n α 1 α 2 α k = α, ahol teljesülnek a következők: X X 1 X 2 X k egy P-beli szabály, és minden 1 i k esetén X i n i α i, ahol n i n (ezen felül n = n 1 + n 2 + + n k is teljesül). Mivel n i n, az indukciós feltevés miatt minden 1 i k-ra van olyan t i D X, hogy fr(t i ) = α i. Legyen t = X[t 1, t 2,, t k ]. A levezetési fa definíciója miatt t D X, a magasság és a határ definíciója miatt pedig fr(t) = fr(t 1 ) fr(t 2 ) fr(t k ) = α 1 α 2 α k = α. b) Tfh. az X gyökerű t derivációs fára teljesül, hogy fr(t) = α. A bal oldal igazolása: t magassága szerinti indukcióval. Legyen h(t) = 0. Ekkor t = X, tehát fr(t) = α = X. Így X * α (= X) teljesül. Legyen most h(t) = n + 1, és tfh. az állítás minden n-nél nem magasabb derivációs fára teljesül. A magasság és a határ definíciója miatt ekkor t = X[t 1, t 2,, t n ], valamilyen k 1-re és t 1 D X1, t 2 D X2,, t n D Xn levezetési fák esetén, és a derivációs fa definíciója miatt X X 1 X 2 X k P is teljesül. Vezessük be az α i = fr(t i ) jelölést minden 1 i k-ra. Ekkor egyrészt α = α 1 α 2 α k, másrészt az indukciós feltevés szerint minden 1 i k-ra X i * α i. Így X X 1 X 2 X k * α 1 α 2 α k = α. 12
Levezetési fák Megjegyzések Az előző tételben szereplő X * α levezetéshez általában nem csak egy olyan X gyökerű levezetési fa létezik, amelynek határa α. Példa: Legyenek az A ab Ab A a B b szabályok egy CF nyelvtan szabályai. Ekkor A * ab. Ugyanakkor a t 1 = A[a, B[b]] és t 2 = A[A[a], b] fákra fr(t 1 ) = ab és fr(t 2 ) = ab. Feladat: Rajzoljuk le ezeket a fákat! A tételben szereplő t fából az persze következik, hogy X * α fennáll, de az nem, hogy a levezetés lépései egyértelműen meghatározottak Példa: A t 1 = E[T[T[F], *, F[(, E, )]]] fa határa F*(E); ez kétféle módon is megkapható E T T*F F*F F*(E) E T T*F T*(E) F*(E) Egy derivációs fa által reprezentált levezetések egy ekvivalencia-osztályt alkotnak Mindegyikben ugyanaz a mondatforma (szó) van levezetve Az ugyanott megjelenő ugyanolyan nemterminálisra ugyanazt a szabályt alkalmazzák Ez a példákban jól látható A szabályalkalmazások sorrendje lehet különböző 13 Levezetési fák Célunk a továbbiakban: minden ekvivalencia-osztályból kiemelni egy reprezentánst, legyen ez például a legbaloldalibb levezetés (ez jó, és mindig létezik) Készen vagyunk? Ha X l * α, akkor X * α is fennáll, mivel minden bal (oldali) levezetés egyúttal levezetés is Ugyanaz érvényes a jobb (oldali) levezetésekre is De fordítva ez már nem igaz, X * α-ból nem következik, hogy X l * α is fenáll Egy legbaloldalibb levezetés persze mindig kijelölhető a fában Gond: A legbaloldalibb levezetés nem biztos, hogy tényleg bal (oldali) levezetés! (És ugyanaz persze a legjobboldalibbra is érvényes) Példa: A G ar nyelvtan esetén E * E + F + T teljesül, de E l * E + F + T és E r * E + F + T nem áll fent Feladat: Ellenőrizzük a példát! Ha csak terminális szavakat engedünk meg a levezetési fa leveleiben, akkor a kijelentés már megfordítható Azaz: teljes, befejezett fa kell! 14
Levezetési fák Állítás: Tetszőleges X (N T) és w T* esetén a következő három állítás ekvivalens: X * w X l * w X r * w Bizonyítás A bal és a jobb (oldali) levezetések között fennálló szimmetria miatt elegendő az első és a második állítás ekvivalenciáját igazolni. (Tudjuk: Ha X l * w, akkor X * w is fennáll, mivel minden bal (oldali) levezetés egyúttal levezetés is.) Fordítva, tfh. X * w. Ekkor X n w teljesül valamely n 0-ra. A másik oldal igazolása: n szerinti indukcióval. Az n = 0 esetben X = w, ami csak úgy lehet, hogy X T. Így nyilvánvaló, hogy X l * w. Tegyük fel most, hogy a következtetés teljesül minden n-nél nem nagyobb számra, és legyen X n + 1 w. Ekkor ez a deriváció felírható X X 1 X 2 X k n w 1 w 2 w k = w alakban, ahol k 1, X X 1 X 2 X k P és minden 1 i k-ra teljesül X i n i w i, ahol n i n. Így az indukciós feltevés miatt X i n l i w i is fennáll. Ekkor viszont X l X 1 X 2 X 3 X k l w 1 X 2 X 3 X k l w 1 w 2 X 3 X k l l l w 1 w 2 w 3 w k = w. A G nyelvtan által generált nyelv fogalma a jelen részben definiált fogalmak segítségével is megadható L(G) = {w T* S * w} = {w T* S l * w} = {w T* S r * w} L(G) = {fr(t) t D S, fr(t) T*} 15 Célunk a CF nyelveket felismerő automaták bevezetése Ha a véges automata definíciójában elhagyjuk az állapothalmaz végességére vonatkozó feltételt, akkor a (véges ábécéjű) végtelen automata fogalmához jutunk Így ez túl általános, ezért speciális fajtájú végtelen automatákat vezettek be Verem használata az automatáknál Veremautomata eredetileg: aritmetikai kifejezések számítógéppel történő kiértékelése (1960-as évek) (Az implementáló szoftvert levédték szabadalommal, ez volt az első védett szoftvertermék az USA-ban) Máshol is használjuk: verem, mint programozási adatszerkezet Tipikusan rekurzív programozási feladatoknál Példa: Hanoi tornyai (C-szerű pszeudokód) A forráspálcáról (source) a célpálcára (target) kell pakolni Megoldás: Segédpálcát (help) vetünk be Az egyes rudakhoz mint veremhez tudunk hozzáférni A rekurzív hívások szintén egy verem segítségével hajtódnak végre 16
Logikai felépítés Veremmemória: pozíciókra felosztott, egyirányban végtelen szalag Minden pozícióba egy-egy jel írható A kiolvasás (amely egyúttal törlés is) a bevitelhez képest fordított sorrendben történik (LIFO: Last In First Out) A belső tartalomhoz közvetlenül nem férünk hozzá, mindig csak a verem tetején levő elemet tudjuk kiolvasni Szintén a verem tetejére helyezhetünk el újabb elemet A verem alján kezdetben csak egy speciális szimbólum van (kezdőszimbólum) A vermet legtöbbször függőleges elrendezésűnek képzeljük Vízszintes elrendezésnél a legelső betű a legfelső, a szalag egyik irányba végtelen Input szalag: ezen kapja meg az automata a véges bemenő szót Ezt betűnként tudja leolvasni Az input szalag lehet üres is (λ szó) Véges, iniciális nemdeterminisztikus (kimenő jel nélküli) automata Ez a veremautomata véges vezérlője Diszkrét időskála mentén haladva történik a működés 17 A működés kezdetén A veremben csak a kezdő veremszimbólum van Az input szalag olvasófeje a szalag első betűjére mutat Ha a szalagon csak az üres szó van, akkor ezt érzékeli A (veremautomatához tartozó) véges automata a kezdő állapotában van A mozgás során Új állapotba kerülünk (ez a régivel megegyező is lehet), Az olvasófej egy szimbólummal továbblép (kivéve λ szó), A verem tetejére új jelsorozat íródik be A verem tetején eddig levő szimbólum megsemmisül (ha meg akarjuk tartani: vissza kell írni a verembe) Ha a véges automata a teljes input elolvasásával eljut egy végállapotba, akkor a veremautomata megáll Ekkor a veremautomata az input szót elfogadta (ugyanez az üresszóra is lehet) (Lehetséges elfogadás üres veremmel is, lásd később) A veremautomata akkor is megáll, ha a véges automata olyan állapotban van, amelyhez nem tartozik egyetlen alkalmas átmenet sem Nincs lehetséges átmenet a verem tetején levő jel figyelembe vételével és az input olvasásával a véges automatában 18
A nemdeterminisztikus veremautomata egy input szót elfogad, ha van olyan futása, hogy a bemenő szót elfogadja (emellett lehet persze olyan is, amellyel nem) Egy veremautomata kétféleképpen ismerhet fel egy nyelvet: végállapotokkal vagy üres veremmel Elfogadó állapotok kellenek ill. nem kellenek (lásd később) Veremautomata belső állapota: egy pár, ami a verem tartalmát és a véges automata belső állapotát tartalmazza (a veremautomata végtelen) Az elvileg végtelen (pontosan: véges, de nem korlátos) befogadóképességű veremmemória összes lehetséges tartalma eredményez végtelen sok állapotot CF nyelvet nem lehet korlátos befogadóképességű veremmemóriával elemezni (a mondat első fele nagyon hosszú lehet, lásd példák lent) A veremautomata kifejező ereje nagyobb a véges automatákénál Megj.: A veremautomatának több definíciója is ismert Push-down automaton: az új infót a régi tetejére írjuk, a régi lenyomódik, csak a legfelső adatot lehet kiolvasni ekkor ki is vesszük (Ezt az automatát tanuljuk) Stack automaton: az új infót itt is a régi tetejére írjuk, de kivétel nélkül lehet olvasni belőle, és nemcsak a verem tetejéről (Nem ezt az automatát tanuljuk; ennek jelentősége kisebb) De: a stack memory a veremmemória angol neve 19 Definíció: Veremautomatának (push-down automatának) nevezzük a P = (Q, Ʃ, Γ, δ, q 0, Z 0, F) rendszert, ahol Q egy nem üres, véges halmaz, az állapotok halmaza, Ʃ az input ábécé (szalag ábécé), Γ a veremábécé, q 0 Q a kezdőállapot, Z 0 Γ a verem kezdőszimbólum (kezdőjel), F Q a végállapotok halmaza, δ : Q (Ʃ {λ}) Γ P(Q Γ*) az átmenetfüggvény (mozgási szabályok halmaza) Megjegyzések Valamennyi fenti halmaz véges, hiszen egyébként nem lehetne véges módon leírni a nyelvet Ʃ helyett T, Γ helyett Z, δ helyett d jelölés is használatos; a P = (Q, T, Z, q 0, Z 0, δ, F) megadás is szokásos A végállapot halmaz az üres vermes felismerő automatánál kiesik (!) A P név a push-down automatából rövidült A δ : definíciójában szereplő P szimbólum a hatványhalmaz jelölése; (Q Γ*) részhalmazaiba képezünk A veremautomata alapvetően (további korlátozások nélkül) nemdeterminisztikus Az átmenet folyamata (a δ függvény működése) Tetszőleges q Q állapot, a (Ʃ {λ}) input és a verem tetején lévő Z Γ szimbólum esetén legyen δ (q, a, Z) = {(q 1, α 1 ), (q 2, α 2 ),, (q n, α n )}, valamilyen n 0-ra, q 1, q 2,, q n Q állapotokkal és α 1, α 2,, α n Γ* veremszimbólumokkal. (n = 0 eset: a képhalmaz üres.) Az automata a q állapotból az a input hatására (ez lehet λ is) átmegy valamelyik q i állapotba, a verem tetején levő Z-t törli, és beírja a verembe α i -t (ha ez λ, akkor nem ír be semmit, ekkor a veremben eggyel kevesebb szimbólum marad). 20
Definíció: A C = Q Ʃ* Γ* halmazt a P konfigurációi halmazának nevezzük Megj.: Ʃ* Q Γ* megadás is használatos Egy (q, w, γ) C konfiguráció jelentése az, hogy P a q állapotban van, a w Ʃ* input szót kapja (még nem fel nem dolgozott input rész), és vermének tartalma γ Az input szó feldolgozása: egy lépésben egy betűt, vagy λ-t olvas be (ekkor nincs az input szóban továbblépés) Ha γ = Z 1 Z 2 Z n, akkor a veremnek n cellája van (mindegyik cellában csak egy szimbólum lehet), és Z 1 áll a verem tetején A konfigurációnál a következő input szimbólum és a verem tetején álló szimbólum is feltüntethető, ekkor (q, aw, Zγ) írandó Átmeneti reláció: a konfigurációk közti átmenetet írja le Ezek Descartes-szorzatán értelmezett Egy konfigurációból az automata a δ függvény definíciója szerint egy vagy több másik konfigurációba léphet tovább Definíció: A 1 P C C átmeneti relációt a következőképpen definiáljuk tetszőleges p, q Q, a (Ʃ {λ}), w Ʃ*, Z Γ és α, γ Γ*-ra (q, aw, Zγ) 1 P (p, w, αγ) akkor és csak akkor áll fent, ha (p, α) δ (q, a, Z) Az a = λ esetben az inputban nincs előrehaladás, ekkor az automata λ-mozgást végez (Ábrák: F. Z. 44.) Megjegyzések Ha nem akarjuk kihangsúlyozni az automata nevét, akkor 1 is használható A 1 operátor (reláció) helyett használható a w jelölés is 21 Konfigurációk sorozata Mint korábban: bevezetjük 1*-ot Értelmezhető 1 n is: k 0 1 k 1 1 k 2 1 1 k n Példa (determinisztikus veremautomata; végállapottal fogad el, B. I. 106.) (Eml.: δ : Q (Ʃ {λ}) Γ P(Q Γ*) az átmenetfüggvény C = Q Ʃ* Γ* a konfigurációs halmaz) Leírása és működése δ(q 0, a, Z 0 ) = (q 1, az 0 ) δ(q 0, b, Z 0 ) = (q 1, bz 0 ) δ(q 1, a, a) = (q 1, aa) δ(q 1, b, a) = (q 1, ba) δ(q 1, a, b) = (q 1, ab) δ(q 1, b, b) = (q 1, bb) δ(q 1, c, a) = (q 2, a) δ(q 1, c, b) = (q 2, b) δ(q 2, a, a) = (q 2,λ) δ(q 2, b, b) = (q 2,λ) δ(q 2, λ, Z 0 ) = (q 3, Z 0 ) F = {q 3 } Elemzendő mondat: aabacabaa Induló konfiguráció: (q 0, aabacabaa, Z 0 ) A konfigurációk sorozata: (q 0, aabacabaa, Z 0 ) 1 (q, abacabaa, az 0 ) 1 (q, bacabaa, aaz 0 ) 1 1 (q 1, acabaa, baaz 0 ) 1 (q 1, cabaa, abaaz 0 ) 1 (q 2, abaa, abaaz 0 ) 1 1 (q 2, baa, baaz 0 ) 1 (q 2, aa, aaz 0 ) 1 (q 2, a, az 0 ) 1 (q 2, λ, Z 0 ) 1 1 (q 3, λ, Z 0 ) Így az automata a jelsorozatot elfogadta, hiszen minden input szimbólumot feldolgozott, és elfogadó állapotba került Megj: Az automata a wcw 1 alakú szavakat fogadja el 22
Példa (nemdeterminisztikus veremautomata; végállapottal fogad el) Leírása és működése δ(q 0, a, Z 0 ) = (q 1, az 0 ) δ(q 0, b, Z 0 ) = (q 1, bz 0 ) δ(q 1, a, a) = (q 1, aa) (q 2,λ) δ(q 1, b, a) = (q 1, ba) δ(q 1, a, b) = (q 1, ab) δ(q 1, b, b) = (q 1, bb) (q 2,λ) δ(q 2, a, a) = (q 2,λ) δ(q 2, b, b) = (q 2,λ) δ(q 2, λ, Z 0 ) = (q 3, Z 0 ) F = {q 3 } Eltérés az előző automatától: a c szimbólum kiesik (nem látjuk, hol a szó közepe) Elemzendő mondat: abbaabba A konfigurációk sorozata (első kör): (q 0, abbaabba, Z 0 ) 1 (q 1, bbaabba, az 0 ) 1 (q 1, baabba, baz 0 ) 1 (? két választási leh.) A (q 2,λ) ágon megyünk tovább: (q 1, baabba, baz 0 ) 1 (q 2, aabba, az 0 ) 1 (q 2, abba, Z 0 ) 1 (? nincs tovább) Lehetőségek: vagy nem a nyelv mondatával dolgozunk, vagy rossz irányba indultunk el Visszatérés, és a (q, bb) ágon megyünk tovább: (q 1, baabba, baz 0 ) 1 (q 1, aabba, bbaz 0 ) 1 (q 1, abba, abbaz 0 ) 1 (? két választási leh.) A (q 1,λ) ágon megyünk tovább: (q, abba, abbaz 0 ) 1 (q 2, bba, bbaz 0 ) 1 (q 2, ba, baz 0 ) 1 (q 2, a, az 0 ) 1 1 (q 2, λ, Z 0 ) 1 (q 3, λ, Z 0 ) Az automata a jelsorozatot elfogadta, tehát ez a szó az automata nyelvének egy mondata Nemdeterminisztikus automatánál (a döntéshez) minden lehetséges mozgássorozatot meg kell nézni Megj: Az automata a ww 1 alakú szavakat fogadja el 23 Definíció: A P veremautomata által végállapotokkal felismert nyelven az L f (P) = {w Ʃ* (q 0, w, Z 0 ) 1* (q, λ, γ), ahol q F és γ Γ*} nyelvet értjük Tehát: végállapotokkal P azon w input szavakat ismeri fel, amelyek hatására a q 0 kezdőállapotból a verem kezdeti Z 0 tartalma mellett az automata valamely q végállapotba kerül. A veremben végül maradhat valamilyen γ tartalom. Másként (B. I.): Azok a w jelsorozatok a nyelv mondatai, amelyek a kezdőállapottal és a verem kezdeti tartalmával olyan konfigurációt alkotnak, amelyből tetsz. számú lépésben elérhető egy olyan konfiguráció, ahol már nincs olvasásra váró jelsorozat (ez az üres jelsorozat), és az állapot elfogadó. A verem tartalma érdektelen. Az elfogadás feltételét köthetjük a verem üres voltához is Definíció: A P veremautomata által üres veremmel felismert nyelven az L e (P) = {w Ʃ* (q 0, w, Z 0 ) 1* (q, λ, λ), ahol q Q} nyelvet értjük Tehát: üres veremmel P azon w input szavakat ismeri fel, amelyek hatására a q 0 kezdőállapotból a verem kezdeti Z 0 tartalma mellett P verme kiürül. F-nek ilyenkor nincs szerepe közömbös, hogy a folyamat végén elfogadó állapotban vagyunk-e F akár a definiáló rendezett hetesből is elhagyható De: az üres veremmel elfogadó automatának is végig kell olvasnia a jelsorozatot! (Ábrák: F. Z. 45 46.) Egy konkrét veremautomata esetén a végállapottal, ill. az üres veremmel elfogadott nyelvek (nagyon) különbözhetnek egymástól fontos rögzíteni, hogy milyen módon akarjuk használni az automatát (!) 24
Az automata működésének rajzos bemutatása Ábrázolnunk kell az állapotokat (átmenetekkel); az inputot, ill. a verem tartalmát Lehetőségek Mint a véges elfogadó automatáknál, csak az állapotok mellett feltüntetjük az inputot és a verem tartalmát; valamilyen időrend vagy több ábra kell Az egyes állapotokat kiragadva ábrázoljuk, mellettük bemutatva az inputot és a verem tartalmát Lásd még: D. P. 159. 25 Példa (determinisztikus veremautomata; végállapottal fogad el) Leírása és működése P = (Q, Ʃ, Γ, δ, q 0, Z 0, F), ahol Q = {q 0, q 1, q 2 }, Ʃ = (a, b), Γ = (a, Z 0 ), F = {q 0 } δ(q 0, a, Z 0 ) = (q 1, az 0 ) (első a) δ(q 1, a, a) = (q 1, aa) (többi a) δ(q 1, b, a) = (q 2,λ) (első b) δ(q 2, b, a) = (q 2,λ) (többi b) δ(q 2, λ, Z 0 ) = (q 0,λ) (vége) (Az automata parciálisan definiált; rajz: D. P. 170.) Elemzendő mondat: aabb A konfigurációk sorozata (a működés egyszerűen követhető): (q 0, aabb, Z 0 ) 1 (q 1, abb, az 0 ) 1 (q 1, bb, aaz 0 ) 1 (q 2, b, az 0 ) 1 1(q 2, λ, Z 0 ) 1 (q 0, λ, λ) Elemzendő mondat: abb Feladat: Mutassuk meg, hogy abb L f (P) A (q 0, b, λ) konfigurációból nem lehet továbbmenni (Konstruáljunk hasonló kis feladatokat az előző oldalakon szereplő automatákhoz is) Igazolható az is (pl. indukcióval), hogy L f (P) = {a n b n n 0} Itt: L f (P) L e (P), hiszen L e (P) = {a n b n n 1}, azaz L e (P) = L f (P) {λ} Ennek ellenére a két nyelvosztály közötti kapcsolat általánosan is nagyon szoros Tétel: A veremautomatákkal végállapotokkal felismerhető nyelvek osztálya megegyezik a veremautomatákkal üres veremmel felismerhető nyelvek osztályával 26