9. előadás 1. Dr. Kallós Gábor 2014 2015 1
Tartalom Motiváció Verem és végtelen automata 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
Motiváció Miért van szükség veremautomatára? (Cél: CF nyelveket felismerő automata) Eddig: csak DVA (ill. NDVA) Probléma az L(G 1 ) = {a i b i i 1} nyelvvel A véges automatának nincs emlékező egysége (mit dolgoztunk fel eddig), ill. a memóriája csak az adott állapotra korlátozódik Csak úgy tud n szimbólumot megszámolni, ha végigmegy n állapoton De nem tudjuk előre megmondani, hogy hány db a lesz! Tehát: szükséges az automata felerősítése, bővítése: verem hozzáadása Elképzelt/elvárt működés Az automata az a-kat bepakolja a verembe Nem tudjuk milyen hosszú a mondat első fele (nagyon hosszú is lehet): a veremmemória elvileg végtelen (nem korlátos) (Ha a szó b-vel indul: lehal ) Ha b jön, sorra veszi ki az a-kat a veremből, és nem rak be semmit Ha b után a jön: lehal Ha az utolsó b olvasása után a verem kiürült, akkor a szót az automata elfogadta Látjuk: A veremautomata kifejező ereje nagyobb a véges automatákénál! Feladat: Hasonló módon tervezzük meg (vázlatosan) egy olyan veremautomata működését, amely azon szavakat fogadja el, amelyekben az a-k száma ugyanaz, mint a b-k száma! 3
Szemléltetés Eszköztár: JFLAP projekt Elemek: mint a véges automatánál + verem és veremmozgások Feladat: nézzük meg az aabb és aaaabbbb szavak (végig)olvasásának lehetőségeit! 4
Verem és végtelen automata Verem (stack) 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 sw az USA-ban) A verem elvileg végtelen, ezért a veremautomata már nem véges, hanem egy speciális fajtájú végtelen automata (bár állapothalmaza véges) Az L(G 1 ) nyelvet nem lehet semmilyen korlátos automatával felismerni (tárolni kell a szó első felét) A verem, mint programozási adatszerkezet, tipikusan rekurzív programozási feladatoknál jön elő [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] A veremautomatának több definíciója is ismert Push-down automaton/recognizer (PDA, PDR): 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 (SA): 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) 5
Logikai felépítés Veremmemória: pozíciókra felosztott, egyirányban elvileg végtelen szalag Minden pozícióba egy-egy jel írható A kiolvasás (amely a fő típusnál 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, Z,, v. Z 0 ) Elvileg végtelen: gyakorlatilag valójában véges, de nem korlátos A vermet vízszintes vagy függőleges elrendezésűnek is képzelhetjük 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 (vagy esetleg determinisztikus (kimenő jel nélküli) automata Ez a veremautomata véges vezérlője Diszkrét időskálát követve történik a működés 6
Formális nyelvek Definíció: (Nemdet.) veremautomatának (push-down automatának, PDA, PDR, VA) nevezzük az R = (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; az R = (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 (!) (lásd később) A VA alapvetően (további korlátozások nélkül) nemdeterminisztikus Ha a veremautomata következő állapota az előző állapotból és a bemenő jelből egyértelműen meghatározott, akkor determinisztikus VA-ról beszélünk Definíció: A fenti R = (Q, T, Γ, δ, q 0, Z 0, F) rendszert determinisztikus veremautomatának nevezzük, ha - minden p Q és X Γ esetén fennáll, hogy δ(p, a, X) 1, minden a (T {λ})-ra, - továbbá ha δ(p, λ, X) = 1, akkor δ(p, a, X) = 0, minden a T-re. Azaz nem lehet nem üres szavas átmenet értelmezve olyan állapot és veremszimbólum párra, amire van értelmezve üres szavas átmenet; és minden szimb. hármasra maximum egyféle átmenet van értelmezve 7
Formális nyelvek (Eml.: tisztázandó megadás, működés, elfogadás, grafikus reprezentáció) 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, ha az input λ) 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) 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ólum-sorozatokkal. (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). Veremautomata belső állapota: egy pár, ami a véges automata belső állapotát és a verem tartalmát tartalmazza Mivel a veremmemória elvileg végtelen, ezért végtelen sok belső veremautomata-állapot lehetséges 8
Példák Nemdeterminisztikus veremautomata konstrukció, nyelvtan alapján A szabályok és a nyelv: S asb ab, L = {a i b i i 1} Három állapot, egy kezdő, egy általános- és egy végállapot A veremábécé: N T {Z 0 } Címke az éleken: input, veremből, verembe Írjuk le a megfelelő átmeneteket, pl.: δ(q 0, λ, Z 0 ) = (q 1, SZ 0 ) Mutassuk be, hogy az automata valóban nemdeterminisztikus! Kövessük le az automatán az aabb szó végigolvasását! Mutassuk be közben a verem tartalmát is! Determinisztikus veremautomata konstrukció A korábban már leírt működést valósítja meg A nyelv ugyanaz, mint fent Veremábécé és címkék: mint fent Írjuk le a megfelelő átmeneteket, pl.: δ(q 0, a, Z 0 ) = (q 1, az 0 ) Mutassuk be, hogy az automata valóban determinisztikus! Kövessük le az automatán az aabb szó végigolvasását! Mutassuk be közben a verem tartalmát is! 9
Az automata működésének rajzos bemutatása (már nagyrészt tudjuk) Ábrázolnunk kell az állapotokat (átmenetekkel); az inputot, ill. a verem tartalmát (+ veremből, verembe) Lehetőségek A véges elfogadó automata jelölései nyilván megtarthatók (kezdő- és végállapot) Mint a véges elfogadó automatáknál, csak az állapotok mellett feltüntetjük az inputot és a verem tartalmát (és a veremből kivételt ill. oda berakást) Valamilyen időrend vagy több ábra kell Az egyes állapotokat kiragadva ábrázoljuk, mellettük bemutatva az inputot HF: Nézzünk meg néhány különböző megoldást! F. Z. (címlap) D. P. 159. (B. I.) B. Z. JFLAP Butterfly *Tudunk jobb megoldást találni? 10
Definíció: A C = Q Ʃ* Γ* halmazt az R konfigurációi halmazának nevezzük Megj.: Ʃ* Q Γ* megadás is használatos Egy (q, w, γ) C konfiguráció jelentése az, hogy R a q állapotban van, w Ʃ* input szót kapja (még 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 a szóban továbblépés) Ha γ = Z 1 Z 2 Z n, akkor a veremnek n cellája van kihasználva ( cellában 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 egy vagy több másik konfigurációba léphet tovább (δ alapján) Definíció: A 1 R 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 R (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 Részletezve: (q, aw 1 w 2 w n, Zγ 1 γ 2 γ n ) 1 R (p, w 1 w 2 w n, αγ 1 γ 2 γ n ) Megjegyzés Ha nem akarjuk hangsúlyozni az automata nevét, akkor 1 írható (1 helyett használható a w jelölés is) Konfigurációk sorozata Mint korábban: bevezetjük 1*-ot (a reláció reflexív, tranzitív lezártja) Értelmezhető 1 n is: k 0 1 k 1 1 k 2 1 1 k n 11
Felismert nyelv Egy veremautomata kétféleképpen ismerhet fel egy nyelvet: végállapotokkal vagy üres veremmel Ha a véges automata (a veremautomata véges vezérlője) a teljes input elolvasásával eljut egy végállapotba, akkor a veremautomata megáll Az input az üresszó is lehet Ekkor a veremautomata az input szót elfogadta (elfogadás végállapottal) 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 Az elfogadás feltételét köthetjük a verem üres voltához is (Motiváció: Rekurzív programok esetében úgy tartjuk helyesen befejezettnek a program működését, ha kiürül a verem) Elfogadó állapotok ez esetben nem is kellenek, pusztán a mozgási szabályok megadása is teljesen specifikálja az automatát A ND veremautomata egy input szót elfogad, ha van olyan futása, hogy a bemenő szót elfogadja (emellett lehet persze olyan is, amellyel nem) Az elfogadott szavak összessége alkotja a veremautomata által elfogadott nyelvet 12
Felismert nyelv 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. (B. I.): Azon w szavak 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 konf., ahol már nincs olvasásra váró jelsorozat, és az állapot elfogadó. A verem tartalma érdektelen. (V. M.): w benne van a felismert nyelvben, ha létezik olyan konfigurációsorozat, amelynek első eleme (q 0, w, Z 0 ), utolsó eleme (q, λ, γ), ahol q F és γ Γ*, és a sorozatban (az utolsót kivéve) minden konfiguráció átvihető a következőbe 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 (akár el is hagyható a definícióban) közömbös, hogy a folyamat végén elfogadó állapotban vagyunk-e Az üres veremmel elfogadó automatának is végig kell olvasnia a jelsorozatot! 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 (!) 13
Példa (determinisztikus veremautomata; végállapottal és üres veremmel is elfogad) (9. slide, F. Z. 46., D. P. 170.) (Eml.: δ : Q (Ʃ {λ}) Γ P(Q Γ*) az átmenetfüggvény C = Q Ʃ* Γ* a konfigurációs halmaz) Leírása és működése R = (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) 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 (R) A (q 0, b, λ) konfigurációból nem lehet továbbmenni Igazolható (pl. indukcióval), hogy L f (R) = {a n b n n 0} Itt: L f (R) L e (R), hiszen L e (R) = {a n b n n 1}, azaz L e (R) = L f (R) {λ} Ennek ellenére a két nyelvosztály közötti kapcsolat általánosan is nagyon szoros (ld. köv. slide) 14
Tétel: A veremautomatákkal végállapotokkal felismerhető nyelvek osztálya megegyezik a veremautomatákkal üres veremmel felismerhető nyelvek osztályával Bizonyítás (F. Z.) a) Legyen P = (Q, Ʃ, Γ, δ, q 0, Z 0, F) egy veremautomata végállapotokkal. Megmutatjuk, hogy ekkor megadható egy P' = (Q', Ʃ, Γ', δ', q 0 ', Z 0 ', F') veremautomata üres veremmel, amelyre L f (P) = L e (P'). (Ötlet: Az új P automata első lépésében átmegy a szimulálandó automata kezdőállapotának megfelelő állapotba, eközben a verembe P kezdő veremszimbólumát írja a saját kezdő veremszimbóluma fölé. Ezután az új automata P futását szimulálja, amíg az egy végállapotba jut, vagy el nem akad. Ha P egy végállapotba jutna, akkor az új P' automata átmegy egy új (vég)állapotba input olvasása nélkül, és kiüríti a verem tartalmát.) Definiáljuk P'-t úgy, hogy Q' = Q {q 0 ', q e }, ahol q 0 ' és q e új állapotok (új kezdő és új (vég)állapot) Γ' = Γ {Z 0 '}, ahol Z 0 ' egy új szimbólum (kezdő veremszimbólum) F' = (választható lenne Q' tetszőleges részhalmazának, de logikusabb) δ' az alábbi módon meghatározott: (i) δ' (q 0 ', λ, Z 0 ') = (q 0, Z 0 Z 0 ') (inicializálás) (ii) minden q Q és a (Ʃ {λ}), Z Γ esetén δ' (q, a, Z) = δ(q, a, Z) (ha a λvagy q F; szimuláció) = δ(q, a, Z) {(q e, λ)} (ha a =λés q F; szimuláció) (iii) minden Z Γ'-re δ'(q e, λ, Z) = (q e, λ) (végül: verem ürítése) 15
(Tétel: A veremautomatákkal végállapotokkal felismerhető nyelvek osztálya megegyezik a veremautomatákkal üres veremmel felismerhető nyelvek osztályával) Bizonyítás (folyt.) a) (folyt.) (Eml. δ' az alábbi módon meghatározott: (i) δ' (q 0 ', λ, Z 0 ') = (q 0, Z 0 Z 0 ') (inicializálás) (ii) minden q Q és a (Ʃ {λ}), Z Γ esetén δ' (q, a, Z) = δ(q, a, Z) (ha a λvagy q F; szimuláció) = δ(q, a, Z) {(q e, λ)} (ha a =λés q F; szimuláció) (iii) minden Z Γ'-re δ' (q e, λ, Z) = (q e, λ) (végül: verem ürítése)) Az L f (P) = L e (P ) igazolása: w L f (P) (q 0, w, Z 0 ) 1* P (q, λ, γ), ahol q F (q 0 ', w, Z 0 ') 1 P' (q 0, w, Z 0 Z 0 ') (definícióból) ((i) miatt) 1* P' (q, λ, γz 0 '), ahol q F ((ii) miatt; a veremben maradhat még tartalom) = (q, λ, Z 1 Z 2 Z k Z 0 ') (itt γ = Z 1 Z 2 Z k ) 1 P' (q e, λ, Z 2 Z 3 Z k Z 0 ') ((ii) miatt) 1* P' (q e, λ, λ) ((iii) miatt; itt és előbb: input olvasás nélkül ürítjük a vermet) w L e (P'). (definícióból) 16
Tétel: A VA-kal végállapotokkal felismerhető nyelvek osztálya megegyezik Bizonyítás (folyt.) b) Legyen P = (Q, Ʃ, Γ, δ, q 0, Z 0, ) egy VA üres veremmel. Megmutatjuk, hogy ekkor megadható egy P' = (Q', Ʃ, Γ', δ', q 0 ', Z 0 ', F') VA végállapotokkal, amelyre L f (P') = L e (P). (Ötlet: Inicializálás mint előbb. Ezután az új automata P futását szimulálja, amíg annak verme ki nem ürül (a saját kezdő veremszimbólum persze benne marad), vagy el nem akad. Ha a szimulálandó verem kiürült, akkor az új P' automata átmegy egy új végállapotba.) Definiáljuk P'-t úgy, hogy Q' = Q {q 0 ', q f }, ahol q 0 ' és q f új állapotok (új kezdőállapot és új elfogadó végállapot) Γ' = Γ {Z 0 '}, ahol Z 0 ' egy új szimbólum (kezdő veremszimbólum) F' = {q f } δ' az alábbi módon meghatározott: (i) δ' (q 0 ', λ, Z 0 ') = (q 0, Z 0 Z 0 ') (inicializálás) (ii) minden q Q és a (Ʃ {λ}), Z Γ esetén δ' (q, a, Z) = δ(q, a, Z) (szimuláció) (iii) minden q Q esetén δ' (q, λ, Z 0 ') = (q f, λ) (végül: elfogadás) Az L e (P) = L f (P') igazolása: w L e (P) (q 0, w, Z 0 ) 1* P (q, λ, λ), ahol q Q (definícióból) (q 0 ', w, Z 0 ') 1 P' (q 0, w, Z 0 Z 0 ') ((i) miatt) 1* P' (q, λ, Z 0 '), ahol q Q ((ii) miatt) 1 P' (q f, λ, λ) ((iii) miatt) w L f (P'). (definícióból) Ezek után beszélhetünk egyszerűen csak a veremautomatákkal felismerhető nyelvek osztályáról Függetlenül attól, hogy a felismerés végállapottal vagy üres veremmel történik-e 17
Átalakító algoritmus (üres veremmel felismerő végállapottal felismerő) (B. Z.) Az eredeti automata: M 1 = (Q 1, Ʃ, Γ, δ 1, q 0, z) Az új automata: M 2 = (Q 2, Ʃ, Γ {x}, δ 2, p 0, x, F) Példa: üres veremmel felismerő veremautomata átalakítása, L e (M 1 ) = {0 n 1 n n 1} M 1 kezdőszimbóluma: z, M 2 kezdőszimbóluma: t Az új automata egyik átmenete elhagyható. Melyik? 18
Átalakító algoritmus (végállapottal felismerő üres veremmel felismerő) (B. Z.) Az eredeti automata: M 1 = (Q 1, Ʃ, Γ, δ 1, q 0, z, F) Az új automata: M 2 = (Q 2, Ʃ, Γ {x}, δ 2, p 0, x) Példa: végállapottal felismerő veremautomata átalakítása, L f (M 1 ) = {0 n 1 n n 1} M 1 kezdőszimbóluma: z, M 2 kezdőszimbóluma: t Az első automata végállapottal és egyben üres veremmel ismer fel, ezért az átalakítás nem is lett volna szükséges 19
Feladatok Készítsünk olyan veremautomatát, amely az L = {a n b n+2 n > 0} nyelvet ismeri fel! Ötlet (eml.): az a n b n szavakat felismerő automatánál úgy dolgoztunk, hogy a kezdőállapotból az első a olvasására átmentünk q 1 -be, további a-k olvasásánál q 1 -ben maradtunk, és minden olvasáskor a-t írtunk pluszban a verembe. Az első b olvasásánál átmentünk q 2 -be, a további b-k olvasásánál q 2 -ben maradtunk, és minden olvasáskor a-t olvastunk a veremből. Ugyanezt az ötletet alkalmazzuk most is, csak a végén még két további b beolvasását biztosítani kell. Ehhez új állapotokat vetünk be, q 3 és q 4 is egy-egy b beolvasása után érhető el (a verem ekkor már nincs felhasználva), az utolsó állapot elfogadó. Az átmenetek: δ(q 0, a, Z 0 ) = (q 1, az 0 ), δ(q 1, a, a) = (q 1, aa) % a-k δ(q 1, b, a) = (q 2,λ) δ(q 2, b, a) = (q 2,λ) % normál b-k δ(q 2, b, Z 0 ) = (q 3, Z 0 ) δ(q 3, b, Z 0 ) = (q 4, Z 0 ) % extra b-k Itt q 4 elfogadó állapot Mutassuk be az automata működését az aabbbb szóra! 20
Feladatok Készítsünk olyan veremautomatát, amely az L = {a n b m 0 n m 2n} nyelvet ismeri fel! Ötlet: Az automata az a n b n szavakat felismerő automata módosításával áll elő. A kiindulás tehát ugyanaz, mint az előbb, csak az első és a további a-k olvasása tér el a prototípustól. Nemdeterminisztikusan egy vagy két a-t írhatunk a verembe minden ilyen esetben. (D. P. 171.) Készítsünk olyan üres veremmel elfogadó veremautomatát, amely az {a, b} ábécé feletti helyes zárójelek nyelvét (a Dyck-nyelvet) ismeri fel! (Itt a a nyitó, b a záró zárójel; az a betűk párban meg kell, hogy előzzék a b betűket) Megoldás (csak egy állapot kell): Ha a betűt olvasunk a szalagon, akkor a verembe írjuk Ha b betűt olvasunk a szalagon, akkor törlünk egy a-t Ha Z 0 -t olvasunk a veremből, akkor kiüríthetjük a vermet (elfogadás), vagy folytathatjuk a olvasásával is (a szalagról, ekkor Z 0 visszaírandó a verembe) (D. P. 174.) Rajzoljuk is le az automatákat, és néhány tesztszóval ellenőrizzük, hogy valóban jó lett a megoldásunk! 21
Feladatok Készítsünk olyan veremautomatát, amely az L = { w w a = w b } nyelvet ismeri fel (szavak, amelyekben az a és b betűk száma megegyezik)! Megoldási ötlet: A veremben csak egyféle Z 0 -tól eltérő szimbólum lehet Ha csak Z 0 van a veremben: ugyanannyi a és b betűt olvastunk be eddig Ha k darab a betű van Z 0 felett: eddig k-val több a-t olvastunk be Ha k darab b betű van Z 0 felett: eddig k-val több b-t olvastunk be Az automata működése: Ha a veremben csak Z 0 van, akkor a szalagról olvasott jelet tegyük a verem tetejére Ha a verem tetején levő és a beolvasott jel egyforma, akkor ezek számát a veremben növeljük eggyel Ha a verem tetején levő és a beolvasott jel eltérő, akkor a veremben levő jelek számát eggyel csökkentjük Ha a veremben csak Z 0 van, akkor veremürítés, és átmegyünk végállapotba (rajz: D. P. 172.) Külön köszönet: a hivatkozott jegyzetek szerzőinek 22