Kétirányú automaták
Kétirányú automata: ugyanolyan, mint az eddig megszokott véges automata, annyi különbséggel, hogy a átmeneti függvény egy állapotból és egy karakterből álló párhoz egy új állapotot és egy irányt ( ) rendel, az irány szerint lép az automata balra, jobbra vagy semerre (és persze megy át az új állapotba). Lehet nem determinisztikus is, most azonban nézzünk egyenlőre csak determinisztikusakat. Rövitítés: 2VA. Állítás: A kétirányú automaták sem erősebbek mint az egyirányúak, azaz ugyanazokat a nyelveket ismerik fel mint az eddigi 1VA-k. 1.Az s irány, azaz a semerre-se-lépés elhagyása nem gyengíti az automatát. Ez azért igaz, mert ha van egy olyan 2VA, ami tartalmaz s-es átmenetet, akkor ehhez készíthetünk egy olyan, másik 2VA-t, ami ugyanazt fogadja el, csak nincsen benne ilyen s-es átmenet. A következőképpen megy ez: ha van egy átmenet, akkor kövessük az automata működését egészen addig, amíg végre lelép az a-ról. Ha ekkor R állapotba kerül és jobbra/balra lép, akkor vegyük be a szabályt, az s-eset meg hagyjuk el. Első ötlet: Szimuláljuk a 2VA-t egyirányúval a következő módon. Amíg előre lépked a 2VA, addig menjünk mi is vele, ha visszafele indulna, akkor mi álljunk meg és várjuk meg amíg visszatér. Ha visszatért, akkor vegyük fel mi is újra a fonalat. 2. Előfordulhat, hogy nem tér vissza a 2VA, de akkor nem is tudja végigolvasni a szót, azaz nem fogadja el. Ez persze nem baj, ekkor mi is megállhatunk az 1VA-val és ekkor az 1VA sem fogad el. Második ötlet: Ne várjuk meg amíg visszatér (pláne, mert lehet, hogy nem is tér vissza), hanem tegyük fel, hogy valaki megmondja nekünk, hogy visszajön-e és ha igen, akkor milyen állapotban. Ha pl. a 2VA egy (R,a) párra a (Q,l) párral válaszol, tehát elindul visszafelé, akkor az a valaki megmondja nekünk, hogy ehhez az állapothoz milyen visszatérő állapot tartozik (mondjuk ez P) és ekkor a szimulációt a P állapotból folytatuk, azaz a megnézzük, hogy a 2VA mit tesz a (P,a) párra. (Megjegyzés: ezt az információt, amit ez a valaki tud, úgy nevezzük, hogy ismerjük a visszatérési falat.) 3. Ha a (P,a) pár hatására újra visszafele indul a 2VA, akkor az előbbi eljárást csináljuk mi is újra. Ezt nem tesszük a végtelenségig, mert csak véges sok állapotunk van. Ha ismétlődést találunk, azaz olyan állapotot érintünk aminek a hatására már egyszer elindultunk ugyaninnen visszafele, akkor tuti, hogy most már mindig itt fogunk cikázni előre-hátra, vagyis sose lépünk le az aktuális betűről, azaz sose olvassuk el a szót, tehát nem is fogadjuk el. Ha ezt a helyzetet felismertük, akkor álljunk meg az 2VA-val és utasítsuk el a szót. Ha nincs végtelen ciklus és végül azért mégis lelép előre a 2VA arról a fránya a-ról, és eközben T állapotba megy, akkor lépjünk le mi is az 1VA-val és menjünk T állapotba. Harmadik ötlet Az aktuális visszatérési falat mi is nyilván tudjuk tartani magunknak, nem kell kérdezgetni senkit. 4. Először is: csak véges sok visszatérési fal lehetséges, konkrétan max. (|Q|+1)|Q|-féle, ahol |Q| az állapotok száma. Ugyanis a fal megadása azt jelenti, hogy minden állapotra (van |Q| darab) |Q|+1 lehetséges kimenet van: vagy nem jön vissza, vagy valamelyik állapotban visszajön. 5. A kezdőfal az a fal, ahol minden kimenő állpothoz a (nem)visszatérő állapot (azaz, amikor nem jön vissza) tartozik. Ez azt jelenti, hogy ha a szalag elejéről balra le akarna menni a 2VA, akkor hiba van, megállunk és elutasítunk. 6. Ha a 2VA egy a-n áll most és a fej mögött a v.f. van, akkor a következő visszatérési falat (), azaz azt, ami mögé az a-t átlépve kerülünk a következőképpen számolhatjuk ki. Minden állapotra megnézzük, hogy ha abban az állapotban lépünk visssza az új falon () át, akkor mi történik. Hát először is az biztos, hogy az a-ra lépünk rá. Egyik eset: Ha az a hatására az adott állapotban előre megyünk valami Q állapotba a 2VA-ban, az azt jelenti, hogy visszalépünk a falon, vagyis ekkor meghatároztuk a visszatérési állapotot: ez a Q. Másik eset: Ha az a hatására az adott állapotban visszafele mennénk, akkor meg az előző fal, a , megmondja, hogy mi történik velünk a a előtt, vagyis, hogy milyen állotban kerülünk vissza a a-ra. Ebben az állpotban újra megnézzük, hogy a 2VA mit tesz, ha előre megy, akkor megvan a visszatérési állapot, ha hátra, akkor újra a falat nézzük. Ha észrevesszük, hogy végtelen ciklusba kerültünk és sose jutunk vissza a falon, akkor az eredeti állapothoz a vissza-nem-térési állapotot társítjuk. Ha nincs végtelen ciklus, akkor meg az az állapot lesz a visszatérő, amiben végre visszalépünk. Ezt az eljárást minden állapotra megcsináljuk, így kapjuk az új falat. 7. Ezután látszik már, hogy az 1VA állapotába két dolgot kell belekódolni: az adott pillanatban milyen állapotban van a 2VA és mi az aktuális visszatérési fal, ami mögött állunk. Vagyis az 1VA állapotai alakúak, ahol Qi a 2VA állapota, pedig egy visszatérési fal. Az 1VA kezdőállapota az pár lesz, ahol S a 2VA kezdőállapota, pedig a kezdőfal. Azok a állapotok lesznek elfogadók az 1VA-ban, ahol Qi a 2VA elfogadó állapota. Aaz 1VA függvényét úgy számolom ki, hogy minden előkerülő állapotra (az elején csak a kezdőállapot, a , ilyen, később előkerülnek mások is) megnézzük, hogy mi az új 1VA-s állapot, azaz mi az új 2VA-s állapot és mi az új visszatérési fal |