7. Magasiniga (magasinmäluga) automaadid Eelnevast teame, et iga regulaarne keel genereeritakse teatud regulaarse kontekstivaba grammatika poolt. Teame ka, et kõik mingis tähte c sisaldavas tähestikus olevad wcw R -kujulised palindroomid ei moodusta regulaarset keelt (st ei leidu seda keelt aktsepteerivat lõplikku automaati); küll aga on see keel kontekstivaba, st genereeritakse teatud kontekstivaba grammatika poolt. Seega on regulaarsete keelte hulk kontekstivabade keelte range osahulk. Käesolevas peatükis näitame, et mistahes kontekstivaba keel aktsepteeritakse mingi lõpliku automaadi poolt, kui lisada automaadile vaid üks magasinitüüpi mälupesa. Seega kehtivad seni käsitletud hulkade vahel järgmised seosed, kusjuures sisalduvused on ranged (lõplikku automati võib käsitleda kui triviaalse magasiniga (st millega mingeid operatsioone ei tehta) automaati: lõplikud automaadid magasinmäluga automaadid regulaarsed keeled kontekstivabad keeled regulaarsed grammatikad kontekstivabad grammatikad Näide 7.1 Konstrueerime järgnevas ühe nn. magasiniga täiendatud mittedeterministliku lõpliku automaadi M, mis aktsepteerib kõik wcw R -kujulised palindroomid tähestikus {, 1, c}, kus w on mistahes sõna tähestikus {, 1}. Olgu automaadi M seisundite hulk kahe-elemendiline, Q = {q, q 1 }, ja sisendsümbolite hulk kolme-elemendiline, Σ = {, 1, c}. Lisaks vaatleme nn. magasini (inglise keeles stack), mis võib sisaldada mistahes lõpliku hulga siniseid ja rohelisi kuulikesi, aga samuti ülimalt ühe punase kuulikese. Magasinist võetakse kuule põhimõttel viimasena sisse - esimesena välja. Automaat M töötab järgmiselt: 1) Töö alguses on M seisundis q ning magasinis on üks punane kuulike; 2) Kui seisundis q on sisendiks, siis lisatakse magasini sinine kuulike, kui sisendiks on 1, siis lisatakse magasini roheline kuulike. Nii ühel kui teisel juhul jääb M seisundisse q. Kui aga sisendiks on c, siis kuulikest ei lisata ning M läheb üle seisundisse q 1. 3) Kui seisundis q 1 on sisendiks (1) ning magasini ülemine kuulike on sinine (vastavalt roheline), siis see võetakse sealt ära ning seisundiks jääb q 1. Kui käigu tulemusena magasinis on ülemiseks punane kuulike, siis see eemaldatakse ning M lõpetab töö. Kõikidel muudel juhtudel M katkestab töö. M aktsepteerib kõik sõnad tähestikus Σ, mille korral töö lõpus on magasin tühi. Kerge on veenduda selles, et magasin tühjeneb parajasti siis, kui sisendsümbolite jada moodustab wcw R -kujulise sõna, kus w {, 1}. Definitsioon 7.2 Magasiniga (mittedeterministlikuks) automaadiks (pushdown automaton) nim. seitsmikut (Q, Σ, Γ, δ, q, Z, F ), milles 1) Q on lõplik seisundite hulk; 2) Σ on lõplik sisendsümbolite hulk; 3) Γ on lõplik magasinisümbolite hulk; 4) q Q on automaadi algusseisund; 5) Z Γ on magasini algussümbol: 6) F Q on lõpuseisundite hulk; 7) δ (nn. üleminekufunktsioon) on kujutus hulgast Q (Σ {ɛ}) Γ hulga Q Γ lõplike osahulkade hulka. 47
Võrdus δ(q, a, Z) = {(p 1, γ 1 ),..., (p m, γ m )} tähendab, et seisundis q olles ning omades tähte Z magasini ülemise tähena, läheb automaat sisendi a Σ toimel ühesse seisunditest p i, kusjuures magasinis asendataks kõige pealmine sümbol Z Γ sõnaga γ i (jadana magasini sisu kirjutades selle jada kõige vasakpoolne sümbol on kõige pealmine ). NB! Paneme tähele, et sisendsümbolina käsitletakse ka tühja sõna, st tegemist on ɛ-üleminekuga automaadiga. Definitsioon 7.3 Juhul, kui δ(q, a, Z) 1 iga q Q, a Σ {ɛ} ja Z Γ korral, kusjuures δ(q, ɛ, Z) = 1 korral δ(q, a, Z) =, a Σ, siis nimetatakse magasiniga automaati M deterministlikuks. Magasiniga (kasutatakse ka terminit magasinmäluga) automaadi tööd (nii eelnenut kui eesseisvat) kirjeldab kolmik (q, w, α), kus q on automaadi momendi seisund, w (veel sisestamata) sisendsümbolite jada ja α on magasinis olevate sümbolite jada. Kui järgmisena sisestamisele tulev sümbol on a ning magasini ülemine sümbol on Z, s.t. magasiniga automaadi momendi olukord kirjeldav kolmik on kujul (q, aw, Zα), siis (p, γ) δ(q, a, Z) puhul kirjutame (q, aw, Zα) (p, w, γα) või (q, aw, Zα) M (p, w, γα), kui on vaja osutada vastavale magasiniga automaadile. Deterministliku automaadi korral on mistahes kolmiku korral järgmisena rakendatav ülimalt vaid üks üleminek. Edaspidi vaatleme seosena eelpooldefineeritud seose refleksiivset ja transitiivset katet, st et kui w = w 1 w 2 ning peale w 1 sisestamist on automaat seisundis p ning magasinis on β, siis kirjutame (q, w, α) (p, w 2, β). Hulka L(M) = {w (q, w, Z ) (p, ɛ, α), p F, α Γ } nimetatakse magasiniga automaadi M lõpuseisundite läbi aktsepteeritavaks keeleks. Hulka N(M) = {w (q, w, Z ) (p, ɛ, ɛ), p Q} nimetatakse magasiniga automaadi M poolt tühja magasini läbi aktsepteeritavaks keeleks. Kuna viimasel juhul lõpuseisundid tähtsust ei oma, siis võetakse selleks tühi hulk. NB! Erinevalt lõplikest automaatidest defineerivad mittedeterministlikud magasiniga automaadid laiema keelte klassi kui deterministlikud magasiniga automaadid: näiteks keelt {ww R w ( + 1) } ei ole võimalik aktsepteerida ühegi deterministliku magasiniga automaadi poolt. Definitsioon?? esitab mittedeterministliku magasiniga automaadi; deterministlikke magasiniga automaate käesolevas kursuses ei käsitleta. Näide 7.4 Järgnev (deterministlik) magasiniga automaat aktsepteerib (tühja magasini kaudu) keele {wcw R w {, 1} }: M = ({q, q 1 }, {, 1, c}, {P, S, R}, δ, q, P, ) δ(q,, P ) = {(q, SP )} δ(q,, S) = {(q, SS)} δ(q,, R) = {(q, SR)} δ(q, 1, P ) = {(q, RP )} δ(q, 1, S) = {(q, RS)} δ(q, 1, R) = {(q, RR)} δ(q, c, P ) = {(q 1, P )} δ(q, c, S) = {(q 1, S)} δ(q, c, R) = {(q 1, R)} δ(q 1,, S) = {(q 1, ɛ)} δ(q 1, ɛ, P ) = {(q 1, ɛ)} δ(q 1, 1, R) = {(q 1, ɛ)} Analoogiliselt lõplike automaatidega võib ka magasiniga automaadid esitada tabeli kujul. Viimase näite korral näeks vastav tabel välja järgmine: (q, P ) (q, S) (q, R) (q 1, P ) (q 1, S) (q 1, R) (q, SP ) (q, SS) (q, SR) (q 1, ɛ) 1 (q, RP ) (q, RS) (q, RR) (q 1, ɛ) c (q 1, P ) (q 1, S) (q 1, R) ɛ (q 1, ɛ) Nii nagu see oli lõplike automaatide puhul, saab ka magasiniga automaatide tööd kujutada märgistatud graafi abil. Kui (p, β) δ(q, a, Z), siis graafil kujutatakse seda tipust q tippu p suunduva noole abil, mis on märgistatud avaldisega a, Z β. 48
Väikese seisundite arvu ja suure arvu üleminekute korral võivad noolte märgised olla üsna kohmakad. Näiteks viimases näites oleva magasiniga automaadi puhul oleks seisundist q iseendasse viiva noole märgistuseks, P SP, S SS, R SR 1, P RP 1, S RS 1, R RR Näitame järgnevas, et magasiniga automaatide poolt lõpuseisundite kaudu aktsepteeritavate keelte klass langeb kokku tühja magasini kaudu aktsepteeritavate keelte klassiga. Teoreem 7.5 Mistahes keele L korral L = L(M 1 ), kus M 1 on mingi magasiniga automaat, parajasti siis, kui L = N(M 2 ) mingi magasiniga automaadi M 2 korral. Tõestus. Tarvilikkus. Olgu L = L(M 1 ), kus M 1 = (Q, Σ, Γ, δ, q, Z, F ). Konstrueerime magasiniga automaadi M 2, mille magasin tühjeneb täpselt siis, kui M 1 jõuab mingisse lõpuseisundisse. Olgu M 2 = (Q {q, q e }, Σ, Γ {X }, δ, q, X, ), kus δ on defineeritud järgmiselt: 1) δ (q, ɛ, X ) = {(q, Z X )}; 2) δ (q, a, Z) = δ(q, a, Z) iga q Q, a Σ {ɛ}, Z Γ korral; 3) δ (q, ɛ, Z) = {(q e, Z)} iga q F ja Z Γ {X } korral; 4) δ (q e, ɛ, Z) = {(q e, ɛ)} iga Z Γ {X } korral. Magasini lõputähis X on võetud kasutusele selleks, et vältida magasini enneaegset tühjendamist (M 1 korral võib magasin tühjeneda ka automaadi mitte lõpuseisundis olles!). Automaadi M 2 konstrueerimist kujutab järgmine joonis: M 2 M 1 q ɛ q F Z ɛ X q e Olgu nüüd x L(M 1 ). Siis (q, x, Z ) M1 (q, ɛ, γ) mingi q F korral. Reeglite 1) ja 2) põhjal saame (q, x, X ) M2 (q, x, Z X ) M2 (q, ɛ, γx ) M2 (q e, ɛ, ɛ), s.t. x N(M 2 ). Kui x N(M 2 ), siis vastavalt M 2 konstruktsioonile peab üleminekute jada algama reeglist 1), misjärel reegli 2) korduva rakendamisega (et lõpus saaks käivituda magasini tühjendamine vastavalt reeglitele 3) ja 4)) peab automaat M 2 jõudma seisundisse q F. Seega x L(M 1 ). Piisavus. Olgu L = N(M 2 ), kus M 2 = (Q, Σ, Γ, δ, q, Z, ). Peame konstrueerima magasiniga automaadi M 1, mis jõuaks mingisse lõpuseisundisse parajasti siis, kui M 2 magasin saab tühjaks. Olgu M 1 = (Q {q, q f }, Σ, Γ {X }, δ, q, X, {q f }), kus: 1) δ (q, ɛ, X ) = {(q, Z X )}; 2) δ (q, a, Z) = δ(q, a, Z) iga q Q, a Σ {ɛ}, Z Γ korral; 3) δ (q, ɛ, X ) = {(q f, ɛ)} iga q Q korral. 49
Automaadi M 1 konstrueerimist kujutab järgmine joonis: M 1 M 2 q ɛ q Z X ɛ... q f Selle tõestus, et L = L(M 1 ), on analoogiline teoreemi tarvilikkuse tõestamisega. Teoreem 7.6 L on kontekstivaba keel parajasti siis, kui L = N(M) mingi magasiniga automaadi M korral. Tõestus**. Tarvilikkus. Olgu ɛ L ja G = (V, T, P, S) keele L genereeriv Greibachi normaalkujul olev grammatika ning olgu M = ({q}, T, V, δ, q, S, ), kus (q, γ) δ(q, a, A), kui A aγ kuulub hulka P. Vaatleme edaspidi vaid vasaktuletusi. Siis igas tuletuskäigus on kõikidel sõnadel vaid terminalidest koosnev prefix, millele järgneb muutujatest koosnev sufiks, kusjuures sufiksit võib vaadelda kui magasinis olevate sümbolite jada. Näitame induktsiooniga tuletusjada i pikkuse järgi, et S = xα, x T +, α V parajasti siis, kui (q, x, S) M (q, ɛ, α). Olgu kõigepealt (q, x, S) i (q, ɛ, α). Kui i = 1, siis x T ja (q, α) δ(q, x, S), s.t. S xα P ja järelikult ka S xα. Olgu x = ya ning olgu (q, ya, S) i 1 (q, a, β) (q, ɛ, α). Kui viimases üleminekujadas kõikides üleminekutes v.a. viimane sümboli a eemaldame, siis saame (q, y, S) (q, ɛ, β), millest induktsiooni eelduse tõttu S = yβ. Viimasest üleminekust (q, a, β) (q, ɛ, α) järeldub, et β = Aγ mingi A V korral, A aη P ja α = ηγ. Seega S = yβ = yaγ yaηγ = xα. Olgu S = xα mingi vasaktuletuse kaudu. i = 1 korral ilmselt (vastavalt M definitsioonile) (q, x, S) (q, ɛ, α). Olgu S = yaγ yaηγ, kusjuures x = ya ja α = ηγ (s.t. viimasel i-1 üleminekul on rakendatud tuletusreeglit A aη). Induktsiooni eelduse tõttu kehtib (q, y, S) (q, ɛ, Aγ), mistõttu (q, ya, S) (q, a, Aγ). Et A aη P, siis (q, η) δ(q, a, A). Seega kehtib (q, x, S) (q, a, Aγ) (q, ɛ, α). Võttes α = ɛ, saame, et S = x parajasti siis, kui (q, x, S) (q, ɛ, ɛ). Kui ɛ L, siis rakendame eelnevat keelele L\{ɛ} ning lisame ülemineku (q, ɛ) δ(q, ɛ, S). Piisavus. Olgu M = (Q, Σ, Γ, δ, q, Z, ). Olgu G = (V, Σ, P, S) KVG, milles V = {[q, A, p] q, p Q, A Γ} {S} ning hulgaks P on võetud järgmine tuletusreeglite hulk: 1) S [q, Z, q] iga q Q korral; 2) Kui (q 1, B 1... B m ) δ(q, a, A), siis lisame hulka P reeglid [q, A, q m+1 ] a[q 1, B 1, q 2 ][q 2, B 2, q 3 ]... [q m, B m, q m+1 ], q, q 1,..., q m+1 Q, a Σ {ɛ}, A, B 1,..., B m Γ. m = korral on tuletusreegliks [q, A, q 1 ] a. Induktsiooniga sammude arvu järgi G tuletusjadas tõestame, et [q, A, p] = x parajasti siis, kui (q, x, A) M (p, ɛ, ɛ). Olgu (q, x, A) (p, ɛ, ɛ). Kui i = 1, siis (p, ɛ) δ(q, x, A), x {ɛ} Σ. Seega [q, A, p] x P. Olgu x = ay ja (q, ay, A) (q 1, y, B 1... B n ) (p, ɛ, ɛ) ning avaldugu y kujul y = y 1... y n, kus y j rakendamisel teegist eemaldatakse esmakordselt B j. Leiduvad seisundid q 2,..., q n+1 = p, nii et (q j, y j, B j ) (q j+1, ɛ, ɛ) vähema kui i üleminekuga. Seega induktsiooni eelduse tõttu [q j, B j, q j+1 ] = y i, 1 j n. Et (q 1, B 1... B n ) δ(q, a, A), siis [q, A, p] a[q 1, B 1, q 2 ]... [q n, B n, q n+1 ], ning järelikult [q, A, p] = ay 1... y n = x. Olgu nüüd [q, A, p] = x. Tuleb näidata, et (q, x, A) (p, ɛ, ɛ). Et i = 1 korral [q, A, p] x P, siis (p, ɛ) δ(q, x, A) ning induktsiooni eeldus on täidetud (x Σ {ɛ}). Eel- 5
dame, et [q, A, p] a[q 1, B 1, q 2 ]... [q n, B n, q n+1 ] = x, q n+1 = p. Siis x = ax 1... x n, kus [q j, B j, q j+1 ] = x j, 1 j n. Induktsiooni eelduse tõttu (q j, x j, B j ) (q j+1, ɛ, ɛ), 1 j n, millest (q j, x j, B j... B n ) (q j+1, ɛ, B j+1... B n ). Et (q, x, A) (q 1, x 1... x n, B 1... B n ), siis (q, x, A) (p, ɛ, ɛ). Võttes q = q, A = Z, saame, et [q, Z, p] = x parajasti siis, kui (q, x, Z ) (p, ɛ, ɛ). Seega S = x parajasti siis, kui (q, x, Z ) (p, ɛ, ɛ), s.t. x L(G) parajasti siis, kui x N(M). Viimase teoreemi põhjal leidub mistahes kontekstivaba grammatika G jaoks magasiniga automaat, mis aktsepteerib täpselt grammatika G poolt genereeritud keele. Seega, kui esitada näiteks mingi programmeerimiskeele L spetsifikatsioon (Greibachi normaalkujulise) kontekstivaba grammatikana, siis leidub selline magasinmäluga automaat, mis on võimeline kontrollima, kas selles keeles L kirjutatud programm vastab spetsifikatsioonile, s.t. on süntaktiliselt korrektne. Näide 7.7 Konstrueerime magasiniga automaadi, mis aktsepteerib kõik sõnad tähestikus {a, b}, milles esinevad tähed a ja b võrdsel arvul, st L = {w; w a = w b }. Keele L genereerib grammatika, mille tuletusreegliteks on P = {S asbs bsas ɛ, A a, B b}. Vastava magasiniga automaadi üleminekureegliteks on δ(q, a, S) = (q, SBS), δ(q, b, S) = (q, SAS), δ(q, ɛ, S) = (q, ɛ), δ(q, a, A) = (q, ɛ), δ(q, b, B) = (q, ɛ). Sõna abba aktsepteerivaks üleminekujadaks on (q, abba, S) (q, bba, SBS) (q, bba, BS) (q, ba, S) (q, a, SAS) (q, a, AS) (q, ɛ, S) (q, ɛ, ɛ). Märkus. Viimases näites tuletusreegli S ɛ ärajätmisel tekkiv grammatika genereerib tühja keele. Ülesanne 7.1 Konstrueerida magasiniga automaat, mis aktsepteerib järgmistest tuletusreeglitest koosneva grammatika poolt genereeritava keele: S aaa, A as bs a. Ülesanne 7.2 Konstrueerida magasiniga automaat, mis aktsepteerib keele L = {w {a, b} ; w a = w b, w 2}. Ülesanne 7.3 Konstrueerida järgmised keeled aktsepteerivad magasiniga automaadid: 1. {a n b n n 1} 2. {a n b n c m m, n 1} 3. {ww R w ( + 1) } 4. { n 1 n n 1} { n 1 2n n 1}. Ülesanne 7.4** Leida keele N(M) jaoks kontekstivaba grammatika, kus M = ({q ; q 1 }, {; 1}, {Z ; X}, δ, q, Z, ) ning δ on defineeritud järgmiselt: δ(q, 1, Z ) = {(q, XZ )}, δ(q, ɛ, Z ) = {(q, ɛ)}, δ(q, 1, X) = {(q, XX)}, δ(q 1, 1, X) = {(q 1, ɛ)}, δ(q,, X) = {(q 1, X)}, δ(q 1,, Z ) = {(q, Z )}. Kas viimane automaat on deterministlik või mittedeterministlik? 51