139 57 1MB
Finnish Pages 93 Year 2012
FORMAALIT KIELET Keijo Ruohonen
2008
Sis¨ alt¨ o 1 1 2 4 4 5 8 10 12 13 15 15
I SANAT JA KIELET 1.1 Sanat ja aakkostot 1.2 Kielet
¨ ANN ¨ ¨ II SA OLLISET KIELET 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8
S¨a¨ann¨olliset lausekkeet ja kielet ¨ arellinen automaatti A¨ Sanojen erottaminen ja pumppaus Ep¨adeterministinen ¨a¨arellinen automaatti Kleenen lause Automaatin minimointi Ratkeavuuskysymyksi¨a Jonokoneet ja transduktorit (katsaus)
17 17 19 20
III KIELIOPIT
24 24 27 29 34 34 36 37
IV CF-KIELET
40 40 44 45
V CS-KIELET
48 48 50 51
VI CE-KIELET
53 53 54 56 59 60
VII KOODIT
3.1 Uudelleenkirjoitusj¨arjestelm¨at 3.2 Kieliopit 3.3 Chomskyn hierarkia
4.1 4.2 4.3 4.4 4.5 4.6 4.7
Sanan j¨asennys Normaalimuodot Pinoautomaatti J¨asennysalgoritmit (lyhyt katsaus) Pumppaus CF-kielten leikkaukset ja komplementit Ratkeavuuskysymyksi¨a. Postin vastaavuusprobleema
5.1 Lineaarisesti rajoitettu automaatti 5.2 Normaalimuotoja 5.3 CS-kielten ominaisuuksia
6.1 Turingin kone 6.2 Algoritminen ratkeavuus 6.3 Aikaluokat (lyhyt katsaus)
7.1 7.2 7.3 7.4 7.5
Koodi. Sch¨ utzenberger’n kriteeri Sardinas–Patterson algoritmi Indikaattorisumma. Prefiksikoodit Rajoitetun viipeen koodit Optimikoodit ja Huffmanin algoritmi i
ii 65 65 65 67 69 69 69 71 74 79 80 80 81 83 83 85
VIII LINDENMAYERIN SYSTEEMIT 8.1 Yleist¨a 8.2 Yhteydett¨om¨at L-systeemit 8.3 Yhteydelliset L-systeemit
IX FORMAALIT POTENSSISARJAT 9.1 Kieli formaalina potenssisarjana 9.2 Puolirenkaat 9.3 Yleinen formaali potenssisarja 9.4 Tunnistuvat formaalit potenssisarjat. Sch¨ utzenberger’n esityslause 9.5 Tunnistuvuus ja Hadamardin tulo 9.6 Esimerkkej¨a formaaleista potenssisarjoista 9.6.1 Multikielet 9.6.2 Stokastiset kielet 9.6.3 Pituusfunktiot 9.6.4 Kvanttikielet 9.6.5 Sumeat kielet
86 Kirjallisuus 88 Hakemisto
Esipuhe T¨am¨a moniste on tarkoitettu TTY:n kurssin MAT-41180 Formaalit kielet” perusmate” riaaliksi. Monisteessa k¨ayd¨a¨an l¨api peruskonstruktiot nimenomaan kielten ja kielioppien kannalta. Rinnakkaiskurssissa MAT-41176 Automaattiteoria” k¨asitell¨a¨an osin samaa asi” aa automaattien, vaativuuden ja laskettavuuden kannalta. Formaalit kielet ovat saaneet alkunsa matematiikan symbolisesta merkint¨aformalismista, erityisesti kombinatoriikassa ja symbolisessa logiikassa. My¨ohemmin kuvaan tulivat mukaan my¨os erilaiset tiedon salauksessa, siirrossa, pakkauksessa ja virheiden korjauksessa tarvittavat koodit—joilla kaikilla on ollut oma vaikutuksensa my¨os formaalien kielten teoriaan—sek¨a erityisesti laskennan teorian erilaiset mallit. Kuitenkin vasta Noam Chomskyn uraauurtavat ideat luonnollisten kielten tutkimuksessa sek¨a Marcel-Paul Sch¨ utzenberger’n algebrallis-kombinatorinen l¨ahestymistapa antoivat formaalien kielten teorialle varsinaisen sys¨ayksen. My¨os ohjelmointikielill¨a on ollut vahva vaikutus. Teorian kulta-aikana”, 1960- ja 1970-luvuilla, luotiin paljolti pohja ” sen nykyiselle muodolle.1 Nyky¨aa¨n formaalien kielten perusteiden voi sanoa vakiintuneen melko yhtenev¨a¨an muotoon, mik¨a n¨akyy vertailtaessa uusia ja vanhempia oppikirjojakin. Monisteessa esitet¨a¨an klassinen Chomsky-tyyppinen kielten teoria, kuitenkin j¨att¨aen automaattikonstruktiot ja erityisesti laskettavuus v¨ahemm¨alle. Mukana ovat my¨os katsaukset matemaattiseen kooditeoriaan sek¨a Lindenmayerin systeemeihin. Jossain m¨a¨arin valtakirjallisuudesta poikkeavasti esitet¨aa¨n my¨os katsaus formaaleihin potenssisarjoihin, jotta n¨aht¨aisiin tapoja yleist¨a¨a kielen k¨asite kuitenkin pit¨aen sen sanarakenne samana.2 Keijo Ruohonen 1
Alan huippunimist¨ a mainittakoon erityisesti suomalainen akateemikko Arto Salomaa. Tapoja yleist¨ a¨ a kieli muuttamalla sanarakennetta, esimerkiksi graafiksi tai kuvaksi tai moniulotteiseksi, ei t¨ass¨ a k¨ asitell¨ a. 2
Luku 1 SANAT JA KIELET 1.1
Sanat ja aakkostot
Sana on ¨a¨arellinen jono termej¨a, ns. symboleja tai kirjaimia, jotka voidaan valita tietyst¨a ¨a¨arellisest¨a joukosta, ns. aakkostosta. Tavallisia aakkostoja ovat esimerkiksi suomenkielen kirjaimet (+ sanav¨ali, v¨alimerkit jne.) tai bitit 0 ja 1. Yhden pituinen sana, jossa on siis vain yksi symboli, samaistetaan t¨ah¨an symboliin. Erityinen sana on ns. tyhj¨a sana, jossa ei ole lainkaan symboleja, merkit¨a¨an Λ (tai λ tai ε tai 1). Sanan w pituus on siin¨a olevien symbolien lukum¨a¨ar¨a, merkit¨a¨an |w|. Tyhj¨an sanan pituus on 0. Jos aakkostossa on k kirjainta, on n-pituisia sanoja kaikkiaan k n kpl. Enint¨aa¨n n-pituisia sanoja on siis n X k n+1 − 1 kpl, ki = k−1 i=0 jos k > 1, ja n + 1 kpl, jos k = 1. Kaikkiaan sanoja on numeroituvasti a¨a¨ret¨on m¨aa¨r¨a eli ne voidaan kirjoittaa listaksi, vaikkapa ensin pituuden mukaan. Sanojen perusoperaatio on ns. katenaatio, ts. sanojen kirjoittaminen per¨akk¨ain eli yhdyssanaksi. Sanojen w1 ja w2 katenaatiota merkit¨a¨an w1 w2 :lla. Esimerkkej¨a aakkostossa {a, b, c}: w1 = aacbba , w2 = caac , w1 w2 = aacbbacaac w1 = aacbba , w2 = Λ , w1 w2 = w1 = aacbba w1 = Λ , w2 = caac , w1 w2 = w2 = caac Katenaatio on liit¨ann¨ainen eli assosiatiivinen, ts. w1 (w2 w3 ) = (w1 w2 )w3 . T¨am¨an seurauksena toistetut katenaatiot voidaan aina kirjoittaa ilman sulkuja. Katenaatio ei yleens¨a ole vaihdannainen eli kommutatiivinen. Yleens¨a siis w1 w2 6= w2 w1 . Mutta ei toki aina, ja yksikirjaimisessa aakkostossa katenaatio on tietysti vaihdannainen. Sanan w ns. n:s (katenaatio)potenssi on w n = ww · · · w} . | {z n kpl
1
2
LUKU 1. SANAT JA KIELET Erikseen m¨a¨aritell¨a¨an w 1 = w ja w 0 = Λ, ja aina Λn = Λ. Sanan w = a1 a2 · · · an peilikuva on sana wˆ = an · · · a2 a1 ,
ˆ = Λ. Ilmeisesti w erityisesti Λ d ˆ2 wˆ1 . Sana u on sanan w alkusana eli prefiksi (vast. 1w2 = w loppusana eli suffiksi), jos w = uv (vast. w = vu) jollekin sanalle v. Sana u on sanan w osasana, jos w = v1 uv2 joillekin sanoille v1 ja v2 . Sana u on sanan w harva osasana, jos w = w1 u1 w2 u2 · · · wn un wn+1 , miss¨a u = u1 u2 · · · un , joillekin sanoille w1 , w2 , . . . , wn+1 ja u1 , u2, . . . , un .
1.2
Kielet
Kieli on joukko jonkin aakkoston sanoja. Erityisi¨a kieli¨a ovat ¨a¨arelliset kielet, joissa on vain ¨a¨arellinen m¨a¨ar¨a aakkoston sanoja, vasta¨a¨arelliset kielet, joista puuttuu vain ¨a¨arellinen m¨a¨ar¨a aakkoston sanoja, ja tyhj¨a kieli ∅, jossa ei ole sanoja lainkaan. Usein samaistetaan yhden sanan w muodostama kieli {w} sanaan w ja merkit¨a¨an my¨os kielt¨a w:ll¨a. Kielille k¨aytet¨a¨an joukko-opin merkint¨oj¨a: ⊆ (sis¨altyminen), ⊂ (aito sis¨altyminen), ∪ (yhdiste), ∩ (leikkaus), − (erotus) ja (komplementti aakkoston kaikkien sanojen suhteen). Sanan w kuulumista kieleen L merkit¨a¨an w ∈ L:ll¨a. Huomaa my¨os negeeratut” ” versiot 6⊆, 6⊂ ja ∈. / Aakkoston Σ kaikkien sanojen muodostamaa kielt¨a, mukana Λ, merkit¨a¨an Σ∗ :ll¨a. Kaikkien muiden Σ:n sanojen paitsi tyhj¨an sanan Λ muodostamaa kielt¨a merkit¨a¨an Σ+ :lla. Siisp¨a L = Σ∗ − L ja Σ+ = Σ∗ − {Λ}. Lause 1. Aakkoston kieli¨a on ylinumeroituvasti ¨a¨aret¨on m¨a¨ar¨a, ts. niit¨a ei voida kirjoittaa listaksi. Todistus. Tehd¨a¨an vastaoletus: Kaikki kielet (yli jonkin aakkoston Σ) voidaan kirjoittaa listaksi L1 , L2 , . . . Muodostetaan nyt kieli L seuraavasti: Kirjoitetaan kaikki aakkoston Σ sanat listaksi w1 , w2 , . . . Valitaan sana wi kieleen L tarkalleen silloin, kun se ei ole kieless¨a Li . Ilmeisesti kieli L ei silloin ole mik¨a¨an listan L1 , L2 , . . . kielist¨a. Vastaoletus on n¨ain ollen v¨a¨ar¨a. Lauseen todistuksessa esiintyv¨a menettely on esimerkki ns. l¨avist¨aj¨amenetelm¨ast¨a. Erilaisia tapoja, joilla kieli¨a voidaan m¨a¨aritell¨a, on toisaalta enint¨a¨an numeroituvasti ¨a¨arellinen m¨a¨ar¨a, sill¨a m¨a¨aritelm¨at voidaan esitt¨a¨a sanallisesti ja laittaa sen j¨alkeen aakkosj¨arjestykseen. Formaalien kielten teoriassa kielten m¨a¨aritelm¨at ja kielten tutkiminen niiden m¨a¨aritelmien kautta on keskeist¨a, joten vain (mit¨att¨om¨an pieni) osa kaikista mahdollisista kielist¨a tulee k¨asittelyn piiriin! Kielille voidaan m¨a¨aritell¨a muitakin operaatioita kuin ym. joukko-opilliset operaatiot. Kielten L1 ja L2 katenaatio on L1 L2 = {w1 w2 | w1 ∈ L1 ja w2 ∈ L2 }. Kielen L ns. n:s (katenaatio)potenssi on Ln = {w1 w2 · · · wn | w1 , w2 , . . . , wn ∈ L},
3
LUKU 1. SANAT JA KIELET erityisesti L1 = L ja L0 = {Λ}. My¨os ∅0 = {Λ}! Kielen L ns. katenaatiosulkeuma on L∗ =
∞ [
Ln ,
n=0
ts. muodostetaan sanoja katenoimalla kaikin tavoin L:n sanoja, mukana my¨os Λ. Vastaavasti m¨a¨aritell¨a¨an ∞ [ + L = Ln , n=1
jossa on mukana Λ vain jos se on jo L:ss¨a. (Vrt. edell¨a olleet Σ∗ ja Σ+ .) Siisp¨a ∅∗ = {Λ}, mutta ∅+ = ∅. Itse asiassa L+ = L∗ L = LL∗ . Kielten L1 ja L2 osam¨a¨ar¨at, vasen ja oikea, ovat L1 \L2 = {w2 | w1 w2 ∈ L2 jollekin sanalle w1 ∈ L1 } (otetaan L2 :n sanoista pois kaikin tavoin prefiksein¨a olevia L1 :n sanoja) ja L1 /L2 = {w1 | w1 w2 ∈ L1 jollekin sanalle w2 ∈ L2 }
(otetaan L1 :n sanoista pois kaikin tavoin suffikseina olevia L2 :n sanoja). Huomaa, ett¨a ˆ = {w prefiksin¨a tai suffiksina voi olla my¨os Λ. Kielen L peilikuva on kieli L ˆ | w ∈ L}. Kielten m¨aa¨rittelyss¨a on kaksi peruskoneistoa: kieliopit, jotka tuottavat kielen sanat, ja automaatit, jotka tunnistavat kielen sanat. Lis¨aksi on viel¨a muita tapoja m¨a¨aritell¨a kieli, esimerkiksi s¨a¨ann¨ollisten kielten m¨a¨arittely s¨a¨ann¨ollisen lausekkeen avulla.
”Some people, when confronted with a problem, think ”I know, I’ll use regular expressions.” Now they have two problems.” (Jamie Zawinski)
Luku 2 ¨ ANN ¨ ¨ SA OLLISET KIELET 2.1
S¨ a¨ ann¨ olliset lausekkeet ja kielet
S¨a¨ann¨ollinen lauseke on lauseke, joka m¨a¨arittelee kielen k¨aytt¨aen joukko-opin yhdistett¨a, jota merkit¨a¨an t¨ass¨a +:lla, katenaatiota ja katenaatiosulkeumaa. N¨ait¨a operaatioita yhdistell¨a¨an tiettyjen s¨a¨ant¨ojen mukaan, tarpeen vaatiessa k¨aytet¨a¨an sulkumerkkej¨a ( ja ). Lausekkeen muodostaminen aloitetaan aakkoston symboleista, ∅:sta ja Λ:sta, joukkosulut { ja } j¨a¨av¨at pois. S¨a¨ann¨ollisten lausekkeiden m¨a¨arittelem¨at kielet ovat ns. s¨a¨ann¨olliset kielet. Merkit¨a¨an aakkoston Σ s¨a¨ann¨ollisten kielten perhett¨a RΣ :lla, tai vain R:ll¨a, jos aakkosto on selv¨a. M¨ a¨ aritelm¨ a. R on kieliperhe, joka toteuttaa alla olevat ehdot: 1. Kieli ∅ on R:ss¨a ja vastaava s¨a¨ann¨ollinen lauseke on ∅. 2. Kieli {Λ} on R:ss¨a ja vastaava s¨a¨ann¨ollinen lauseke on Λ. 3. Jokaiselle symbolille a kieli {a} on R:ss¨a ja vastaava s¨aa¨nn¨ollinen lauseke on a. 4. Jos L1 ja L2 ovat R:n kieli¨a ja r1 sek¨a r2 ovat vastaavat s¨aa¨nn¨olliset lausekkeet, niin (a) kieli L1 ∪ L2 on R:ss¨a ja vastaava s¨a¨ann¨ollinen lauseke on (r1 + r2 ). (b) kieli L1 L2 on R:ss¨a ja vastaava s¨a¨ann¨ollinen lauseke on (r1 r2 ). 5. Jos L on R:n kieli ja r on vastaava s¨a¨ann¨ollinen lauseke, niin L∗ on R:ss¨a ja vastaava s¨a¨ann¨ollinen lauseke on (r ∗ ). 6. Vain ne kielet, jotka saadaan yo. s¨a¨ann¨oill¨a 1.–5., ovat s¨a¨ann¨ollisi¨a. Jotteivat lausekkeet kasvaisi kovin pitkiksi, k¨aytet¨a¨an joitakin lyhennysmerkint¨oj¨a, esimerkiksi (rr) =merk. (r 2 ) , (r(rr)) =merk. = (r 3 ) ja (r(r ∗ )) = (r + ). merk.
Lis¨aksi yo. s¨a¨ann¨ot tuottavat t¨aysin sulutettuja s¨a¨ann¨ollisi¨a lausekkeita. Jos sovitaan operaatioiden suoritusj¨arjestykseksi ∗
,
katenaatio ,
4
+,
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
5
voidaan sulkuja j¨att¨a¨a paljolti pois ja kirjoittaa esimerkiksi a+b∗ c lausekkeen (a+((b∗ )c)) sijasta. My¨os on tapana usein samaistaa s¨a¨ann¨ollinen lauseke sen m¨a¨arittelem¨a¨an kieleen, esimerkiksi kirjoitettaessa r1 = r2 tarkoitetaan, ett¨a vastaavat s¨a¨ann¨olliset kielet ovat samat, itse lausekkeet voivat hyvinkin olla erilaiset. Siisp¨a esimerkiksi (a∗ b∗ )∗ = (a + b)∗ . M¨a¨aritelm¨ast¨a seuraa suoraan, ett¨a kahden s¨a¨ann¨ollisen kielen yhdiste ja katenaatio ovat my¨os s¨a¨ann¨ollisi¨a, ja edelleen ett¨a s¨a¨ann¨ollisen kielen katenaatiosulkeuma sek¨a peilikuva ovat s¨a¨ann¨ollisi¨a.
2.2
¨¨ A arellinen automaatti
Automaatteja k¨aytet¨a¨an kielen sanojen tunnistamiseen. T¨all¨oin automaatti k¨asittelee” ” sanaa ja saatuaan k¨asittelyn valmiiksi p¨a¨att¨a¨a” onko sana kieless¨a vai ei. Automaatti on ” a¨a¨rellinen, jos sill¨a on a¨a¨rellinen muisti eli automaatin voidaan ajatella olevan aina jossakin ¨a¨arellisen monesta (muisti)tilasta. Formaalisti ¨a¨arellinen deterministinen automaatti m¨a¨aritell¨a¨an antamalla tilat, kielen symbolit, alkutila, tilasiirtym¨at sek¨a hyv¨aksymiskriteeri, ¨ arellinen (deterministinen) automaatti(DFA) on viisikko M = (Q, Σ, q0 , M¨ a¨ aritelm¨ a. A¨ δ, A), miss¨a • Q = {q0 , q1 , . . . , qm } on ¨a¨arellinen tilojen joukko, jonka alkioita kutsutaan tiloiksi; • Σ on sy¨otesymbolien aakkosto (kielen aakkosto); • q0 on alkutila (q0 ∈ Q); • δ on (tila)siirtofunktio, joka kuvaa jokaisen parin (qi , a), miss¨a qi on tila ja a on sy¨otesymboli, tarkalleen yhdeksi tilaksi qj : δ(qi , a) = qj ; • A on lopputilojen joukko (A ⊆ Q). Automaatti M saa sy¨otteekseen sanan w = a1 · · · an , jonka lukemisen se aloittaa alusta. Aluksi M on alkutilassa q0 ja lukee w:n ensimm¨aist¨a symbolia a1 . Seuraavan tilan qi m¨a¨ar¨a¨a siirtofunktio: qi = δ(q0 , a1 ). Yleisesti, jos M on tilassa qj ja lukee symbolia ai , sen seuraava tila on δ(qj , ai ) ja se siirtyy lukemaan sy¨otteen seuraavaa symbolia ai+1 , jos sellaista on. Jos M:n tila, kun sy¨otteen viimeinen symboli an on luettu, on lopputila eli A:ssa, M hyv¨aksyy w:n, muuten se hylk¨ aa ¨ w:n. Erityisesti M hyv¨aksyy Λ:n, jos alkutila q0 on my¨os lopputila. Automaatin M tunnistama kieli muodostuu sen hyv¨aksymist¨a sanoista, merkit¨a¨an L(M). Sana w = a1 · · · an , sy¨ote tai muu, m¨a¨ar¨a¨a automaatin M ns. tilasiirtoketjun tilasta qj0 tilaan qjn : qj0 , qj1 , . . . , qjn , miss¨a aina q = δ(q , a ). Vastaavasti voidaan m¨a¨aritell¨a siirtofunktion yleistys δ ∗ ji+1
ji
i+1
sanoille rekursiivisesti seuraavasti:
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
6
1. δ ∗ (qi , Λ) = qi 2. Sanalle w = ua, miss¨a a on symboli, δ ∗ (qi , w) = δ δ ∗ (qi , u), a . N¨ain ollen sana w hyv¨aksyt¨a¨an tarkalleen siin¨a tapauksessa, ett¨a δ ∗ (q0 , w) on lopputila, ja L(M)muodostuu tarkalleen niist¨a sanoista w, joille δ ∗ (q , w) on lopputila. 0
Lause 2. (i) Jos kielet L1 ja L2 ovat tunnistettavissa (omilla) ¨a¨arellisill¨a automaateilla M1 ja M2 , niin my¨os L1 ∪ L2 , L1 ∩ L2 ja L1 − L2 ovat tunnistettavissa ¨a¨arellisill¨ a automaateilla. (ii) Jos kieli L on tunnistettavissa ¨a¨arellisell¨a automaatilla M, niin my¨os L on tunnistettavissa ¨a¨arellisell¨a automaatilla. Todistus. (i) T¨ass¨a voidaan olettaa, ett¨a L1 ja L2 ovat samassa aakkostossa. Ellei n¨ain ole, muodostetaan alkuper¨aisten aakkostojen yhdiste. Edelleen voidaan olettaa, ett¨a automaattien M1 ja M2 sy¨oteaakkosto on t¨am¨a yhteinen aakkosto Σ, kuten on helppo todeta. Muodostetaan M1 :st¨a ja M2 :sta tuloautomaatti” seuraavasti. Jos ” M1 = (Q, Σ, q0 , δ, A) ja M2 = (S, Σ, s0 , γ, B), niin tuloautomaatti on M1 × M2 = Q × S, Σ, (q0 , s0 ), σ, C ,
miss¨a lopputilojen joukko C valitaan sopivasti. Tilojen joukko Q × S muodostuu tilapareista (qi , sj ), miss¨a qi on Q:ssa ja sj on S:ss¨a. Jos δ(qi , a) = qk ja γ(sj , a) = sℓ , niin σ (qi , sj ), a = (qk , sℓ ).
Jos halutaan tunnistaa L1 ∪ L2 , otetaan C:hen ne parit (qi , sj ), miss¨a qi on A:ssa tai/ja sj on B:ss¨a, ts. ainakin toinen automaateista p¨a¨atyy lopputilaan luettuaan sy¨otteen. Jos taas halutaan tunnistaa L1 ∩ L2 , otetaan C:hen ne parit (qi , sj ), miss¨a qi on A:ssa ja sj on B:ss¨a, ts. kumpikin automaateista p¨a¨atyy lopputilaan luettuaan sy¨otteen. Viel¨a, jos halutaan tunnistaa L1 − L2 , valitaan C:hen ne parit (qi , sj ), miss¨a qi on A:ssa ja sj ei ole B:ss¨a, ts. M1 p¨a¨atyy lopputilaan luettuaan sy¨otteen, mutta M2 ei. (ii) Komplementin L tunnistava automaatti saadaan M:st¨a yksinkertaisesti vaihtamalla sen lopputilojen joukko komplementikseen.
¨ arellinen automaatti voidaan graafisesti esitt¨a¨a ns. tiladiagrammina. Tila esitet¨a¨an A¨ ympyr¨an¨a, jonka sis¨all¨a on tilan tunnus, ja lopputila erikoisesti kaksoisympyr¨an¨a:
qi
qi
Tilasiirtym¨a δ(qi , a) = qj esitet¨a¨an a:lla merkityn nuolen avulla ja alkutila pelk¨all¨a tulevalla nuolella:
qi
a
qj
q0
T¨allainen esitys on itse asiassa nuolimerkitty digraafi, ks. kurssi Graafiteoria.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
7
Esimerkki. Automaattia {A, B, 10}, {0, 1}, A, δ, {10} , miss¨a δ:n m¨a¨arittelee tilasiirtotaulu δ 0 1 A A B B 10 B 10 A B
vastaa tiladiagrammi
1
0 A
1
0 B
1
10
0 Automaatin tunnistama kieli on s¨a¨ ann¨ollinen kieli (0 + 1)∗ 10. Yleens¨akin ¨a¨arellisten automaattien tunnistamat kielet ovat tarkalleen kaikki s¨a¨ ann¨olliset kielet (ns. Kleenen lause). T¨am¨a todistetaan kahdessa osassa. Ensimm¨ainen osa voidaan todistaa1 heti, toinen osa v¨ah¨an my¨ohemmin. ¨ arellisen automaatin tunnistama kieli on s¨a¨ann¨ollinen. Lause 3. A¨ Todistus. Katsotaan ¨a¨arellist¨a automaattia M = (Q, Σ, q0 , δ, A). M:n tilasiirtoketju on polku, jos siin¨a ei esiinny mik¨a¨an tila monta kertaa. Edelleen tilasiirtoketju on qi -kierto, jos sen ensimm¨ainen ja viimeinen tila on qi eik¨a qi esiinny ketjussa muualla. Viel¨a qi -kierto on qi -piiri, jos ainoa siin¨a monta kertaa esiintyv¨a tila on qi . Huomaa, ett¨a polkuja ja piirej¨a on ¨a¨arellinen m¨a¨ar¨a, ketjuja ja kiertoja yleens¨a sen sijaan on ¨a¨aret¨on m¨a¨ar¨a. Tila qi on sek¨a polku ( tyhj¨a polku”) ett¨a qi -piiri ( tyhj¨a piiri”). ” ” Jokaiseen tilasiirtoketjuun liittyy yksi tai useampia sen aiheuttavia sanoja, kuitenkin ¨a¨arellinen m¨a¨ar¨a. Merkit¨a¨an kaikkiin mahdollisiin qi -kiertoihin liittyvien sanojen muodostamaa kielt¨a Ri :ll¨a. Tyhj¨a¨a piiri¨a vastaa kieli {Λ}. N¨aytet¨a¨an ensin, ett¨a Ri on s¨a¨ann¨ollinen kieli. T¨am¨a tehd¨a¨an induktiolla kierroissa esiintyvien eri tilojen lukum¨a¨ar¨an suhteen. Merkit¨a¨an RS,i :ll¨a sellaisia qi -kiertoja vastaavien sanojen muodostamaa kielt¨a, joissa esiintyy vain Q:n osajoukon S tiloja, mukana tietysti aina qi . Ilmeisesti silloin Ri = RQ,i . Induktio tapahtuu S:n alkioluvun s suhteen ja n¨aytt¨a¨a jokaisen RS,i :n s¨a¨ann¨olliseksi. Induktion l¨aht¨okohta, s = 1: Nyt S = {qi }, mahdolliset kierrot ovat qi sek¨a qi , qi ja kieli RS,i on ¨a¨arellinen ja siis s¨a¨ann¨ollinen (RS,i :ss¨a on Λ ja mahdollisesti joitain yksitt¨aisi¨a symboleja). Induktio-oletus: V¨aitetty tulos pit¨aa¨ paikkansa, kun s < h, miss¨a h ≥ 2. Induktiov¨aite: V¨aitetty tulos pit¨a¨a paikkansa, kun s = h. Induktiov¨aitteen todistus: Jokainen qi -kierto, jossa esiintyy vain S:n tiloja, voidaan kirjoittaa—mahdollisesti monellakin eri tavalla—muotoon qi , qi1 , K1 , . . . , qin , Kn , qi , 1
Todistus voidaan muuntaa matriisimuotoiseksi algoritmiksi, ns. Kleenen algoritmiksi, joka on sukua graafiteorian Warshallin ja Floydin algoritmeille, ks. kurssi Graafiteoria.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
8
miss¨a qi , qi1 , . . . , qin , qi on qi -piiri ja qij , Kj muodostuu qij -kierroista, joissa esiintyy vain S − {qi }:n tiloja. Merkit¨a¨an piiri¨a qi , qi1 , . . . , qin , qi itse¨a¨an C:ll¨a. Sit¨a vastaa tietty ¨a¨arellinen m¨a¨ar¨a sanoja aj0 aj1 · · · ajn (j = 1, . . . , ℓ), jotka aiheuttavat tilasiirtoketjuna juuri piirin C. Kaikkia mahdollisia qij , Kj :ss¨a olevia qij -kiertoja vastaavien sanojen muodostama kieli RS−{qi },ij on Induktio-oletuksen mukaisesti s¨a¨ann¨ollinen, merkit¨a¨an vastaavaa s¨a¨ann¨ollist¨a lauseketta lyhyesti rj :ll¨a. Samoin on s¨a¨ann¨ollinen kaikkia mahdollisia esitetty¨a muotoa qi , qi1 , K1 , . . . , qin , Kn , qi olevia qi -kiertoja vastaavien sanojen muodostama kieli ℓ X
aj0 r1∗ aj1 r2∗ · · · rn∗ ajn =merk. rC .
j=1
Jos sellaiset qi -piirit, joissa esiintyy vain S:n tiloja, ovat C1 , . . . , Cm , niin kysytty s¨a¨ann¨ollinen kieli RS,i on rC1 + · · · + rCm . Itse lauseen todistus on nyt hyvin samantapainen kuin yo. induktiotodistus. Jokainen alkutilasta lopputilaan johtava ketju nimitt¨ain joko muodostuu q0 -kierroista (jos alkutila on samalla lopputila) tai on muotoa qi0 , K0 , qi1 , K1 , . . . , qin , Kn , miss¨a i0 = 0, qin on lopputila, qi0 , qi1 , . . . , qin on polku ja qij , Kj muodostuu qij -kierroista. Kuten edell¨a, vastaavien sanojen muodostama kieli todetaan s¨a¨ann¨olliseksi. Huomautus. Koska tiladiagrammiin tulee aika paljon nuolia, sallitaan usein osittainen tiladiagrammi, jossa ei ole kaikkia tilasiirtymi¨a vastaavia nuolia. Automaatin toiminta sen kohdatessa tilasiirtym¨an, jota ei ole, tulkitaan yksinkertaisesti niin, ettei sy¨otesanaa t¨am¨an tilanteen j¨alkeen en¨a¨a hyv¨aksyt¨a. Vastaavaa siirtofunktiota sanotaan osittaiseksi funktioksi, sill¨a se ei ole aina m¨a¨ aritelty. On varsin helppo todeta, ett¨a t¨am¨a ei lis¨ a¨ a mill¨a¨an tavoin ¨a¨arellisten automaattien tunnistuskyky¨a, sill¨a jokainen vajaa” ¨a¨arellinen ” automaatti voidaan aina korvata ekvivalentilla t¨aydellisell¨a”. Lis¨at¨a¨an vain yksi ylim¨ a¨ a” r¨ainen hylkytila”, johon aina siirryt¨a¨an, kun tilansiirtoa ei muuten ole m¨a¨aritelty ja josta ” ei p¨a¨ase kuin itseens¨a. Automaatissa voi my¨os olla turhia tiloja”, ts. sellaisia tiloja, joihin ei voi mitenk¨ aa ¨n ” p¨a¨ast¨a alkutilasta. N¨am¨a voidaan ilman muuta poistaa.
2.3
Sanojen erottaminen ja pumppaus
Kieli L erottaa sanat w ja v, jos on sellainen sana u, ett¨a tarkalleen toinen sanoista wu ja vu on L:ss¨a. Jos L ei erota sanoja w ja v, niin sanat wu ja vu ovat u:sta riippuen joko molemmat L:ss¨a tai molemmat L:ss¨a. ¨ arellisen automaatin tunnistaman kielen erottelukyvyll¨a on yhteyksi¨a automaatin A¨ rakenteeseen: Lause 4. Jos ¨a¨arellinen automaatti M = (Q, Σ, q0 , δ, A) tunnistaa kielen L ja sanoille w ja v δ ∗ (q0 , w) = δ ∗ (q0 , v), niin L ei erota sanoja w ja v.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
9
Todistus. Kuten helposti voi todeta, yleisesti
Siisp¨a
δ ∗ (qi , xy) = δ ∗ δ ∗ (qi , x), y .
δ ∗ (q0 , wu) = δ ∗ δ ∗ (q0 , w), u = δ ∗ δ ∗ (q0 , v), u = δ ∗ (q0 , vu).
Riippuen siit¨a onko kyseess¨a lopputila vai ei sanat wu ja vu ovat L:ss¨a tai L:ss¨a. Seuraus. Jos kieli L erottaa mitk¨a tahansa kaksi n sanasta w1 , . . . , wn , L:¨a¨a ei voi tunnistaa a¨a¨rellisell¨a automaatilla, jossa on v¨ahemm¨an kuin n tilaa. Todistus. Jos ¨a¨arellisell¨a automaatilla M = (Q, Σ, q0 , δ, A) on tiloja v¨ahemm¨an kuin n kpl, on tiloista δ ∗ (q0 , w1 ) , . . . , δ ∗ (q0 , wn ) ainakin kaksi samaa. Aakkoston ns. palindromien muodostama kieli Lpal on esimerkki kielest¨a, jonka tunnistamiseen tarvitaan a¨a¨ret¨on m¨aa¨r¨a tiloja (olettaen, ett¨a aakkostossa on ainakin kaksi symbolia). Sana w on palindromi, jos wˆ = w. Lpal nimitt¨ain pystyy erottamaan kaikki sanat, kahdesta sanastahan voidaan aina yksi t¨aydent¨a¨a palindromiksi ja toinen ei-palindromiksi. Sama koskee lukuisia muitakin kieli¨a, mm. ns. neli¨oiden muodostamaa kielt¨a Lsqr , jossa ovat mukana tarkalleen kaikki muotoa w 2 olevat sanat. Erottelukyky liittyy l¨aheisesti my¨os tilaluvultaan pienimm¨an ¨a¨arellisen automaatin konstruktioon eli ns. automaatin minimointiin, josta lis¨a¨a my¨ohemmin. Katsotaan viel¨a yo. todistuksen tapaista tilannetta, miss¨a ¨a¨arellisell¨a automaatilla on tarkalleen n tilaa ja hyv¨aksytt¨av¨a sy¨ote on pituudeltaan v¨ahint¨a¨an n: x = a1 a2 · · · an y, miss¨a a1 , . . . , an ovat sy¨otesymboleja ja y on sana. Tiloista q0 = δ ∗ (q0 , Λ) , δ ∗ (q0 , a1 ) , δ ∗ (q0 , a1 a2 ) , . . . , δ ∗ (q0 , a1 a2 · · · an ) ainakin kaksi on samaa, sanotaan δ ∗ (q0 , a1 a2 · · · ai ) = δ ∗ (q0 , a1 a2 · · · ai+p ). Merkit¨a¨an lyhyyden vuoksi u = a1 · · · ai
,
v = ai+1 · · · ai+p
ja w = ai+p+1 · · · an y.
Ilmeisesti nyt sanat uv m w (m = 0, 1, . . . ) tulevat my¨os hyv¨aksytyiksi! T¨am¨a tulos tunnetaan nimell¨a Pumppauslemma (uvw-lemma). Jos kieli L voidaan tunnistaa n-tilaisella ¨a¨arellisell¨ a automaatilla, x ∈ L ja |x| ≥ n, niin x voidaan kirjoittaa muotoon x = uvw, miss¨ a |uv| ≤ n, v 6= Λ ja sanat uv m w ovat kaikki L:ss¨a.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
2.4
10
Ep¨ adeterministinen ¨ a¨ arellinen automaatti
Ep¨adeterministisyydell¨a tarkoitetaan tietyille valinnoille j¨atetty¨a vapautta, ts. mik¨a tahansa mahdollisista useista vaihtoehdoista voidaan valita. Sallitut vaihtoehdot on kuitenkin m¨a¨aritelt¨av¨a ja niit¨a on yleens¨a ¨a¨arellinen m¨a¨ar¨a. Toiset valinnat ovat kuitenkin parempia kuin toiset, ts. voi olla, ett¨a tavoitteeseen p¨a¨ast¨a¨an vain tietyin sopivin valinnoin. ¨ arellisen automaatin tapauksessa ep¨adeterministisyys tarkoittaa tilasiirroissa olevaa A¨ valintaa, kussakin tilanteessa saattaa olla monia vaihtoehtoisia tiloja, joihin voidaan siirty¨a, ja jo alkutiloja voi olla monta. T¨am¨a ilmaistaan siten, ett¨a siirtofunktion arvot ovat tilojen joukkoja, joissa ovat kulloinkin mukana tarkalleen kaikki vaihtoehtoiset seuraavat tilat. Ko. joukko voi olla my¨os tyhj¨a, jolloin tilasiirtoa ei ole, vrt. eo. huomautus osittaisista tiladiagrammeista. Edell¨a ¨a¨arellinen automaatti oli aina deterministinen. Jatkossa pit¨a¨a mainita tarkasti automaatin tyyppi. Formaalisti ep¨adeterministinen ¨a¨arellinen automaatti (NFA) on viisikko M = (Q, Σ, S, δ, A), miss¨a • Q, Σ ja A ovat kuten deterministiselle ¨a¨arelliselle automaatille; • S on alkutilojen joukko; • δ on (tila)siirtofunktio, joka kuvaa jokaisen parin (qi , a), miss¨a qi on tila ja a on sy¨otesymboli, tarkalleen yhdeksi Q:n tilojen joukoksi T : δ(qi , a) = T . Huomaa, ett¨a sek¨a S ett¨a T edell¨a voivat olla tyhji¨a joukkoja. Kaikkien Q:n osajoukkojen joukkoa merkit¨a¨an tavallisesti 2 Q :lla. Siirtofunktio δ voidaan v¨alitt¨om¨asti yleist¨a¨a siten, ett¨a sen ensimm¨ainen argumentti on tilajoukko: [ ˆ a) = ∅ ja δ(U, ˆ a) = δ(∅, δ(qi , a). qi ∈U
Edelleen voidaan m¨aa¨ritell¨a δˆ∗ samaan tapaan kuin edell¨a m¨aa¨riteltiin δ ∗ : δˆ∗ (U, Λ) = U ja δˆ∗ (U, ua) = δˆ δˆ∗ (U, u), a .
M hyv¨aksyy sanan w, jos tilajoukossa δˆ∗ (S, w) on ainakin yksi lopputila. Λ hyv¨aksyt¨a¨an, jos ainakin yksi lopputila on S:ss¨a. Kaikki M:n hyv¨aksym¨at sanat muodostavat M:n tunnistaman kielen L(M). Ep¨adeterministinen ¨a¨arellinen automaatti on deterministisen ¨a¨arellisen automaatin yleistys, kun j¨alkimm¨aisess¨a aina tila qi samaistetaan joukkoon {qi }. Kuitenkaan se ei ole kielentunnistuskyvyilt¨a¨an yht¨a¨an sen voimakkaampi: Lause 5. Jos kieli voidaan tunnistaa ep¨adetermisell¨a ¨a¨arellisell¨a automaatilla, se voidaan tunnistaa my¨os deterministisell¨a ¨a¨arellisell¨a automaatilla, ja on siis s¨a¨ann¨ollinen. Todistus. Otetaan kieli L, jonka tunnistaa ep¨adeterministinen ¨a¨arellinen automaatti M = (Q, Σ, S, δ, A). Muodostetaan deterministinen ¨a¨arellinen automaatti M1 = (Q1 , Σ, q0 , δ1 , A1 ), miss¨a Q1 = 2 Q , q0 = S , δ1 = δˆ ja A1 muodostuu tarkalleen niist¨a tilojen joukoista, joissa on ainakin yksi A:n tila. M1 :n tilat ovat siis M:n tilojen joukot. Ilmeisesti nyt δ1∗ (q0 , w) = δˆ∗ (S, w), joten M ja M1 hyv¨aksyv¨at tarkalleen samat sanat, ja n¨ain ollen my¨os M1 tunnistaa kielen L.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
11
Hieman toisenlainen ep¨adeterministisyys saadaan, kun sallitaan ns. Λ-siirrot. T¨all¨oin ep¨adeterministisen ¨a¨arellisen automaatin siirtofunktio δ on m¨a¨aritelty my¨os kaikille pareille (qi , Λ), miss¨a qi on tila. Tuloksena on ep¨adeterministinen ¨a¨arellinen automaatti, jossa on Λ-siirtoja (Λ-NFA). Siirto δ(qi , Λ) = T tulkitaan siten, ett¨a automaatti voi siirty¨a tilasta qi mihin tahansa T :ss¨a olevaan tilaan lukematta uutta sy¨otesymbolia. Jos δ(qi , Λ) = ∅ tai δ(qi , Λ) = {qi }, ei tilasta qi ole Λ-siirtoja muihin tiloihin. Muiden kuin Λ-siirtojen osalta δ yleistet¨a¨an tilojen joukoille kuten edell¨a. Λ-siirtojen osalta se voidaan yleist¨a¨a tilajoukoille samaan tapaan: [ ˆ Λ) = ∅ ja δ(U, ˆ Λ) = δ(∅, δ(qi , Λ). qi ∈U
Edelleen se voidaan yleist¨a¨a Λ-siirtojen osalta t¨ahtifunktioksi”: δˆ∗ (U, Λ) = V , jos ” • U:n tilat ovat V :ss¨a; ˆ Λ):n tilat ovat V :ss¨a; • δ(V, • jokainen V :n tila on U:n tila tai siihen p¨a¨ast¨a¨an soveltamalla toistuvasti Λ-siirtoja jostain U:n tilasta l¨ahtien. Ja lopulta voidaan nyt yleist¨a¨a δ muidenkin kuin vain Λ-siirtojen osalta: δˆ∗ (U, ua) = δˆ∗ δˆ δˆ∗ (U, u), a , Λ . Huomaa erityisesti, ett¨a sy¨otesymbolille a saadaan
δˆ∗ (U, a) = δˆ∗ δˆ δˆ∗ (U, Λ), a , Λ ,
ts. ensin tehd¨a¨an Λ-siirtoja, sitten a:n aiheuttama varsinainen” tilasiirto ja lopuksi taas ” Λ-siirtoja. Λ-NFA:n hyv¨aksym¨at sanat ja tunnistama kieli m¨a¨aritell¨a¨an samoin kuin edell¨a. Mutta nytk¨a¨an ei saada lis¨a¨a tunnistusvoimaa: Lause 6. Jos kieli voidaan tunnistaa Λ-NFA:lla, se voidaan tunnistaa my¨os ep¨adeterministisell¨a ¨a¨arellisell¨a automaatilla, ja edelleen deterministisell¨a ¨a¨arellisell¨a automaatilla ja on siis taas s¨aa¨nn¨ollinen. Todistus. Otetaan kieli L, jonka tunnistaa Λ-NFA M = (Q, Σ, S, δ, A). Muodostetaan ep¨adeterministinen ¨a¨arellinen automaatti M1 = (Q, Σ, S1 , δ1 , A) ilman Λ-siirtoja, miss¨a S1 = δˆ∗ (S, Λ) ja δ1 (qi , a) = δˆ∗ {qi }, a .
Ilmeisesti nyt δˆ1∗ (S1 , w) = δˆ∗ (S, w), joten M ja M1 hyv¨aksyv¨at tarkalleen samat sanat, ja n¨ain ollen my¨os M1 tunnistaa kielen L. Huomaa erityisesti, ett¨a jos M hyv¨aksyy Λ:n, niin jostain S:n tilasta p¨a¨ast¨a¨an Λ-siirroilla lopputilaan ja ko. lopputila on silloin S1 :ss¨a.
Ep¨adeterministinenkin ¨a¨arellinen automaatti—Λ-siirroilla tai ilman—voidaan esitt¨a¨a ilmeisell¨a tavalla tiladiagrammin avulla. Jos tilojen v¨alill¨a on useita samansuuntaisia nuolia, on ne usein tapana yhdist¨a¨a yhdeksi nuoleksi kooten ko. nuolten merkit listaksi.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
2.5
12
Kleenen lause
Edell¨a Lauseessa 3 todettiin, ett¨a deterministisen ¨a¨arellisen automaatin tunnistama kieli on aina s¨a¨ann¨ollinen, ja my¨ohemmin viel¨a, ett¨a sama p¨atee my¨os ep¨adeterministisess¨a tapauksessa. T¨am¨a tulos p¨atee my¨os k¨a¨ant¨aen. Kleenen lause. S¨a¨ann¨olliset kielet ovat tarkalleen kaikki ¨a¨arellisten automaattien tunnistamat kielet. Todistus. Pit¨a¨a viel¨a n¨aytt¨a¨a, ett¨a jokainen s¨a¨ann¨ollinen kieli voidaan tunnistaa ¨a¨arellisell¨a automaatilla. Ajatellen s¨a¨ann¨ollisen lausekkeen rakennetta, pit¨a¨a ensin n¨aytt¨a¨a, ett¨a peruskielet” ∅, {Λ} ja {a}, miss¨a a on symboli, voidaan tunnistaa ¨a¨arellisell¨a automaa” tilla. T¨am¨a on helppoa. Toiseksi pit¨a¨a n¨aytt¨a¨a, ett¨a jos kielet L1 ja L2 voidaan tunnistaa ¨a¨arellisell¨a automaatilla, niin samoin voidaan kielet L1 ∪ L2 ja L1 L2 . Yhdisteelle t¨am¨a tehtiin jo Lauseessa 2. Ja kolmanneksi pit¨a¨a n¨aytt¨a¨a, ett¨a jos kieli L on tunnistettavissa ¨a¨arellisell¨a automaatilla, niin samoin on L+ , ja siis my¨os L∗ = L+ ∪ {Λ}. Otetaan sitten tilanne, miss¨a kielet L1 ja L2 voidaan tunnistaa ep¨adeterministisill¨a ¨a¨arellisill¨a automaateilla M1 = (Q1 , Σ1 , S1 , δ1 , A1 ) ja M2 = (Q2 , Σ2 , S2 , δ2 , A2 ), vastaavasti. Voidaan olettaa, ett¨a Σ1 = Σ2 = Σ (lis¨at¨aa¨n vain tyhji¨a siirtoja). Edelleen voidaan ilmeisesti olettaa, ett¨a tilojen joukot Q1 ja Q2 ovat erilliset. Uusi automaatti, joka tunnistaa L1 L2 :n, on M = (Q, Σ, S1 , δ, A2 ), miss¨a Q = Q1 ∪ Q2 ja δ saadaan seuraavasti: ( δ1 (q, a), jos q ∈ Q1 δ(q, a) = δ2 (q, a), jos q ∈ Q2
, jos q ∈ Q1 − A1 δ1 (q, Λ) ja δ(q, Λ) = δ1 (q, Λ) ∪ S2 , jos q ∈ A1 δ2 (q, Λ) , jos q ∈ Q2 .
Lopputilaan voidaan nyt p¨a¨ast¨a alkutilasta vain siirtym¨all¨a Λ-siirrolla M1 :n jostain lopputilasta johonkin M2 :n alkutilaan ja t¨am¨a siirto tapahtuu vaiheessa, jossa M1 on hyv¨aksynyt luetun prefiksin. Lopputilaan p¨a¨asemiseksi pit¨a¨a j¨aljell¨a olevan suffiksin olla L2 :ssa. Viel¨a katsotaan tilannetta, jossa kieli L voidaan tunnistaa ep¨adeterministisell¨a ¨a¨arellisell¨a automaatilla M = (Q, Σ, S, δ, A). Silloin L+ voidaan tunnistaa automaatilla M ′ = (Q, Σ, S, δ ′ , A), miss¨a
( δ(q, Λ) , jos q ∈ /A δ (q, a) = δ(q, a) ja δ (q, Λ) = δ(q, Λ) ∪ S, jos q ∈ A. ′
′
Lopputilasta voidaan nyt siirty¨a aina Λ-siirrolla alkutilaan, mik¨a mahdollistaa toistuvan katenaation. Jos sy¨ote jaetaan osasanoihin sen mukaan miss¨a n¨am¨a Λ-siirrot sattuvat, ovat osasanat kieless¨a L.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
13
Kleenen lauseen ja muiden eo. lauseiden avulla saadaan s¨a¨ann¨ollisille kielille karakterisaatiot sek¨a s¨a¨ann¨ollisten lausekkeiden kautta ett¨a erilaisten ¨a¨arellisten automaattien (DFA, NFA ja Λ-NFA) tunnistamina kielin¨a. N¨am¨a eri karakterisaatiot ovat luonteeltaan erilaisia ja eri tilanteissa k¨aytt¨okelpoisia. Miss¨a s¨a¨ann¨ollinen lauseke sopii hyvin, voi automaatti olla vaikea k¨asitelt¨av¨a, ja toisaalta automaateilla voidaan helposti tehd¨a sellaista, mik¨a on s¨aa¨nn¨ollist¨a lauseketta k¨aytt¨aen vaikeaa. T¨am¨a n¨akyy mainittujen lauseiden todistuksissakin, ajattele vain miten vaikeaa olisi n¨aytt¨a¨a, ett¨a kahden s¨a¨ann¨ollisen kielen leikkaus on s¨a¨ann¨ollinen kieli, suoraan k¨aytt¨aen s¨a¨ann¨ollisi¨a lausekkeita.
2.6
Automaatin minimointi
Monet ¨a¨arelliset automaatit tunnistavat saman s¨a¨ann¨ollisen kielen L. Tilaluvultaan pienin L:n tunnistava deterministinen ¨a¨arellinen automaatti on minimaalinen ¨a¨arellinen automaatti. Minimaalinen ¨a¨arellinen automaatti voidaan l¨oyt¨a¨a tutkimalla kielen L rakennetta. T¨at¨a varten pit¨a¨a tietysti L:n olla s¨a¨ann¨ollinen ja jollain tavoin annettu, mutta katsotaan asiaa ensin aivan yleisesti. Aakkosto on Σ. Pyk¨al¨ass¨a 3 m¨a¨ariteltiin kielen L erottamat sanat. Merkit¨a¨an nyt w 6≡L v, jos kieli L erottaa sanat w ja v, ja vastaavasti w ≡L v, jos L ei erota sanoja w ja v. Viimemainitussa tapauksessa sanotaan, ett¨a sanat w ja v ovat L-ekvivalentit. Ilmeisesti voidaan sopia, ett¨a aina w ≡L w. Edelleen, jos w ≡L v, niin my¨os v ≡L w. Apulause. Jos w ≡L v ja v ≡L u, niin silloin my¨os w ≡L u. (Kuten on tapana sanoa, ≡L on transitiivinen.) Todistus. Jos w ≡L v ja v ≡L u ja z on jokin sana, niin on kaksi mahdollisuutta. Jos vz on L:ss¨a, niin my¨os wz ja uz ovat L:ss¨a. Jos taas vz ei ole L:ss¨a, niin my¨osk¨a¨an wz ja uz eiv¨at ole L:ss¨a. Siisp¨a w ≡L u. T¨ast¨a seuraa, ett¨a Σ∗ :n sanat jakautuvat ns. L-ekvivalenssiluokkiin: Sanat w ja v ovat samassa luokassa, jos ne ovat L-ekvivalentit. Luokkaa, jossa on sana w, merkit¨a¨an [w]:ll¨a. Edustajaksi” voidaan valita mik¨a tahansa toinenkin luokan sana v: Jos w ≡L v, niin ” [w] = [v]. Huomaa, ett¨a jos w 6≡L u, niin [w] ja [u] eiv¨at leikkaa. Jos niiss¨a nimitt¨ain olisi yhteinen sana v, niin w ≡L v ja v ≡L u ja Apulauseen nojalla w ≡L u. L-ekvivalenssiluokkien lukum¨a¨ar¨a¨a kutsutaan kielen L indeksiksi. Se voi olla ¨a¨aret¨onkin, mutta Lauseesta 4 seuraa suoraan, ett¨a Lause 7. Jos kielen tunnistaa deterministinen ¨a¨arellinen automaatti, jossa on n tilaa, niin kielen indeksi on enint¨a¨an n. Toisaalta Lause 8. Jos kielen L indeksi on n, niin se voidaan tunnistaa n-tilaisella deterministisell¨ a a¨a¨rellisell¨a automaatilla. Todistus. Otetaan kieli L, jonka indeksi on n, ja sen eri ekvivalenssiluokat [x0 ], [x1 ], . . . , [xn−1 ], miss¨a x0 = Λ. Deterministinen ¨a¨arellinen automaatti, jonka on m¨a¨ar¨a tunnistaa L, on M = Q, Σ, [Λ], δ, A , miss¨a Q = [x0 ], [x1 ], . . . , [xn−1 ] ,
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
14
A:han otetaan ne ekvivalenssiluokat [xi ], joissa on L:n sanoja, ja δ [xi ], a = [xi a].
Vm. δ:n m¨a¨arittely on OK, sill¨a jos x ≡L y, niin ilmeisesti my¨os xa ≡L ya. Vastaava δ ∗ saadaan silloin suoraan: δ ∗ [xi ], y = [xi y].
Edelleen L(M) muodostuu niist¨a sanoista w, joille δ ∗ [Λ], w = [Λw] = [w]
on M:n lopputila eli sis¨alt¨a¨a L:n sanoja. Ilmeisesti L ⊆ L(M), sill¨a jos w ∈ L, niin [w] on M:n lopputila. Toisaalta, jos [w]:ss¨a on L:n sana v, niin w itsekin on L:ss¨a, muutenhan wΛ ∈ / L ja vΛ ∈ L ja L erottaisi w:n ja v:n. Ts. jos w ∈ L, niin [w] ⊆ L. Siisp¨a L(M) = L. Seuraus. Minimaalinen ¨a¨arellinen automaatti kielelle L sis¨alt¨a¨a L:n indeksin osoittaman m¨a¨ar¨an tiloja. Seuraus (Myhill–Nerode-lause). Kieli on s¨aa¨nn¨ollinen tarkalleen silloin, kun sen indeksi on ¨a¨ arellinen.
Jos s¨a¨ann¨ollinen kieli L annetaan deterministisen ¨a¨arellisen automaatin M = (Q, Σ, q0 , δ, A) tunnistamana kielen¨a, niin minimointi pit¨a¨a luonnollisesti tehd¨a M:st¨a l¨ahtien. Aluksi poistetaan M:st¨a tilat, joihin ei voi p¨a¨ast¨a alkutilasta tilasiirroilla. N¨ain voidaan olettaa, ett¨a kaikki M:n tilat ovat muotoa δ ∗ (q0 , w) jollekin sanalle w. Minimointia varten jaetaan M:n tilat M-ekvivalenssiluokkiin seuraavasti. Tilat qi ja qj eiv¨at ole M-ekvivalentit, jos on sellainen sana u, ett¨a tiloista δ ∗ (qi , u) ja δ ∗ (qj , u) toinen on lopputila ja toinen ei, merkit¨aa¨n qi 6≡M qj . Muussa tapauksessa qi ja qj ovat M-ekvivalentit, merkit¨a¨an qi ≡M qj . Ilmeisesti aina qi ≡M qi . Edelleen, jos qi ≡M qj , niin my¨os qj ≡M qi . Ja jos qi ≡M qj ja qj ≡M qk , niin my¨os qi ≡M qk . Tilojen ekvivalenssiluokat muodostuvat nyt kesken¨a¨an M-ekvivalenteista tiloista ja ne ovat erilliset. (Vrt. L-ekvivalenssiluokat ja ekvivalenssi ≡L .) Merkit¨a¨an tilan qi edustamaa M-ekvivalenssiluokkaa hqi i:ll¨a. Huomaa, ett¨a on samantekev¨aa¨ mik¨a luokan edustaja valitaan. Merkit¨aa¨n kaikkien M-ekvivalenssiluokkien joukkoa Q:lla.
∗ M-ekvivalenssi ja L-ekvivalenssi ovat tekemisiss¨ a toistensa kanssa, sill¨ a δ (q , w) = 0
∗ δ (q0 , v) tarkalleen silloin, kun [w] = [v]. Koska kaikki tilat voidaan saavuttaa tilasiirroilla alkutilasta l¨ahtien, on n¨ain ollen M-ekvivalenssiluokkia yht¨a paljon kuin L-ekvivalenssiluokkia, eli L:n indeksin osoittama m¨a¨ar¨a. Edelleen M-ekvivalenssiluokat ja L-ekvivalenssiluokat voidaan asettaa yksik¨asitteisesti vastaamaan toisiaan:
∗ δ (q , w) ⇋ [w], 0
ja erityisesti hq0 i ⇋ [Λ]. Minimaalinen automaatti, vastaten Lauseen 8 todistuksen konstruktiota, on nyt Mmin = Q, Σ, hq0 i, δmin, A ,
miss¨a A muodostuu niist¨a M-ekvivalenssiluokista, joissa on lopputiloja, ja δmin :n m¨a¨arittelee
δmin hqi i, a = δ(qi , a) . Huomaa, ett¨a jos M-ekvivalenssiluokassa on yksikin lopputila, niin kaikki sen tilat ovat lopputiloja. Huomaa my¨os, ett¨a jos qi ≡M qj , niin δ(qi , a) ≡M δ(qj , a), ts. δmin on hyvin m¨a¨aritelty. Samantapainen konstruktio voidaan tehd¨a my¨os l¨ahtien ep¨adeterministisest¨a ¨a¨arellisest¨a automaatista, Λ-siirroilla tai ilman.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
2.7
15
Ratkeavuuskysymyksi¨ a
S¨a¨ann¨ollisille kielille melkeinp¨a kaikki niit¨a koskevat karakterisaatioprobleemat ovat algoritmisesti ratkeavia. Katsotaan tavallisimmat probleemat (s¨a¨ann¨olliselle kielelle L tai s¨a¨ann¨ollisille kielille L1 ja L2 ): • Tyhjyysprobleema: Onko L tyhj¨a kieli ∅? ¨ arellisest¨a automaatista on varsin helppo todeta, onko sill¨a jokin tilasiirtoketju A¨ alkutilasta lopputilaan vai ei. • Sis¨altymisprobleema: Sis¨altyyk¨o kieli L1 kieleen L2 ? Ilmeisesti L1 ⊆ L2 tarkalleen silloin, kun L1 − L2 = ∅. • Ekvivalenssiprobleema: Onko L1 = L2 ? Ilmeisesti L1 = L2 tarkalleen silloin, kun L1 ⊆ L2 ja L2 ⊆ L1 . ¨ arellisyysprobleema: Onko L ¨a¨arellinen kieli? • A¨ ¨ arellisest¨a automaatista on varsin helppo todeta onko sill¨a miten tahansa pitki¨a A¨ tilasiirtoketjuja alkutilasta lopputilaan vai ei. Vrt. Lauseen 3 todistus. • J¨asenyysprobleema: Onko sana w kieless¨a L? ¨ arellisell¨a automaatilla on helppo tarkistaa, hyv¨aksyyk¨o se sy¨otesanan. A¨
2.8
Jonokoneet ja transduktorit (katsaus)
Jonokone on deterministinen a¨a¨rellinen automaatti varustettuna tulostuksella. Formaalisti jonokone (SM) on kuusikko S = (Q, Σ, ∆, q0 , δ, τ ), miss¨a Q, Σ, q0 ja δ ovat kuten deterministiselle ¨a¨arelliselle automaatille, ∆ on tulosteaakkosto ja τ on tulostusfunktio, joka kuvaa jokaisen parin (qi , a) joksikin ∆:n symboliksi. Lopputiloja ei t¨ass¨a tarvita. δ laajennetaan t¨ahtifunktioksi” δ ∗ tavalliseen tapaan. τ taas laajennetaan seuraavasti: ” ∗ 1. τ (qi , Λ) = Λ 2. Sanalle w = ua, miss¨a a on symboli, τ ∗ (qi , ua) = τ ∗ (qi , u)τ δ ∗ (qi , u), a .
Sy¨otesanaa w vastaava tulostesana on τ ∗ (q0 , w). S(L) = τ ∗ (q0 , w)
Jonokone S kuvaa kielen L kieleksi w∈L .
Automaattikonstruktiota k¨aytt¨aen on melko yksinkertaista todeta, ett¨a jonokone kuvaa aina s¨a¨ann¨ollisen kielen s¨a¨ann¨olliseksi kieleksi. Yleistetty jonokone (GSM)2 on muuten kuin jonokone, mutta tulostusfunktion arvot ovat ∆∗ :n sanoja. J¨alleen voidaan todeta, ett¨a yleistetty jonokone kuvaa aina s¨a¨ann¨ollisen kielen s¨a¨ann¨olliseksi. 2
Jotkut m¨ a¨ arittelev¨ at GSM:¨ a¨ an lopputilatkin, jolloin se ei kuvaa kaikkia sanoja.
¨ ANN ¨ ¨ LUKU 2. SA OLLISET KIELET
16
Jos yleistetyss¨a jonokoneessa on vain yksi tila, sanotaan sen antamaa sanojen (ja kielten) kuvausta morfismiksi. Koska on vain yksi tila, ei sit¨a tarvitse merkit¨a n¨akyviin lainkaan: τ ∗ (Λ) = Λ ja τ ∗ (ua) = τ ∗ (u)τ (a). Ilmeisesti t¨all¨oin kaikille Σ∗ :n sanoille u ja v τ ∗ (uv) = τ ∗ (u)τ ∗ (v). Morfismista on ainakin helppo n¨ahd¨a, ett¨a se kuvaa s¨a¨ann¨ollisen kielen s¨a¨ann¨olliseksi: Kuvataan vain vastaava s¨a¨ann¨ollinen lauseke morfismilla. Jonokoneesta ja yleistetyst¨a jonokoneesta on olemassa ep¨adeterministiset versiot. Yleisempi k¨asite on kuitenkin ns. transduktori. Formaalisti transduktori on viisikko T = (Q, Σ, ∆, S, δ), miss¨a Q, Σ ja ∆ ovat kuten jonokoneelle, S on alkutilojen joukko ja δ on siirto-tulostusfunktio, joka kuvaa kunkin parin (qi , a) muotoa (qj , u) olevien parien ¨a¨arelliseksi joukoksi. Tulkinta on se, ett¨a saadessaan tilassa qi sy¨otteen a voi T siirty¨a tulostaen u:n mihin tahansa sellaiseen tilaan qj , ett¨a pari (qj , u) on δ(qi , a):ssa. T¨ahtifunktion” δˆ∗ m¨aa¨ritteleminen on nyt v¨ah¨an ty¨ol¨aa¨mp¨aa¨ (sivuutetaan) ja kielen ” L transduktio on [ u (qi , u) ∈ δˆ∗ (S, w) jollekin qi :lle . w∈L
Joka tapauksessa transduktori kuvaa aina s¨a¨ann¨ollisen kielen s¨a¨ann¨olliseksi kieleksi, ts. s¨aa¨nn¨ollisyys s¨ailyy transduktioissakin. Yksitilaisen transduktorin antamaa kuvausta eli transduktiota kutsutaan usein ¨a¨arelliseksi sijoitukseksi. Kuten morfismille, on helppo todeta, ett¨a ¨a¨arellinen sijoitus s¨ailytt¨a¨a s¨a¨ann¨ollisyyden: kuvataan s¨a¨ann¨ollinen lauseke ko. ¨a¨arellisell¨a sijoituksella.
Luku 3 KIELIOPIT 3.1
Uudelleenkirjoitusj¨ arjestelm¨ at
Uudelleenkirjoitusj¨arjestelm¨a ja erikoisesti kielioppi antaa s¨a¨ann¨ot, joita loputtomasti toistaen saadaan tuotetuksi kielen sanat, l¨ahtien tietyst¨a l¨aht¨osanasta. Kieleen voidaan valita vain tietyt tuotetut sanat. T¨am¨a toiminto on tavallaan duaalinen verrattuna automaattiin, joka tunnistaa kielen. M¨ a¨ aritelm¨ a. Uudelleenkirjoitusj¨arjestelm¨a1 (RWS) on pari R = (Σ, P ), miss¨a • Σ on aakkosto; • P = (p1 , q1 ), . . . , (pn , qn ) on ¨a¨arellinen Σ∗ :n sanojen j¨arjestettyjen parien, ns. produktioiden joukko. Produktio (pi , qi ) kirjoitetaan yleens¨a muotoon pi → qi . R tuottaa suoraan sanasta w sanan v, jos voidaan kirjoittaa w = rpi s ja v = rqi s jollekin produktiolle (pi , qi ), merkit¨a¨an w ⇒R v. ⇒R :st¨a muodostetaan vastaava t¨ahtirelaatio”2 ⇒∗R seuraavasti (vrt. siirtofunktion laa” jentaminen t¨ahtifunktioksi”): ” 1. Kaikille sanoille w on w ⇒∗R w. 2. Jos w ⇒R v, niin my¨os w ⇒∗R v. 3. Jos w ⇒∗R v ja v ⇒∗R u, niin my¨os w ⇒∗R u. 4. w ⇒∗R v vain jos t¨am¨a seuraa edellisist¨a kohdista. Jos nyt w ⇒∗R v, niin sanotaan, ett¨a w tuottaa v:n. T¨all¨oin joko v = w tai/ja on ketju w = w0 ⇒R w1 ⇒R · · · ⇒R wℓ = v, ns. v:n johto w:st¨a. ℓ on johdon pituus. 1
Uudelleenkirjoitusj¨ arjestelmi¨ a kutsutaan my¨os puoli-Thue-systeemeiksi. Varsinaisessa Thuen systeemiss¨ a vaaditaan lis¨ aksi, ett¨ a jos p → q on produktio, niin samoin on q → p, ts. kukin produktio p ↔ q on kaksisuuntainen. 2 Jota kutsutaan sen refleksiivis-transitiiviseksi sulkeumaksi.
17
18
LUKU 3. KIELIOPIT
Sin¨all¨a¨an RWS R ei tee muuta kuin tuottaa sanoista toisia sanoja. Jos kiinnitet¨a¨an jokin joukko A ns. l¨aht¨osanoja eli aksioomia, voidaan m¨a¨aritell¨a RWS:n generoima kieli Lgen (R, A) = {v | w ⇒∗R v jollekin sanalle w ∈ A}. Usein A:ssa on vain yksi sana tai se on ¨a¨arellinen tai ainakin s¨a¨ann¨ollinen. T¨all¨oin RWS toimii kieliopin tapaan”. ” RWS voidaan saada toimimaan my¨os automaatin tapaan” ottamalla k¨aytt¨o¨on sallit” tujen loppusanojen kieli T , jolloin RWS R tunnistaa kielen Lrec (R, T ) = {w | w ⇒∗R v jollekin sanalle v ∈ T }. Usein T on s¨a¨ann¨ollinen. Tavallinen valinta on T = ∆∗ jollekin Σ:n osajoukolle ∆. T¨all¨oin ∆:n symbolit ovat ns. loppusymbolit eli terminaalit ja Σ−∆:n symbolit taas ns. v¨alisymbolit eli nonterminaalit. Esimerkki. Deterministisest¨a ¨a¨arellisest¨a automaatista M = (Q, Σ, q0 , δ, B) saadaan RWS kahdellakin tavalla. T¨ass¨a oletetaan, ett¨a Σ ∩ Q on tyhj¨a. Ensinn¨akin muodostetaan RWS R1 = (Ω, P1 ), jossa Ω = Σ ∪ Q ja P1 :ss¨a ovat tarkalleen kaikki produktiot qi a → qj , miss¨a δ(qi , a) = qj , sek¨a lis¨aksi produktiot a → q0 a ,
miss¨a a ∈ Σ.
Kun valitaan T :ksi kieli B + Λ tai B, riippuen siit¨a onko L(M):ss¨a Λ vai ei, on Lrec (R1 , T ) ∩ Σ∗ = L(M). Tyypillinen, kielen sanan w = a1 · · · am tunnistava johto on muotoa w ⇒R1 q0 w ⇒R1 qi1 a2 · · · am ⇒∗R1 qim , ¨ arelliset automaatit ovat siis oleellisesti uudelleenkirjoitussysteemiss¨a qim on lopputila. A¨ mej¨a! Toinen tapa saada M:st¨a RWS on ottaa R2 = (Ω, P2 ), jossa P2 :ssa ovat tarkalleen kaikki produktiot qi → aqj , miss¨a δ(qi , a) = qj , ja lis¨aksi produktio qi → Λ jokaiselle lopputilalle qi . T¨all¨oin Lgen R2 , {q0 } ∩ Σ∗ = L(M). T¨ass¨a automaatista on oleellisesti tehty kielioppi!
Uudelleenkirjoitusj¨arjestelmien tuotto- ja generoimis/tunnistusmekanismia voidaan varioida monin eri tavoin. Esimerkki. (Markovin normaalialgoritmi) RWS:n produktiot annetaan j¨arjestyksess¨ a listana P : p1 → q1 , . . . , pn → qn ja lis¨aksi valitaan P :st¨a osajoukko F , ns. loppuproduktiot. Tuotossa sovitaan, ett¨a aina k¨aytet¨a¨ an listan ensimm¨aist¨a soveltuvaa produktiota ja sit¨a sovelletaan sanassa alusta lukien ensimm¨aiseen soveltuvaan paikkaan. Eli jos pi → qi on ensimm¨ainen soveltuva
19
LUKU 3. KIELIOPIT
produktio, niin sit¨a on k¨aytett¨av¨a vasemmalta lukien ensimm¨aiseen uudelleenkirjoitettavan sanan osasanaan pi . Johto pys¨ahtyy, kun ei l¨oydy soveltuvaa produktiota tai kun on k¨aytetty loppuproduktiota. L¨ahtien sanasta w normaalialgoritmi joko pys¨ahtyy ja tuottaa yksik¨asitteisen sanan v tai ei pys¨ahdy lainkaan. Edellisess¨a tapauksessa sana v k¨asitet¨ a¨ an sy¨otteen w aiheuttamaksi tulostukseksi, j¨alkimm¨aisess¨a tapauksessa taas tulostusta ei tule. Normaalialgoritmeilla on universaalinen laskentakyky, eli niill¨a voi laskea sen mik¨ a laskettavissa on. Niit¨a voi my¨os k¨aytt¨a¨a tunnistukseen: Sana (sy¨ote) tunnistetaan, mik¨ ali siit¨a l¨ahtev¨ a johto pys¨ahtyy. Normaalialgoritmeilla on my¨os universaalinen tunnistuskyky.
3.2
Kieliopit
Kielioppi on sellainen erikoistapaus uudelleenkirjoitusj¨arjestelm¨ast¨a, jossa aakkosto on jaettu kahtia, terminaaleihin eli loppusymboleihin (eli vakioihin) ja nonterminaaleihin eli v¨alisymboleihin (eli muuttujiin), ja valitaan yksi v¨alisymboli aksioomaksi (vrt. edell¨a). M¨ a¨ aritelm¨ a. Kielioppi 3 on nelikk¨ o G = (ΣN , ΣT , X0 , P ), jossa ΣN on v¨alisymbolien aakkosto, ΣT on loppusymbolien aakkosto, X0 ∈ ΣN on aksiooma ja P muodostuu produktioista pi → qi , miss¨a pi :ss¨a on ainakin yksi v¨alisymboli. Jos G on kielioppi, niin (ΣN ∪ ΣT , P ) on RWS, ns. G:n indusoima RWS. Merkit¨a¨an Σ = ΣN ∪ΣT . Perinteisesti” merkit¨aa¨n loppusymboleja pienill¨a kirjaimilla (a, b, c, . . . jne.) ” ja v¨alisymboleja isoilla kirjaimilla (X, Y, Z, . . . jne.). G:n indusoimasta RWS:st¨a saadut ⇒ ja ⇒∗ antavat G:lle vastaavasti ⇒G :n ja ⇒∗G :n. G:n generoima kieli on silloin L(G) = {w | X0 ⇒∗G w ja w ∈ Σ∗T }. Kielioppi G on • yhteydet¨on eli CF-kielioppi, jos jokaisessa produktiossa pi → qi vasen puoli pi koostuu yhdest¨a ainoasta v¨alisymbolista. Uudelleenkirjoitus ei nyt riipu siit¨a, miss¨a yh” teydess¨a” eli ymp¨arist¨oss¨a v¨alisymboli esiintyy. • lineaarinen, jos se on CF ja jokaisen produktion oikealla puolella esiintyy enint¨a¨an yksi v¨alisymboli. CF-kielioppi, joka ei ole lineaarinen, on ep¨alineaarinen. • yhteydellinen eli CS-kielioppi 4 , jos jokaisessa produktiossa pi → qi on pi = ui Xi vi
ja qi = ui wi vi ,
miss¨a ui , vi ∈ Σ∗ , Xi ∈ ΣN ja wi ∈ Σ+ . Poikkeuksena mahdollisesti produktio X0 → Λ, mik¨ali X0 ei esiinny mink¨a¨an produktion oikealla puolella. T¨all¨a tuodaan tarvittaessa tyhj¨a sana kieleen L(G). Uudelleenkirjoitus riippuu nyt siit¨a, miss¨a yhteydess¨a” eli ymp¨arist¨oss¨a v¨alisymboli Xi esiintyy. ” • pituutta kasvattava, jos jokaisessa produktiossa pi → qi on |pi | ≤ |qi |, paitsi mahdollisesti produktiossa X0 → Λ, mik¨ali X0 ei esiinny mink¨a¨an produktion oikealla puolella. 3
Tarkemmin sanoen generatiivinen kielioppi. On olemassa my¨os ns. analyyttinen kielioppi, joka toimii duaalisesti automaatin tapaan. 4 Jotkut m¨ a¨ arittelev¨ at CS-kieliopin yksinkertaisesti vain pituutta kasvattavaksi kieliopiksi. Kieliperheeseen t¨am¨a ei vaikuta.
20
LUKU 3. KIELIOPIT Esimerkki. Lineaarinen kielioppi G = {X}, {a, b}, X, {X → Λ, X → a, X → b, X → aXa, X → bXb}
generoi palindromikielen Lpal aakkostossa {a, b}. Kielioppi ei ole pituutta kasvattava (miksei?). Esimerkki. Kielioppi G = {X0 , $, X, Y }, {a}, X0 , {X0 → $X$, $X → $Y, Y X → XXY, Y $ → XX$, X → a, $ → Λ} n
generoi kielen {a2 | n ≥ 0}. $ on reunamerkki ja Y kulkee” vasemmalta oikealle kaksin” kertaistaen X:i¨a. Jos produktioita X → a ja $ → Λ k¨aytet¨a¨an ennen aikojaan”, ei ole ” mahdollista poistaa Y :t¨a. Kielioppi ei ole CF, CS eik¨a pituutta kasvattava.
3.3
Chomskyn hierarkia
Ns. Chomskyn hierarkiassa kieliopit jaetaan nelj¨a¨an tyyppiin: • Tyyppi 0: Ei mit¨a¨an rajoituksia. • Tyyppi 1: CS-kieliopit. • Tyyppi 2: CF-kieliopit. • Tyyppi 3: Lineaariset kieliopit, joissa produktiot ovat muotoa Xi → wXj tai Xj → w, miss¨a Xi ja Xj ovat v¨alisymboleja ja w ∈ Σ∗T , ns. oikealta lineaariset kieliopit.5 Tyyppien 1 ja 2 kielioppien generoimina saadaan vastaavasti ns. CS-kielet ja CF-kielet, merkit¨aa¨n CS ja CF . Tyypin 0 kielioppien generoimia kieli¨a kutsutaan laskettavasti numeroituviksi kieliksi (CE-kieliksi), merkit¨aa¨n CE. Nimi tulee siit¨a, ett¨a kunkin CE-kielen sanat voidaan algoritmisesti luetella listana, ts. on algoritmi, joka loputtomasti toimiessaan listaa kaikki kielen sanat, algoritmiksi k¨ay tietysti itse kieliopin johtomekanismikin. Toisaalta muita kuin CE-kieli¨a ei t¨all¨a tavoin voida algoritmisesti listata. T¨am¨a johtuu k¨aytetyst¨a ja yleisesti hyv¨aksytyst¨a algoritmin m¨a¨arittelyst¨a! Tyypin 3 kielioppien generoimat kielet ovat tuttuja: Lause 9. Tyypin 3 kielioppien generoimat kielet ovat tarkalleen kaikki s¨a¨ann¨olliset kielet R. Todistus. T¨am¨a oli oleellisesti esimerkkin¨a Pyk¨al¨ass¨a 1. Jotta p¨a¨ast¨a¨an oikealta lineaariseen kielioppiin, otetaan vain aksioomaksi q0 . N¨aytett¨aess¨a toisaalta, ett¨a oikealta lineaarinen kielioppi generoi s¨a¨ann¨ollisen kielen, k¨aytet¨a¨an kieliopin toimintaa matkivaa Λ-NFA:ta (j¨atet¨a¨an harjoitukseksi). 5
On tietysti olemassa my¨ os vasemmalta lineaarinen kielioppi, jossa sallitut produktiot ovat muotoa Xi → Xj w ja Xj → w. Tyyppi 3 voitaisiin yht¨a hyvin m¨a¨aritell¨a sit¨a k¨aytt¨aen.
21
LUKU 3. KIELIOPIT Chomskyn hierarkia voidaan n¨ain my¨os k¨asitt¨a¨a kieliperheiden hierarkiaksi: R ⊂ CF ⊂ CS ⊂ CE.
Kuten on todettu, palindromikieli Lpal v¨ahint¨aa¨n kaksikirjaimisessa aakkostossa on CF, mutta ei s¨a¨ann¨ollinen. My¨os muut sis¨altymiset ovat aitoja, kuten tullaan toteamaan. S¨a¨ann¨olliset kielet ovat suljettuja monien kielten operaatioiden suhteen, ts. operoitaessa s¨a¨ann¨ollisiin kieliin saadaan aina tuloksena s¨a¨ann¨ollinen kieli. T¨allaisia operaatioita olivat mm. joukko-opin operaatiot, katenaatio, katenaatiosulkeuma ja peilikuva. My¨os muut Chomskyn hierarkian kieliperheet ovat suljettuja sangen monien operaatioiden suhteen. T¨am¨a itse asiassa tekee n¨aist¨a perheist¨a luontevia kielten luokittelun takia: Laajempi perhe sis¨alt¨a¨a aina jollain tavalla radikaalisti erilaisia kieli¨a, ei vain entisist¨a joillain operaatioilla saatuja. Muut kuin R eiv¨at kuitenkaan ole suljettuja edes kaikkien eo. operaatioiden suhteen, hankalia ovat leikkaus ja komplementti. Apulause. Kielioppi voidaan aina korvata saman tyypin kieliopilla, joka generoi saman kielen ja jossa ei esiinny loppusymboleja produktioiden vasemmilla puolilla. Todistus. Jos kielioppi on G = (ΣN , ΣT , X0 , P ), niin uusi kielioppi on G′ = (Σ′N , ΣT , X0 , P ′ ), jossa Σ′N = ΣN ∪ Σ′T , Σ′T = {a′ | a ∈ ΣT } (Σ′T on ΣT :n erillinen varjoaakkosto”) ja P ′ saadaan P :st¨a vaihtamalla kunkin produktion ” jokainen loppusymboli a vastaavaksi pilkulliseksi” symboliksi a′ sek¨a lis¨a¨am¨all¨a produk” tiot a′ → a. Lause 10. Kukin Chomskyn hierarkian kieliperhe on suljettu operaatioiden ∪, katenaatio, ∗ ja + suhteen. Todistus. Asia tuli jo todetuksi perheen R tapauksessa. Jos kielet L ja L′ generoidaan saman tyypin kieliopeilla G = (ΣN , ΣT , X0 , P ) ja G′ = (Σ′N , Σ′T , X0′ , P ′), niin voidaan ensinn¨akin ilmeisesti olettaa, ett¨a ΣN ∩ Σ′N = ∅, ja toiseksi, ett¨a produktioiden vasemmilla puolilla ei esiinny loppusymboleja (eo. Apulause). Silloin L ∪ L′ :n generoi saman tyypin kielioppi H = (∆N , ∆T , Y0 , Q), miss¨a ∆N = ΣN ∪ Σ′N ∪ {Y0 } ,
∆T = ΣT ∪ Σ′T ,
Y0 on uusi v¨alisymboli ja Q saadaan seuraavasti: 1. Otetaan kaikki P :n ja P ′:n produktiot. 2. Jos kyseess¨a ovat Tyypin 1 kieliopit, poistetaan mahdolliset produktiot X0 → Λ ja X0′ → Λ. 3. Lis¨at¨a¨an produktiot Y0 → X0 sek¨a Y0 → X0′ . 4. Jos kyseess¨a ovat Tyypin 1 kieliopit ja L:ss¨a tai L′ :ss¨a on Λ, lis¨at¨a¨an produktio Y0 → Λ.
22
LUKU 3. KIELIOPIT Kielen LL′ taas generoi kielioppi F , kun kohdat 3. ja 4. korvataan kohdilla
3’. Lis¨at¨a¨an produktio Y0 → X0 X0′ . Jos kyseess¨a ovat Tyypin 1 kieliopit ja kieless¨a L on Λ, lis¨at¨a¨an produktio Y0 → X0′ , ja vastaavasti, jos kieless¨a L′ on Λ, lis¨at¨a¨an produktio Y0 → X0 . 4’. Jos kyseess¨a ovat Tyypin 1 kieliopit ja L:ss¨a sek¨a L′ :ss¨a on Λ, lis¨at¨a¨an produktio Y0 → Λ. J¨alleen tyyppi s¨ailyy. Huomaa miten on t¨arke¨a¨a, ett¨a esitetyt oletukset ovat voimassa, muuten vierekk¨aiset johdot voisivat Tyyppien 0 ja 1 tapauksessa sekaantua toisiinsa. Jos G on Tyyppi¨a 2, niin L∗ :n generoi yksinkertaisesti saman tyypin kielioppi K = ΣN ∪ {Y0 }, ΣT , Y0 , Q , miss¨a Q saadaan P :st¨a lis¨a¨am¨all¨a siihen produktiot
Y0 → Λ ja Y0 → Y0 X0 . Korvaamalla produktio Y0 → Λ produktiolla Y0 → X0 , saadaan L+ . Tyypille 1 konstruktio on hieman mutkikkaampi. Jos G on Tyyppi¨a 1, lis¨at¨a¨an viel¨a yksi uusi v¨alisymboli Y1 , ja Q saadaan seuraavasti: Poistetaan P :st¨a mahdollinen produktio X0 → Λ ja lis¨at¨aa¨n produktiot Y0 → Λ ,
Y 0 → X0
sek¨a Y0 → Y1 X0 .
Lis¨at¨a¨an viel¨a jokaista loppusymbolia a kohti produktiot Y1 a → Y1 X0 a ja Y1 a → X0 a. J¨att¨am¨all¨a produktio Y0 → Λ tarvittaessa pois saadaan L+ . Huomaa miten j¨alleen oletus, ettei produktioiden vasemmilla puolilla ole loppusymboleja, est¨a¨a vierekk¨aisten johtojen sekaantumisen toisiinsa, sill¨a uusi johto voidaan aloittaa vasta, kun viereinen jo alkaa loppusymbolilla. Tyypille 0 konstruktio on hyvin samantapainen kuin Tyypille 1. Varsin helppo on muuten viel¨a todeta, ett¨a kukin hierarkian perhe on suljettu peilikuvan suhteen. Edell¨a olevasta saadaan muitakin kieliperheit¨a kuin Chomskyn hierarkiaan kuuluvat, mm. • lineaaristen kielioppien generoimat lineaariset kielet (perhe LIN ), • CE-kielten komplementit, ns. co–CE-kielet (perhe co−CE), ja • CE:n ja co−CE:n leikkaus, ns. laskettavat kielet (perhe C). Laskettavat kielet ovat kielet, joiden j¨asenyysprobleema voidaan algoritmisesti ratkaista, listataan vain vuorotellen kielen ja sen komplementin sanoja ja katsotaan kumpaan tutkittu sana kuuluu. Yo. kieliperheiss¨a ei ole erikseen mukana pituutta kasvattavien kielioppien generoimien kielien perhett¨a, sill¨a se on CS. Lause 11. Jokainen pituutta kasvattava kielioppi voidaan korvata CS-kieliopilla, joka generoi saman kielen.
23
LUKU 3. KIELIOPIT
Todistus. Katsotaan ensin tapaus, jossa pituutta kasvattavassa kieliopissa G = (ΣN , ΣT , X0 , P ) on vain yksi ei-sallittu pituutta kasvattava produktio p → q, ts. kielioppi G′ = ΣN , ΣT , X0 , P − {p → q}
on CS-kielioppi. Eo. Apulauseen nojalla voidaan olettaa, ett¨a G:n produktioiden vasemmilla puolilla ei ole loppusymboleja. N¨aytet¨aa¨n miten G muunnetaan CS-kieliopiksi G1 = (∆N , ΣT , X0 , Q). Merkit¨a¨an sit¨a varten p = U1 · · · Um ja q = V1 · · · Vn , miss¨a Ui :t ja Vj :t ovat v¨alisymboleja ja n ≥ m ≥ 2. Valitaan uudet v¨alisymbolit Z1 , . . . , Zm ja otetaan ∆N :ksi ΣN ∪ {Z1 , . . . , Zm }. Q:hun otetaan P :n produktiot lukuunottamatta tietysti produktiota p → q. Vm. produktio korvataan lis¨atyill¨a produktioilla U1 U2 · · · Um → Z1 U2 · · · Um , Z1 U2 U3 · · · Um → Z1 Z2 U3 · · · Um , .. . Z1 · · · Zm−1 Um → Z1 · · · Zm−1 Zm Vm+1 · · · Vn , Z1 Z2 · · · Zm Vm+1 · · · Vn → V1 Z2 · · · Zm Vm+1 · · · Vn , .. . V1 · · · Vm−1 Zm Vm+1 · · · Vn → V1 · · · Vm−1 Vm Vm+1 · · · Vn . (Alleviivaus osoittaa uudelleenkirjoituksen.) Tuloksena on CS-kielioppi G1 , joka generoi saman kielen kuin G. Huomaa, miten aina on sovellettava per¨akk¨ain koko yo. produktioketjua, jotta p¨a¨ast¨a¨an eteenp¨ain. Jos ketjun aikana voitaisiin soveltaa muita produktioita, niit¨a voidaan silloin soveltaa jo ennen ketjua tai vasta sen j¨alkeen. Yleinen pituutta kasvattava kielioppi G muunnetaan CS-kieliopiksi nyt seuraavasti. J¨alleen voidaan ottaa vain tapaus, jossa produktioiden vasemmilla puolilla ei ole loppusymboleja. Merkit¨a¨an nyt G′ :lla kielioppia, joka saadaan poistamalla G:st¨a kaikki eisallitut produktiot. Lis¨at¨a¨an sitten poistetut produktiot yksi kerrallaan kielioppiin G′ muuntaen se joka askeleella ekvivalentiksi CS-kieliopiksi yll¨a kuvatulla tavalla. Tuloksena on CS-kielioppi, joka generoi saman kielen kuin G.
Luku 4 CF-KIELET 4.1
Sanan j¨ asennys
CF-kieliopin produktiot, joissa on vasemmalla puolella sama v¨alisymboli, on usein tapana kirjoittaa yhteen. Jos esimerkiksi kaikki ne produktiot, joissa on vasemmalla puolella v¨alisymboli X, ovat X → w1 , . . . , X → wt , kirjoitetaan n¨am¨a muodossa X → w1 | w2 | · · · | wt . Silloin on tietysti varottava k¨aytt¨am¨ast¨a pystyviivaa | my¨os kieliopin symbolina! Tarkastellaan CF-kielioppia G = (ΣN , ΣT , X0 , P ) ja merkit¨a¨an Σ = ΣN ∪ ΣT . G:n johtoon X0 ⇒∗G w voidaan aina liitt¨a¨a ns. j¨asennyspuu. Puun pisteet merkit¨a¨an Σ:n symboleilla tai Λ:lla. Aksioomalla X0 merkit¨aa¨n puun juuri. Puu konstruoidaan seuraavasti. L¨ahdet¨a¨an juuripisteest¨a. Jos ensimm¨ainen k¨aytetty produktio on X0 → S1 · · · Sℓ , miss¨a S1 , . . . , Sℓ ∈ Σ, jatketaan puuta ℓ:ll¨a pisteell¨a, jotka merkit¨a¨an vasemmalta oikealle symbolein S1 , . . . , Sℓ :
X0
S1 S2
…
Sl
Jos taas ensimm¨ainen k¨aytetty produktio on X0 → Λ, jatketaan puuta yhdell¨a pisteell¨a, joka merkit¨a¨an Λ:lla:
X0
Λ
24
25
LUKU 4. CF-KIELET
Mik¨ali johdon toinen produktio kohdistuu sen toisen sanan symboliin Si ja on Si → R1 · · · Rk , jatketaan puuta sen vastaavasta Si :ll¨a merkityst¨a pisteest¨a k:lla pisteell¨a, jotka merkit¨a¨an taas vasemmalta oikealle symbolein R1 , . . . , Rk (tapaus Si → Λ vastaavasti):
X0
S1 S2 … Si …
R1 R2
Sl
…
Rk
T¨all¨a tavoin jatketaan puun konstruktiota, kunnes se on saatu kokonaan. Puuta voidaan aina jatkaa mist¨a tahansa vapaasta” v¨alisymbolista, ei pelk¨ast¨a¨an viimeksi saaduista. ” Huomaa, ett¨a kun puun piste on merkitty loppusymbolilla tai Λ:lla, ei siit¨a en¨a¨a voida puuta jatkaa. T¨allaisia pisteit¨a kutsutaan puun lehdiksi. Johdon tuottama sana luetaan puun lehdist¨a katenoiden vasemmalta oikealle. Esimerkki. Kieliopin
johtoa
G = {A, B, S}, {0, 1}, S, {S → A | B, A → 0 | 0A | 1AA | AA1 | A1A, B → 1 | 1B | 0BB | BB0 | B0B} S ⇒ B ⇒ 0BB ⇒ 0B1B ⇒ 011B ⇒ 0111
vastaa j¨asennyspuu
S B 0
B
B
1
1
B 1
Kielioppi muuten generoi tarkalleen kaikki sanat, joissa on eri m¨aa¨r¨a 1:si¨a ja 0:ia. J¨asennyspuut tuovat mieleen luonnollisten kielten kieliopeista tutun lauseenj¨asennyksen ja my¨os tiettyjen ohjelmointikielten ohjelmien j¨asennyksen.
26
LUKU 4. CF-KIELET
Esimerkki. Englanninkieless¨a yksinkertaiset lauseenj¨asennyss¨a¨ann¨ot voisivat olla vaikkapa muotoa hdeclarative sentencei → hsubjectihverbihobjecti hsubjecti → hproper nouni hproper nouni → Alice | Bob hverbi → reminded hobjecti → hproper nouni | hreflexive pronouni hreflexive pronouni → himself | herself joista tunnistaa v¨alitt¨om¨asti CF-kieliopin. Suomenkieli on tietysti vaikeampi sijap¨aa¨tteiden yms. takia. Esimerkki. C-kieless¨a yksinkertaiset syntaksis¨a¨ann¨ot voisivat olla vaikkapa hstatementi → hstatementihstatementi | hfor-statementi | hif-statementi | · · · hfor-statementi → for ( hexpressioni ; hexpressioni ; hexpressioni ) hstatementi hif-statementi → if ( hexpressioni ) hstatementi hcompoundi → { hstatementi } jne., joista taas tunnistaa CF-kieliopin rakenteen. Johto on vasen johto, jos siin¨a aina jatketaan vasemmalta lukien ensimm¨aisest¨a soveltuvasta v¨alisymbolista. Jokainen johto voidaan aina korvata vasemmalla johdolla. T¨am¨a on selv¨a¨a siksikin, ett¨a j¨asennyspuissa ei n¨ay se, miss¨a j¨arjestyksess¨a produktioita on sovellettu, ja jokaista j¨asennyspuuta vastaa n¨ain aina my¨os jokin vasen johto. CF-kielioppi G on moniselitteinen, jos jollekin L(G):n sanalle on kaksi erilaista vasenta johtoa tai ekvivalentisti kaksi erilaista j¨asennyspuuta. CF-kielioppi, joka ei ole moniselitteinen, on yksiselitteinen. Luonnollisten kielten j¨asennyst¨a vastaavat kieliopit ovat moniselitteisi¨a, asiayhteydest¨a selvi¨aa¨ lauseen merkitys. Ohjelmointikieliss¨a moniselitteisyytt¨a ei saisi esiinty¨a. Moniselitteisyys on paremminkin kieliopin kuin kielen ominaisuus. On kuitenkin CFkieli¨a, joita ei voida lainkaan generoida yksiselitteisill¨a CF-kieliopeilla, ns. luontaisesti moniselitteiset CF-kielet. Esimerkki. Kielioppi G = {S, T, F }, {a, +, ×, (, )}, S, {S → S + T | T, T → T × F | F, F → (S) | a}
generoi yksinkertaisia aritmeettisia lausekkeita. a on lukujen yms. paikanpit¨aj¨a”. Tode” taan, ett¨a G on yksiselitteinen. N¨aytet¨a¨an t¨am¨a t¨aydellisell¨a induktiolla johdetun lausekkeen pituuden ℓ suhteen. Induktion l¨aht¨okohta on ℓ = 1, joka on selv¨a, sill¨a ainoa tapa johtaa a on S ⇒ T ⇒ F ⇒ a. Oletetaan sitten, ett¨a pituuteen p − 1 asti kaikkien L(G):n sanojen vasemmat johdot ovat yksiselitteisi¨a, ja tarkastellaan pituutta p olevan L(G):n sanan w vasenta johtoa. Otetaan ensin tapaus, jossa w:ss¨a on ainakin yksi symboli +, joka ei ole sulkujen sis¨all¨a. T :n ja F :n kautta johdetut +:n esiintym¨at ovat sulkujen sis¨all¨a, joten mainittu +
27
LUKU 4. CF-KIELET
voidaan johtaa vain alkuproduktiolla S → S + T , jossa oleva + on sanan w viimeinen +, joka ei ole sulkujen sis¨all¨a. w:n vasen johto on siis muotoa S ⇒ S + T ⇒∗ u + T ⇒∗ u + v = w. Siin¨a olevat alijohdot” S ⇒∗ u ja T ⇒∗ v ovat vasempia johtoja ja siten induktio” oletuksen nojalla yksiselitteisi¨a, joten my¨os w:n vasen johto on yksiselitteinen. Huomaa, ett¨a v:kin on kieless¨a L(G) ja sen vasen johto S ⇒ T ⇒∗ v on yksiselitteinen. Samaan tapaan k¨asitell¨a¨an tapaus, jossa w:ss¨a on ainakin yksi × sulkujen ulkopuolella, mutta ei +. Silloin t¨am¨an ×:n tuottaa joko S tai T . S:st¨a l¨ahtev¨an johdon alkup¨aa¨ on S ⇒ T ⇒ T × F ja T :st¨a l¨ahtev¨an T ⇒ T × F . J¨alleen esiintyv¨a × on w:n viimeinen sulkujen ulkopuolella oleva × ja vasen johto on muotoa S ⇒ T ⇒ T × F ⇒∗ u × F ⇒∗ u × v = w, josta induktio-oletuksen nojalla p¨a¨atell¨a¨an, ett¨a w:ll¨a on vain yksi vasen johto. Viel¨a tarkistetaan tapaus, jossa jokainen + sek¨a × on sulkujen sis¨all¨a. Silloin w:n johdon alku on S ⇒ T ⇒ F ⇒ (S), joten w on muotoa (u). Koska my¨ os u kuuluu L(G):hen, on sen vasen johto induktiooletuksen mukaan yksiselitteinen, joten sama p¨atee w:lle.
4.2
Normaalimuodot
CF-kielioppien muotoa voidaan monin tavoin rajoittaa pienent¨am¨att¨a generoitujen kielten perhett¨a. Sellaisenaan CF-kielioppi ei esimerkiksi ole CS eik¨a pituutta kasvattava, mutta se voidaan korvata t¨allaisella CF-kieliopilla. Lause 12. Jokainen CF-kieli voidaan generoida pituutta kasvattavalla CF-kieliopilla. Todistus. Konstruoidaan CF-kieliopin G = (ΣN , ΣT , X0 , P ) kanssa saman kielen generoiva pituutta kasvattava CF-kielioppi G′ = ΣN ∪ {S}, ΣT , S, P ′ .
Jos Λ ∈ L(G), otetaan S:lle produktiot S → Λ | X0 , muuten vain produktio S → X0 . Muiden produktioiden saamiseksi m¨aa¨ritell¨aa¨n ensin rekursiivisesti v¨alisymbolijoukko ∆Λ : 1. Jos P :ss¨a on produktio Y → Λ, niin Y ∈ ∆Λ . 2. Jos P :ss¨a on produktio Y → w, miss¨a w ∈ ∆+ Λ , niin Y ∈ ∆Λ . 3. Vain ne v¨alisymbolit ovat ∆Λ :ssa, jotka sinne saadaan kohtien 1. ja 2. kautta. Muut kuin v¨alisymbolia S koskevat P ′:n produktiot saadaan nyt P :n produktioista seuraavasti: (i) Poistetaan kaikki muotoa Y → Λ olevat produktiot. (ii) Jokaista produktiota Y → w kohti, miss¨a w:ss¨a esiintyy ainakin yksi ∆Λ :n symboli, lis¨at¨a¨an kaikki produktiot, jotka saadaan siit¨a poistamalla w:st¨a yksi tai useampi ∆Λ :n symboli, mutta ei sen kaikkia symboleita.
28
LUKU 4. CF-KIELET
On ilmeist¨a, ett¨a L(G′ ) ⊆ L(G), sill¨a G:n vastaavissa johdoissa voidaan esiintyv¨at ∆Λ :n symbolit tarvittaessa pyyhki¨a pois. Toisaalta jokaisesta G:n johdosta saadaan vastaava G′ :n johto. Λ:n johdon tapaus on selv¨a, joten siirryt¨a¨an ei-tyhj¨an sanan v johtoon. Asia on selv¨a, jos k¨aytetyt produktiot ovat P ′ :ss¨a. Muussa tapauksessa n¨aytet¨a¨an, miten v:n j¨asennyspuusta G:ss¨a (= T ) saadaan sen j¨asennyspuu G′ :ssa (= T ′ ). Nyt T :ss¨a t¨aytyy olla Λ-lehti¨a. Puun pistett¨a, josta l¨ahtee vain Λ-lehtiin p¨aa¨ttyvi¨a jatkohaaroja, sanotaan Λ-pisteeksi. Seurataan Λ-lehdest¨a reitti¨a taaksep¨ain niin kauan kuin siin¨a on vain Λ-pisteit¨a. T¨all¨oin ei voida p¨a¨ast¨a aksioomaan asti, sill¨a muutoin olisi kyseess¨a Λ:n johto. Poistetaan puusta T kaikki reitin pisteet kaikkine j¨alkel¨aisineen. Jos Λ-lehti¨a on j¨aljell¨a, toistetaan operaatio. Tuloksena on G′ :n j¨asennyspuu T ′ , jonka lehdist¨a voi lukea sanan v. T¨ass¨a vaiheessa saadaan edellisen lauseen ja Lauseen 11 seurauksena keskeinen Chomskyn hierarkian tulos: Seuraus. CF ⊆ CS Produktio X → Y on yksikk¨oproduktio, jos Y on v¨alisymboli. Hyvin samantapaisella p¨a¨attelyll¨a kuin edell¨a voidaan todistaa Lause 13. Jokainen CF-kieli voidaan generoida CF-kieliopilla, jossa ei ole yksikk¨oproduktioita. Lis¨aksi voidaan olettaa, ett¨a kielioppi on pituutta kasvattava. Todistus. Esitet¨a¨an vain todistuksen pari p¨a¨akohtaa. Merkit¨a¨an ∆X :ll¨a kaikkien niiden v¨alisymbolien (6= X) joukkoa, jotka saadaan v¨alisymbolista X vain yksikk¨oproduktioita k¨aytt¨aen. Kieliopin G = (ΣN , ΣT , X0 , P ) kanssa saman kielen generoiva CF-kielioppi G′ = (ΣN , ΣT , X0 , P ′), jossa ei ole yksikk¨oproduktioita, saadaan, kun P muunnetaan P ′:ksi seuraavalla menettelyll¨a: 1. Etsit¨a¨an G:n v¨alisymboleille X joukot ∆X . 2. Poistetaan P :st¨a yksikk¨oproduktiot. 3. Jos Y ∈ ∆X ja P :ss¨a on produktio Y → w, joka ei ole yksikk¨oproduktio, lis¨at¨aa¨n P ′ :uun produktio X → w. Ilmeisesti, jos G on pituutta kasvattava, niin G′ on my¨os sit¨a. CF-kielioppi on ns. Chomskyn normaalimuodossa, jos sen produktiot ovat muotoa X →YZ
tai X → a,
miss¨a X, Y ja Z ovat v¨alisymboleja ja a on loppusymboli, poikkeuksena mahdollisesti produktio X0 → Λ, mik¨ali aksiooma X0 ei esiinny mink¨a¨an produktion oikealla puolella. Kieliopin muuntaminen Chomskyn normaalimuotoon aloitetaan muuntamalla se pituutta kasvattavaksi kieliopiksi, jossa ei ole yksikk¨oproduktioita (Lause 13). Seuraavaksi muunnetaan kielioppia siten, ett¨a ainoat produktiot, joissa esiintyy loppusymboleja, ovat muotoa X → a, miss¨a a on loppusymboli, ks. Pyk¨al¨an 3.2 Apulause ja sen todistus. Sen j¨alkeen produktiot ovatkin joko mainittua muotoa X → a tai muotoa X → Y1 · · · Yk ,
29
LUKU 4. CF-KIELET
miss¨a Y1 , . . . , Yk ovat v¨alisymboleja, poikkeuksena mahdollinen produktio X0 → Λ. Mainittua muotoa X → Y1 · · · Yk oleva produktio korvataan useilla normaalimuotoisilla produktioilla X → Y 1 Z1 Z1 → Y 2 Z2 .. . Zk−3 → Yk−2Zk−2 Zk−2 → Yk−1Yk miss¨a Z1 , . . . , Zk−2 ovat uusia v¨alisymboleja, joita ei saa k¨aytt¨aa¨ muiden produktioiden korvaamisessa. N¨ain on saatu Lause 14. Jokainen CF-kieli voidaan generoida Chomskyn normaalimuotoisella CF-kieliopilla. Toinen klassinen normaalimuoto on Greibachin normaalimuoto. CF-kielioppi on Greibachin normaalimuodossa, jos sen produktiot ovat muotoa X → aw, miss¨a a on loppusymboli ja w on tyhj¨a tai muodostuu v¨alisymboleista. J¨alleen poikkeuksena on mahdollinen produktio X0 → Λ, mik¨ali aksiooma X0 ei esiinny mink¨a¨an produktion oikealla puolella. Jokainen CF-kielioppi voidaan saattaa my¨os Greibachin normaalimuotoon, mutta sen todistaminen on hankalampaa, ks. esimerkiksi Simovici & Tenney. Greibachin normaalimuotoinen kielioppi muistuttaa oikealta lineaarista kielioppia siin¨a, ett¨a se generoi vasemmissa johdoissa sanat vasemmalta oikealle. Sin¨all¨a¨an oikealta lineaarinen kielioppi ei kuitenkaan ole Greibachin normaalimuotoa.
4.3
Pinoautomaatti
Kieli¨a, joiden indeksi on ¨a¨aret¨on, ei voida tunnistaa ¨a¨arellisell¨a automaatilla. Toisaalta aivan yleisen ¨a¨arett¨om¨an muistin hallinta on vaikeaa—ja johtaa vallan toisenlaiseen teoriaankin—joten yleens¨a rajoitutaan potentiaalisesti a¨a¨rett¨om¨aa¨n muistiin. Potentiaalisesti ¨a¨arett¨om¨ast¨a muistista on k¨ayt¨oss¨a” aina vain jokin ¨a¨arellinen osa ja loput muis” tipaikat ovat tietyss¨a vakiotilassa ( tyhji¨a”). Riippuen siit¨a, mill¨a tavalla muistia otetaan ” k¨aytt¨o¨on ja miten sit¨a k¨aytet¨a¨an, saadaan erilaisia automaatteja. Koska on CF-kieli¨a, joiden indeksi on ¨a¨aret¨on—esimerkiksi palindromikielet, jos aakkosto ei ole yksikirjaiminen—tarvitaan CF-kielten tunnistamiseen ¨a¨aret¨ontilainen automaatti. Sen muisti on tietysti potentiaalisesti ¨a¨aret¨on ja aivan erityist¨a tyyppi¨a, nimitt¨ain ns. pinomuisti. Pinomuistin sis¨alt¨o voidaan kuvata sanalla, josta on n¨akyviss¨a eli luettavissa ja muutettavissa vain ensimm¨ainen symboli. Alussa pinossa on jokin pohjasymboli. Pinomuistin lis¨aksi automaatilla on k¨ayt¨oss¨a tavallinen” ¨a¨arellinen tilamuisti, kuten ” Λ-NFA:lla. M¨ a¨ aritelm¨ a. Pinoautomaatti (PDA) on seitsikko M = (Q, Σ, Γ, S, Z, δ, A), miss¨a • Q = {q1 , . . . , qm } on a¨a¨rellinen tilojen joukko, jonka alkioita kutsutaan tiloiksi; • Σ on sy¨oteaakkosto, kielen aakkosto;
30
LUKU 4. CF-KIELET • Γ on ¨a¨arellinen pinoaakkosto eli pinossa esiintyvien symbolien joukko; • S ⊆ Q on alkutilojen joukko; • Z ⊆ Γ on pinon pohjasymbolien joukko;
• δ on siirtofunktio, joka kuvaa jokaisen kolmikon (qi , a, X), miss¨a qi on tila, a on sy¨otesymboli tai Λ ja X on pinosymboli, tarkalleen yhdeksi ¨a¨arelliseksi parien (q, α) joukoksi T , miss¨a q on tila ja α on pinoaakkoston sana; vrt. Λ-NFA; • A ⊆ Q on lopputilojen joukko. Jotta PDA:n tilastruktuurin k¨asittely voidaan m¨a¨aritell¨a, otetaan k¨aytt¨o¨on kolmikot (qi , x, α), miss¨a qi on tila, x on sy¨otteen lukematon osa (suffiksi) ja α on pinon sis¨alt¨o sanana, p¨a¨allimm¨ainen” symboli vasemmalla. N¨ait¨a kolmikoita kutsutaan M:n konfigu” raatioiksi. Nyt ei voida aivan helposti m¨a¨aritell¨a hattufunktiota” ja t¨ahtifunktiota” kuten teh” ” tiin Λ-NFA:lle, koska muisti on jaettu kahteen osaan, tilaan ja pinoon. M¨a¨aritell¨a¨ankin asia k¨aytt¨aen konfiguraatioita. Konfiguraation (qj , y, β) sanotaan olevan konfiguraation (qi , x, α) suora seuraaja, merkit¨a¨an (qi , x, α) ⊢M (qj , y, β), jos x = ay
,
α = Xγ
,
β = ǫγ
ja (qj , ǫ) ∈ δ(qi , a, X).
Huomaa, ett¨a t¨ass¨a a on joko sy¨otesymboli tai Λ. Edelleen m¨aa¨ritell¨aa¨n vastaava t¨ahti” relaatio” ⊢∗M seuraavasti: 1. (qi , x, α) ⊢∗M (qi , x, α) 2. Jos (qi , x, α) ⊢M (qj , y, β), niin my¨os (qi , x, α) ⊢∗M (qj , y, β). 3. Jos (qi , x, α) ⊢∗M (qj , y, β) ja (qj , y, β) ⊢M (qk , z, γ), niin my¨os (qi , x, α) ⊢∗M (qk , z, γ). 4. (qi , x, α) ⊢∗M (qj , y, β) vain, jos se seuraa edellisist¨a kohdista 1.–3. Jos (qi , x, α) ⊢∗M (qj , y, β), sanotaan, ett¨a (qj , y, β) on (qi , x, α):n seuraaja. PDA M hyv¨aksyy 1 sy¨otesanan w, jos (qi , w, X) ⊢∗M (qj , Λ, α) jollekin alkutilalle qi ∈ S, pohjasymbolille X ∈ Z, lopputilalle qj ∈ A ja pinolle α. M:n tunnistama kieli L(M) muodostuu tarkalleen kaikista sen hyv¨aksymist¨a sanoista. N¨ain m¨a¨aritelty pinoautomaatti on luonteeltaan ep¨adeterministinen. Siirtovalintoja on siis yleisesti useita. Erityisesti on mahdollista, ett¨a mit¨a¨an seuraavaa siirtoa ei ole, jolloin PDA:n toiminta pys¨ahtyy ilman hyv¨aksymist¨a, ellei olla lopputilassa ja sy¨ote ole luettu loppuun. N¨ain k¨ay esimerkiksi, kun pino on tyhj¨a. 1
T¨am¨a on ns. hyv¨ aksyminen lopputilalla. Pinon sis¨all¨oll¨a ei siis ole vaikutusta hyv¨aksymiseen. Toinen hyv¨aksymistapa on hyv¨ aksyminen tyhj¨ all¨ a pinolla. T¨all¨oin sy¨ote w hyv¨aksyt¨a¨an, jos (qi , w, X) ⊢∗M (qj , Λ, Λ) jollekin alkutilalle qi , jollekin pohjasymbolille X ja jollekin tilalle qj . Lopputiloja ei siis tarvita. Ei ole kovin vaikea todeta, ett¨ a n¨ am¨a kaksi eri tunnistustapaa antavat saman kieliperheen. Ks. Apulauseen todistus j¨ aljemp¨ an¨ a.
31
LUKU 4. CF-KIELET
Lause 15. Jokainen CF-kieli voidaan tunnistaa PDA:lla. Lis¨aksi PDA:ssa tarvitaan t¨ all¨oin vain kolme tilaa, alkutila, v¨alitila ja lopputila, sek¨a yksi pohjasymboli. Todistus. Asian yksinkertaistamiseksi voidaan olettaa, ett¨a CF-kielioppi G = (ΣN , ΣT , X0 , P ) on valmiiksi Chomskyn normaalimuodossa.2 Konstruoidaan PDA M = {A, V, T }, ΣT , ΣN ∪ {U}, {A}, {U}, δ, {T } ,
miss¨a δ saadaan seuraavilla s¨aa¨nn¨oill¨a:
• Jos X → Y Z on G:n produktio, niin (V, Y Z) ∈ δ(V, Λ, X). • Jos X → a on G:n produktio, miss¨a a ∈ ΣT tai a = Λ, niin (V, Λ) ∈ δ(V, a, X). • Viel¨ a tarvitaan alkusiirto δ(A, Λ, U) = (V, X U) sek¨a loppusiirto δ(V, Λ, U) = 0 (T, Λ) .
Pinosymbolit ovat siis G:n v¨alisymboleja. G:n vasemmat johdot ja M:n laskut vastaavat tarkasti toisiaan: Kun G sanan w = uv vasemmassa johdossaan on menossa sanassa uα, miss¨a u ∈ Σ∗T ja α ∈ Σ+ a¨an vastaa N , on M:n konfiguraatio (V, v, αU). Sanaa w itse¨ hyv¨aksyv¨a loppukonfiguraatio (T, Λ, Λ). K¨a¨anteinenkin tulos p¨atee. Sit¨a varten tarvitaan ensin aputulos, jolla rajoitetaan PDA:n rakennetta samantapaiseksi kuin yo. todistuksessa, muuttamatta tietysti sen tunnistamaa kielt¨a. Apulause. Jokainen PDA voidaan korvata ekvivalentilla PDA:lla, jonka pino tyhjenee tarkalleen silloin, kun se tulee lopputilaan. Todistus. Jos asianlaita ei PDA:lle M = (Q, Σ, Γ, S, Z, δ, A) ole kuten vaaditaan, tehd¨aa¨n er¨ait¨a muutoksia. Otetaan ensinn¨akin uusi pohjasymboli U ja lis¨at¨a¨an tilasiirrot (qi , XU) ∈ δ(qi , Λ, U) (qi ∈ S ja X ∈ Z). Edelleen lis¨at¨a¨an uudet tilat V ja T ja tilasiirrot (V, X) ∈ δ(qi , Λ, X) (qi ∈ A ja X ∈ Γ), δ(V, Λ, X) = (V, Λ) (X ∈ Γ)
ja
δ(V, Λ, U) = (T, Λ) .
Uusi pohjasymbolien joukko on nyt {U} ja uusi lopputilajoukko on {T }. Lause 16. PDA:n tunnistama kieli on aina CF-kieli. Todistus. Otetaan tarkasteltavaksi PDA M = (Q, Σ, Γ, S, Z, δ, A) ja n¨aytet¨a¨an, ett¨a L(M) on CF. Voidaan olettaa, ett¨a M on edellisen Apulauseen mainitsemaa muotoa. Silloin M hyv¨aksyy sy¨otteen tarkalleen silloin, kun sen pino tyhjenee sy¨otteen tultua luetuksi loppuun. Ideana on sis¨allytt¨aa¨ tila johdossa vasempana olevaan kieliopin v¨alisymboliin. Uudet v¨alisymbolit olisivat jotain muotoa [X, qi ], miss¨a X ∈ Γ ja qi ∈ Q. Tilaa voidaan 2
Riitt¨aisi itse asiassa olettaa, ett¨ a jos produktion oikealla puolella on loppusymboleja, niin niit¨a on yksi ja se on ensimm¨ ainen symboli. Jos l¨ ahdett¨aisiinkin Greibachin normaalimuotoisesta CF-kieliopista, saataisiin PDA, jossa on vain kaksi tilaa ja jossa ei ole Λ-siirtoja.
32
LUKU 4. CF-KIELET
p¨aivitt¨a¨a uudelleenkirjoitettaessa. Pulmana on kuitenkin pinon p¨a¨allimm¨aisen symbolin pyyhkiminen eli korvaaminen Λ:lla, silloin tilaa ei voida p¨aivitt¨a¨a. T¨at¨a varten tuodaan mukaan viel¨a uuden tilan qj arvaus”, ja v¨alisymbolit ovatkin kolmikoita ” [qi , X, qj ], miss¨a X ∈ Γ ja qi , qj ∈ Q. Merkit¨aa¨n ∆ = [qi , X, qj ] qi , qj ∈ Q ja X ∈ Γ .
Produktiot saadaan seuraavilla s¨aa¨nn¨oill¨a, miss¨a a on joko sy¨otesymboli tai Λ: • Jos (qj , Y1 · · · Yℓ ) ∈ δ(qi , a, X), miss¨a ℓ ≥ 2 ja Y1 , . . . , Yℓ ∈ Γ, niin vastaavat produktiot ovat [qi , X, pℓ ] → a[qj , Y1 , p1 ][p1 , Y2 , p2 ] · · · [pℓ−1 , Yℓ , pℓ ] kaikille valinnoille p1 , . . . , pℓ ∈ Q. Huomaa, miten aina v¨alisymboleissa vasemmanpuoleisen kolmas komponentti on sama kuin oikeanpuoleisen ensimm¨ainen komponentti. Monet n¨aist¨a arvauksista ovat tietysti huteja”. ” • Jos (qj , Y ) ∈ δ(qi , a, X), miss¨a Y ∈ Γ, niin vastaavat produktiot ovat [qi , X, p] → a[qj , Y, p] kaikille valinnoille p ∈ Q. • Jos (qj , Λ) ∈ δ(qi , a, X), niin vastaava produktio on [qi , X, qj ] → a. Pinon p¨a¨all¨a oleva symboli X voidaan siis simuloitaessa pyyhki¨a pois vain, jos arvattu seuraava tila qj on oikea, muuten vasen johto pys¨ahtyy. • Otetaan aksiooma X0 , joka ei ole ∆:ssa, ja sille produktiot X0 → [qi , X, qj ], miss¨a qi ∈ S, qj ∈ A ja X ∈ Z. Jokaista M:n sanan w hyv¨aksyv¨aa¨ tyhj¨aa¨n pinoon p¨aa¨ttyv¨aa¨ konfiguraatioketjua vastaa CF-kieliopin3 G = ∆ ∪ {X0 }, Σ, X0 , P sanan w vasen johto, miss¨a produktiot P saadaan ylt¨a. Vastaavasti jokaista G:n sanan w johtoa vastaa M:n sanan w hyv¨aksyv¨a konfiguraatioketju.
Usein rajoitetaan pino-operaatioiden tyyppi¨a. Pino-operaatio eli tilasiirto pinon osalta on • pop, jos se on muotoa (qj , Λ) ∈ δ(qi , a, X). • push, jos se on muotoa (qj , Y X) ∈ δ(qi , a, X), miss¨a Y on pinosymboli. • unit, jos se on muotoa (qj , Y ) ∈ δ(qi , a, X), miss¨a Y on pinosymboli. 3
Jos M :ss¨ a ei ole Λ-siirtoja, G on helppo muuntaa Greibachin normaalimuotoon.
33
LUKU 4. CF-KIELET
Lause 17. Jokainen PDA voidaan korvata saman kielen tunnistavalla PDA:lla, jossa on vain pino-operaatioita pop, push ja unit. Todistus. Pulmallisia ovat tilasiirrot (qj , Y1 · · · Yℓ ) ∈ δ(qi , a, X), miss¨a Y1 , . . . , Yℓ ∈ Γ ja ℓ ≥ 2. Muut siirrot ovat joko tyyppi¨a pop tai tyyppi¨a unit. T¨allaisia tilasiirtoja varten lis¨at¨a¨an tilajoukkoon tietyt muotoa hqj , Y1 · · · Yi i olevat tilat ja m¨a¨aritell¨a¨an niille tilasiirrot. Ensinn¨akin poistetaan yo. tilasiirto ja korvataan se tyyppi¨a unit olevalla siirrolla hqj , Y1 · · · Yℓ−1 i, Yℓ ∈ δ(qi , a, X). Edelleen lis¨at¨a¨an tyyppi¨a push olevat tilasiirrot δ hqj , Y1 · · · Yi i, Λ, Yi+1 = hqj , Y1 · · · Yi−1 i, Yi Yi+1 (i = 2, . . . , ℓ − 1)
sek¨a viel¨a
δ hqj , Y1i, Λ, Y2 = (qj , Y1 Y2 ) .
Yksi siirto korvautuu nyt usealla siirrolla, jotka ovat haluttua tyyppi¨a. Deterministiselt¨a pinoautomaatilta (DPDA) vaaditaan nelj¨a ehtoa: • Alkutilojen joukossa on yksi tila tai se on tyhj¨a. • Pohjasymbolien joukossa on vain yksi symboli. • δ(qi , a, X):ss¨a on aina enint¨a¨an yksi alkio, ts. aina on joko tarkalleen yksi mahdollinen tilasiirto tai sitten ei yht¨a¨an. T¨ass¨a a on joko sy¨otesymboli tai Λ. • Jos δ(qi , Λ, X) ei ole tyhj¨a, niin δ(qi , a, X) on aina tyhj¨a, kun a ∈ Σ, ts. jos on Λ-siirto, niin ei ole muita siirtoja. Deterministiset pinoautomaatit eiv¨at pysty tunnistamaan kaikkia CF-kieli¨a, niiden tunnistamia kieli¨a kutsutaankin deterministisiksi CF-kieliksi (DCF-kieliksi). Esimerkiksi palindromikieli Lpal , jossa aakkostossa on ainakin kaksi symbolia, on CF-kieli, muttei DCFkieli. DCF-kielet ovat generoitavissa yksiselitteisill¨a CF-kieliopeilla, ks. Lauseen 16 todistus. Ajateltuna ilman pinoaan PDA muistuttaa paljon transduktoria. Luettu symboli muodostuu parista, jossa on sy¨otesymboli tai Λ ja pinosymboli, ja vastaava tuloste on pinon p¨a¨allimm¨aisen symbolin korvaava sana. Transduktorit muodostavatkin t¨arke¨an ty¨okalun pidemm¨alle menev¨ass¨a CF-kielten teoriassa. (On my¨os olemassa pinotransduktoreita.)
4.4
J¨ asennysalgoritmit (lyhyt katsaus)
Lauseen 15 todistuksen PDA suorittaa oleellisesti simuloimansa kieliopin sanan top–downj¨asennyksen. Ts. se etsii produktiojonon, jolla generoitu sana tuotetaan. Valitettavasti vain PDA on luonteeltaan ep¨adeterministinen ja j¨asennysalgoritmi ei saa sit¨a olla. Oikeanlaisen j¨asent¨aj¨an saamiseksi pit¨a¨akin ep¨adeterministisyys jollakin tavalla poistaa. Sen sijaan, ett¨a vain hyv¨aksyisi tai hylk¨aisi, pit¨aa¨ PDA:n t¨ass¨a viel¨a hyv¨aksyess¨aa¨n tulostaa” j¨asen” nykseen tarvittava tieto.
34
LUKU 4. CF-KIELET
Ep¨adeterministisyys voidaan toisinaan poistaa esimerkiksi ennakoimalla (englanniksi look-ahead”), toisin sanoen lukien sy¨otett¨a eteenp¨ain ennen j¨asennysaskelta. CF-kielioppi ” on LL(k)-kielioppi, jos top–down-j¨asennyksess¨a riitt¨a¨a ennakoida k symbolia j¨asent¨av¨an PDA:n seuraavan askeleen selvitt¨amiseksi. Formaalisti LL(k)-kielioppi4 on CF-kielioppi, joka toteuttaa seuraavan ehdon, miss¨a (w)k tarkoittaa sanan w k-pituista prefiksi¨a ja ⇒left vasenta johtoaskelta: Jos X0 ⇒∗left uXv ⇒left uwv ⇒∗left uz
ja
X0 ⇒∗left uXv ′ ⇒left uw ′ v ′ ⇒∗left uz ′ ja (z)k = (z ′ )k , niin w = w′. Ns. bottom–up-j¨asennyksess¨a redusoidaan sanaa korvaamalla siin¨a osasanana oleva kieliopin produktion oikea puoli sen vasemman puolen v¨alisymbolilla. Redusointia jatketaan ker¨aten j¨asennystieto kunnes saavutetaan aksiooma. My¨os t¨am¨a j¨asennystapa voidaan toteuttaa PDA:lla. Nopeaa j¨asennyst¨a on tutkittu hyvin paljon. Hyv¨a viite on suomalaisten alan asiantuntijoiden kaksiosainen kirja Sippu, S. & Soisalon-Soininen, E.: Parsing Theory. Volume I: Languages and Parsing. Springer–Verlag (1988) ja Volume II: LR(k) and LL(k) Parsing (1990). Alan klassinen viite on lohik¨a¨armekirja” Aho, A.V. & Sethi, R. & ” Ullman, J.D.: Compilers: Principles, Techniques, and Tools. Addison–Wesley (1985), josta on tullut uusittu painos 2006 (uutena tekij¨an¨a mukana on Monica Lam).
4.5
Pumppaus
S¨a¨ann¨ollisen ¨a¨arett¨om¨an kielen sanoja voidaan pumpata yhdest¨a kohdasta. Muitakin kuin s¨aa¨nn¨ollisi¨a CF-kieli¨a voidaan pumpata vain yhdest¨a kohdasta, mutta ei kaikkia: Yleisesti CF-kielt¨a voidaan pumpata vain kahdesta kohdasta yhtaikaa. Pumppaus on helpointa ajatella, jos CF-kielioppi on vaikkapa Chomskyn normaalimuodossa. T¨am¨ah¨an ei rajoita tilannetta mitenk¨a¨an, pumppaus on kielen ominaisuus, ei kieliopin. Chomskyn normaalimuotoisen kieliopin j¨asennyspuu on bin¨a¨aripuu, ts. jokaisesta puun pisteest¨a l¨ahtee enint¨a¨an kaksi haaraa. Puun korkeus on sen juuresta lehteen kulkevan pisimm¨an polun pituus. Apulause. Jos bin¨a¨aripuussa on enemm¨an kuin 2h lehte¨a, puun korkeus on ainakin h+1. Todistus. Tulos pit¨a¨a paikkansa, kun h = 0. Edet¨a¨an induktiolla ja oletetaan, ett¨a tulos pit¨a¨a paikkansa, kun h ≤ ℓ ja katsotaan tapausta, miss¨a h = ℓ + 1 ≥ 1. Kun puussa on ainakin kaksi lehte¨a, se voidaan jakaa ensimm¨aisen haarautumisen kautta kahteen bin¨a¨aripuuhun plus joihinkin edelt¨aviin pisteisiin (ainakin juuri on t¨allainen piste). Ainakin toisessa n¨aist¨a puista on enemm¨an kuin 2ℓ+1 /2 = 2ℓ lehte¨a ja sen korkeus on siis v¨ahint¨aa¨n ℓ + 1. Koko puun korkeus on n¨ain ollen ainakin ℓ + 2. Ja sitten pumppauksen perustulos: 4
On my¨os olemassa vastaava oikeita johtoja k¨aytt¨av¨a k¨asite, ns. LR(k)-kielioppi.
35
LUKU 4. CF-KIELET
Pumppauslemma (uvwxy-lemma). Jos CF-kieli L voidaan generoida Chomskyn normaalimuotoisella kieliopilla, jossa on p v¨alisymbolia, z ∈ L ja |z| ≥ 2p+1 , niin z voidaan kirjoittaa muotoon z = uvwxy, miss¨a |vwx| ≤ 2p+1, vx 6= Λ, w 6= Λ ja sanat uv n wxn y ovat kaikki L:ss¨a. Todistus. Sanan z j¨asennyspuun korkeus on Apulauseen nojalla ainakin p + 1. Otetaan tarkasteltavaksi pisin puun polku juuresta lehteen. Lehden lis¨aksi polussa on ainakin p + 1 pistett¨a ja ne on merkitty v¨alisymboleilla. Valitaan alimmaiset p + 1 t¨allaista pistett¨a. Koska v¨alisymboleja on p kpl, esiintyy jokin v¨alisymboli X ainakin kahdesti valittujen pisteiden merkkin¨a. Valitaan n¨aist¨a esiintymist¨a jotkin kaksi. Alemmasta X:n esiintym¨ast¨a l¨ahtev¨an alipuun lehdist¨a saadaan sana w (6= Λ) ja ylemm¨ast¨a vwx, ja edelleen z voidaan kirjoittaa muotoon z = uvwxy. Ks. skemaattinen kuva alla. X0 X Y
X x
u v
w
y
Ylemm¨ast¨a X:n esiintym¨ast¨a l¨ahtev¨a alipuu voidaan tulkita vwx:n j¨asennyspuuksi (bin¨a¨aripuu). Sen korkeus on ilmeisesti enint¨a¨an p + 1, joten Apulauseen nojalla siin¨a on enint¨a¨an 2p+1 lehte¨a ja n¨ain ollen |vwx| ≤ 2p+1. Ylemm¨all¨a X:n esiintym¨all¨a on kaksi j¨alkel¨aist¨a, toinen n¨aist¨a on alemman X:n esiintym¨an esi-is¨a, toinen ei. J¨alkimm¨aisen pisteen merkki on jokin v¨alisymboli Y . T¨ast¨a pisteest¨a l¨ahtev¨a alipuu on jonkin ei-tyhj¨an v:n tai x:n osasanan j¨asennyspuu, riippuen siit¨a kummalla puolella X:n ylemp¨a¨a esiintym¨a¨a Y on. Siisp¨a v 6= Λ tai/ja x 6= Λ. Sanan z vasen johto on muotoa X ⇒∗ uXy ′ ⇒∗ uvXx′y ′ ⇒∗ uvwxy. 0
Silloin my¨os
X0 ⇒∗ uXy ′ ⇒∗ uwy, 2 X0 ⇒∗ uvXx′ y ′ ⇒∗ uv 2 Xx′ y ′ ⇒∗ uv 2 wx2 y
jne. ovat vasempia johtoja. Toisinaan my¨os pumppaus yhdess¨a paikassa on mahdollista, se vastaa tilannetta, jossa joko v = Λ tai x = Λ. Pumppausta k¨aytt¨aen on helppo n¨aytt¨a¨a, ett¨a er¨a¨at kielet eiv¨at ole CF-kieli¨a. n
Esimerkki. Kieli L = {a2 | n ≥ 0} on CS-kieli, kuten melko helposti on todettavissa (harjoituksena). Se ei kuitenkaan ole CF-kieli. Muutenhan se olisi generoitavissa Chomskyn normaalimuotoisella kieliopilla, jossa on p v¨alisymbolia, ja kyllin pitk¨at osasanat olisivat n¨ain ollen pumpattavissa. T¨am¨a ei kuitenkaan ole mahdollista. Muutoin, jos n = p+3,
36
LUKU 4. CF-KIELET
niin voidaan kirjoittaa 2p+3 = m1 + m2 , miss¨a 0 < m2 ≤ 2p+1, ja my¨os sana am1 on kieless¨a L (valitaan m2 = |vx|). Mutta m1 ≥ 2p+3 − 2p+1 > 2p+3 − 2p+2 = 2p+2 eik¨a kieless¨a L ole sanaa, jonka pituus olisi v¨alill¨a 2p+2 + 1, . . . , 2p+3 − 1. Hieman vahvempi pumppaustulos, jonka todistus on Pumppauslemman todistuksen v¨ah¨an ter¨astetty versio, on Ogdenin lemma. Jos CF-kieli L voidaan generoida Chomskyn normaalimuotoisella kieliopilla, jossa on p v¨alisymbolia, z ∈ L ja |z| ≥ 2p+1 ja z:ssa on merkitty ainakin 2p+1 symbolia, niin z voidaan kirjoittaa muotoon z = uvwxy, miss¨a v:ss¨a ja x:ss¨a on yhteens¨a ainakin yksi merkitty symboli, vwx:ss¨a on enint¨aa¨n 2p+1 merkitty¨a symbolia, w:ss¨a on ainakin yksi merkitty symboli, ja sanat uv n wxn y ovat kaikki L:ss¨a.
4.6
CF-kielten leikkaukset ja komplementit
CF-kielet eiv¨at ole suljettuja leikkauksen suhteen. Esimerkiksi kielet L1 = {ai bi aj | i ≥ 0 ja j ≥ 0} ja L2 = {ai bj aj | i ≥ 0 ja j ≥ 0} ovat CF-kieli¨a, kuten on helposti todettavissa. Niiden leikkaus L1 ∩ L2 = {ai bi ai | i ≥ 0} ei kuitenkaan ole CF-kieli, mik¨a voidaan helposti todeta Pumppauslemmalla. (Ko. leikkaus on kuitenkin CS-kieli.) Joukko-opin s¨a¨ant¨ojen mukaan L1 ∩ L2 = L1 ∪ L2 . Koska CF-kielet ovat suljettuja yhdisteen suhteen, seuraa t¨ast¨a, ett¨a CF-kielet eiv¨at ole suljettuja my¨osk¨a¨an komplementin suhteen, muutoinhan kielet L1 ja L2 olisivat CF-kieli¨a, ja samoin niiden yhdiste ja edelleen L1 ∩ L2 . Voidaan kuitenkin n¨aytt¨a¨a, ett¨a DCF-kielet ovat suljettuja komplementin suhteen. K¨aytt¨aen hyvin samantyyppist¨a tilaparikonstruktiota kuin Lauseen 2 todistuksessa, voidaan todistaa Lause 18. CF-kielen ja s¨a¨ann¨ollisen kielen leikkaus on CF-kieli. Todistus. Tehd¨a¨an CF-kielen L1 tunnistavasta pinoautomaatista M = (Q, Σ, Γ, S, Z, δ, A) ja s¨a¨ann¨ollisen kielen L2 tunnistavasta deterministisest¨a ¨a¨arellisest¨a automaatista M ′ = (Q′ , Σ, q0′ , δ ′ , A′ ) uusi PDA M ′′ = (Q′′ , Σ, Γ, S ′′, Z, δ ′′ , A′′ ). Valitaan Q′′ = (qi , qj′ ) qi ∈ Q ja qj′ ∈ Q′ , S ′′ = (qi , q0′ ) qi ∈ S , A′′ = (qi , qj′ ) qi ∈ A ja qj′ ∈ A′
ja m¨a¨aritell¨a¨an δ ′′ s¨a¨ann¨oill¨a
37
LUKU 4. CF-KIELET • Jos (qj , α) ∈ δ(qi , a, X) ja δ ′ (qk′ , a) = qℓ′ , niin (qj , qℓ′ ), α ∈ δ ′′ (qi , qk′ ), a, X ,
ts. sy¨otesymbolin a lukeminen aiheuttaa kummassakin automaatissa oikean tilasiirron.
• Jos (qj , α) ∈ δ(qi , Λ, X), niin (qj , qk′ ), α ∈ δ ′′ (qi , qk′ ), Λ, X ,
ts. Λ-siirrossa vain PDA:ssa tapahtuu tilasiirto. T¨all¨oin M ′′ tunnistaa leikkauskielen L1 ∩ L2 .
4.7
Ratkeavuuskysymyksi¨ a. Postin vastaavuusprobleema
S¨a¨ann¨ollisille kielille kutakuinkin kaikki karakterisaatioprobleemat ovat algoritmisesti ratkeavia. CF-kielille ei n¨ain en¨a¨a ole. Katsotaan ensin er¨ait¨a probleemoja, jotka ovat algoritmisesti ratkeavia. • J¨asenyysprobleema: Onko sana w kieless¨a L? Generoidaan kieli L Chomskyn normaalimuotoisella kieliopilla. Silloin helppo tarkistaa, onko Λ kieless¨a L. Edelleen mahdollisia w:n vasempia johtoja on a¨a¨rellinen m¨a¨ar¨a, sill¨a joka askeleella joko tulee uusi loppusymboli tai pituus kasvaa yhdell¨a. Tarkistetaan n¨am¨a mahdolliset johdot. J¨asenyys ja j¨asennys ovat luonnollisesti tekemisiss¨a kesken¨a¨an, jos ajatellaan vain jonkin j¨asennyspuun l¨oyt¨amist¨a tai sen toteamista, ettei j¨asennyst¨a ole. T¨ah¨an tarkoitukseen tunnetaan useita melko nopeita menetelmi¨a, mm. ns. Earleyn algoritmi. • Tyhjyysprobleema: Onko L tyhj¨a kieli ∅? Pumppauslemman avulla on varsin helppo n¨ahd¨a, ett¨a jos L ei ole tyhj¨a, niin siin¨a on sana, jonka pituus on enint¨a¨an 2p+1 − 1. ¨ arellisyysprobleema: Onko L ¨a¨arellinen kieli? • A¨ Jos CF-kieli on ¨a¨aret¨on, sit¨a voi pumpata. Pumppauslemman avulla on silloin helppo todeta, ett¨a siin¨a on n¨ain ollen sana, jonka pituus on v¨alill¨a 2p+1 , . . . , 2p+2 − 1. • DCF-ekvivalenssiprobleema: Ovatko DCF-kielet L1 ja L2 samat? T¨am¨a probleema oli pitk¨a¨an kuuluisa avoin probleema. Sen ratkaisi vasta melko ¨askett¨ain ranskalainen G´eraud S´enizergues. Ratkaisu on muuten eritt¨ain mutkikas.5 5
Se selostetaan pitk¨ ass¨ a artikkelissa S´ enizergues, G.: L(A) = L(B)? Decidability Results from Complete Formal Systems. Theoretical Computer Science 251 (2001), 1–166. Huomattavasti lyhyempi ratkaisu on artikkelissa Stirling, C.: Decidability of DPDA Equivalence. Theoretical Computer Science 255 (2001), 1–31.
38
LUKU 4. CF-KIELET
Monet probleemat puolestaan ovat algoritmisesti ratkeamattomia. Useimmat n¨aist¨a voidaan melko helposti palauttaa er¨a¨an tietyn probleeman, ns. Postin vastaavuusprobleeman (PCP), algoritmiseen ratkeamattomuuteen. Jotta yleens¨a ottaen p¨a¨ast¨a¨an k¨asittelem¨a¨an algoritmista ratkeamattomuutta, pit¨a¨a m¨a¨aritell¨a algoritmin k¨asite. Kutakuinkin t¨aysin hyv¨aksytty m¨a¨arittely k¨aytt¨a¨a ns. Turingin konetta, jolla taas on l¨aheinen yhteys Tyypin 0 kielioppeihin.6 Asiaan palataan my¨ohemmin. Postin vastaavuusprobleeman sy¨otteen¨a on kaksi aakkostoa Σ = {a1 , . . . , an } ja ∆ ja kaksi morfismia σ1 , σ2 : Σ∗ → ∆∗ , ks. Pyk¨al¨a 2.8. N¨am¨a morfismit annetaan luettelemalla Σ:n symbolien kuvat (aakkoston ∆ ei-tyhj¨at sanat7 ): σ1 (ai ) = αi
,
σ2 (ai ) = βi
(i = 1, . . . , n).
Teht¨av¨an¨a on selvitt¨a¨a onko sellaista sanaa w ∈ Σ+ , ett¨a σ1 (w) = σ2 (w). Tuloste on vastaus kyll¨a” tai ei”. Itse sanaa w kutsutaan probleeman ratkaisuksi. ” ” Liittyen annettuun Postin vastaavuusprobleemaan m¨a¨aritell¨a¨an jatkoa ajatellen aakkoston Σ ∪ ∆ ∪ {#} kielet L1 = σ1 (w)#w ˆ w ∈ Σ+ ja L2 = σ2 (w)#wˆ w ∈ Σ+ , miss¨a # on uusi symboli. Ei ole kovin vaikea todeta, ett¨a n¨am¨a kielet samoin kuin niiden komplementit L1 sek¨a L2 ovat CF-kieli¨a, jolloin edelleen kielet L3 = L1 ∪ L2
ja L4 = L1 ∪ L2
ovat CF-kielten yhdistein¨a CF-kieli¨a. Ilmeisesti annetulla Postin vastaavuusprobleemalla ei ole ratkaisua tarkalleen silloin, kun leikkaus L1 ∩ L2 on tyhj¨a, eli tarkalleen silloin, kun L4 muodostuu kaikista aakkoston Σ ∪ ∆ ∪ {#} sanoista. Viime mainittu seuraa, koska joukko-opillisesti L4 = L1 ∩ L2 . Viel¨a voidaan todeta, ett¨a L4 on s¨a¨ann¨ollinen tarkalleen silloin, kun L1 ∩ L2 on s¨a¨ann¨ollinen, ja t¨am¨a taas on tosi tarkalleen silloin, kun L1 ∩ L2 = ∅. Jos nimitt¨ain L1 ∩ L2 on s¨a¨ann¨ollinen ja siin¨a on sana σ1 (w)#w ˆ = σ2 (w)#w, ˆ niin w 6= Λ ja σ1 (w) 6= Λ ja edelleen my¨os sanat cn = σ2 (w n )#w cn σ1 (w n )#w
(n = 2, 3, . . . )
ovat L1 ∩ L2 :ssa. Kyllin suurelle n:lle s¨a¨ann¨ollisten kielten Pumppauslemma on silloin sovellettavissa ja tuottaa selv¨astikin sanoja, jotka eiv¨at ole kieliss¨a L1 ja L2 . Seuraavat probleemat ovat n¨ain edell¨a olevan mukaan algoritmisesti ratkeamattomia: • Leikkauksen tyhjyysprobleema: Onko kahden annetun CF-kielen leikkaus tyhj¨a? • Universaalisuusprobleema: Onko annetussa CF-kieless¨a kaikki aakkoston sanat? • Ekvivalenssiprobleema: Ovatko annetut CF-kielet samat? Palautuu Universaalisuusprobleemaan, sill¨a kaikkien sanojen muodostama kieli on tietysti CF-kieli. 6
Jos olisi algoritmi PCP:n ratkaisemiseksi, olisi my¨os algoritmi Turingin koneen pys¨ahtymisprobleeman ratkaisemiseksi, ks. Lause 30. T¨ am¨ a yhteys on varsin vaikea todistaa, ks. esimerkiksi Martin. 7 Toisin kuin t¨ ass¨ a, usein sallitaan my¨ os tyhj¨a sana kuvana. T¨all¨a ei ole suurempaa merkityst¨a.
39
LUKU 4. CF-KIELET • S¨a¨ann¨ollisyysprobleema Onko annettu CF-kieli s¨a¨ann¨ollinen? Pienell¨a lis¨akonstruktiolla n¨ahd¨aa¨n algoritmisesti ratkeamattomaksi my¨os • Yksiselitteisyysprobleema: Onko annettu CF-kielioppi yksiselitteinen? Otetaan tarkasteltavaksi kielen L3 generoiva CF-kielioppi G = {X0 , X1 , X2 }, Σ ∪ ∆ ∪ {#}, X0 , P ,
miss¨a P :ss¨a ovat produktiot X0 → X1 | X2 sek¨a X1 → αi X1 ai | αi #ai
ja X2 → βi X1 ai | βi #ai
(i = 1, . . . , n).
Jos nyt σ1 (w) = σ2 (w) jollekin sanalle w ∈ Σ+ , niin L3 :n sanalle σ1 (w)#wˆ = σ2 (w)#wˆ on G:ss¨a kaksi erilaista vasenta johtoa. Jos toisaalta jollekin L3 :n sanalle v#wˆ on kaksi vasenta erilaista johtoa, niin yksi niist¨a alkaa X0 ⇒G X1 :ll¨a ja toinen puolestaan X0 ⇒G X2 :lla ja v = σ1 (w) = σ2 (w). My¨os CF-kielten luontainen moniselitteisyys on algoritmisesti ratkeamaton. Edelleen, sen lis¨aksi ett¨a CF-kielet eiv¨at ole suljettuja leikkauksen eik¨a komplementin suhteen, mahdollinen sulkeutuvuuskaan ei ole algoritmista. Onko CF-kielten leikkaus CF-kieli tai onko CF-kielen komplementti CF-kieli ovat nimitt¨ain nekin algoritmisesti ratkeamattomia kysymyksi¨a. N¨aiden todistukset ovat jo hankalampia, ks. esimerkiksi Hopcroft & Ullman.
Luku 5 CS-KIELET 5.1
Lineaarisesti rajoitettu automaatti
Pinoautomaatin pinomuistin luku ja kirjoitus tapahtuu pinon yl¨ap¨a¨ass¨a, muualle pinoon ei ole p¨a¨asy¨a. Pinon korkeus suhteessa luetun sanan pituuteen voi periaatteessa olla miten tahansa suuri Λ-siirroista johtuen. Λ-siirrot voidaan kuitenkin kokonaan poistaa.1 N¨ain ollen pinon korkeuden voitaisiin haluttaessa olettaa pysyv¨an verrannollisena sy¨otteen pituuteen. Kun muutetaan pinoautomaatin ideaa siten, ett¨a kaikkialla pinossa” voidaan lukea ” ja kirjoittaa eli vaihtaa symboli toiseen ja my¨os sy¨ote on kaikkialta koko ajan luettavissa, saadaan oleellisesti automaatti, jota kutsutaan lineaarisesti rajoitetuksi automaatiksi (LBA). Muistitilan pituus ei t¨ass¨a saa olla suurempi kuin sy¨otteen pituus. Koska muistissa voi k¨aytt¨a¨a symboleja enemm¨ankin kuin vain sy¨otesymbolit, voi muistin kulloinkin tallentama informaatiom¨a¨ar¨a olla suurempi kuin sy¨otteen, mutta se on kuitenkin verrannollinen sy¨otteen informaatiom¨aa¨r¨aa¨n. Ts. on sellainen kerroin C, ett¨a muistin informaatio ≤ C × sy¨otteen informaatio. T¨ast¨a tulee nimi lineaarisesti rajoitettu”. ” LBA m¨a¨aritell¨a¨an kuitenkin yleens¨a hieman toisin, k¨aytt¨aen Turingin koneen tapaista formalismia. M¨ a¨ aritelm¨ a. Lineaarisesti rajoitettu automaatti (LBA) on kahdeksikko M = (Q, Σ, Γ, S, XL , XR , δ, A), miss¨a • Q = {q1 , . . . , qm } on ¨a¨arellinen tilojen joukko, jonka alkioita kutsutaan tiloiksi; • Σ on sy¨oteaakkosto (kielen aakkosto); • Γ on nauha-aakkosto (Σ ⊆ Γ); • S ⊆ Q on alkutilojen joukko; • XL ∈ Γ − Σ on vasen reunamerkki; 1
Ks. Lauseiden 15 ja 16 todistusten alaviitteet. Oleellisesti t¨am¨a vastaa kieliopin muuttamista Greibachin normaalimuotoon.
40
LUKU 5. CS-KIELET
41
• XR ∈ Γ − Σ on oikea reunamerkki (XR 6= XL ); • δ on siirtofunktio, joka kuvaa jokaisen parin (qi , X), jossa qi on tila ja X on nauhasymboli, tarkalleen yhdeksi ¨a¨arelliseksi kolmikoiden (qj , Y, s) joukoksi δ(qi , X), miss¨ a qj on tila, Y on nauhasymboli ja s on jokin luvuista 0, +1 tai −1; lis¨aksi oletetaan, ett¨a – jos qi ∈ A, niin δ(qi , X) = ∅, – jos (qj , Y, s) ∈ δ(qi , XL ), niin Y = XL ja s 6= −1, ja – jos (qj , Y, s) ∈ δ(qi , XR ), niin Y = XR ja s 6= +1; • A ⊆ Q on lopputilojen joukko. LBA:n muistitila, ns. nauha, on aina muotoa XL αXR oleva sana, miss¨a α ∈ Γ∗ . Alussa nauha on XL wXR , miss¨a w on sy¨otesana. Edelleen |α| = |w| eli nauhan pituus on koko ajan |w| + 2. LBA on aina tarkalleen yhdess¨a tilassa qi ja lukee tarkalleen yht¨a symbolia X nauhansa symboleista. Alussa LBA lukee vasenta reunasymbolia XL . Havainnollisesti voi ajatella, ett¨a LBA:lla on lukip¨a¨a”, joka lukee nauhaa ja voi my¨os kirjoittaa siihen: ” XL
a
Y
Z
X
b
X
b
XR
lukipää
Siirtofunktio δ ilmoittaa, mit¨a LBA seuraavaksi tekee. Jos (qj , Y, s) ∈ δ(qi , X) ja luettu symboli on nauhan `:s symboli, niin LBA vaihtaa tilan qi :st¨a qj :hin, korvaa lukemansa nauhasymbolin X symbolilla Y (joka Y voi olla X) ja siirtyy lukemaan nauhan ` + s:tt¨a symbolia. T¨allainen operaatio on yksi LBA:n siirto. Huomaa, ett¨a LBA on luonteeltaan ep¨adeterministinen: kussakin tilanteessa siirtoja voi olla valittavissa useampia tai ei yht¨a¨an. Kuten PDA:lle, muistin tilanne annetaan konfiguraatiolla. Konfiguraatio on nelikk¨o (qi , α, X, β), miss¨a qi on tila, αXβ on nauha ja X on luettu nauhan symboli. Edell¨a olevaan verraten siis ` = |αX|. Konfiguraatio (qj , α0 , Y, β 0 ) on konfiguraation (qi , α, X, β) suora seuraaja, jos se saadaan yhdell¨a LBA:n siirrolla (qi , α, X, β):sta, merkit¨aa¨n (qi , α, X, β) `M (qj , α0 , Y, β 0 ). Siirtoa (qj , Y, −1) ∈ δ(qi , X) vastaa siis esimerkiksi (qi , αZ, X, β) `M (qj , α, Z, Y β), miss¨a Z ∈ Γ. T¨ahtirelaatio” `∗M m¨a¨aritell¨a¨an aivan samoin kuin PDA:lle. ” Alussa nauhalla on sy¨otesana w ja vastaava konfiguraatio on (qi , Λ, XL , wXR ), miss¨a qi on jokin alkutila. LBA M hyv¨aksyy sy¨otteen w, jos (qi , Λ, XL , wXR ) `∗M (qj , α, Y, β),
LUKU 5. CS-KIELET
42
miss¨a qi on jokin alkutila ja qj on jokin lopputila. Huomaa, ett¨a lopputilasta eteenp¨ain ei ole siirtoja, ts. LBA pys¨ahtyy. LBA voi my¨os pys¨ahty¨a muuhunkin kuin lopputilaan, t¨all¨oin sy¨otett¨a ei hyv¨aksyt¨a. LBA:n hyv¨aksymien sanojen muodostama kieli on sen tunnistama kieli. Koska yksinkertaisenkin LBA:n t¨aydellinen m¨a¨arittely on yleens¨a pitk¨a, on tapana esitt¨aa¨ vain LBA:n toimintaidea, kuitenkin niin yksityiskohtaisesti, ettei sen toiminnan oikeellisuudesta j¨a¨a ep¨ailyksi¨a.2 n
Esimerkki. Kielen L = {a2 | n ≥ 0} tunnistaa LBA M = Q, {a}, Γ, {q0 }, @, #, δ, {q1 } , jonka toiminta voidaan kuvata lyhyesti seuraavasti. Paitsi symboli a, Γ:ssa on my¨os symboli a0 . Ensimm¨aisen¨a toimenaan M vaihtaa vasemman a:n a0 :ksi. Sen j¨alkeen M kaksinkertaistaa a0 -symbolien lukum¨a¨ar¨an k¨aytt¨aen aikaisempia a0 :ja laskurina. Jos M t¨orm¨ a¨ a kesken t¨allaisen kaksinkertaistamisprosessin oikeaan reunamerkkiin #, se pys¨ahtyy, tila ei t¨all¨oin ole lopputila q1 . Jos se taas t¨orm¨a¨a #:oon saatuaan juuri valmiiksi kaksinkertaistamisen, se siirtyy lopputilaan q1 . Selv¨asti t¨ass¨a tarvitaan viel¨a muitakin nauhasymboleja ja tiloja, jotta t¨allainen toiminto voidaan toteuttaa. Lause 19. Jokainen CS-kieli voidaan tunnistaa LBA:lla. Todistus. Otetaan CS-kielioppi G = (ΣN , ΣT , X0 , P ) ja n¨aytet¨a¨an miten sen generoima kieli voidaan tunnistaa LBA:lla M = (Q, ΣT , Γ, S, XL , XR , δ, A). Paitsi G:n loppusymboleja, Γ:ssa ovat my¨os symbolit [x, a] (x ∈ ΣN ∪ ΣT ja a ∈ ΣT ) sek¨a viel¨a symbolit [Λ, a] (a ∈ ΣT ). Aluksi M vaihtaa sy¨otteen kunkin symbolin a symboliksi [Λ, a], paitsi sy¨otteen vasemman symbolin b, jonka se vaihtaa symboliksi [X0 , b]. M tallettaa n¨ain sy¨otteen nauhasymbolien toisiin komponentteihin ja k¨aytt¨a¨a ensimm¨aisi¨a komponentteja G:n johdon simulointiin. Yksi simulointiaskel muodostuu seuraavista osista. 1. M k¨ay l¨api vasemmalta oikealle nauhan ja etsii ¨a¨arellist¨a muistiaan k¨aytt¨aen osasanaa, joka olisi jonkin G:n produktion vasen puoli. T¨at¨a varten M pit¨aa¨ koko ajan ¨a¨arellisess¨a muistissaan kyllin monta viimeksi lukemaansa symbolia. 2. L¨oydetty¨a¨an jonkin produktion vasemman puolen M p¨a¨att¨a¨a k¨aytt¨a¨ak¨o t¨at¨a produktiota simuloinnissa vai ei (ep¨adeterministisyys). 3. Jos M p¨a¨att¨a¨a k¨aytt¨a¨a simuloinnissa l¨oyt¨am¨a¨ans¨a sopivaa produktiota, se suorittaa G:n vastaavan johtoaskeleen. Jos t¨all¨oin sana pitenee, ts. produktion oikea puoli on vasenta pidempi, pit¨a¨a jo johdetun sanan loppuosaa siirt¨a¨a vastaavasti oikealle. T¨am¨a vaatii useita askeleita. Mik¨ali t¨am¨a ei onnistu, menee johdettu sana liian pitk¨aksi ja M pys¨ahtyy, mutta ei lopputilaan. 2
Designing Turing machines by writing out a complete set of states and a next-move function is a ” noticeably unrewarding task.” (Hopcroft & Ullman).
LUKU 5. CS-KIELET
43
4. Ellei johtoa voida en¨a¨a jatkaa eli ei l¨oydy produktioita, M tarkistaa, onko johdettu sana sama kuin sy¨ote, joka oli tallennettu alempiin komponentteihin, ja siirtyy positiivisessa tapauksessa lopputilaan. Muutoin M pys¨ahtyy ei-lopputilaan. Selv¨asti tarvitaan jo mainittujen lis¨aksi paljon muitakin nauhasymboleja paikkamerkkein¨a ja muuten, ja my¨os paljon tiloja. Lause 20. LBA:n tunnistama kieli on CS-kieli. Todistus. Otetaan tarkasteltavaksi LBA M = (Q, Σ, Γ, S, $, #, δ, A). L(M ):n generoiva pituutta kasvattava kielioppi G = (ΣN , Σ, X0 , P ) saadaan seuraavasti (ks. Lause 11). Ensinn¨akin tarvitaan v¨alisymbolit [X, a] (X ∈ Γ ja a ∈ Σ) ja sanan p¨aiss¨a [$, X, a] sek¨a [#, X, a] (X ∈ Γ ja a ∈ Σ). Tilasiirron simuloimista varten tarvitaan viel¨a v¨alisymbolit [X, qi , a] sek¨a [X, qi , s, a] (X ∈ Γ, qi ∈ Q, a ∈ Σ ja s = 0, ±1) ja sanan p¨aiss¨a [$, qi , X, a] sek¨a [#, qi , X, a], [$, X, qi , a] sek¨a [#, X, qi , a], [$, X, qi , s, a] sek¨a [#, X, qi , s, a] (X ∈ Γ, qi ∈ Q, a ∈ Σ ja s = 0, ±1). Lis¨aksi tarvitaan viel¨a yksi v¨alisymboli Y . Ensin G generoi mielivaltaisen v¨ahint¨aa¨n 3-pituisen sy¨otesanan, joka talletetaan v¨alisymbolien viimeiseen komponenttiin. (Lyhyemm¨at sanat hoidetaan erikseen.) T¨ah¨an tarvitaan produktiot X0 → Y [#, a, a] (a ∈ Σ), Y → Y [a, a] | [$, qi , a, a][b, b] (a, b ∈ Σ ja qi ∈ S). Sen j¨alkeen G simuloi M :¨a¨a v¨alisymbolien ensimm¨aisiss¨a komponenteissa. Huomaa, ett¨a reunamerkit on otettava sy¨otteen p¨aiss¨a olevien symbolien sis¨a¨an, koska niit¨a ei voida pyyhki¨a pituutta kasvattavalla kieliopilla pois. Siirtoa (qj , V, 0) ∈ δ(qi , U ), jossa lukip¨aa¨ ei liiku, simuloidaan produktioilla [U, qi , a] → [V, qj , a], [$, qi , X, a] → [$, qj , X, a] (U = V = $), [$, U, qi , a] → [$, V, qj , a], [#, qi , X, a] → [#, qj , X, a] (U = V = #), [#, U, qi , a] → [#, V, qj , a].
LUKU 5. CS-KIELET
44
Siirtoa (qj , V, +1) ∈ δ(qi , U ), jossa lukip¨aa¨ siirtyy oikealle, simuloidaan produktioilla [U, qi , a] → [V, qj , +1, a], [$, U, qi , a] → [$, V, qj , +1, a], joilla ilmoitetaan”, ett¨a lukip¨a¨an siirto oikealle on tulossa, ja produktioilla ” [V, qj , +1, a][X, b] → [V, a][X, qj , b], [V, qj , +1, a][#, X, b] → [V, a][#, X, qj , b], [#, U, qi , a] → [#, qj , V, a], [$, qi , X, a] → [$, X, qj , a] (U = V = $), [$, V, qj , +1, a][X, b] → [$, V, a][X, qj , b], jotka toteuttavat siirtymisen. Siirtoa, jossa lukip¨a¨a siirtyy vasemmalle, simuloidaan vastaavanlaisilla produktioilla. Viel¨a tarvitaan loppuproduktiot [X, qi , a] → a , [$, qi , X, a] → a , [#, qi , X, a] → a ,
[$, X, qi , a] → a , [#, X, qi , a] → a ,
miss¨a qi ∈ A, ja [X, a] → a ,
[$, X, a] → a ,
[#, X, a] → a.
Kielen L(M ) sana w, jonka pituus on ≤ 2, otetaan mukaan produktiolla X0 → w. Lauseiden 19 ja 20 seurauksena CS-kielet ovat tarkalleen kaikki lineaarisesti rajoitettujen automaattien tunnistamat kielet. LBA on deterministinen, jos δ(qi , X):ss¨a on aina enint¨a¨an yksi alkio, ts. joko siirtoa ei ole tai sitten vaihtoehtoja on vain yksi, ja alkutiloja on enint¨a¨an yksi. Determinististen LBA:iden tunnistamia CS-kieli¨a sanotaan deterministisiksi CS-kieliksi eli DCS-kieliksi. On varsin tunnettu avoin probleema, ovatko kaikki CS-kielet deterministisi¨a.
5.2
Normaalimuotoja
Pituutta kasvattava kielioppi on ns. Kurodan normaalimuodossa, jos sen produktiot ovat muotoa X → a , X → Y , X → Y Z tai XY → U V, miss¨a a on loppusymboli ja X, Y, Z, U ja V ovat v¨alisymboleja. Poikkeuksena taas produktio X0 → Λ, mik¨ali aksiooma X0 ei esiinny mink¨a¨an produktion oikealla puolella. Lause 21. Jokainen CS-kieli voidaan generoida Kurodan normaalimuotoisella pituutta kasvattavalla kieliopilla. Todistus. Tunnistetaan ensin CS-kieli LBA:lla ja sen j¨alkeen muunnetaan LBA pituutta kasvattavaksi kieliopiksi Lauseen 20 todistuksen menetelm¨all¨a. Tuloksena on Kurodan normaalimuotoinen kielioppi, kuten helposti voi todeta.
LUKU 5. CS-KIELET
45
CS-kielioppi on ns. Penttosen normaalimuodossa,3 jos sen produktiot ovat muotoa X→a,
X →YZ
tai XY → XZ,
miss¨a a on loppusymboli ja X, Y ja Z ovat v¨alisymboleja. Ja poikkeuksena tietysti produktio X0 → Λ, mik¨ali aksiooma X0 ei esiinny mink¨a¨an produktion oikealla puolella. Jokainen CS-kielioppi voidaan vied¨a Penttosen normaalimuotoon, mutta t¨am¨a onkin jo varsin vaikea todistaa.
5.3
CS-kielten ominaisuuksia
CS-kielet ovat laskettavia, ts. niiden j¨asenyysprobleema on algoritmisesti ratkaistavissa. T¨am¨a on helposti n¨aht¨aviss¨a. Sen selvitt¨amiseksi onko sana w LBA:n M tunnistamassa kieless¨a vai ei, katsotaan vain M :n sy¨otteell¨a w ottamia askeleita, kunnes joko M pys¨ahtyy tai jokin konfiguraatio toistuu. T¨am¨a tehd¨a¨an kaikille siirtovaihtoehdoille (ep¨adeterministisyys). Toisaalta Lause 22. On olemassa aakkoston {a} laskettava kieli, joka ei ole CS-kieli. Todistus. Numeroidaan kaikki mahdolliset CS-kieliopit, joiden loppusymboliaakkosto on {a}: G1 , G2 , . . . T¨am¨a voidaan tehd¨a vaikkapa seuraavasti. Korvataan i:s v¨alisymboli kieliopissa jokaisessa esiintym¨ass¨a¨an #bi :ll¨a, miss¨a bi on i:n bin¨a¨ariesitys. Sen j¨alkeen k¨ayt¨oss¨a ovatkin vain symbolit a01, #(){} → ja kieliopit voidaan j¨arjest¨a¨a leksikografiseen j¨arjestykseen, eli ensin pituusj¨arjestykseen ja saman pituuden sis¨all¨a aakkosj¨arjestykseen. Otetaan sitten aakkoston {a} kieli / L(Gn ) . L = an an ∈ L on laskettava, sill¨a sanan am kuuluminen L:¨a¨an voidaan selvitt¨a¨a seuraavalla menettelyll¨a: (1) Etsit¨a¨an kielioppi Gm . (2) Koska Gm :n j¨asenyysprobleema on algoritmisesti ratkeava, jatketaan tutkimalla onko am kieless¨a L(Gm ) vai ei. Toisaalta L ei ole CS. Jos se nimitt¨ain olisi, se olisi jokin kielist¨a L(G1 ), L(G2 ), . . . , sanotaan L = L(Gk ). Mutta silloinhan sana ak on L:ss¨a tarkalleen silloin, kun se ei ole L:ss¨a! Edellinen todistus on taas esimerkki l¨avist¨aj¨amenetelm¨ast¨a, vrt. Lauseen 1 todistus. Itse asiassa on vaikea l¨oyt¨a¨a luontevia” esimerkkej¨a kielist¨a, jotka eiv¨at ole CS-kieli¨a, ” k¨aytt¨am¨att¨a l¨avist¨aj¨amenetelm¨a¨a tai ottamatta k¨aytt¨o¨on laskennallisen vaativuuden tuloksia. Ohjelmointikieliss¨a esimerkiksi on usein piirteit¨a, jotka johtavat siihen, etteiv¨at ne tarkkaan ottaen olekaan CF-kieli¨a. Kuitenkin ne ovat kutakuinkin poikkeuksetta t¨all¨oinkin CS-kieli¨a. CS-kielten todettiin edell¨a Lauseessa 10 olevan suljettuja yhdisteen, katenaation ja katenaatiosulkeuman sek¨a my¨os peilikuvan suhteen. Toisin kuin CF-kielet, CS-kielet ovat suljettuja my¨os leikkauksen ja komplementin suhteen. Lause 23. CS on suljettu leikkauksen suhteen. 3
T¨ am¨ a on ns. vasemmanpuoleinen normaalimuoto. On tietysti my¨os vastaava oikeanpuoleinen normaalimuoto. Alkuper¨ aisviite on Penttonen, M.: One-Sided and Two-Sided Context in Formal Grammars. Information and Control 25 (1974), 371–392.
LUKU 5. CS-KIELET
46
Todistus. Jos LBA:t M1 ja M2 tunnistavat CS-kielet L1 ja L2 , vastaavasti, on helppo konstruoida kolmas LBA M , joka tunnistaa leikkauksen L1 ∩ L2 . T¨all¨oin M simuloi sek¨a M1 :t¨a ett¨a M2 :ta yhtaikaa vuorotellen tallentaen nauhalleen n¨aiden nauhat, lukip¨aiden paikat ja tilat. M hyv¨aksyy sy¨otteen, mik¨ali simuloinnissa sek¨a M1 ett¨a M2 hyv¨aksyv¨at sen. CS:n sulkeutuvuus komplementin suhteen oli er¨as 80-luvun kuuluisimpia diskreetin matematiikan tuloksia. Sen todistivat toisistaan riippumatta samaan aikaan Neil Immerman ja R´obert Szelepcs´enyi.4 Itse asiassa he todistivat paljon yleisemm¨an tilavaativuusluokkia koskevan tuloksen. Immerman–Szelepcs´ enyi-lause. CS on suljettu komplementin suhteen. Todistus. L¨ahdet¨a¨an liikkeelle LBA:sta M ja konstruoidaan toinen LBA MC , joka tunnistaa L(M ):n. Ensimm¨aisen¨a toimenaan MC laskee niiden M :n konfiguraatioiden lukum¨a¨ar¨an N , jotka ovat jonkin alkukonfiguraation seuraajia sy¨otteelle w. T¨allaisten konfiguraatioiden pituus on |w| = n. Merkit¨a¨an Nj :ll¨a niiden konfiguraatioiden lukum¨a¨ar¨a¨a, jotka saadaan sy¨otett¨a w vastaavista alkukonfiguraatioista enint¨a¨an j askeleella. Kun l¨oytyy ensimm¨ainen sellainen j:n arvo j = jmax , ett¨a Njmax = Njmax +1 , on ilmeisesti N = Njmax . Alussa N0 on alkutilojen lukum¨a¨ar¨a. Ei ole kovin vaikea n¨ahd¨a, ett¨a luku N voidaan tallentaa nauhalle k¨aytt¨aen vaikkapa desimaaliesityst¨a, jossa useampi desimaali on ahdettu yhteen nauhasymboliin. Samalla tekniikalla voidaan tallentaa useitakin enint¨a¨an samaa suuruusluokkaa olevia lukuja. Luvun Nj saatuaan MC laskee seuraavan luvun Nj+1 . MC pit¨aa¨ muistissaan vain luvun Nj :n, ei sit¨a edelt¨avi¨a lukuja. MC k¨ay l¨api kaikki n-pituiset M :n konfiguraatiot aakkosj¨arjestyksess¨a ja pit¨a¨a muistissaan t¨at¨a varten aina vain konfiguraation ja tarvittaessa j¨arjestyksess¨a sit¨a edelt¨av¨an konfiguraation, ei muita. Tutkittuaan konfiguraation κ` loppuun, MC etsii t¨at¨a k¨aytt¨aen j¨arjestyksess¨a seuraavan konfiguraation κ = κ`+1 . Tarkoitus on tutkia, voisiko konfiguraation κ saada seuraajana jostain alkukonfiguraatiosta sy¨otteelle w enint¨a¨an j + 1 askeleella. MC pit¨a¨a nauhalla yll¨a kahta laskuria λ1 ja λ2 . Aina kun l¨oytyy konfiguraatio κ, joka saadaan seuraajana jostain alkukonfiguraatiosta sy¨otteelle w enint¨a¨an j + 1 askeleella, lis¨at¨a¨an λ1 :n arvoa 1:ll¨a. Tutkiakseen konfiguraatiota κ, MC k¨ay l¨api n-pituisia konfiguraatioita κ0 l¨oyt¨a¨akseen sellaisia, jotka ovat saatavissa jonkin w:n alkukonfiguraation seuraajina enint¨a¨an j askeleella. L¨oydettyjen t¨allaisten konfiguraatioiden lukum¨a¨ar¨a¨a MC yll¨apit¨a¨a laskurissa λ2 . Kunkin konfiguraation κ0 kohdalla MC ensin arvaa onko ko. konfiguraatio niiden Nj konfiguraation joukossa, jotka saavutetaan enint¨a¨an j askeleella jostain alkukonfiguraatiosta, vai ei. Jos arvaus on ei”, MC siirtyy seuraavaan kokeiltavaan konfiguraatioon li” s¨a¨am¨att¨a laskuria λ2 . Jos taas arvaus on kyll¨a”, MC arvaa konfiguraatioon κ0 jostain ” alkukonfiguraatiosta enint¨a¨an j askeleella viev¨an konfiguraatioketjun. T¨allainen arvaus tehd¨aa¨n siirto kerrallaan. Mik¨ali konfiguraatiot κ0 on k¨ayty l¨api ja λ2 < Nj , MC pys¨ahtyy ei-lopputilaan hyv¨aksym¨att¨a sy¨otett¨a w. MC tarkistaa onko arvattu κ0 :uun p¨a¨attyv¨a konfiguraatioketju oikea. On kaksi vaihtoehtoa. 4
Alkuper¨ aisviitteet ovat Immerman, N.: Nondeterministic Space is Closed under Complementation. ´nyi, R.: The Method of Forced EnumeSIAM Journal of Computing 17 (1988), 275–303 ja Szelepcse ration for Nondeterministic Automata. Acta Informatica 26 (1988), 279–284.
LUKU 5. CS-KIELET
47
(1) Jos konfiguraatioketju on oikea, MC tarkistaa onko κ = κ0 tai onko κ0 `M κ, ja positiivisessa tapauksessa lis¨a¨a laskuria λ1 yhdell¨a sek¨a siirtyy tutkimaan konfiguraatiota κ`+2 . Jos laskuri λ2 saavuttaa maksimiarvonsa Nj eik¨a viel¨ak¨a¨an ole l¨oytynyt etsitty¨a konfiguraatiota, MC p¨a¨attelee, ettei konfiguraatiota κ voida saavuttaa enint¨a¨an j + 1 askeleella alkukonfiguraatiosta ja siirtyy tutkimaan konfiguraatiota κ`+2 lis¨aa¨m¨att¨a laskuria λ1 . (2) Jos arvattu konfiguraatioketju ei ole oikea, MC pys¨ahtyy ei-lopputilaan hyv¨aksym¨att¨a sy¨otett¨a w. Lopulta MC on k¨aynyt l¨api kaikki mahdolliset konfiguraatiot κ` ja on saanut selville luvut Nj , ja n¨ain my¨os luvun N . Huomaa, ett¨a aina siirtyess¨aa¨n tutkimaan uutta konfiguraatiota κ` LBA MC nollaa laskurin λ2 , ja aina siirtyess¨a¨an laskemaan uutta lukua Nj se nollaa laskurin λ1 . MC :n toiminnan toinen vaihe on k¨ayd¨a j¨alleen l¨api kaikki n-pituiset konfiguraatiot pit¨aen yll¨a laskuria λ. Kun tarkasteltavana on konfiguraatio κ, MC ensin arvaa onko se jonkin w:n alkukonfiguraation seuraaja vai ei. Jos arvaus on ei”, MC siirtyy tutkimaan ” listassa seuraavaa konfiguraatiota lis¨a¨am¨att¨a laskuria λ. Jos taas arvaus on kyll¨a”, MC ” arvaa konfiguraatioon κ jostain w:n alkukonfiguraatiosta viev¨an enint¨a¨an jmax askeleen konfiguraatioketjun. Nyt on useita mahdollisuuksia: 1. Jos arvattu konfiguraatioketju ei ole oikea tai se on oikea, mutta κ on M :n hyv¨aksyv¨a loppukonfiguraatio, MC pys¨ahtyy hyv¨aksym¨att¨a sy¨otett¨a w. 2. Jos arvattu konfiguraatioketju on oikea ja κ ei ole M :n hyv¨aksyv¨a loppukonfiguraatio ja λ ei ole saavuttanut maksimiarvoaan N , MC lis¨aa¨ laskuria λ yhdell¨a ja siirtyy tutkimaan listassa seuraavaa konfiguraatiota. 3. Jos arvattu konfiguraatioketju on oikea ja κ ei ole M :n hyv¨aksyv¨a loppukonfiguraatio ja λ on saavuttanut maksimiarvon N , MC hyv¨aksyy sy¨otteen w. CS-kieliin liittyv¨at karakterisaatioprobleemat ovat kutakuinkin kaikki algoritmisesti ratkeamattomia. J¨asenyysprobleemahan on, kuten todettu, sent¨a¨an algoritmisesti ratkeava. Erityisesti tyhjyys-, a¨a¨rellisyys-, universaalisuus-, ekvivalenssi- ja s¨aa¨nn¨ollisyysprobleemat ovat ratkeamattomia. Universaalisuus, ekvivalenssi sek¨a s¨a¨ann¨ollisyys olivat ratkeamattomia jo CF-kielille, joten ne ovat sit¨a my¨os CS-kielille, ja koska CS-kielet ovat suljettuja komplementin suhteen, my¨os tyhjyys on niille ratkeamaton. ¨ arellisyyden ratkeamattomuus vaatii lis¨akonstruktion. Se voidaan tehd¨a vaikkapa A¨ Pyk¨al¨ass¨a 4.7 k¨asitellyn Postin vastaavuusprobleeman avulla. Kutakin PCP:n sy¨otemorfismiparia σ1 : Σ∗ → ∆∗ ja σ2 : Σ∗ → ∆∗ kohti konstruoidaan LBA M , jonka sy¨oteaakkosto on {a} ja joka saatuaan sy¨otteen an tarkistaa onko sellaista sanaa w ∈ Σ+ , ett¨a |w| ≤ n ja σ1 (w) = σ2 (w). (Ei ole kovin vaikeaa n¨ahd¨a, ett¨a t¨am¨a on mahdollista.) Jos mainitunlainen sana w on olemassa, M hylk¨a¨a sy¨otteen an , muuten ei. N¨ain ollen L(M ) on ¨a¨arellinen tarkalleen silloin, kun on olemassa sellainen sana w ∈ Σ+ , ett¨a σ1 (w) = σ2 (w). Postin vastaavuusprobleeman avulla voidaan my¨os n¨aytt¨aa¨ tyhjyyden ratkeamattomuus suoraan, ilman Immerman–Szelepcs´enyi-lausetta, sill¨a kieli w w ∈ Σ+ ja σ (w) = σ (w) 1
on CS-kieli, kuten voi helposti todeta.
2
Luku 6 CE-KIELET 6.1
Turingin kone
Turingin kone (TM) on samantapainen kuin LBA, mutta siin¨a ei ole reunamerkkej¨a ja muistinauha on potentiaalisesti molempiin suuntiin ¨a¨aret¨on. Nauha-aakkostossa on erikoinen merkki B, ns. blanko. Kussakin vaiheessa vain ¨a¨arellisen moni nauhasymboli on jotain muuta kuin blanko. Alussa nauhalla on sy¨otesana, jonka kahtapuolta on blankoja, ja lukip¨a¨a lukee sy¨otteen ensimm¨aist¨a symbolia. Tyhj¨an sanan tapauksessa lukip¨a¨a lukee jotain blankoa. Formaalisti Turingin kone on seitsikko M = (Q, Σ, Γ, S, B, δ, A), miss¨a Q, Σ, Γ, S, δ ja A ovat kuten LBA:lle ja B on blanko. Siirto m¨a¨aritell¨a¨an kuten LBA:lle, mit¨a¨an rajoituksia lukip¨a¨an liikkeelle ei ole, koska ei ole reunamerkkej¨a. Ainoa lis¨aehto on, ett¨a jos (qj , Y, s) ∈ δ(qi , X), niin Y 6= B. N¨ain m¨aa¨ritelty Turingin kone on luonteeltaan ep¨adeterministinen. Deterministinen Turingin kone (DTM) m¨a¨aritell¨a¨an kuten deterministinen LBA. Turingin koneen konfiguraatio m¨a¨aritell¨a¨an hieman toisin kuin LBA:lle. Jos lukip¨a¨a ei lue blankoa, niin konfiguraatio on nelikk¨o (qi , α, X, β), miss¨a qi on tila, αXβ on pisin nauhalla oleva sana, joka ei sis¨all¨a blankoja, ja X on nauhasymboli, jota M ko. sanassa lukee. Jos taas lukip¨a¨a lukee blankoa, on konfiguraatio (qi , Λ, B, β) (vast. (qi , α, B, Λ)), miss¨a β (vast. α) on pisin nauhalla oleva sana, joka ei sis¨all¨a blankoja. Erityisesti, jos nauhalla on vain blankoja eli nauha on tyhj¨a, on vastaava konfiguraatio (qi , Λ, B, Λ). Sanan hyv¨aksyminen ja kielen tunnistaminen m¨a¨aritell¨a¨an kuten LBA:lle. Lause 24. Jokainen CE-kieli voidaan tunnistaa Turingin koneella. Todistus. Todistus on hyvin samankaltainen kuin Lauseen 19 todistus. Ainoa ero on, ett¨a Tyypin 0 kielioppi voi my¨os pyyhki¨a pois symboleja eli sana voi uudelleenkirjoitettaessa lyhenty¨a. T¨all¨oin jo johdetun sanan loppuosaa pit¨a¨a siirt¨a¨a vasemmalle. Lause 25. Turingin koneiden tunnistamat kielet ovat CE-kieli¨a. Todistus. Todistus on kutakuinkin samanlainen kuin Lauseen 20 todistus. Mainittakoon vain pari yksityiskohtaa. Blankoja on mukana kaksi, yksi kummassakin uudelleenkirjoitettavan sanan p¨a¨ass¨a. Lopuksi ne pyyhit¨a¨an pois. Lopuksi my¨os terminoidaan symbolit, joissa on tallella sy¨ote”, ja muut pyyhit¨a¨an pois. T¨am¨a prosessi alkaa, kun simuloitava ” TM on lopputilassa ja etenee aaltona” molempiin suuntiin. ” 48
LUKU 6. CE-KIELET
49
Turingin koneiden tunnistamat kielet ovat n¨ain ollen tarkalleen kaikki CE-kielet. Kielten tunnistamisen kannalta voitaisiin rajoittua deterministisiin Turingin koneisiin. Jokaista Turingin konetta M voidaan nimitt¨ain simuloida DTM:ll¨a M 0 , joka tunnistaa saman kielen. Simuloivalla DTM:ll¨a M 0 on i:nness¨a vaiheessa aina nauhallaan per¨akk¨ain jollain tavalla koodattuna kaikki ne M :n konfiguraatiot, jotka voidaan saada tietty¨a sy¨otett¨a w vastaavista alkukonfiguraatioista enint¨aa¨n i:ll¨a askeleella. 0:nnessa vaiheessa (alussa) M 0 laskee nauhalleen kaikki sy¨otett¨a w vastaavat M :n alkukonfiguraatiot, joita on yht¨a paljon kuin alkutiloja. Siirrytt¨aess¨a vaiheesta i vaiheeseen i + 1 DTM M 0 yksinkertaisesti k¨ay l¨api viimeksi saamansa konfiguraatiot, jatkaa niist¨a kustakin yhdell¨a askeleella kaikilla mahdollisilla tavoilla ja tallettaa tulokset nauhalleen. M 0 pys¨ahtyy l¨oyt¨aess¨a¨an M :n loppukonfiguraation. Perhe CE todettiin jo suljetuksi yhdisteen, katenaation ja katenaatiosulkeuman sek¨a peilikuvan suhteen. Aivan samalla tavalla kuin Lause 23, saadaan Lause 26. CE on suljettu leikkauksen suhteen. Huolimatta siit¨a, ett¨a CE:n kielet voidaan tunnistaa deterministisill¨a Turingin koneilla, CE ei ole suljettu komplementin suhteen. Syyn¨a on se, ett¨a (D)TM voi ottaa a¨a¨rett¨om¨an monta askelta pys¨ahtym¨att¨a lainkaan. Niin voi muuten LBA:kin, mutta sopivalla laskuritekniikalla t¨am¨a voidaan est¨a¨a (harjoitus). Asian l¨ahemm¨aksi tutkimiseksi otetaan k¨aytt¨o¨on ns. universaali Turingin kone. Riitt¨a¨a tarkastella vain Turingin koneita, joiden sy¨oteaakkosto on {0, 1}.1 T¨allaiset Turingin koneet voidaan koodata bin¨a¨ariluvuiksi. T¨am¨a voidaan tehd¨a vaikkapa antamalla ensin δ viisikkojen joukkona P : (qj , Y, s, qi , X) ∈ P tarkalleen silloin, kun (qj , Y, s) ∈ δ(qi , X). Sen j¨alkeen koodataan esiintyv¨at symbolit bin¨aa¨rimuotoon: Symbolit (){}, 01 + − koodataan t¨ass¨a j¨arjestyksess¨a bin¨a¨arisanoiksi 10i (i = 1, . . . , 9). i:s tila koodataan bin¨a¨arisanaksi 110i ja j:s nauhasymboli sanaksi 1110j . T¨am¨an j¨alkeen Turingin kone M voidaankin esitt¨aa¨ bin¨aa¨rilukuna β(M ). Universaali Turingin kone (UTM) on sellainen TM U , joka saatuaan sy¨otteen2 w$β(M ), miss¨a w ∈ {0, 1}∗ , simuloi Turingin konetta M sy¨otteell¨a w, ts. U hyv¨aksyy ko. sy¨otteen, kun M hyv¨aksyy sy¨otteen w. Muut sy¨otteet U hylk¨a¨a. Lause 27. On olemassa universaali Turingin kone U . Todistus. Menem¨att¨a sen kummemmin yksityiskohtiin, U toimii seuraavasti. Ensin U tarkistaa, ett¨a sy¨ote on oikeaa muotoa w$β(M ). My¨onteisess¨a tapauksessa U dekoodaa” ” β(M ):n saadakseen k¨aytt¨o¨ons¨a M :n siirtofunktion δ. Sen j¨alkeen U simuloi M :¨a¨a sy¨otteell¨a w askel askeleelta k¨ayden aina v¨alill¨a hakemassa siirtos¨a¨ann¨ot dekoodatusta δ:sta. Kun M menee johonkin lopputilaansa, niin samoin tekee U . Lause 28. CE ei ole suljettu komplementin suhteen. 1
Aakkosto saisi kyll¨ a olla mik¨ a vaan, my¨os yksikirjaiminen! Kaikkien t¨ at¨ a muotoa olevien sy¨ otteiden muodostama kieli voidaan tunnistaa LBA:lla, kuten voi aika helposti todeta. 2
LUKU 6. CE-KIELET Todistus. L¨avist¨aj¨akieli” ”
50
D = w w$w ∈ L(U )
on CE, kuten on helposti todettavissa—kopioidaan vain w ja simuloidaan U :ta. D:ss¨a ovat siis niiden Turingin koneiden koodit, jotka hyv¨aksyv¨at itsens¨a”. Kuitenkaan D ei ole CE. ” Jos se olisi, niin sen tunnistaisi jokin Turingin kone M . Mutta silloinhan sana β(M ) on kieless¨a D tarkalleen silloin, kun se ei ole siin¨a! Yo. todistuksessa on j¨alleen k¨aytetty l¨avist¨aj¨amenetelm¨a¨a, vrt. Lauseiden 1 ja 22 todistukset. Todistuksessa esiintyv¨a D on esimerkki kielest¨a, jolla on selv¨asti ¨a¨arellinen m¨a¨aritelm¨a, mutta joka silti ei ole CE. D on co–CE-kieli, joka ei ole CE. Vastaavasti kieli D on CE-kieli, joka ei ole co–CE. Perheiden CE ja co−CE leikkaus C (laskettavat kielet) sis¨altyy siis aidosti kumpaankin n¨aist¨a perheist¨a.
6.2
Algoritminen ratkeavuus
Deterministiseen Turingin koneeseen voidaan liitt¨a¨a tulostus. Koneen pys¨ahtyess¨a lopputilaan tuloste on nauhalla sopivasti erotettuna muista siell¨a olevista symboleista. Huomaa, ett¨a tulostetta ei aina tule, sill¨a kone voi pys¨ahty¨a ei-lopputilaan tai olla pys¨ahtym¨att¨a kokonaan. Yleisesti hyv¨aksytyn k¨asityksen mukaan algoritmeilla tarkoitetaan tarkalleen niit¨a menetelmi¨a, jotka voidaan toteuttaa Turingin koneilla. T¨am¨a tunnetaan ns. Church–Turingteesin¨a. Algoritmisesti ratkeavat teht¨av¨at ovat siis tarkalleen ne teht¨av¨at, jotka ainakin periaatteessa voidaan ratkaista Turingin koneella. Er¨as seuraus Church–Turing-teesist¨a on, ett¨a on olemassa selv¨asti ¨a¨arellisesti m¨a¨ariteltyj¨a teht¨avi¨a, joita ei voida ratkaista algoritmisesti. Lause 29. On CE-kieli, jonka j¨asenyysprobleema ei ole ratkaistavissa algoritmisesti. Huomaa, ett¨a algoritmin tulisi t¨all¨oin aina tulostaa kyll¨a/ei-vastaus riippuen siit¨a onko sana kieless¨a vai ei. Todistus. Lauseen 28 todistuksessa esiintyv¨a l¨avist¨aj¨akieli D on CE-kieli, jonka j¨asenyysprobleema ei ole algoritmisesti ratkeava. Muutenhan my¨os kielen D j¨asenyysprobleeman voisi ratkaista deterministisell¨a Turingin koneella ja D olisi n¨ain CE-kieli. Determinististen Turingin koneiden pys¨ahtymisprobleemassa on sy¨otteen¨a sana w ja kysyt¨a¨an pys¨ahtyyk¨o deterministinen Turingin kone M saatuaan sy¨otteen w. Lause 30. On Turingin kone, jonka pys¨ahtymisprobleema on algoritmisesti ratkeamaton. Todistus. On helppo muuntaa Turingin konetta siten, ett¨a se pys¨ahtyy vain lopputilaan lis¨aa¨m¨all¨a tarvittaessa toiminto, joka j¨att¨a¨a koneen ¨a¨arett¨om¨a¨an silmukkaan, mik¨ali se olisi pys¨ahtym¨ass¨a ei-lopputilaan. Tulos seuraa nyt edellisest¨a lauseesta. Kutakuinkin kaikki CE-kieli¨a koskevat karakterisaatioprobleemat ovat algoritmisesti ratkeamattomia. Itse asiassa jokainen ei-triviaali CE-kielten ominaisuus on algoritmisesti ratkeamaton. Ei-triviaali tarkoittaa ominaisuutta, joka on joillain mutta ei kaikilla CEkielill¨a. Ricen lause. Jos O on ei-triviaali ominaisuus, niin se on CE-kielille algoritmisesti ratkeamaton. Sy¨ote on t¨ass¨a CE-kieli annettuna sen tunnistavan Turingin koneen muodossa.
LUKU 6. CE-KIELET
51
Todistus. Tyhj¨all¨a kielell¨a ∅ joko on ominaisuus O tai ei ole sit¨a. Vaihtamalla tarvittaessa ominaisuus O negaatiokseen, voidaan olettaa, ett¨a tyhj¨all¨a kielell¨a ei ole ominaisuutta O. Koska ominaisuus O on ei-triviaali, on my¨os sellainen CE-kieli L1 , jolla on ominaisuus O, ja sen tunnistava Turingin kone M1 . Valitaan CE-kieli L, jonka j¨asenyysprobleema on ratkeamaton, ja sen tunnistava Turingin kone M . Otetaan kielen L aakkoston sana w ja m¨a¨aritell¨a¨an sen avulla Turingin kone Mw seuraavasti. Mw :n sy¨oteaakkosto on sama kuin M1 :n. Sy¨otteen v saatuaan Mw aloittaa tutkimalla onko w kieless¨a L simuloiden Turingin konetta M . My¨onteisess¨a tapauksessa Mw jatkaa simuloiden Turingin konetta M1 sy¨otteell¨a v, jonka se on huolellisesti tallentanut t¨at¨a varten, ja hyv¨aksyy sy¨otteen tarkalleen silloin kuin M1 :kin. Kielteisess¨a tapauksessa Mw ei hyv¨aksy mit¨a¨an. Huomaa, ett¨a jos M :n simulointi ei pys¨ahdy, niin tulos on joka tapauksessa oikea! Huomaa my¨os, ett¨a vaikka ei olekaan Turingin konetta, joka selvitt¨aisi pys¨ahtyyk¨o M sy¨otteell¨a w vai ei, Turingin kone Mw voidaan konstruoida algoritmisesti. Sana w on n¨ain muunnettu koneeksi Mw , jolla on seuraava ominaisuus: Kielell¨a L(Mw ) on ominaisuus O tarkalleen silloin, kun w ∈ L. Koska vm. kuuluminen on algoritmisesti ratkeamaton, on sit¨a my¨os ominaisuus O. Ilmeisesti esimerkiksi seuraavat probleemat ovat suoraan Ricen lauseen nojalla algoritmisesti ratkeamattomia CE-kielille: • Tyhjyysprobleema ¨ arellisyysprobleema • A¨ • Universaalisuusprobleema • S¨aa¨nn¨ollisyysprobleema • Laskettavuusprobleema: Onko annettu kieli laskettavissa? Mutta my¨os esimerkiksi Ekvivalenssiprobleema on algoritmisesti ratkeamaton CE-kielille Ricen lauseen nojalla, koska jo heikompi” Universaalisuusprobleema on ratkeamaton. ” Turingin koneista on lukuisia variantteja, koneita, joilla on useita nauhoja tai moniulotteisia nauhoja jne. Mill¨a¨an n¨aist¨a, eik¨a muillakaan algoritmim¨a¨arittelyill¨a, saada tunnistetuksi laajempaa kieliperhett¨a kuin CE. Toisaalta CE-kielet voidaan tunnistaa viel¨akin rajoitetummilla Turingin koneilla kuin deterministisill¨a. DTM:n M sanotaan olevan reversiibeli Turingin kone (RTM), jos on toinen DTM M 0 , jolla on se ominaisuus, ett¨a jos κ1 `M κ2 konfiguraatiolle κ1 ja κ2 , niin (pienin teknisin muutoksin) κ2 `M 0 κ1 . DTM M 0 siis toimii kuin M takaperin! Yves Lecerf todisti jo vuonna 1962, ett¨a jokainen CE-kieli voidaan tunnistaa RTM:ll¨a.3 Vastaavasti jokainen algoritmi voidaan korvata reversiibelill¨a algoritmilla. T¨am¨a tulos on tullut hyvin t¨arke¨aksi mm. kvanttilaskennassa.
6.3
Aikaluokat (lyhyt katsaus)
Chomskyn hierarkia merkitsee automaattipuolella l¨ahinn¨a muistin erilaisten rajoitusten vaikutusta. Vastaavanlaisia rajoituksia voidaan asettaa ajalle, ts. askelien (siirtojen) lukum¨a¨ar¨alle. 3
Alkuper¨ aisviite on Lecerf, M.Y.: Machines de Turing r´eversibles. R´ecursive insolubilit´e en n ∈ N de l’´equation u = θn u, o` u θ est un ”isomorphisme de codes”. Comptes Rendus 257 (1963), 2597–2600.
LUKU 6. CE-KIELET
52
Askelten lukum¨a¨ar¨a¨a ei kannata rajoittaa yksityiskohtaisesti, vaan vain asymptoottisesti eli vain kyllin pitkille sy¨otesanoille sek¨a vakiokertojaa vaille, sill¨a automaattia voidaan helposti kiihdytt¨a¨a lineaarisesti”. ” Aikaluokka T IME f (n) tarkoittaakin niiden kielten L perhett¨a, jotka voidaan tunnistaa seuraavasti. Joillekin vakioille C ja n0 kieli L voidaan tunnistaa deterministisell¨a Turingin koneella, joka k¨aytt¨aa¨ enint¨aa¨n Cf (n) askelta jokaiselle n-pituiselle sy¨otesanalle, kun n ≥ n0 . Vastaavasti m¨a¨aritell¨a¨an aikaluokka N T IME f (n) , Turingin kone vain on ep¨adeterministinen. K¨aytt¨aen eri funktioita f (n) saadaan aikaluokille mutkikas ¨a¨aret¨on hierarkia perheen C sis¨a¨an. Ajatellen k¨ayt¨ann¨on toteutusta, eiv¨at ilmeisestik¨a¨an esimerkiksi aikaluokat T IME(2n ) ja N T IME(2n ) ole realistisia, sill¨a sy¨otesanan k¨asittely vie liiaksi aikaa. Toisaalta luokat T IME(nd ) (polynomiaikaiset kielet) ovat t¨ass¨a mieless¨a paremmin toteutettavissa. Kaikkien polynomiaikaisten kielten perhett¨a [ P= T IME(nd ) d≥1
pidet¨aa¨nkin yleisesti laskennallisesti tehokkaasti ( tractable”) tunnistettavien kielten per” heen¨a. Luokat N T IME(nd ) eiv¨at ole samalla tavoin selv¨asti toteutettavissa kuin P. Perhe [ NP = N T IME(nd ) d≥1
voidaan m¨a¨aritell¨a, mutta on kuuluisa avoin probleema onko P = N P! Luokasta N P on lis¨aksi l¨oytynyt universaaleja” kieli¨a, ns. N P-t¨aydellisi¨a kieli¨a, joilla on se ominaisuus, ” ett¨a jos yksikin niist¨a on P:ss¨a, niin P = N P.
Luku 7 KOODIT 7.1
Koodi. Schu ¨ tzenberger’n kriteeri
Kieli L on koodi, jos se on ei-tyhj¨a ja L∗ :n sanat ovat yksik¨asitteisesti purettavissa L:n sanojen katenaatioksi. T¨at¨a purkuoperaatiota kutsutaan dekoodaukseksi. Tarkemmin sanoen, jos u1 , . . . , um ja v1 , . . . , vn ovat L:n sanoja ja u1 · · · um = v1 · · · vn , niin u1 = v1 , mik¨a toistettuna takaa yksik¨asitteisen dekoodauksen. Virheit¨a korjaavat koodit (ks. kurssi Koodausteoria) ja jotkut salauskoodit (ks. kurssi Matemaattinen kryptologia) ovat t¨allaisia koodeja, mutta sellaisina sangen erikoista tyyppi¨a. Sen sijaan tiedon pakkauksessa k¨aytetyt koodit (ks. kurssi Informaatioteoria) ovat melko yleist¨a koodityyppi¨a. Seuraavassa er¨ait¨a melko ilmeisi¨a huomioita: • Koodissa ei ole tyhj¨aa¨ sanaa. • Koodin ei-tyhj¨a alikieli on my¨os koodi, ns. alikoodi. • Jos koodin aakkostossa on vain yksi symboli, niin koodissa on tarkalleen yksi sana. Koska yksikirjaimiset koodit ovat n¨ain yksinkertaisia, oletetaan jatkossa, ett¨a aakkostot ovat ainakin kaksikirjaimisia. Koodeilla ei yleens¨a ole kovin kummoisia sulkeumaominaisuuksia. Kahden koodin leikkaus on kuitenkin koodi, ellei se ole tyhj¨a. Koodin peilikuva ja potenssit ovat my¨os koodeja. Koodi voidaan m¨a¨aritell¨a ja karakterisoida monenlaisin sen sanoja koskevin ehdoin. Kielen L sanotaan olevan katenatiivisesti riippumaton, jos L ∩ LL+ = ∅, ts. mit¨aa¨n kielen L sanaa ei voida esitt¨aa¨ useamman L:n sanan katenaationa. Ilmeisesti jokainen koodi on katenatiivisesti riippumaton. K¨a¨ant¨aen t¨am¨a ei pid¨a yleisesti paikkaansa, joten tarvitaan lis¨aehtoja: Schu ¨ tzenberger’n kriteeri. Aakkoston Σ katenatiivisesti riippumaton ei-tyhj¨a kieli L on koodi tarkalleen silloin, kun kaikille sanoille w ∈ Σ∗ p¨atee seuraava ehto: (∗) Jos on sellaiset L∗ :n sanat t, x, y ja z, ett¨a wt = x ja yw = z, niin w ∈ L∗ .
53
LUKU 7. KOODIT
54
Todistus. Oletetaan ensiksi, ett¨a ehto (∗) on voimassa ja n¨aytet¨a¨an, ett¨a L on koodi. Asetetaan vastaoletus: L ei ole koodi. Silloin on sellaiset L:n sanat u1 , . . . , um ja v1 , . . . , vn ett¨a u1 · · · um = v1 · · · vn , mutta u1 6= v1 . Toinen sanoista u1 ja v1 on toisen aito prefiksi, olkoon vaikkapa v1 = u1 w, miss¨a w 6= Λ. Nyt w on v1 :n suffiksi ja u2 · · · um :n prefiksi, joten ehdon (∗) nojalla w on L+ :ssa. T¨all¨oin kuitenkin L on katenatiivisesti riippuva, mik¨a on ristiriita. Toiseksi oletetaan, ett¨a L on koodi. Asetetaan j¨alleen vastaoletus: On sellaiset L∗ :n sanat t, x, y ja z, ett¨a wt = x ja yw = z, mutta w ∈ / L∗ . T¨all¨oin mik¨a¨an n¨aist¨a sanoista t, x, y, z ja w ei ole tyhj¨a. Kirjoitetaan y ja z L:n sanojen katenaatioiksi y = u1 · · · um
ja z = v1 · · · vn ,
jolloin u1 · · · um w = v1 · · · vn . Ilmeisesti voidaan olettaa, ett¨a u1 6= v1 . Mutta nyt v1 · · · vn t = u1 · · · um wt = u1 · · · um x ja u1 6= v1 eik¨a L n¨ain voi olla koodi, j¨alleen ristiriita.
7.2
Sardinas–Patterson-algoritmi
Sin¨all¨aa¨n Sch¨ utzenberger’n kriteeri ei anna algoritmia sen ratkaisemiseksi onko a¨a¨rellinen kieli L koodi vai ei. Sen avulla voidaan kuitenkin johtaa1 t¨allaisia algoritmeja, esimerkiksi klassinen Sardinas–Patterson-algoritmi: 1. Asetetaan i ← 0 sek¨a Li ← L. 2. Asetetaan i ← i + 1 ja Li ← {w | w 6= Λ ja xw = y tai yw = x joillekin sanoille x ∈ L ja y ∈ Li−1 }. 3. Jos Li ∩ L 6= ∅, niin tulostetaan ei” ja lopetetaan. ” 4. Jos Li = Lj jollekin indeksille 1 ≤ j < i, niin tulostetaan kyll¨a” ja lopetetaan. ” Muutoin menn¨a¨an kohtaan 2. Lause 31. Sardinas–Patterson-algoritmi tuottaa oikean tuloksen. Todistus. Osoitetaan ensin, ett¨a jos L ei ole koodi, niin jossain kielist¨a L1 , L2 , . . . on L:n sana. Oletetaan siis, ettei L ole koodi. Tapaus Λ ∈ L on heti ilmeinen, sill¨a silloin L1 ∩ L 6= ∅. Muutoin on sellaiset L:n sanat u1 , . . . , um ja v1 , . . . , vn ett¨a u1 · · · um = v1 · · · vn = w, mutta u1 6= v1 . Havainnollistetaan tilannetta graafisesti: 1
Ks. esimerkiksi Berstel & Perrin.
LUKU 7. KOODIT
P0 v1
Q0
55
P1
u1 v2
u2
v3
Q1 Q2
P2
Pm–1
um
v4
Q3
Pm
vn
Q4
Qn–1
Qn
Kuviossa on merkitty osasanojen p¨ait¨a pisteill¨a. Esimerkiksi aina Pi−1 Pi = ui
ja Qj−1 Qj = vj .
Alkupiste on P0 = Q0 ja loppupiste Pm = Qn . Voidaan olettaa, ettei muita yhteisi¨a pisteit¨a ole, muuten korvataan w jollain prefiksill¨a¨an. Jaetaan w osasanoihin k¨aytt¨aen kaikkia pisteit¨a P1 , . . . , Pm , Q1 , . . . , Qn . Muotoa Pi Qj tai Qj Pi olevat osasanat, miss¨a Pi ja Qj ovat per¨akk¨aiset jakopisteet ja i, j ≥ 1, ovat nyt yhdisteess¨a L1 ∪ L2 ∪ · · · , kuten algoritmin m¨a¨arittelyst¨a on helppo n¨ahd¨a rekursiivisesti aloittaen sanan w alusta. Jos nyt loppupistett¨a Pm = Qn edelt¨av¨a piste on Pm−1 , kuten yo. kuviossa, niin osasana Qn−1 Pm−j , miss¨a Pm−j on Qn−1 :t¨a seuraava piste, on jossain kieless¨a Li (i ≥ 1). Mutta silloin um = Pm−1 Pm on kieless¨a Li+j . Vastaavasti k¨asitell¨aa¨n tapaus, miss¨a loppupistett¨a Pm = Qn edelt¨av¨a piste on Qn−1 . Todetaan viel¨a, ett¨a jos L on koodi, niin miss¨a¨an kielist¨a L1 , L2 , . . . ei ole L:n sanoja. T¨ah¨an tarvitaan Sch¨ utzenberger’n kriteeri. N¨aytet¨a¨an ensiksi, ett¨a jokaiselle sanalle w ∈ Li on L∗ w ∩ L∗ 6= ∅, ts. on sellaiset sanat s, t ∈ L∗ , ett¨a sw = t. Asia on selv¨a, kun i = 0. Jatketaan t¨ast¨a induktiolla ja oletetaan, ett¨a jokainen Li−1 :n sana on esitetyll¨a tavalla jonkin L∗ :n sanan suffiksi. Otetaan tarkasteltavaksi Li :n sana w. Li :n m¨a¨arittelyst¨a algoritmissa seuraa, ett¨a on sellaiset sanat x ∈ L ja y ∈ Li−1 , ett¨a xw = y
tai yw = x.
Induktio-oletuksen mukaisesti puolestaan on sellaiset sanat s, t ∈ L∗ , ett¨a sy = t. Siisp¨a sxw = sy = t tai sx = syw = tw. Tulos p¨atee siis my¨os Li :lle. Oletetaan nyt, ett¨a kumminkin w ∈ L ∩ Li jollekin indeksille i ≥ 1, ja johdetaan ristiriita. Algoritmin mukaisesti silloin on sellaiset sanat x ∈ L ja y ∈ Li−1 , ett¨a yw = x tai xw = y. Jos yw = x, niin silloin on L∗ y ∩ L∗ 6= ∅ (edelt¨a) ja L∗ ∩ yL∗ 6= ∅ ja Sch¨ utzenberger’n ∗ kriteerin mukaisesti y ∈ L , mik¨a on ristiriita (tapaus i = 1 on selv¨a muutenkin). Siisp¨a p¨atee xw = y, jolloin my¨os on oltava i ≥ 2 (miksi?) ja y ∈ L∗ . M¨a¨arittelyn mukaisesti on sellaiset sanat x0 ∈ L ja y 0 ∈ Li−2 , ett¨a y 0 y = x0
tai x0 y = y 0 .
Edellinen vaihtoehto suljetaan pois kuten edell¨a Sch¨ utzenberger’n kriteerill¨a. J¨aljelle j¨a¨a 0 0 0 ∗ x y = y , jolloin on oltava i ≥ 3 (miksi?) ja y ∈ L . Jne. Jatkaen t¨all¨a tavalla todetaan, ett¨a mik¨aa¨n i:n arvo ei k¨ay. Lopuksi todetaan, ett¨a jos L on koodi, niin algoritmi pys¨ahtyy kohtaan 4. Kieli¨a Li on nimitt¨ain ¨a¨arellinen m¨a¨ar¨a, koska L on ¨a¨arellinen (ajattele sanojen pituuksia).
LUKU 7. KOODIT
56
¨ arett¨omien kielten tapaus on mutkikkaampi. Se, onko annettu s¨a¨ann¨ollinen kieli kooA¨ di, on kyll¨a algoritmisesti ratkaistavissa. Tapaus, jossa kieless¨a on tyhj¨a sana, on tietysti selv¨a. L¨ahtien L:n tunnistavasta DFA:sta on melko helppoa muodostaa Λ-NFA M , joka hyv¨aksyy tarkalleen kaikki sanat, mitk¨a voidaan kirjoittaa ainakin kahdella eri tavalla L:n sanojen katenaatioksi (vrt. Kleenen lauseen todistus). Kysymys onkin sitten s¨a¨ann¨ollisen kielen L(M ) tyhjyydest¨a.2 Toisaalta ei ole yleist¨a algoritmia sen ratkaisemiseksi onko annettu CF-kieli koodi. T¨am¨a voidaan n¨aytt¨a¨a vaikkapa Pyk¨al¨ass¨a 4.7 k¨asitellyn Postin vastaavuusprobleeman avulla. Kutakin PCP:n sy¨otemorfismiparia σ1 : Σ∗ → ∆∗
ja σ2 : Σ∗ → ∆∗
kohti konstruoidaan aakkoston Σ ∪ ∆ ∪ {#, $} kieli ˆ 1 (v)#ˆ v $ w, v ∈ Σ+ . L = σ1 (w)#w$ ˆ w ∈ Σ+ ∪ σ2 (w)#w$σ On helppo n¨ahd¨a, ett¨a L on CF-kieli ja ett¨a se on koodi tarkalleen silloin, kun ei ole sellaista sanaa w ∈ Σ+ , ett¨a σ1 (w) = σ2 (w).
7.3
Indikaattorisumma. Prefiksikoodit
Koodien, ja erityisesti virheit¨a korjaavien koodien, teorian keskeinen ty¨okalu ovat erilaiset koodeihin liittyv¨at numeeriset summat, joilla teoriaa aritmetisoidaan, ks. kurssi Koodausteoria. Aakkoston Σ kielen L ns. indikaattorisumma on X is(L) = M −|w| , w∈L
miss¨a M on Σ:n symbolien lukum¨a¨ar¨a. Yleisesti indikaattorisumma voi olla ¨a¨aret¨on, esimerkiksi ∞ X ∗ is(Σ ) = M n M −n = ∞. n=0
Koodeissa sanoja on harvassa ja tilanne on toinen: Markov–McMillan-lause. Jokaiselle koodille L on is(L) ≤ 1. Todistus. Tarkastellaan ensin ¨a¨arellist¨a koodia {w1 , w2 , . . . , wk }, jonka koodisanojen pituudet ovat l1 ≤ l2 ≤ · · · ≤ lk . Otetaan mielivaltainen positiivinen kokonaisluku r (lopulta r → ∞). Silloin k X
M −ln
r
=
k X n=1
n=1
| 2
k k X k k X X X M −ln = M −ln · · · ··· M −ln1 −ln2 −···−lnr . n=1
{z
r kpl
n1 =1 n2 =1
nr =1
}
T¨ am¨ a toimii tietysti my¨ os ¨ a¨ arellisille kielille, mutta Sardinas–Patterson on parempi!
LUKU 7. KOODIT
57
Summa ln1 + ln2 + · · · + lnr on r:n koodisanan katenaation wn1 wn2 · · · wnr pituus. Indeksien n1 , n2 , . . . , nr kulkiessa toisistaan riippumatta arvot 1, 2, . . . , k saadaan kaikki r:n koodisanan katenaatiot, mahdolliset toistot mukaanlukien. Merkit¨a¨an nyt sj :ll¨a niiden r:st¨a koodisanasta eri tavoin katenoimalla saatujen sanojen lukum¨a¨ar¨a¨a, mahdolliset toistot mukaan lukien, joiden pituus on j. Eri tavoin katenoimalla ei kuitenkaan voida saada samaa sanaa, koska kyseess¨a on koodi, joten sj ≤ M j . Ilmeisesti mahdolliset j:n arvot ovat j = rl1 , rl1 + 1, . . . , rlk . N¨ain ollen k X n=1
M
−ln
r
rlk rlk X X −j M j M −j = rlk − rl1 + 1 ≤ rlk . sj M ≤ = j=rl1
j=rl1
Otetaan puolittain r:s juuri ja annetaan r → ∞: k X
M −ln ≤
p r rlk → 1,
n=1
sill¨a
ln r + ln lk = 0. r→∞ r→∞ r Koska arvion vasen puoli ei riipu r:st¨a, p¨atee arvio sille my¨os rajalla r → ∞. ¨ arett¨omille koodeille tulos seuraa edellisest¨a. Jos nimitt¨ain tulos ei pit¨aisi paikkaansa A¨ jollekin a¨¨arett¨om¨alle koodille, se ei my¨osk¨a¨an pid¨a paikkaansa sen jollekin ¨a¨arelliselle alikoodille. lim ln
p r
rlk = lim
Markov–McMillan-lause ei ole yleisesti k¨a¨annett¨aviss¨a, ts. on kieli¨a, joille is(L) ≤ 1 ja jotka eiv¨at ole koodeja. Er¨a¨anlainen k¨a¨anteinen tulos on kuitenkin olemassa: P Kraftin lause. Jos n=1,2,... M −ln ≤ 1, niin on sellainen M -kirjaimisen aakkoston koodi, jonka sanojen pituudet ovat l1 , l2 , . . . Koodi voi olla ¨a¨aret¨on tai ¨a¨arellinen. Lis¨aksi ko. koodi voidaan valita prefiksikoodiksi eli koodiksi, jonka mik¨a¨an sana ei ole toisen sen sanan prefiksi. Todistus. Ensiksi todetaan, ett¨a pelkk¨a prefiksiehto takaa, ett¨a kyseess¨a on koodi. Ts. jos kielen mik¨a¨an sana ei ole sen toisen sanan prefiksi, niin kieli on koodi. Toiseksi todetaan, ett¨a summaehdosta seuraa, ett¨a (∗)
j X
M lj −ln ≤ M lj
(j = 1, 2, . . . ).
n=1
Ilmeisesti voidaan olettaa, ett¨a l1 ≤ l2 ≤ · · · Seuraava prosessi, kyllin pitk¨a¨an toteutettuna, tuottaa halutun prefiksikoodin. 1. Asetetaan L ← ∅, i ← 1 ja Wj ← Σlj T¨all¨oin Wj :ss¨a on M lj sanaa.
(j = 1, 2, . . . ).
LUKU 7. KOODIT
58
2. Valitaan Wi :st¨a jokin sana wi ja asetetaan Wj ← Wj − wi Σlj −li
(j = i, i + 1, . . . )
Ennen t¨at¨a operaatiota Wj :st¨a on poistettu yhteens¨a M lj −l1 + M lj −l2 + · · · + M lj −li−1 sanaa. Arvion (∗) nojalla sen j¨alkeen Wi voi olla tyhj¨a, mutta Wi+1 , Wi+2 , . . . eiv¨at. 3. Asetetaan L ← L ∪ {wi } ja i ← i + 1 ja menn¨a¨an kohtaan 2. Jos kyseess¨a on ¨a¨arellinen m¨a¨ar¨a pituuksia, lopetetaan kun se on k¨ayty loppuun, muuten jatketaan ¨a¨arett¨om¨an monta askelta. Seuraus. Jokainen koodi voidaan sananpituudet s¨ailytt¨aen korvata saman aakkoston prefiksikoodilla. T¨am¨a tulos on t¨arke¨a, sill¨a prefiksikoodi on hyvin helposti dekoodattavissa (miten?). Koodi on suffiksikoodi, jos sen peilikuva on prefiksikoodi. Yo. tulokset p¨atev¨at my¨os suffiksikoodeille. Koodin sanotaan olevan maksimaalinen, jos se ei ole mink¨a¨an toisen koodin aito alikoodi.3 Ts. jos siihen ei voida lis¨at¨a yht¨ak¨a¨an sanaa ilman, ett¨a se lakkaa olemasta koodi. Ilmeisesti Seuraus. Jos koodille L on is(L) = 1, niin koodi on maksimaalinen. K¨aa¨nteinen tulos ei p¨ade yleisesti ¨a¨arett¨omille koodeille, ¨a¨arellisille kyll¨akin. Prefiksikoodeilla on likeinen yhteys puurakenteisiin, vrt. j¨asennyspuu Pyk¨al¨ass¨a 4.1. Puu T on ns. aakkoston Σ prefiksipuu, jos • T :n oksat (viivat) on merkitty Σ:n symboleilla, • jokaisesta pisteest¨a l¨ahtev¨at oksat on merkitty eri symboleilla ja • T :ss¨a on muitakin pisteit¨a kuin juuri (T voi olla ¨a¨aret¨onkin). Esimerkki aakkoston {a, b} prefiksipuusta: a
b a
b
a
Prefiksipuu T m¨a¨ar¨a¨a kielen L(T ), joka saadaan, kun luetaan polut juuresta lehtiin katenoiden oksien merkit. Yo. esimerkiss¨a L(T ) = {a, bb, baa}. Konstruktiosta johtuen jokaiselle prefiksipuulle T kieli L(T ) on prefiksikoodi. My¨os k¨a¨anteinen tulos p¨atee: Jokaiselle prefiksikoodille L on sellainen prefiksipuu T , ett¨a L = L(T ). T¨am¨a puu saadaan seuraavasti: 3
Kirjallisuudessa kutsutaan t¨ allaista koodia toisinaan my¨os t¨ aydelliseksi ja varataan maksimaalisuus muuhun k¨ aytt¨ oo ¨n.
LUKU 7. KOODIT
59
1. Asetetaan T :ksi pelkk¨a juuripiste. 2. Lajitellaan L:n sanat leksikografiseen j¨arjestykseen eli ensin pituuden mukaan ja saman pituuden sis¨all¨a aakkosj¨arjestykseen: w1 , w2 , . . . Asetetaan i ← 1. 3. Etsit¨aa¨n T :st¨a pisin sana u, luettuna juuresta johonkin pisteeseen, joka on wi :n prefiksi, ts. wi = uv. Jatketaan puuta T liitt¨am¨all¨a siihen ko. pisteest¨a l¨ahtev¨a polku, jonka oksat on merkitty j¨arjestyksess¨a v:n symbolein. Alussa mainittu piste on juuri. 4. Jos kaikki L:n sanat on k¨ayty l¨api, lopetetaan ja tulostetaan T . Muutoin asetetaan i ← i + 1 ja menn¨a¨an kohtaan 3.
7.4
Rajoitetun viipeen koodit
¨ aret¨ont¨a koodia ei ilmeisestik¨a¨an voi dekoodata yleistetyll¨a jonokoneella (GSM, ks. PyA¨ k¨al¨a 2.8). Toisaalta kaikkia ¨a¨arellisi¨ak¨a¨an koodeja ei voi sellaisella dekoodata. Esimerkiksi koodille {a, ab, bb} sanasta abn ei voi dekoodata yht¨aa¨n koodisanaa lukematta sit¨a ensin aivan loppuun asti. ¨ arellinen koodi L on viipeen p koodi, jos aina kun A¨ u1 , . . . , up ∈ L ja v1 , . . . , vn ∈ L ja u1 · · · up on v1 · · · vn :n prefiksi, on u1 = v1 . Dekoodaukseen tarvitaan siis p koodisanan ennakointi ( look-ahead”). Koodi, joka on jollekin p:lle viipeen p koodi, on ns. rajoitetun ” viipeen koodi. Huomaa, ett¨a viipeen 1 koodit ovat edellisen pyk¨al¨an prefiksikoodit! Viipeen p koodi L aakkostossa Σ voidaan dekoodata GSM:ll¨a S seuraavalla tavalla. 1. Jos m on pisimm¨an Lp :n sanan pituus, niin S:n tilat ovat hwi, miss¨a w k¨ay l¨api kaikki enint¨a¨an m-pituiset sanat. Alkutila on hΛi. 2. S:n sy¨ote-/tulostusaakkosto on Σ ∪ {#}. Symboli # laitetaan sy¨otesanan loppuun, jotta S tiet¨a¨a sy¨otteen loppuneen ja tyhjent¨a¨a muistinsa, ja dekoodattaessa erotetaan L:n sanat symbolilla #. 3. Jos S on tilassa hwi ja w ∈ / Lp , niin sy¨otteell¨a a ∈ Σ se siirtyy tilaan hwai tulostaen Λ:n. 4. Jos S on tilassa hu1 u2 · · · up i, miss¨a sanat u1 , u2 , . . . , up ovat koodisanoja, niin sy¨otteell¨a a ∈ Σ se siirtyy tilaan hu2 · · · up ai tulostaen u1 #:n. (Jos p = 1, siirryt¨a¨an vain tilaan hai.) 5. Jos S on tilassa hu1 · · · uk i, miss¨a k ≥ 2 ja sanat u1 , . . . , uk ovat koodisanoja, niin sy¨otteell¨a # se siirtyy tilaan hΛi tulostaen u1 # · · · #uk :n. 6. Jos S on tilassa hui, miss¨a u ∈ L tai u = Λ, niin sy¨otteell¨a # se siirtyy tilaan hΛi tulostaen u:n. T¨aydellisyyden vuoksi S:¨aa¨n pit¨aisi viel¨a lis¨at¨a tilasiirrot ja tulostukset, jotka liittyv¨at muiden kuin L∗ :n sanojen k¨asittelyyn. Erityisen helposti ovat siis n¨ain dekoodattavissa prefiksikoodit. Jos koodisanoilla on merkityst¨a vain niiden pituuden kautta, pyritt¨aess¨a esimerkiksi mahdollisimman lyhyisiin koodisanoihin, kannattaa k¨aytt¨a¨a prefiksikoodeja. Markov–McMillan-lauseen ja Kraftin lauseen seurauksena se on aina mahdollista.
LUKU 7. KOODIT
7.5
60
Optimikoodit ja Huffmanin algoritmi
Optimikoodauksessa valitaan ensin aakkosto Σ = {c1 , c2 , . . . , cM }, koodisanojen lukum¨a¨ar¨a k sek¨a niiden painot P1 , P2 , . . . , Pk . Painot ovat ei-negatiivisia lukuja, joiden summa on = 1. Tarvittaessa ne voidaan tulkita todenn¨ak¨oisyyksiksi, frekvensseiksi tms. Jatkossa sovitaan, ett¨a P1 ≥ P2 ≥ · · · ≥ Pk (≥ 0). ¨ aritapauksia ovat P1 = 1, P2 = · · · = Pk = 0 sek¨a P1 = · · · = Pk = 1/k. A¨ Teht¨av¨an¨a on valita koodin sanat w1 , w2 , . . . , wk , vastaten eo. painoja, siten, ett¨a koodin keskipituus P1 |w1 | + P2 |w2 | + · · · + Pk |wk | on pienin mahdollinen. Saatu koodi on ns. optimikoodi. Koska keskipituus riippuu koodisanoista vain niiden pituuden kautta, voidaan lis¨aksi olettaa, ett¨a saatu koodi on prefiksikoodi. Jatkossa merkit¨a¨an |wi | = li (i = 1, 2, . . . , k) ja keskipituutta merkit¨a¨an l:ll¨a. Kokonaislukuoptimointiteht¨av¨aksi puettuna optimikoodaus on silloin k X l= Pi li = min! k i=1 X M −li ≤ 1 i=1 l1 , l2 , . . . , lk ≥ 1. Optimikoodeilla on likeinen yhteys informaatioteoriaan4 ja tiedonpakkaukseen. Niiden etsimiseksi onkin kehitetty lukuisia algoritmeja. N¨aist¨a tunnetuin lienee klassinen Huffmanin algoritmi. K¨aytt¨aen eo. merkint¨oj¨a, n¨aytet¨a¨an ensin Apulause. Optimaalisen prefiksikoodin sanat w1 , w2 , . . . , wk voidaan valita siten, ett¨ a • l1 ≤ · · · ≤ lk−s ≤ lk−s+1 = · · · = lk , miss¨a 2 ≤ s ≤ M ja s ≡ k mod M − 1,5 • wk−s+1 , . . . , wk eroavat toisistaan vain viimeisess¨a symbolissa, joka wk−s+i :ss¨a on ci , ja • sanojen wk−s+1 , . . . , wk yhteinen lk −1-pituinen prefiksi ei ole mink¨a¨an sanan w1 , . . . , wk−s prefiksi. Todistus. Jokin optimaalinen (prefiksi)koodi {w10 , w20 , . . . , wk0 } on tietenkin olemassa ja 0 0 sen sanojen pituudet l10 , l20 , . . . , lk0 . Jos nyt jollekin i:lle li0 > li+1 , niin vaihdetaan wi0 ja wi+1 kesken¨a¨an. Koodin keskipituuden muutos on t¨all¨oin 0 0 0 ) = (Pi − Pi+1 )(li+1 − li0 ) ≤ 0. Pi li+1 + Pi+1 li0 − (Pi li0 + Pi+1 li+1 4
Klassisen Shannonin koodauslauseen mukaan H ≤ l ≤ H + 1, miss¨a H = −P1 logM P1 − · · · − Pk logM Pk
on ns.entropia, ks. kurssi Informaatioteoria. 5 Yleisesti kongruenssi a ≡ b mod m tarkoittaa sit¨a, ett¨a a − b on jaollinen m:ll¨a.
LUKU 7. KOODIT
61
Toisaalta koodi oli optimaalinen, joten ko. muutos on = 0 ja koodi pysyy vaihdonkin j¨alkeen optimaalisena (prefiksi)koodina. Toistamalla vaihto-operaatiota tarvittaessa kyllin monta kertaa voidaan olettaa, ett¨a saaduille pituuksille l1 ≤ l2 ≤ · · · ≤ lk . T¨allaisiakin optimikoodeja voi hyvinkin olla useita. Valitaankin jatkossa k¨aytetty optimikoodi siten, ett¨a summa l1 + l2 + · · · + lk on pienin mahdollinen, ja merkit¨a¨an (∗)
lk
∆=M −
k X
M lk −li .
i=1
Markov–McMillan-lauseen nojalla ∆ ≥ 0. Jos toisaalta olisi ∆ ≥ M − 1, niin pituudet l1 , . . . , lk−1 , lk − 1 toteuttaisivat Kraftin lauseen ehdon, mik¨a on mahdotonta, koskapa l1 + l2 + · · · + lk oli pienin mahdollinen. Siisp¨a 2 ≤ M − ∆ ≤ M . Merkit¨aa¨n nyt r:ll¨a pituutta lk olevien koodisanojen lukum¨aa¨r¨aa¨. Silloin r ≥ 2. Muussa tapauksessa voitaisiin wk :n viimeinen symboli poistaa ja saada prefiksikoodi, mik¨a on mahdotonta, koska l1 + l2 + · · · + lk oli pienin mahdollinen. Yht¨al¨ost¨a (∗) seuraa, ett¨a ∆ ≡ −r
mod M
eli r ≡ M − ∆
mod M.
Koska toisaalta 2 ≤ M − ∆ ≤ M , on r kirjoitettavissa muotoon r = tM + (M − ∆), miss¨a t ≥ 0. Yht¨al¨ost¨a (∗) seuraa edelleen, ett¨a ∆≡1−k
mod M − 1,
sill¨a M ≡1
mod M − 1 eli M − ∆ ≡ k
mod M − 1.
N¨ain n¨ahd¨a¨an, ett¨a M − ∆ on juuri Apulauseessa mainittu luku s ja r ≥ s. Tarvittaessa indeksointia vaihtamalla voidaan olettaa, ett¨a koodin lk -pituisista sanoista wk−r+1 , . . . , wk sanat wk−t , . . . , wk ovat sellaisia, ett¨a niiden lk − 1-pituiset prefiksit z1 , . . . , zt+1 ovat kesken¨a¨an erilaiset. Muista, ett¨a r = tM + s. Korvataan nyt sanat wk−r+1 , . . . , wk sanoilla z1 c1 , . . . , z1 cM , z2 c1 , . . . , z2 cM , . . . , zt c1 , . . . , zt cM , zt+1 c1 , . . . , zt+1 cs . T¨am¨a ei h¨avit¨a koodin prefiksisyytt¨a eik¨a optimaalisuutta. Saatu koodi on vaadittu {w1 , w2 , . . . , wk }. Huffmanin algoritmi on rekursiivinen algoritmi. Rekursion etsimiseksi tarkastellaan sanoja v1 , . . . , vk−s+1 , jotka saadaan Apulauseen koodista {w1 , w2 , . . . , wk } seuraavasti: (a) v1 = w1 , . . . , vk−s = wk−s ja (b) vk−s+1 saadaan, kun poistetaan wk−s+1 :st¨a sen viimeinen symboli (= c1 ). Sanat v1 , . . . , vk−s+1 muodostavat prefiksikoodin. Ajatellaan siihen liittyviksi painoiksi vastaavasti P1 , . . . , Pk−s , Pk−s+1 + · · · + Pk .
LUKU 7. KOODIT
62
Koodin keskipituus on t¨all¨oin l0
=
k−s X i=1
Pi li +
k X
Pi (lk − 1) = l −
k X
Pi .
i=k−s+1
i=k−s+1
Koodi {v1 , . . . , vk−s+1 } on n¨ain ollen my¨os optimaalinen. Muutoin olisi jokin pienemm¨an 0 } ja siit¨a saatavan prefiksikoodin keskipituuden omaava prefiksikoodi {v10 , . . . , vk−s+1 0 0 0 cs } c1 , . . . , vk−s+1 , vk−s+1 {v10 , . . . , vk−s
keskipituus olisi pienempi kuin l0 + Pk−s+1 + · · · + Pk = l. 0 } on optimaalinen prefiksikoodi, vastaten mainittuja paiToisaalta, jos {v10 , . . . , vk−s+1 noja P1 , . . . , Pk−s , Pk−s+1 + · · · + Pk ,
niin sen keskipituus on l0 ja 0 0 0 {v10 , . . . , vk−s , vk−s+1 c1 , . . . , vk−s+1 cs }
on optimaalinen prefiksikoodi, vastaten painoja P1 , P2 , . . . , Pk . Muussa tapauksessa olisi Apulauseen antama optimikoodi, jonka keskipituus olisi pienempi kuin l0 + Pk−s+1 + · · · + Pk , 0 ja t¨ast¨a saataisiin viel¨a koodia {v10 , . . . , vk−s+1 }:kin optimaalisempi” koodi. ” Huffmanin algoritmi on seuraava rekursio, joka yll¨a esitetyn mukaan tuottaa optimikoodin saatuaan sy¨otteen¨a painot P1 , P2 , . . . , Pk v¨ahenev¨ass¨a j¨arjestyksess¨a. Huomaa, ettei edell¨a mitenk¨aa¨n kielletty 0:nkaan esiintymist¨a painona.
1. Jos k ≤ M , niin valitaan w1 = c1 , w2 = c2 , . . . , wk = ck ja lopetetaan. 2. Muutoin koodi {w1 , w2 , . . . , wk } vastaten painoja P1 , P2 , . . . , Pk saadaan v¨alitt¨om¨asti, kunhan tunnetaan koodi {v1 , v2 , . . . , vk−s+1 }: w1 = v1 , w2 = v2 , . . . , wk−s = vk−s ja wk−s+1 = vk−s+1 c1 , . . . , wk = vk−s+1 cs . 3. Koodin {v1 , . . . , vk−s+1 } saamiseksi taas lasketaan s sek¨a asetetaan Q1 ← P1 , . . . , Qk−s ← Pk−s
ja Qk−s+1 ← Pk−s+1 + · · · + Pk .
Edelleen asetetaan uusiksi todenn¨ak¨oisyyksien P1 , P2 , . . . , Pk−s+1 arvoiksi Q1 , Q2 , . . . , Qk−s+1 v¨ahenev¨ass¨a j¨arjestyksess¨a sek¨a k ← k − s + 1 ja palataan kohtaan 1. Rekursio pys¨ahtyy, koska annettujen painojen lukum¨a¨ar¨a¨a v¨ahenee joka kierroksella ainakin yhdell¨a, ja on lopulta ≤ M , jolloin prosessi pys¨ahtyy kohtaan 1.
LUKU 7. KOODIT
63
Huomautus. Ensiksi valittava s toteuttaa ehdon s ≡ k mod M −1. Uusi k” on k−s+1 ” ja k − s + 1 ≡ 1 mod M − 1. N¨ain ollen seuraava s:n arvo onkin M . Itse asiassa n¨ain jatkaen todetaan, ett¨a kaikki seuraavatkin uudet s:n arvot ovat = M ja siis vain ensimm¨ainen s:n arvo pit¨a¨a laskea! Huomaa my¨os, ett¨a tapauksessa M = 2 (bin¨a¨arinen Huffmanin algoritmi) on aina s = 2. Huffmanin algoritmi konstruoi oleellisesti optimikoodia vastaavan prefiksipuun, ns. Huffmanin puun, seuraavanlaisella bottom-up”-menetelm¨all¨a: ” • Puun oksat merkit¨aa¨n Σ:n symboleilla kuten edell¨akin. Pisteet sen sijaan merkit¨aa¨n painoilla. • Alussa on merkitty vain lehdet painoilla P1 , P2 , . . . , Pk . Lehdet on my¨os merkitty k¨asittelem¨att¨omiksi. • Kussakin vaiheessa lasketaan ensin s, joka m¨a¨ar¨aytyy silloisten k¨asittelem¨att¨omien pisteiden lukum¨a¨ar¨ast¨a, ks. eo. Huomautus. Sitten lis¨at¨a¨an puuhun uusi piste ja yhdistet¨a¨an s pienint¨a painoa vastaavat k¨asittelem¨att¨om¨at pisteet t¨ah¨an uuteen pisteeseen oksilla, jotka merkit¨aa¨n symboleilla c1 , . . . , cs . Samalla n¨am¨a s pistett¨a merkit¨a¨an k¨asitellyiksi. Uudelle pisteelle annetaan paino, joka on ko. s pienimm¨an painon summa, merkit¨a¨an se k¨asittelem¨att¨om¨aksi ja jatketaan prosessia. • Menettely pys¨ahtyy, kun pisteen painoksi tulee 1. Ko. piste on silloin puun juuri. T¨am¨a menettely tarjoaa graafisen” tavan etsi¨a optimikoodi, ainakin pienille sanam¨a¨arille. ” Seuraavassa er¨as t¨allainen graafinen” Huffmanin puu: ”
0.4
0.4
0.4
0.6
b 1
0.3
0.3
0.1
0.2
0.1
0.1
b
0.1
b
0.3
b
0.3
a
0.4
a
a
a
Varsinaiset puun oksat on merkitty mustalla, harmaalla merkityt viivat ovat vain painojen lajittelua varten. Puu m¨a¨ar¨a¨a aakkoston {a, b} optimaalisen prefiksikoodin sanat a, bb, baa, babb, baba, vastaten painoja 0.4, 0.3, 0.1, 0.1, 0.1. Huffmanin algoritmin antama tulos ei ole yksik¨asitteinen, johtuen esiintyvist¨a samoista painoista. Algoritmin haittapuolena on sen hankalahko implementoitavuus nopeaksi algoritmiksi. Huffmanin algoritmilla voidaan ratkaista esimerkiksi ns. kyselysysteemi. Teht¨av¨a on selvitt¨a¨a mik¨a mahdollisista vaihtoehdoista V1 ,. . . ,Vk on kyseess¨a k¨aytt¨aen kysymyksi¨a,
LUKU 7. KOODIT
64
joiden vastaus on aina jokin sovitusta M vastausvaihtoehdosta. (Usein kyll¨a” tai ei”, jos ” ” M = 2.) Eri vaihtoehtojen V1 ,. . . ,Vk esiintymisfrekvenssit (todenn¨ak¨oisyydet) P1 , . . . , Pk tiedet¨a¨an. Miten kysymykset pit¨aisi valita, jotta niit¨a olisi keskim¨a¨arin v¨ahiten?
Luku 8 LINDENMAYERIN SYSTEEMIT 8.1
Yleist¨ a
T¨ah¨an asti k¨asitellyt uudelleenkirjoitusj¨arjestelm¨at ja kieliopit ovat jonollisia eli sekventiaalisia, niiss¨a uudelleenkirjoitetaan vain yksi symboli tai osasana kerrallaan kullakin johdon askeleella. Vastaavia rinnakkaisia eli paralleeleja uudelleenkirjoitusj¨arjestelmi¨a on my¨os tutkittu paljon. Tunnetuimpia n¨aist¨a ovat Lindenmayerin systeemit eli L-systeemit. Alunperin L-systeemit oli tarkoitettu mallintamaan kasvien tai yleisemminkin solukkojen kasvun morfologiaa. Nykyisin niit¨a k¨aytet¨a¨an melkeinp¨a pelk¨ast¨a¨an tietokonegrafiikassa kasvien malleina sek¨a fraktaalien generointiin eri tarkoituksiin. Verrattuina kielioppeihin L-systeemeiss¨a k¨aytet¨a¨an hieman poikkeavaa terminologiaa. Erityisesti mainittakoon seuraavat lyhenteet: • 0: yhteydet¨on systeemi • I: yhteydellinen systeemi • E: k¨aytet¨a¨an loppusymboleja • P: pituutta kasvattavat produktiot
8.2
Yhteydett¨ om¨ at L-systeemit
Formaalisesti 0L-systeemi on kolmikko G = (Σ, α, P ), miss¨a Σ on (kielen) aakkosto, α ∈ Σ∗ on ns. aksiooma ja P on produktioiden joukko. Erityisesti vaaditaan, ett¨a P :ss¨a on ainakin yksi muotoa a → w oleva produktio jokaiselle Σ:n symbolille a. Johdot m¨aa¨ritell¨aa¨n samoin kuin kieliopeille, paitsi ett¨a johdon askeleessa jokaiseen sanan symboliin on sovellettava jotain produktiota (rinnakkaisuus). T¨all¨oin produktio voi hyvinkin olla identiteettiproduktio a → a. G:n generoima kieli on L(G) = {w | α ⇒∗G w}. 0L-systeemi on • deterministinen eli D0L-systeemi, jos jokaiselle aakkoston symbolille a on tarkalleen yksi produktio a → w. • pituutta kasvattava eli propagoiva eli P0L-systeemi, jos jokaisessa produktiossa a → w on w 6= Λ, erikoistapauksena PD0L-systeemi. 65
LUKU 8. LINDENMAYERIN SYSTEEMIT
66
Vastaavia kieliperheit¨a merkit¨aa¨n 0 L, D0 L jne. n
Esimerkki. Kielen {a2 | n ≥ 0} generoi yksinkertainen PD0L-systeemi G = {a}, a, {a → a2 } . Huomaa, ett¨a t¨am¨a kieli ei ole CF, mutta se on CS. Lause 32. 0 L ⊂ CS Todistus. Todistus on hyvin samantapainen kuin Lauseen 12. Merkit¨a¨an 0L-systeemille G = (Σ, α, P ) ∆ = {a ∈ Σ | a ⇒∗G Λ}. Jokaiselle symbolille a ∈ ∆ voidaan lis¨aksi m¨aa¨ritell¨a luku da = min n. n a⇒G Λ
On helppo konstruoida LBA M , joka tunnistaa L(G):n. M simuloi G:n johtoja l¨ahtien aksioomasta α. Kohdatessaan symbolin a ∈ ∆ LBA M p¨a¨att¨a¨a valitseeko se jatkossa johdon, jossa a ⇒∗G Λ, vai ei. Edellisess¨a tapauksessa se pyyhkii a:n v¨alitt¨om¨asti nauhalta siirt¨aen sanan loppuosaa vasemmalle ja sen on silloin simuloitava G:n johtoa eteenp¨ain ainakin da askelta. T¨am¨an M muistaa tiloissaan. Simulointia varten M pakkaa yhteen nauhasymboliin tarvittaessa useita Σ:n symboleja, jotta pois pyyhitt¨av¨at ∆:n symbolitkin mahtuvat mukaan. Mik¨ali simulointi menee leve¨aksi” eli ei mahdu sille varattuun ” tilaan, M pys¨ahtyy ei-lopputilaan. Huomaa, ett¨a P0L-systeemin tapauksessa simulointi on erityisen helppoa. Kieli {an bn | n ≥ 1} on CF-kieli, joka ei ilmeisestik¨a¨an ole 0L. Lis¨aa¨m¨all¨a 0L-systeemiin G = (Σ, α, P ) loppuaakkosto ΣT ⊆ Σ, saadaan E0L-systeemi G = (Σ, ΣT , α, P ). T¨all¨oin generoitu kieli on 0
L(G0 ) = {w | α ⇒∗G0 w ja w ∈ Σ∗T }. n n Esimerkki. Kieli {a b | n ≥ 1} on E0L-kieli, sen generoi E0L-systeemi G = {a, b, c}, {a, b}, c, P , miss¨a P :ss¨a ovat produktiot
a→a
,
b→b
,
c → acb | ab.
Lause 33. CF ⊂ E0 L ⊂ CS Todistus. CF-kieliopista on helppo tehd¨a vastaava E0L-systeemi, lis¨at¨a¨an vain kaikille symboleille identiteettiproduktiot. Toisaalta on D0L-kieli¨a, jotka eiv¨at ole CF (esimerkki edell¨a). N¨ain ollen CF ⊂ E0 L. Lauseesta 32 seuraa suoraan, ett¨a E0 L ⊆ CS. Sen sijaan on vaikeampi l¨oyt¨a¨a CSkielt¨a, joka ei ole E0L. Er¨as sellainen on ns. Hermanin kieli H = w |w|a = 2n , n = 0, 1, 2, . . . aakkostossa {a, b}. T¨ass¨a |w|a tarkoittaa a-symbolien lukum¨a¨ar¨a¨a sanassa w. On helppo n¨aytt¨a¨a, ett¨a H on CS, mutta vaikeampi n¨aytt¨a¨a, ett¨a se ei ole E0L (sivuutetaan). Grafiikassa symbolit tulkitaan graafisina operaatioina, jotka toteutetaan sanan johdon antamassa j¨arjestyksess¨a.
LUKU 8. LINDENMAYERIN SYSTEEMIT
67
Esimerkki. L¨ahtiess¨a kuva-alueena on neli¨o 0 ≤ x ≤ 1, 0 ≤ y ≤ 1. Aakkoston {a, b, c} symbolit tulkitaan seuraavasti: • a: pisteiden (1/3, 1/2) ja (2/3, 1/2) v¨alinen jana. • b: pisteiden (0, 0) ja (1/3, 1/2) v¨alinen jana; skaalaus suorakulmioon 0 ≤ x ≤ 1/3, 0 ≤ y ≤ 1/2. • c: pisteiden (2/3, 1/2) ja (1, 1) v¨alinen jana; skaalaus + translaatio suorakulmioon 2/3 ≤ x ≤ 1, 1/2 ≤ y ≤ 1. D0L-systeemi G = {a, b, c}, bac, {a → a, b → bac, c → bac}
generoi silloin sanat bac , bacabac , bacabacabacabac , . . . Tulkittuna graafisesti saadaan rajalla fraktaalinen kuvio, ns. pirunportaat:
Kuvaaja esitt¨a¨a muuten jatkuvaa funktiota, jolla on melkein kaikkialla derivaatta, mutta derivaatta on aina = 0. Mallinnettaessa kasveja jms. operaatiot ovat kolmiulotteisia: rungon osa, lehti, haara, kukinto jne.
8.3
Yhteydelliset L-systeemit
IL-systeemi on viisikko G = (Σ, XL , XR , α, P ), miss¨a Σ on (kielen) aakkosto, XL , XR ∈ /Σ ∗ ovat reunamerkit (vasen ja oikea), α ∈ Σ on ns. aksiooma ja P on produktioiden joukko. Produktiot ovat t¨ass¨a erikoista tyyppi¨a hu, a, vi → w,
LUKU 8. LINDENMAYERIN SYSTEEMIT
68
miss¨a a ∈ Σ ja u on ns. vasen ymp¨arist¨o ja v oikea ymp¨arist¨o. Asian tarkemmaksi selvitt¨amiseksi merkit¨a¨an dL :ll¨a (vast. dR :ll¨a) pisimm¨an esiintyv¨an vasemman ymp¨arist¨on (vast. oikean ymp¨arist¨on) pituutta sek¨a m¨a¨aritell¨a¨an joukot YL = XL x x ∈ Σ∗ ja |x| < dL ∪ ΣdL ja YR = yXR y ∈ Σ∗ ja |y| < dR ∪ ΣdR . Nyt vaaditaan, ett¨a jokaista symbolia a ∈ Σ sek¨a jokaista sanaa u ∈ YL ja jokaista sanaa v ∈ YR kohti on sellainen u:n suffiksi u0 ja sellainen v:n prefiksi v 0 ett¨a jollekin w:lle hu0 , a, v 0 i → w on P :ss¨a. T¨am¨a ehto takaa, ett¨a uudelleenkirjoitus on kaikissa tilanteissa mahdollista. Mik¨ali mainittuja produktioita on vain yksi, on kyseess¨a deterministinen ILsysteemi eli DIL-systeemi. Produktio hu, a, vi → w tulkitaan siten, ett¨a sit¨a saa soveltaa a:n uudelleenkirjoitukseen vain siin¨a tilanteessa, miss¨a a esiintyy uudelleenkirjoitettavassa sanassa osasanojen u ja v v¨aliss¨a t¨ass¨a j¨arjestyksess¨a. Kuten L-systeemeille yleens¨akin, uudelleenkirjoitus on rinnakkaista, ts. sanan jokainen symboli on uudelleenkirjoitettava samanaikaisesti. Jos mit¨a¨an symbolia ei uudelleenkirjoiteta Λ:ksi, ts. produktioissa hu, a, vi → w aina w 6= Λ, niin kyseess¨a on ns. PIL-systeemi. Generoitu kieli on L(G) = {w | XL αXR ⇒∗G XL wXR }. Huomaa, ett¨a reunamerkkej¨a ei uudelleenkirjoiteta, ne ovat vain osoittamassa sanan reunaa. Lis¨a¨am¨all¨a IL-systeemiin G = (Σ, XL , XR , α, P ) loppuaakkosto ΣT ⊆ Σ, saadaan ns. EIL-systeemi G0 = (Σ, ΣT , XL , XR , α, P ). T¨all¨oin generoitu kieli on L(G0 ) = {w | XL αXR ⇒∗G0 XL wXR ja w ∈ Σ∗T }. Lause 34. EPIL = CS ja EIL = CE. Todistus. N¨aiden todistus on hyvin samankaltainen kuin Lauseiden 19 ja 20. Koska yhteydelliset L-perheet n¨ain yhtyv¨at Chomskyn hierarkiaan, ei niill¨a ole sellaista merkityst¨a kuin yhteydett¨omill¨a L-perheill¨a. Toisaalta IL-systeemit tarjoavat erikoisen rinnakkaisen vaihtoehdon laskentaan. Mielenkiintoista on, ett¨a deterministisille IL-systeemeille saadaan vastaavat tulokset. N¨aiden todistus on hankalampi kuin Lauseen 34 (ei kuitenkaan kovin vaikea).1 Lause 35. EPDIL = DCS ja EDIL = CE. N¨ain perheille DCS ja CE saadaan my¨os deterministiset kielioppikarakterisaatiot. Samalla saadaan deterministinen rinnakkaislaskennan malli. IL-systeemi on rakenteeltaan niin likell¨a Turingin konetta, ett¨a sit¨a voidaan pit¨a¨a er¨a¨an¨a harvoista Turingin koneen rinnakkaislaskentavarianteista. Tilavaativuusmieless¨a t¨allaisesta rinnakkaisuudesta ei ole juurikaan etua, aikavaativuuden osalta asiaa ei taas tiedet¨a.
1
´ nyi, P.M.B.: Lindenmayer Systems: Structure, Languages, and Alkuper¨ aisviite on v¨ ait¨ oskirja Vita Growth Functions. Mathematisch Centrum. Amsterdam (1978).
Luku 9 FORMAALIT POTENSSISARJAT 9.1
Kieli formaalina potenssisarjana
Aakkoston Σ kielen L karakteristinen funktio on ( 1, jos w ∈ L χL (w) = 0 muuten. Selv¨asti karakteristinen funktio χL m¨aa¨rittelee kielen L t¨aysin. Edelleen voidaan todeta, ett¨a χL1 ∪L2 (w) = max χL1 (w), χL2 (w) , χL1 ∩L2 (w) = min χL1 (w), χL2 (w) = χL1 (w)χL2 (w), χL1 L2 (w) = max χL1 (u)χL2 (v) . uv=w
Jos ajattelee maksimointia er¨a¨anlaisena summana, n¨am¨a operaatiot tuovat mieleen potenssisarjojen operaatiot: summa (kerrointen summa), Hadamardin tulo (kerrointen tulo) ja Cauchyn tulo (sarjojen tulo, konvoluutio). Niinp¨a onkin otettu k¨aytt¨o¨on formaali merkint¨a X χL (w)w, w∈Σ∗
ns. kielen L formaali potenssisarja. T¨ass¨a ajatellaan aakkoston Σ = {x1 , . . . , xk } symboleita muuttujina, jotka eiv¨at kommutoi.
9.2
Puolirenkaat
Sin¨all¨a¨an kielen esitt¨aminen formaalina potenssisarjana ei tuo muuta lis¨a¨a kuin tutun” ” merkinn¨an sarjamuodossa. Kielille t¨arke¨a¨a katenaatiosulkeumaa vastaavaa operaatiotakaan ei ollut edell¨a formaaleille potenssisarjoille. Formaalien potenssisarjojen anti syntyykin, kun sallitaan yleisemm¨at kertoimet. Yleisesti kerrointen ajatellaan tulevan tietyist¨a algebrallisista rakenteista, ns. puolirenkaista, joissa on m¨aa¨ritelty yhteen- ja kertolasku ja joissa ovat voimassa tavalliset laskujen ominaisuudet. Lis¨aksi vaaditaan nolla-alkion ja ykk¨osalkion olemassaolo. Puolirengas on algebrallinen rakenne R = (C, +, ·, 0, 1), miss¨a C on ei-tyhj¨a joukko (alkiot) ja laskuoperaatioilla on halutut ominaisuudet—sen lis¨aksi, ett¨a operaatioiden tuloksen pit¨a¨a olla yksik¨asitteinen ja aina m¨a¨aritelty: 69
70
LUKU 9. FORMAALIT POTENSSISARJAT • Laskuoperaatiot + (yhteenlasku) ja · (kertolasku) ovat liit¨ann¨aiset, ts. a + (b + c) = (a + b) + c ja a · (b · c) = (a · b) · c.
T¨ast¨a on se seuraus, ett¨a pitk¨at summat ja tulot voidaan suluttaa miten tahansa tuloksen muuttumatta, tai kirjoittaa kokonaan ilman sulkeita tyyliin a1 + a2 + · · · + an
ja a1 · a2 · · · · · an .
Edelleen voidaan ottaa k¨aytt¨o¨on monikerta- ja potenssimerkinn¨at na = a | + a +{z· · · + a} n kpl
ja an = a | · a ·{z· · · · a} n kpl
ja erikoisesti 1a = a sek¨a a1 = a. N¨aille p¨atev¨at tavanomaiset laskus¨a¨ann¨ot: (n + m)a = (na) + (ma) ja an+m = an · am . • Yhteenlasku on vaihdannainen, ts. a + b = b + a. Usein my¨os kertolasku on vaihdannainen, ts. a · b = b · a. T¨all¨oin puhutaan vaihdannaisesta puolirenkaasta. • Kertolasku on osittuva yhteenlaskun suhteen, ts. a · (b + c) = (a · b) + (a · c) ja (a + b) · c = (a · c) + (b · c). • 0 ∈ C on ns. nolla-alkio, jolle a + 0 = 0 + a = a. Monikertamerkinn¨ass¨a vastaavasti 0a = 0. Huomaa, ett¨a nolla-alkioita on vain yksi (totea!). • 1 ∈ C on ns. ykk¨osalkio, jolle 1 · a = a · 1 = a. Potenssimerkinn¨ass¨a vastaavasti a0 = 1, my¨os 00 = 1. Lis¨aksi oletetaan, ett¨a 0 6= 1. (Puolirenkaassa on siis aina v¨ahint¨a¨an kaksi alkiota.) Huomaa, ett¨a ykk¨osalkioita on vain yksi (totea!). • 0·a=a·0=0 Sulkeita voidaan j¨att¨a¨a pois sopimalla, ett¨a kertolaskut suoritetaan ennen yhteenlaskuja. Kertolaskupiste j¨atet¨a¨an paljolti merkitsem¨att¨a, kuten tavallista. Tuttuja esimerkkej¨a puolirenkaista ovat N = (N, +, ·, 0, 1) (luonnolliset luvut tavallisin laskuoperaatioin) sek¨a (R+ , +, ·, 0, 1) (ei-negatiiviset reaaliluvut tavallisin laskuoperaatioin). Luonnollisesti my¨os kaikki kokonaisluvut Z ja kaikki reaaliluvut R tavallisin laskuoperaatioin muodostavat puolirenkaat. Kielen formaalissa potenssisarjassa kertoimet tulevat my¨os puolirenkaasta, ns. Boolen puolirenkaasta B = (B, max, min, 0, 1), jossa B = {0, 1} (bitit) ja jossa siis ei ole muita alkioita kuin nolla- ja ykk¨osalkio. Liit¨ann¨aisyys ja osittuvuus ovat helppoja todeta. Kaikki n¨am¨a puolirenkaat ovat vaihdannaisia. Esimerkki ei-vaihdannaisesta puolirenkaasta on vaikkapa luonnollisten lukujen muodostamien n × n-matriisien puolirengas (Nn×n , +, ·, On, In ), miss¨a yhteen- ja kertolasku ovat tavanomaiset matriisioperaatiot, On on nollamatriisi ja In on identiteettimatriisi, ja viel¨a n > 1.
71
LUKU 9. FORMAALIT POTENSSISARJAT
9.3
Yleinen formaali potenssisarja
Samaan tapaan m¨a¨ariteltyn¨a kuin kielen formaali potenssisarja yleinen aakkoston Σ = {x1 , x2 , . . . , xk } formaali potenssisarja puolirenkaassa R = (C, +, ·, 0, 1) on kuvaus κ : Σ∗ −→ C. Sit¨a merkit¨a¨an perinteisesti ¨a¨arett¨om¨an¨a formaalina summana X κ(w)w, w∈Σ∗
jonka yhteenlaskettavia kutsutaan termeiksi. Edelleen tavalliseen tapaan termit κ(w)w, miss¨a κ(w) = 0, voidaan j¨att¨a¨a summasta pois. Tietyille termeille k¨aytet¨a¨an tavanomaisia lyhennysmerkint¨oj¨a: κ(Λ)Λ = κ(Λ) ja 1w = w. Termiss¨a κ(w)w oleva κ(w) on sen kerroin. Kerrointen ymp¨arilt¨a j¨atet¨a¨an yleens¨a sulkeet pois, jos se ei aiheuta ep¨aselvyytt¨a. Kaikkien t¨allaisten formaalien potenssisarjojen joukkoa merkit¨a¨an RhhΣii:lla. Puolirenkaan operaatioista + ja · saadaan formaaleille potenssisarjoille X X κ2 (w)w κ1 (w)w ja S2 = S1 = w∈Σ∗
w∈Σ∗
laskuoperaatiot, joista jo oli puhetta: X κ1 (w) + κ2 (w) w (summa). • S1 + S2 = w∈Σ∗
• S1 ⊗ S2 =
X
κ1 (w)κ2 (w)w (Hadamardin tulo).
w∈Σ∗
• S1 S2 =
X
κ(w)w (Cauchyn tulo), miss¨a κ(w) =
w∈Σ∗
X
κ1 (u)κ2 (v).
uv=w
Cauchyn tuloa k¨aytt¨aen saadaan edelleen sarjan X S= κ(w)w w∈Σ∗
Cauchyn potenssi S m =
X
κ′ (w)w, miss¨a
w∈Σ∗
κ′ (w) =
X
κ(u1 )κ(u2 ) · · · κ(um ).
u1 u2 ···um =w
Huomaa erityisesti, ett¨a sarjan ensimm¨ainen potenssi S 1 on sama kuin sarja itse. Formaalia potenssisarjaa, jossa vain ¨a¨arellisen monta kerrointa on 6= 0, sanotaan for¨ arellisten kielten formaalit potenssisarjat ovat juuri Boolen renmaaliksi polynomiksi. A¨ kaan B formaalit polynomit. Formaalit polynomit, joissa on vain yksi termi, ts. jotka ovat muotoa aw jollekin alkiolle a ∈ C, a 6= 0, ja sanalle w ∈ Σ∗ , ovat ns. monomeja. Edelleen formaalit sarjat, joissa vain κ(Λ) on 6= 0, ovat vakiosarjoja ja samaistettavissa puolirenkaan alkioihin. Vakiosarjalle a Cauchyn tulo on yksinkertainen: X X aκ(w)w. κ(w)w = a w∈Σ∗
w∈Σ∗
72
LUKU 9. FORMAALIT POTENSSISARJAT
Sarjan S nollanneksi potenssiksi S 0 sovitaan vakiosarja 1. Sarja, jossa kaikki kertoimet ovat = 0, on ns. nollasarja 0. Sellaiset sarjat, joissa κ(Λ) = 0, ovat puolestaan ns. kvasis¨a¨ann¨ollisi¨a sarjoja. Kvasis¨a¨ann¨ollisell¨a formaalilla sarjalla X X κ(w)w S= κ(w)w = w∈Σ∗
w∈Σ+
on ns. kvasi-inverssit S+ =
X
ja S ∗ = 1 + S +
κ+ (w)w
w∈Σ+
(huomaa, ett¨a κ+ (Λ) = 0), miss¨a +
κ (w) =
|w| X
X
κ(u1 )κ(u2 ) · · · κ(um ).
m=1 u1 u2 ···um =w
Kvasi-inverssin perusominaisuus on Lause 36. Formaalin potenssisarjan S kvasi-inverssit toteuttavat yht¨al¨ot S + SS + = S + S + S = SS ∗ = S ∗ S = S + . Todistus. Todistetaan malliksi yht¨al¨o S + SS + = S + . Merkit¨aa¨n X SS + = κ′ (w)w. w∈Σ∗
Silloin eo. m¨a¨aritelmien nojalla ′
κ (w) =
X
uv=w |w|
=
X
κ(u)
|v| X
X
κ(u1 ) · · · κ(um ) =
m=1 u1 ···um =v
X
|v| X X
X
κ(u)κ(u1 ) · · · κ(um )
uv=w m=1 u1 ···um =v
κ(u1 )κ(u2 ) · · · κ(uk ).
k=2 u1 u2 ···uk =w
Viimeisen yht¨al¨aisyyden n¨aet k¨aym¨all¨a l¨api w:n eri suffiksit v. N¨ain ollen κ(w) + κ′ (w) = κ+ (w). Kielelle L, jossa ei ole tyhj¨a¨a sanaa, sen formaali potenssisarja S on kvasis¨a¨ann¨ollinen ja S + (vast. S ∗ ) on L+ :n (vast. L∗ :n) formaali potenssisarja. Kvasi-inversio on siis katenaatiosulkeumaa vastaava operaatio formaaleille potenssisarjoille. Vaikkakaan puolirenkaassa alkioilla ei v¨altt¨am¨att¨a ole vasta-alkioita, on toisinaan tapana kirjoittaa kvasi-inverssit muodossa S+ =
S 1−S
ja S ∗ =
1
1−S
.
Vertaamalla yo. Cauchyn potenssiin voidaan viel¨a todeta, ett¨a +
S =
∞ X
m=1
S
m
ja S ∗ =
∞ X
m=0
S m.
LUKU 9. FORMAALIT POTENSSISARJAT
73
Esimerkki. Peruskursseilta tutut yhden muuttujan x potenssisarjat ovat ajateltavissa my¨os formaaleiksi potenssisarjoiksi puolirenkaassa (Q, +, ·, 0, 1) (rationaaliluvut) tai (R, +, ·, 0, 1) (reaaliluvut). Niinp¨a esimerkiksi funktion xex Maclaurinin sarja S=
∞ X
1 xm (m − 1)! m=1
on tulkittavissa t¨allaiseksi formaaliksi sarjaksi aakkostossa {x}. Sen kvasi-inverssi S + (vast. S ∗ ) on funktion xex /(1 − xex ) (vast. 1/(1 − xex )) Maclaurinin sarja, kuten voisi odottaa. Huomaa my¨os, ett¨a (S + )+ 6= S + . Kielilleh¨an (L+ )+ = L+ , joten kaikki kielten laskulait eiv¨at siirry formaaleille potenssisarjoille! Summa, Cauchyn tulo ja kvasi-inversio ovat formaalien potenssisarjojen ns. rationaaliset operaatiot. Ne aakkoston Σ formaalit potenssisarjat puolirenkaassa R, jotka saadaan rationaalisilla operaatioilla l¨ahtien liikkeelle vakioista ja monomeista xl , ovat ns. R-rationaaliset potenssisarjat. Aakkoston Σ kaikkien R-rationaalisten potenssisarjojen joukkoa merkit¨a¨an Rrat hhΣii:lla. Ottaen huomioon mainitut yhteydet kielten operaatioihin ja s¨a¨ann¨ollisten kielten m¨a¨arittelyn s¨a¨ann¨ollisten lausekkeiden avulla n¨ahd¨a¨an Lause 37. Aakkoston Σ s¨aa¨nn¨ollisten kielten formaalit potenssisarjat muodostavat tarkalleen joukon Brat hhΣii. Todistus. Ajatellen s¨a¨ann¨ollisten kielten m¨a¨arittely¨a s¨a¨ann¨ollisten lausekkeiden avulla Pyk¨al¨ass¨a 2.1 ja kvasi-inversiota pit¨a¨a vain n¨aytt¨a¨a, ett¨a lausekkeissa voidaan aina muodostaa katenaatiosulkeuma muodossa r ∗ = Λ + r1+ , miss¨a r1 :t¨a vastaavassa kieless¨a ei ole tyhj¨a¨a sanaa. T¨am¨a seuraa suoraan laskus¨a¨ann¨oist¨a, joilla tyhj¨a sana pidet¨a¨an erill¨a¨an”: ” r1 + (Λ + r2 ) = Λ + (r1 + r2 ) , (Λ + r1 ) + (Λ + r2 ) = Λ + (r1 + r2 ) , r1 (Λ + r2 ) = r1 + r1 r2 , (Λ + r1 )r2 = r2 + r1 r2 , (Λ + r1 )(Λ + r2 ) = Λ + (r1 + r2 + r1 r2 ) , (Λ + r)∗ = r ∗ = Λ + r + . Soveltaen n¨ait¨a saadaan jokainen s¨a¨ann¨ollinen lauseke esitetyksi ekvivalentissa muodossa Λ + r tai r, miss¨a r:n esitt¨am¨ass¨a kieless¨a ei ole tyhj¨a¨a sanaa. (Muista, ett¨a Λ∗ = ∅∗ = Λ.) Rationaaliset formaalit potenssisarjat ovat n¨ain s¨a¨ann¨ollisten kielten vastine.1 Huomattakoon viel¨a, ett¨a jokainen RhhΣii:n formaali potenssisarja X S= κ(w)w w∈Σ∗
m¨a¨aritt¨a¨a kielen 1
L(S) = w κ(w) 6= 0 ,
CF-kielten vastine, ns. algebralliset formaalit potenssisarjat, saataisiin ottamalla mukaan algebralliset operaatiot (polynomiyht¨ al¨ on ratkaisut).
LUKU 9. FORMAALIT POTENSSISARJAT
74
ns. S:n tukikielen. Nollasarjalle (kaikki kertoimet = 0) tukikieli on tyhj¨a ja polynomeille ¨a¨arellinen. Melko helposti on todettavissa, ett¨a RhhΣii, +, ·, 0, 1 , miss¨a · on Cauchyn tulo, on sekin puolirengas—ja sit¨a voitaisiin periaatteessa k¨aytt¨a¨a formaalin potenssisarjan kerroinpuolirenkaana!
9.4
Tunnistuvat formaalit potenssisarjat. Schu ¨ tzenberger’n esityslause
S¨a¨ann¨ollisille kielille m¨a¨arittely yht¨a¨alt¨a s¨a¨ann¨ollisten lausekkeiden avulla ja toisaalta ¨a¨arellisten automaattien avulla muodostavat yhdess¨a vahvan koneiston, jolla voidaan todistaa kielten ominaisuuksia. Edell¨a aakkoston Σ s¨a¨ann¨ollisten kielten perheen vastineeksi todettiin Rrat hhΣii ja se m¨a¨ariteltiin rationaalisten operaatioiden kautta. T¨am¨a vastaa s¨a¨ann¨ollisten lausekkeiden k¨aytt¨o¨a. Automaattikarakterisaatio on my¨os olemassa, ns. tunnistuvuus. Jotta p¨aa¨st¨aa¨n tunnistuvuuteen k¨asiksi, esitet¨aa¨n ensin malliksi ep¨adeterministinen ¨a¨arellinen automaatti (ilman Λ-siirtoja) M = (Q, Σ, S, δ, A) Boolen puolirenkaan B avulla. Automaatin tilat ovat Q = {q1 , . . . , qm }. Kutakin symbolia xl ∈ Σ asetetaan vastaamaan (l) bittimatriisi Dl = (dij ), miss¨a ( 1, jos qj ∈ δ(qi , xl ) (l) dij = 0 muuten. Edelleen alku- ja lopputilajoukkoja vastaamaan asetetaan m-vektorit (vaakavektorit) s = (s1 , . . . , sm ) ja a = (a1 , . . . , am ), miss¨a ( ( 1, jos qi ∈ A 1, jos qi ∈ S ja ai = si = 0 muuten. 0 muuten Silloin ne tilat, joihin on p¨a¨ast¨aviss¨a jostain alkutilasta, kun luetaan sy¨otesymboli xl , vastaavat 1-alkioita vektorissa sDl . Yleisesti ne tilat, joihin on p¨a¨ast¨aviss¨a alkutilasta sy¨otteell¨a w = xl1 xl2 · · · xlk , eli δˆ∗ (S, w), vastaavat 1-alkioita vektorissa sDl1 Dl2 · · · Dlk . Merkit¨a¨an t¨all¨oin lyhyyden vuoksi µ(w) = Dl1 Dl2 · · · Dlk ja erikoisesti µ(xl ) = Dl sek¨a µ(Λ) = Im (identiteettimatriisi, jonka alkiot ovat B:ss¨a). Muista, ett¨a laskutoimitukset tehd¨aa¨n Boolen puolirenkaassa B. Matriisitulon liit¨ann¨aisyys seuraa tavalliseen tapaan B:n operaatioiden liit¨ann¨aisyydest¨a ja osittuvuudesta. Sy¨ote w hyv¨aksyt¨a¨an nyt tarkalleen silloin, kun joukossa δˆ∗ (S, w) on lopputila, eli silloin kun sµ(w)aT = 1. Erikoisesti tyhj¨a sana Λ hyv¨aksyt¨a¨an tarkalleen silloin, kun saT = 1. Kielen L(M) formaali potenssisarja on siis X sµ(w)aT w. w∈Σ∗
75
LUKU 9. FORMAALIT POTENSSISARJAT
T¨allaisen formaalin potenssisarjan sanotaan olevan B-tunnistuva. Yleisen aakkoston Σ = {x1 , . . . , xk } tunnistuvan formaalin potenssisarjan m¨a¨aritelm¨a puolirenkaassa R = (C, +, ·, 0, 1) on vastaavanlainen. Formaali potenssisarja X S= κ(w)w w∈Σ∗
on R-tunnistuva, jos on olemassa sellainen luku m ≥ 1 ja sellaiset R:n m × m-matriisit D1 , . . . , Dk ja m-vaakavektorit s ja a, ett¨a κ(w) = sµ(w)aT , ns. matriisiesitys 2, miss¨a • µ(w) on R:n m × m-matriisi, • µ(Λ) = Im (alkioista 0 ja 1 muodostettu m × m-identiteettimatriisi), • µ(xl ) = Dl (l = 1, . . . , k) ja • µ toteuttaa ehdon
µ(uv) = µ(u)µ(v) (u, v ∈ Σ∗ ).
J¨alleen matriisitulon liit¨ann¨aisyys seuraa R:n operaatioiden liit¨ann¨aisyydesta ja osittuvuudesta. Matriisiesitys on er¨aa¨nlainen automaatti, joka tunnistaa sarjan. R-tunnistuvien potenssisarjojen joukkoa aakkostossa Σ merkit¨a¨an Rrec hhΣii:lla. Edell¨a m¨a¨aritellyt sarjojen operaatiot s¨ailytt¨av¨at tunnistuvuuden. Aloitetaan rationaalisista operaatioista: Lause 38. (i) Jos formaalit sarjat S1 ja S2 ovat R-tunnistuvia, niin samoin ovat S1 + S2 ja S1 S2 . (ii) Jos kvasis¨aa¨nn¨ollinen formaali potenssisarja S on R-tunnistuva, niin samoin ovat S + ja S ∗ . Todistus. Todistukset ovat paljolti samankaltaiset kuin Lauseen 2 ja Kleenen lauseen. (i) Jos sarjat S1 ja S2 ovat tunnistuvia, niin niill¨a on matriisiesitykset κ1 (w) = s1 µ1 (w)aT1
ja κ2 (w) = s2 µ2 (w)aT2 ,
vastaavasti. Summan S1 + S2 matriisiesitys γ(w) = tν(w)bT saadaan, kun valitaan t = s1 s2 sek¨a ν(xl ) =
ja b = a1 a2
µ1 (xl )
O
O
µ2 (xl )
!
(l = 1, . . . , k)
Huomaa, ett¨ a sµ(w)aT on matriisin µ(w) alkioista laskettu lineaariyhdelm¨a kiintein vektoreista s ja a saatavin kertoimin. Toisinaan matriisiesitys m¨a¨aritell¨a¨ankin niin, ett¨a se on vain jokin kiintein kertoimin matriisin alkioista laskettu lineaariyhdelm¨a. T¨am¨a johtaa samaan tunnistuvuuden k¨asitteeseen. 2
76
LUKU 9. FORMAALIT POTENSSISARJAT
(lohkomuodossa). T¨ass¨a O:t ovat sopivan kokoisia nollamatriiseja, jotka muodostetaan R:n nolla-alkiota k¨aytt¨aen. Silloin nimitt¨ain ! ! ! aT1 O µ1 (w) µ1 (w)aT1 γ(w) = s1 s2 = s1 s2 O µ2 (w) µ2 (w)aT2 aT2 = κ1 (w) + κ2 (w).
Cauchyn tulo S1 S2 on v¨ah¨an mutkikkaampi. Merkit¨a¨an C = aT1 s2 . Nyt valitaankin t = s1 0 ja b = a2 CT a2 ,
miss¨a 0 on a2 :n pituinen nollavektori, sek¨a ν(xl ) =
µ1 (xl ) Cµ2 (xl ) µ2 (xl )
O
Silloin ν(w) = miss¨a η(w) =
!
(l = 1, . . . , k).
µ1 (w)
η(w)
O
µ2 (w)
X
!
,
µ1 (u)Cµ2 (v).
uv=w v6=Λ
T¨am¨a todetaan induktiivisesti. Tulos pit¨a¨a paikkansa, kun w = Λ (summa on tyhj¨a ja η(Λ) = O). Toisaalta matriisin ν(wxl ) oikea yl¨alohko on ! X X µ1 (w)Cµ2 (xl ) + µ1 (u)Cµ2 (v) µ2 (xl ) = µ1 (w)Cµ2 (xl ) + µ1 (u)Cµ2 (vxl ) uv=w v6=Λ
uv=w v6=Λ
=
X
µ1 (u)Cµ2 (v).
uv=wxl v6=Λ
Matriisiesitys tν(w)bT = s1 µ1 (w)CaT2 + =
X
X
s1 µ1 (u)Cµ2 (v)aT2 =
uv=w v6=Λ
κ1 (u)κ2 (v)
X
s1 µ1 (u)aT1 s2 µ2 (v)aT2
uv=w
uv=w
on silloin Cauchyn tulon matriisiesitys. (ii) Jos kvasis¨a¨ann¨ollinen formaali potenssisarja S on tunnistuva, niin sill¨a on matriisiesitys κ(w) = sµ(w)aT , miss¨a saT = κ(Λ) = 0. Merkit¨aa¨n j¨alleen C = aT s. Silloin sC = 0. Sarjan S + matriisiesitys saadaan nyt muodossa sµ+ (w)aT ,
77
LUKU 9. FORMAALIT POTENSSISARJAT miss¨a µ+ (xl ) = µ(xl ) + Cµ(xl ) (l = 1, . . . , k).
Esitys on ilmeisesti oikea, kun w = Λ. Jos taas w = xl1 xl2 · · · xln , niin yo. yht¨al¨on nojalla aukikertoen sµ+ (w)aT = s µ(xl1 ) + Cµ(xl1 ) µ(xl2 ) + Cµ(xl2 ) · · · µ(xln ) + Cµ(xln ) aT =
|w| X
X
sµ(u1)Cµ(u2 )C · · · Cµ(um )aT .
m=1 u1 u2 ···um =w
Aukikerrotussa tulossa nimitt¨ain ne termit, joissa on sC, ovat nolla-alkioita ja ne voidaan j¨att¨aa¨ pois. J¨aljelle j¨aa¨v¨at termit ovat juuri ne, jotka esiintyv¨at summassa. N¨ain ollen +
T
sµ (w)a =
|w| X
X
κ(u1 )κ(u2 ) · · · κ(um ) = κ+ (w)
m=1 u1 u2 ···um =w
ja kvasi-inverssille S + on saatu matriisiesitys. Vakiosarja 1 on tunnistuva (ks. alla), joten samoin on kvasi-inverssi S ∗ = 1 + S + . V¨alitt¨om¨an¨a seurauksena saadaan Seuraus. R-rationaaliset formaalit potenssisarjat ovat R-tunnistuvia. Todistus. Edellisen lauseen ja rationaalisuuden m¨aa¨ritelm¨an nojalla riitt¨aa¨ osoittaa, ett¨a vakiosarjat ja monomit xl ovat tunnistuvia. Vakiosarjojen osalta t¨am¨a on helppoa, vakion a matriisiesitys on κ(w) = aµ(w)1, miss¨a µ(xl ) = 0 (l = 1, . . . , k). Muista, ett¨a 00 = 1. Monomin xl matriisiesitys taas on 0 , κ(w) = 1 0 µ(w)
1
miss¨a µ(xi ) on 2 × 2-nollamatriisi, kun i 6= l, ja 0 1 µ(xl ) = .
0 0
K¨a¨anteinenkin tulos pit¨a¨a paikkansa, ts. R-tunnistuvat formaalit potenssisarjat ovat R-rationaalisia. T¨am¨an todistus muistuttaa Lauseen 3 todistusta ja perustuu siihen, ett¨a puolirenkaan R:n alkioista muodostetut m × m-matriisit muodostavat nekin puolirenkaan Rm×m , kun laskuoperaatioina ovat matriisien summa ja tulo, nolla-alkiona ja ykk¨osalkiona toimivat R:n nolla-alkiosta 0 ja ykk¨osalkiosta 1 muodostetut nollamatriisi Om ja identiteettimatriisi Im . Rm×m hhΣii:n formaalit potenssisarjat voidaan tulkita joko m × m-matriisikertoimisiksi potenssisarjoiksi (tavallinen tulkinta), mutta my¨os m × m-matriiseiksi, joiden alkiot ovat RhhΣii:n formaaleja potenssisarjoja. Potenssisarja-alkioisten matriisien matriisitulo on silloin sama kuin matriisikertoimisten potenssisarjojen Cauchyn tulo (miksi?). Todistusta varten tarvitaan aputulos:
78
LUKU 9. FORMAALIT POTENSSISARJAT
Apulause. Jos P ∈ Rm×m hhΣii on kvasis¨a¨ann¨ollinen ja Z sek¨a Q ovat m-vaakavektoreita, joiden alkiot ovat RhhΣii:ss¨a, niin yht¨al¨on Z = Q + ZP ainoa ratkaisu on Z = QP∗ . Lis¨aksi, jos P:n ja Q:n alkiot ovat R-rationaalisia, niin samoin ovat Z:n alkiot. Todistus. Lauseen 36 nojalla P∗ = Im + P∗ P, joten Z = QP∗ on yht¨al¨on ratkaisu. Toisaalta ratkaisu toteuttaa my¨os iteroimalla” saadut yht¨al¨ot ” Z=Q
n−1 X
Pi + ZPn
(n = 1, 2, . . . ),
i=0
miss¨a j¨a¨ann¨ostermi” ZPn pit¨a¨a sis¨all¨a¨an kaikki termit, joissa sanan pituus on ≥ n (muis” ta, ett¨a P on kvasis¨a¨ann¨ollinen). N¨ain ollen ratkaisu on yksik¨asitteinen. Oletetaan sitten, ett¨a P:n ja Q:n alkiot ovat R-rationaalisia potenssisarjoja ja n¨aytet¨a¨an induktiolla m:n suhteen, ett¨a samoin ovat ratkaisun Z alkiot. Induktion l¨aht¨okohta, tapaus m = 1, on selv¨a. Oletetaan (Induktio-oletus), ett¨a v¨aite on oikea, kun m = l − 1, ja siirryt¨a¨an tapaukseen m = l (Induktiov¨aite). Merkit¨a¨an Induktiov¨aitteen todistusta varten Z = (Z1 , . . . , Zl ) ja Q = (Q1 , . . . , Ql ) sek¨a viel¨a P = (Pij ). Silloin Zl = Rl + Zl Pll , miss¨a Rl = Ql + Z1 P1l + · · · + Zl−1 Pl−1,l . Ilmeisestikin Rl on R-rationaalinen potenssisarja, jos vain Z1 , . . . , Zl−1 ovat sit¨a. Edell¨a olevan nojalla ( Rl , jos Pll = 0 Zl = Rl Pll∗ , jos Pll 6= 0. (Huomaa, ett¨a Pll on kvasis¨a¨ann¨ollinen.) Sijoittamalla saatu Zl yht¨al¨o¨on Z = Q + ZP saadaan yht¨a alempaa dimensiota m = l − 1 oleva yht¨al¨o, jonka kerroinmatriisi on kvasis¨a¨ann¨ollinen R(l−1)×(l−1) hhΣii:n formaali potenssisarja. Induktio-oletuksen nojalla sen ratkaisun alkiot Z1 , . . . , Zl−1 ovat R-rationaalisia potenssisarjoja. N¨ain ollen my¨os Zl on R-rationaalinen. N¨ain saadaan Kleenen lausetta vastaava kuuluisa tulos potenssisarjoille: Schu ¨tzenberger’n esityslause. R-rationaaliset formaalit potenssisarjat ovat tarkalleen kaikki R-tunnistuvat formaalit potenssisarjat. Todistus. Edell¨a olevan nojalla pit¨aa¨ siis viel¨a todistaa, ett¨a R-tunnistuva aakkoston Σ = {x1 , . . . , xk } formaali potenssisarja, joka m × m-matriisiesityksess¨a on X S= sµ(w)aT w, w∈Σ∗
LUKU 9. FORMAALIT POTENSSISARJAT
79
on R-rationaalinen. Puolirenkaan Rm×m hhΣii formaali potenssisarja P = µ(x1 )x1 + · · · µ(xk )xk (polynomi) on kvasis¨a¨ann¨ollinen ja sen alkiot ovat R-rationaalisia. Edelleen ilmeisestikin X µ(w)w ja S = sP∗ aT . P∗ = w∈Σ∗
Apulauseen mukaan Z = sP∗ on yht¨al¨on Z = s + ZP ainoa ratkaisu, sen alkiot ovat R-rationaalisia ja samoin on n¨ain ollen S = sP∗ aT .
9.5
Tunnistuvuus ja Hadamardin tulo
Tunnistuvien formaalien potenssisarjojen Hadamardin tulo on aina my¨os tunnistuva. T¨am¨a voidaan todistaa helposti matriisien Kroneckerin tuloja k¨aytt¨aen. Matriisien A = (aij ) (n1 × m1 -matriisi) ja B = (bij ) (n2 × m2 -matriisi) Kroneckerin tulo 3 on n1 n2 × m1 m2 -matriisi. a11 B a12 B · · · a1m1 B a21 B a22 B · · · a2m1 B A⊗B= . .. .. .. .. . . . an1 1 B an1 2 B · · · an1 m2 B
(lohkomuodossa). Erikoistapauksena saadaan kahden vektorin Kroneckerin tulo (n1 = n2 = 1 tai m1 = m2 = 1). Seuraavat Kroneckerin tulon perusominaisuudet ovat varsin helppoja todistaa. T¨ass¨a oletetaan, ett¨a esiintyv¨at matriisioperaatiot ovat m¨a¨ariteltyj¨a. 1. Liit¨ann¨aisyys: (A ⊗ B) ⊗ C = A ⊗ (B ⊗ C)
T¨am¨an seurauksena useammat per¨akk¨aiset Kroneckerin tulot voidaan kirjoittaa ilman sulkeita. 2. Kroneckerin tulojen kertolasku (seuraa jokseenkin suoraan lohkomatriisien kertolaskusta): (A1 ⊗ B1 )(A2 ⊗ B2 ) = (A1 A2 ) ⊗ (B1 B2 ) 3. Kahden identiteettimatriisin Kroneckerin tulo on identiteettimatriisi. 4. Kroneckerin tulon inverssi (seuraa kertolaskulaista): (A ⊗ B)−1 = A−1 ⊗ B−1 3
Usein Kroneckerin tuloa kutsutaan my¨os tensorituloksi, joskus my¨os Hadamardin tuloksi.
LUKU 9. FORMAALIT POTENSSISARJAT
80
5. Kroneckerin tulon transpoosi (seuraa suoraan lohkomatriisien transponoinnista): (A ⊗ B)T = AT ⊗ BT Sama p¨atee kompleksialkioisten matriisien konjugaattitranspoosille: (A ⊗ B)† = A† ⊗ B† 6. Unit¨a¨aristen matriisien Kroneckerin tulot ovat unit¨a¨arisi¨a. (Seuraa edellisist¨a.) Huomaa erityisesti, ett¨a 1 × 1-matriisien Kroneckerin tulo on yksinkertaisesti skalaarien kertolasku. Formaalien potenssisarjojen S1 ja S2 matriisiesitykset κ1 (w) = s1 µ1 (w)aT1
ja κ2 (w) = s2 µ2 (w)aT2 ,
vastaavasti, voidaankin nyt kertoa Kroneckerin tulona: κ1 (w)κ2 (w) = κ1 (w) ⊗ κ2 (w) = s1 µ1 (w)aT1 ⊗ s2 µ2 (w)aT2 = (s1 ⊗ s2 ) µ1 (w) ⊗ µ2 (w) (aT1 ⊗ aT2 ).
Matriisiesitys κ(w) = sµ(w)aT Hadamardin tulolle S1 ⊗ S2 saadaan siis, kun valitaan s = s1 ⊗ s2
ja a = a1 ⊗ a2
sek¨a µ(xl ) = µ1 (xl ) ⊗ µ2 (xl ) (l = 1, . . . , k). Silloin nimitt¨ain kertolaskus¨a¨ann¨on nojalla µ(w) = µ1 (w) ⊗ µ2 (w). N¨ain on saatu Lause 39. R-tunnistuvien formaalien potenssisarjojen Hadamardin tulo on R-tunnistuva. Sch¨ utzenberger’n esityslauseen nojalla edelleen Seuraus. R-rationaalisten formaalien potenssisarjojen Hadamardin tulo on R-rationaalinen.
9.6 9.6.1
Esimerkkej¨ a formaaleista potenssisarjoista Multikielet
Palataan Pyk¨al¨an 4 ep¨adeterministiseen a¨a¨relliseen automaattiin (ilman Λ-siirtoja) M = (Q, Σ, S, δ, A). Automaatin tilat olivat {q1 , . . . , qm }. Uutena asiana otetaankin nyt puolirenkaaksi N = (N, +, ·, 0, 1) eik¨a B:t¨a. Toiseksi automaatti ajatellaan multiautomaatiksi, jolloin • siirtofunktion arvo δ(qi , xl , qj )—huomaa kolme argumenttia—antaa tiedon siit¨a miten monella eri tavalla voidaan tilasta qi siirty¨a tilaan qj lukien xl . Arvo voi olla = 0, jolloin tilasta qi ei voi siirty¨a lainkaan tilaan qj lukien xl .
81
LUKU 9. FORMAALIT POTENSSISARJAT
• alku- ja lopputilajoukot ovat multijoukkoja, ts. tila voi esiinty¨a niiss¨a monta kertaa. Matriisiesityksess¨a symbolia xl ∈ Σ asetetaan vastaamaan kokonaisalkioinen m × m(l) (l) matriisi µ(xl ) = Dl = (dij ), miss¨a dij = δ(qi , xl , qj ). Alku- ja lopputilajoukkoja vastaamaan asetetaan vastaavasti kokonaisalkioiset vaakavektorit s = (s1 , . . . , sm ) sek¨a a = (a1 , . . . , am ), miss¨a si ilmoittaa miten monella tavalla qi on alkutila ja ai miten monella tavalla qi on lopputila. Jos si = 0, niin qi ei ole lainkaan alkutila. Vastaavasti jos ai = 0, qi ei ole lopputila. Silloin niiden tapojen lukum¨a¨ar¨at, joilla eri tiloihin on p¨a¨ast¨aviss¨a alkutiloista, kun luetaan sy¨otesymboli xl , ovat luettavissa vektorista sDl . Yleisesti niiden tapojen lukum¨a¨ar¨at, joilla tiloihin on p¨a¨ast¨aviss¨a alkutiloista sy¨otteell¨a w = xl1 xl2 · · · xlk , ovat luettavissa vektorista sDl1 Dl2 · · · Dlk = sµ(w) N¨ain ollen niiden eri tapojen lukum¨a¨ar¨a, joilla sana w voidaan hyv¨aksy¨a—mukaanlukien 0, jos sanaa ei hyv¨aksyt¨a—on sµ(w)aT = κ(w). Formaali potenssisarja S(M) =
X
κ(w)w,
w∈Σ∗
ns. M:n tunnistama multikieli, on silloin N-tunnistuva ja Sch¨ utzenberger’n esityslauseen nojalla my¨os N-rationaalinen. κ(w) on sanan w ns. multiplisiteetti. Jokainen N-tunnistuva, ja siis my¨os N-rationaalinen, multikieli on ilmeisesti tulkittavissa er¨a¨an multiautomaatin tunnistamaksi multikieleksi. Yleens¨akin NhhΣii:n formaalit potenssisarjat ovat ajateltavissa aakkoston Σ multikieliksi, mutta niille ei silloin yleens¨a ole yht¨a v¨alit¨ont¨a tulkintaa.
9.6.2
Stokastiset kielet
Reaalialkioista vaakavektoria v sanotaan stokastiseksi, jos sen alkiot ovat ≥ 0 ja niiden summa on = 1. Reaalialkioinen matriisi on stokastinen, jos sen rivit ovat stokastisia vektoreita. Muutetaan Pyk¨al¨an 4 automaatti stokastiseksi ¨a¨arelliseksi automaatiksi lis¨a¨am¨all¨a siihen todenn¨ak¨oisyydet: • Alkutilavektorin tilalla on alkutilatodenn¨ak¨oisyyksien stokastinen vektori s = (s1 , . . . , sm ), miss¨a si on todenn¨ak¨oisyys P(qi on alkutila). • Lopputilavektorin tilalla on lopputilatodenn¨ak¨oisyyksien vektori a = (a1 , . . . , am ) (ei v¨altt¨am¨att¨a stokastinen), miss¨a ai on todenn¨ak¨oisyys P(qi on lopputila). • Tilansiirtomatriisien tilalla ovat tilansiirtotodenn¨ak¨oisyyksien stokastiset matriisit (l) Dl = (dij ). Edelleen (l)
dij = P(siirryt¨aa¨n tilaan qj , kun luetaan xl | ollaan tilassa qi ), ts. ehdollinen todenn¨ak¨oisyys, ett¨a luettaessa xl siirryt¨a¨an tilaan qj sill¨a ehdolla, ett¨a ollaan tilassa qi .
82
LUKU 9. FORMAALIT POTENSSISARJAT Todenn¨ak¨oisyyksien laskus¨a¨ant¨ojen mukaan P(siirryt¨a¨an tilaan qj , kun luetaan xl ) =
m X
(l)
dij P(ollaan tilassa qi ).
i=1
N¨ain ollen vektori sDl antaa tilatodenn¨ak¨oisyydet, kun on luettu ensimm¨ainen symboli xl . Yleisesti tilatodenn¨ak¨oisyydet sanan w lukemisen j¨alkeen antaa vektori sµ(w). (Matemaattisesti tilansiirtoketju on ns. Markovin prosessi.) Edelleen todenn¨ak¨oisyyksien laskus¨a¨ant¨ojen mukaan P(sanan w lukemisen j¨alkeen ollaan lopputilassa) m X = P(sanan w lukemisen j¨alkeen ollaan tilassa qi )P(qi on lopputila) i=1
= sµ(w)aT = κ(w).
N¨ain saadaan puolirenkaassa (R+ , +, ·, 0, 1) tunnistuva formaali potenssisarja X P = κ(w)w, w∈Σ∗
miss¨a κ(w) on todenn¨ak¨oisyys, ett¨a sana w on kieless¨a. Kyseess¨a on ns. stokastinen kieli. Ilmeisesti stokastiset kielet eiv¨at ole suljettuja summan, Cauchyn tulon eik¨a kvasiinverssin suhteen, koska niille on κ(w) ≤ 1. Toisaalta Lause 40. Stokastiset kielet ovat suljettuja Hadamardin tulon suhteen. Todistus. Pyk¨al¨an 5 konstruktion perusteella pit¨a¨a vain todeta, ett¨a stokastisten vektorien Kroneckerin tulo on stokastinen ja ett¨a sama p¨atee stokastisille matriiseille. Alkioiden einegatiivisuus ilmeisesti s¨ailyy Kroneckerin tulossa. m-vektorille v ja m × m-matriisille M stokastisuuden summaehto on kirjoitettavissa muotoon v1m = 1 ja M1m = 1m , miss¨a 1m on m-pystyvektori, jonka kaikki alkiot ovat = 1. Jos nyt v1 ja v2 ovat stokastisia vektoreita dimensioissa m1 ja m2 , vastaavasti, niin (v1 ⊗ v2 )1m1 m2 = (v1 1m1 ) ⊗ (v2 1m2 ) = 1 · 1 = 1 (huomaa, ett¨a 1m1 ⊗ 1m2 = 1m1 m2 ). N¨ain ollen vektori v1 ⊗ v2 on stokastinen. Vastaavalla tavalla n¨aytet¨a¨an, ett¨a stokastisten matriisien Kroneckerin tulo on stokastinen. Stokastisesta kielest¨a P saadaan varsinainen kieli” asettamalla todenn¨ak¨oisyydelle ” kynnys. Esimerkiksi w κ(w) > 0.5
on t¨allainen kieli. N¨ait¨akin kieli¨a kutsutaan stokastisiksi. T¨allaisille stokastisille kielille saadaan toinenkin kuuluisa karakterisaatio. Ne nimitt¨ain voidaan kirjoittaa muodossa ′ w κ (w) > 0 ,
83
LUKU 9. FORMAALIT POTENSSISARJAT miss¨a
X
κ′ (w)w
w∈Σ∗
on R-rationaalinen formaali potenssisarja reaalilukujen puolirenkaassa R = {R, +, ·, 0, 1} (tavallisin laskuoperaatioin). K¨a¨ant¨aen, jokainen vm. muotoa oleva kieli on stokastinen. Tulos tunnetaan Turakaisen lauseena.4
9.6.3
Pituusfunktiot
Kielen L pituusfunktio on kuvaus λL (n) = L:n n-pituisten sanojen lukum¨a¨ar¨a. Vastaava formaali potenssisarja yli aakkoston {x} puolirenkaassa N = (N, +, ·, 0, 1) on SL =
∞ X
λL (n)xn .
n=0
Lause 41. S¨a¨ann¨olliselle kielelle L formaali potenssisarja SL on N-rationaalinen (ja siis my¨os N-tunnistuva). Todistus. Otetaan kielen L tunnistava deterministinen ¨a¨arellinen automaatti M = (Q, Σ, q0 , δ, A). Muutetaan M ¨a¨arelliseksi multiautomaatiksi M ′ = Q, {x}, S, δ ′ , B seuraavasti. Tilansiirtoluku δ ′ (qi , x, qj ) = n on voimassa tarkalleen silloin, kun on n sellaista symbolia xl , ett¨a δ(qi , xl ) = qj . Erityisesti δ ′ (qi , x, qj ) = 0 tarkalleen silloin, kun kaikille symboleille xl on δ(qi , xl ) 6= qj . Edelleen S:ss¨a on vain M:n alkutila q0 multiplisiteetilla 1 ja B:ss¨a vain A:n tilat kukin multiplisiteetilla 1. Silloin ilmeisesti multikieli S(M ′ ) on juuri mainittu potenssisarja SL .
9.6.4
Kvanttikielet
Kvanttiautomaatti aakkostossa Σ = {x1 , . . . , xl } saadaan, kun valitaan luku m, kompleksialkioinen m-vaakavektori s = (s1 , . . . , sm ), ns. alkutila, jolle 2
†
ksk = ss =
m X
|si |2 = 1,
i=1
sek¨a kompleksialkioiset tilansiirtomatriisit Ul = µ(xl ) vastaten Σ:n symboleja. Tilansiirtomatriisien on on oltava unit¨a¨arisi¨a matriiseja, ts. aina U−1 = U†l , muutoin tilansiirto ei ole kvanttiteoreettisesti mielek¨as operaatio. l 4
Alkuper¨ aisviite on Turakainen, P.: Generalized Automata and Stochastic Languages. Proceedings of the American Mathematical Society 21 (1969), 303–309.
LUKU 9. FORMAALIT POTENSSISARJAT
84
Kvanttikieli 5 on formaali potenssisarja X Q= κ(w)w, w∈Σ∗
miss¨a κ(w) = sµ(w) on kvanttiautomaatin tila sanan w lukemisen j¨alkeen. J¨alleen t¨ass¨a µ m¨aa¨r¨aytyy matriiseista µ(xl ) = Ul ja s¨a¨ann¨oist¨a µ(Λ) = Im ja µ(uv) = µ(u)µ(v). Huomaa, ett¨a t¨am¨a Q ei oikeastaan ole formaali potenssisarja, koska kertoimet ovat vektoreita. Jokainen sen komponentti on toisaalta tunnistuva formaali potenssisarja puolirenkaassa (C, +, ·, 0, 1) (kompleksiluvut tavallisin laskuoperaatioin). Kvanttikielill¨a, kuten stokastisilla kielill¨a, on varsin huonot sulkeumaominaisuudet. Kvanttikieletkin ovat kuitenkin suljettuja Hadamardin tulon suhteen, sill¨a (s1 ⊗ s2 )(s1 ⊗ s2 )† = (s1 ⊗ s2 )(s†1 ⊗ s†2 ) = (s1 s†1 ) ⊗ (s2 s†2 ) = 1 · 1 = 1 ja unit¨a¨aristen matriisien Kroneckerin tulo on aina my¨os unit¨a¨arinen, vrt. edellinen pyk¨al¨a. Hadamardin tulo vastaakin kvanttirekisterien yhdist¨amist¨a pidemm¨aksi rekisteriksi, ks. esimerkiksi Nielsen & Chuang. T¨ass¨a Hadamardin tulo on siis kerroinvektorien Kroneckerin tulo. Lopputilakonstruktiota vastaa tietyss¨a mieless¨a kvanttifysikaalinen mittaus. Tila κ(w) kerrotaan jollain projektiomatriisilla P.6 P:ll¨a kertominen projisoi vektorin ortogonaalisesti tiettyyn Cm :n aliavaruuteen H. Silloin kvanttifysiikan ns. todenn¨ak¨oisyystulkinnassa
κ(w)P 2 on todenn¨ak¨oisyys sille, ett¨a tila κ(w) on mittauksen j¨alkeen aliavaruudessa H. Huomaa, ett¨a my¨os µ(w) on unit¨a¨arinen ja
κ(w)P 2 ≤ κ(w) 2 = sµ(w)µ(w)† s† = ss† = 1.
Mittauksen tarkoitus on selvitt¨a¨a onko tila aliavaruudessa H vai ei. Fysikaalisen mittauksen tulos on vastaus kyll¨a/ei. Kyll¨a-vastauksen voitaisiin ajatella merkitsev¨an sy¨otteen hyv¨aksymist¨a. Er¨aa¨nlaisiksi jonokoneiksi ajateltuna ja Hadamardin tulolla yhdistettyin¨a kvanttiautomaatit ovat huomattavasti perinteisi¨a klassisia tietokoneita nopeampia, nekin tietysti ovat oikeastaan (yleistettyj¨a) jonokoneita. Niin nopeita, ett¨a niill¨a voitaisiin murtaa monet yleisesti k¨aytetyt kryptosysteemit, ks. kurssi Matemaattinen kryptologia ja viite Nielsen &Chuang. Toistaiseksi tosin vain varsin pieni¨a kvanttitietokoneita on voitu konstruoida fysikaalisesti. 5
Alkuper¨ aisviite on Moore,C. & Crutchfield, J.P.: Quantum Automata and Quantum Grammars. Theoretical Computer Science 237 (2000), 257–306. 6 Projektiomatriisi P on aina itseadjungoitu, ts. P† = P, sek¨a idempotentti, ts. P2 = P. Lis¨aksi aina kxPk ≤ kxk, ortogonaaliprojektiossa pituus ei voi kasvaa.
85
LUKU 9. FORMAALIT POTENSSISARJAT
9.6.5
Sumeat kielet
Vaihtamalla tavallinen” kaksiarvoinen logiikka moniarvoiseksi, saadaan hyvin monenlai” 7 sia Boolen puolirenkaan tapaisia puolirenkaita. Esimerkkin¨a otetaan yksinkertainen puolirengas S = [0, 1], +, ·, 0, 1 , miss¨a [0, 1] on reaalilukuv¨ali ja operaatiot m¨a¨aritell¨a¨an yht¨al¨oill¨a a + b = max(a, b) ja a · b = max(0, a + b − 1). Operaatioiden kuvaajapinnat ovat (Maple)
1
1
0.8
0.8
0.6
0.6
a+b
ab 0.4
0.4
0.2
0.2
1
1
0.8
0.8
0.6 b 0.4
0.6 b 0.4 0.2 0
0
0.2
0.4
1
0.8
0.6
0.2
a
0
0
0.2
0.4
0.6
0.8
1
a
ja esimerkiksi lausekkeen c = a · a + b · (1 + a) kuvaajapinta on 1
0.8
0.6 c 0.4
0.2
1 0.8 0.6 b 0.4 0.2 0
0
0.2
0.4
0.6
0.8
1
a
Helposti on todettavissa, ett¨a S todella on puolirengas (harjoituksena). Rajoittumalla vain alkioihin 0 ja 1 t¨ast¨a syntyy Boolen puolirengas B. Jokaiselle sanalle w luku κ(w) antaa er¨a¨anlaisen kuulumisasteen”, jolla sana kuuluu ” kieleen. S-tunnistuvan formaalin potenssisarjan matriisiesitys puolestaan antaa vastaavan sumean automaatin, jonka toiminta muistuttaa eo. stokastista automaattia. 7
Itse asiassa jokaisesta moniarvologiikan m¨a¨aritt¨am¨ast¨a ns. MV-algebrasta saa useita sellaisia.
KIRJALLISUUS 1. Berstel, J. & Perrin, D. & Reutenauer, C.: Codes and Automata. Cambridge University Press (2008) 2. Berstel, J. & Reutenauer, C.: Noncommutative Rational Series with Applications (2008) (Saatavana verkossa) 3. Harrison, M.A.: Introduction to Formal Language Theory. Addison–Wesley (1978) 4. Hopcroft, J.E. & Ullman, J.D.: Introduction to Automata Theory, Languages, and Computation. Addison–Wesley (1979) 5. Hopcroft, J.E. & Motwani, R. & Ullman, J.D.: Introduction to Automata Theory, Languages, and Computation. Addison–Wesley (2006) 6. Kuich, W. & Salomaa, A.: Semirings, Automata, Languages. Springer–Verlag (1986) 7. Lewis, H.R. & Papadimitriou, C.H.: Elements of the Theory of Computation. Prentice–Hall (1998) 8. Martin, J.C.: Introduction to Languages and the Theory of Computation. McGraw– Hill (2002) 9. McEliece, R.J.: The Theory of Information and Coding. Cambridge University Press (2004) 10. Meduna, A.: Automata and Languages. Theory and Applications. Springer–Verlag (2000) 11. Nielsen, M.A. & Chuang, I.L.: Quantum Computation and Quantum Information.Cambridge University Press (2000) 12. Rozenberg, G. & Salomaa, A. (toim.): Handbook of Formal Languages. Vol. 1. Word, Language, Grammar. Springer–Verlag (1997) 13. Salomaa, A.: Formal Languages. Academic Press (1973) 14. Salomaa, A.: Jewels of Formal Language Theory. Computer Science Press (1981) 15. Salomaa, A. & Soittola, M.: Automata-Theoretic Aspects of Formal Power Series. Springer–Verlag (1978) 16. Shallit, J.: A Second Course in Formal Languages and Automata Theory. Cambridge University Press (2008) 86
87 17. Simovici, D.A. & Tenney, R.L.: Theory of Formal Languages with Applications. World Scientific (1999) 18. Sipser, M.: Introduction to the Theory of Computation. Course Technology (2005)
88
Hakemisto 0L-systeemi 65 aakkosto 1 aikaluokka 51 aksiooma 18,19,65,67 algebrallinen potenssisarja 73 algoritminen ratkeamattomuus 38,48 alikoodi 53 alkutila 5,10,30,40,83 analyyttinen kielioppi 19 blanko 48 Boolen puolirengas 70 bottom-up-j¨ asennys 34 Cauchyn potenssi 71 Cauchyn tulo 69 CE-kieli 20,48,68 CF-kieli 20,24,66 CF-kielioppi 19,22,24 Chomskyn hierarkia 20,21,51 Chomskyn normaalimuoto 28,31,35,36 co–CE-kieli 22 CS-kieli 20,42,43,44,66,68 CS-kielioppi 19 D0L-systeemi 65 DCF-ekvivalenssiprobleema 38 DCF-kieli 33,36,38 DCS-kieli 44,68 dekoodaus 53 determinisitinen LBA 44,48 deterministinen CF-kieli 33 deterministinen CS-kieli 44 deterministinen pinoautomaatti 33 deterministinen Turingin kone 48 DFA 5 DIL-systeemi 68 DPDA 33 DTM 48 E0L-systeemi 66 EIL-systeemi 68 ekvivalenssiprobleema 15,39,47,51 entropia 60 ep¨adeterministinen ¨ a¨ arellinen automaatti 10 ep¨adeterministisyys 10 ep¨alineaarinen kielioppi 19 Earleyn algoritmi 37 erottaminen 8,13 formaali polynomi 71 formaali potenssisarja 71 generatiivinen kielioppi 19 generointi 19 Greibachin normaalimuoto 29,31,32,40
GSM 16,59 Hadamardin tulo 69,79,82 harva osasana 2 Hermanin kieli 66 Huffmanin algoritmi 62 Huffmanin puu 63 hylk¨aa¨minen 5 hyv¨aksyminen 5,10,30,41 IL-systeemi 67 Immerman–Szelepcs´enyi-lause 46 indeksi 13,14 indikaattorisumma 56 johto 17 jonokone 15,84 j¨asennys 24,34 j¨asennysalgoritmi 34 j¨asennyspuu 24,28,35 j¨asenyysprobleema 15,22,37,47 karakteristinen funktio 69 katenaatio 1,2 katenatiivisesti riippumaton 53 keskipituus 60 kieli 2 kielioppi 18,19 kirjain 1 Kleenen algoritmi 7 Kleenen lause 7,12,56,78 konfiguraatio 30,41 koodi 53 Kraftin lause 57,59 Kroneckerin tulo 79 Kurodan normaalimuoto 44 kvanttiautomaatti 83 kvanttikieli 84 kvasi-inverssi 72 kvasis¨a¨ann¨ollinen 72 kyselysysteemi 63 Λ-NFA 11,30,56 Λ-siirto 11,31,32,33,40 laskettava kieli 22 laskettavasti nmeroituva kieli 20 LBA 40,48 leikkauksen tyhjyysprobleema 39 Lindenmayerin systeemi 65 lineaarinen kieli 22 lineaarinen kielioppi 19,20 lineaarisesti rajoitettu automaatti 40,48 LL(k)-kielioppi 34 loppusana 2 loppusymboli 18,19
89 lopputila 5,30,41 LR(k)-kielioppi 34 L-systeemi 65 luontaisesti moniselitteinen CF-kieli 26 l¨aht¨osana 18 l¨avist¨aj¨amenetelm¨ a 2,45 maksimaalinen koodi 58 Markov–McMillan-lause 56,59 Markovin normaalialgoritmi 18 matriisiesitys 75 minimaalinen ¨ a¨ arellinen automaatti 13 minimointi 9,13 mittaus 84 moniselitteinen kielioppi 26 monomi 71 morfismi 16,38,47,56 multiautomaatti 80 multikieli 80 multiplisiteetti 81 Myhill–Nerode-lause 14 nauha 41 nauha-aakkosto 40 neli¨o 9 NFA 10 nolla-alkio 70 nonterminaali 18,19 N P 52 N P-t¨aydellinen kieli 52 Ogdenin lemma 36 oikealta lineaarinen kielioppi 20 optimikoodi 60 osam¨a¨ar¨a 3 osasana 2 P 52 P0L-systeemi 65 palindromi 9 palindromikieli 9,20 PCP 38 PDA 29 peilikuva 2,3 Penttosen normaalimuoto 45 pino 30 pinoaakkosto 30 pinoautomaatti 29,40 pinomuisti 29,40 pituus 1,17 pituusfunktio 83 pituutta kasvatta kielioppi 19,22,27,44,65 pohjasymboli 30 pop-siirto 33 Postin vastaavuusprobleema 38,47,56 potenssi 1,2
alkusana 2 prefiksi 2,57 prefiksikoodi 57,59 prefiksipuu 58 produktio 17,19,65,67 projektio 84 propagoiva 65 Pumppauslemma 9,35,37,39 puoli-Thue-systeemi 17 puolirengas 69 push-siirto 33 pys¨ahtymisprobleema 38,50 rajoitetun viipeen koodi 59 rationaalinen operaatio 73 rationaalinen potenssisarja 73 ratkeavuus 15,37 refleksiivis-transitiivinen sulkeuma 17 reunamerkki 40 reversiibeli Turingin kone 51 Ricen lause 50 rinnakkainen uudelleenkirjoitussysteemi 65 RTM 51 RWS 17 sana 1 Sardinas–Patterson-algoritmi 54 Sch¨ utzenberger’n esityslause 78 Sch¨ utzenberger’n kriteeri 53 sekventiaalinen uudelleenkirjoitussysteemi 65 seuraaja 30 Shannonin koodauslause 60 siirto-tulostusfunktio 16 siirtofunktio 5,10,30,41,80 sis¨altymisprobleema 15 SM 15 stokastinen matriisi 81 stokastinen vektori 81 stokastinen ¨a¨arellinen automaatti 81 suffiksi 2 suffiksikoodi 58 sumea automaatti 85 sumea kieli 85 suora seuraaja 30,41 symboli 1 sy¨ote 5 sy¨otesymboli 5 s¨a¨ann¨ollinen kieli 4,20,39,83 s¨a¨ann¨ollinen lauseke 4 s¨a¨ann¨ollisyysprobleema 49,47,51 terminaali 18.19 Thuen systeemi 17 tila 5,29,40,84 tiladiagrammi 6
90 tilansiirtomatriisi 83 tilasiirtoketju 5 TM 48 todenn¨ak¨oisyystulkinta 84 top-down-j¨ asennys 34 transduktio 16 transduktori 16,33 tulostusfunktio 15 tunnistaminen 5,10,18,30,40 tunnistuva 75,79 tuottaminen 17 Turakaisen lause 83 Turingin kone 38,48 tyhjyysprobleema 15,37,51 tyhj¨a sana 1 Tyyppi 0 20 Tyyppi 1 20 Tyyppi 2 20 Tyyppi 3 20 unit-siirto 33 universaali Turingin kone 49 universaalisuusprobleema 39,47,51 uudelleenkirjoitusj¨ arjestelm¨ a 17 uvw-lemma 9 uvwxy-lemma 35 vasemmalta lineaarinen kielioppi 20 vasen johto 26 vasta¨a¨arellinen kieli 2 v¨alisymboli 18,19 yhteydellinen kielioppi 19 yhteydellinen L-systeemi 67 yhteydet¨on kielioppi 19 yhteydet¨on L-systeemi 65 ykk¨osalkio 70 yksikk¨oproduktio 28 yksiselitteinen kielioppi 26,39 yksiselitteisyysprobleema 39 yleistetty jonokone 16 ¨a¨arellinen automaatti 5,18,80 a¨a¨rellinen kieli 2 ¨a¨arellinen sijoitus 16 ¨a¨arellisyysprobleema 15,38,47,51