Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen

Samankaltaiset tiedostot
Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Säännöllisten kielten sulkeumaominaisuudet

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

Kertausta 1. kurssikokeeseen

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi

Laskennan mallit. luennot syksyllä 2018, periodi I Jyrki Kivinen. tietojenkäsittelytieteen aineopintokurssi, pääaineopiskelijoille pakollinen

Laskennan mallit

Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)).

Laskennan mallit

Laskennan mallit

Yhteydettömän kieliopin jäsennysongelma

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Laskennan mallit

Laskennan mallit

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin

Automaatit. Muodolliset kielet

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Turingin koneen laajennuksia

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.

Rekursiivinen Derives on periaatteessa aivan toimiva algoritmi, mutta erittäin tehoton. Jos tarkastellaan esim. kieliopinpätkää

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013

Säännöllisten operaattoreiden täydentäviä muistiinpanoja

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

Äärellisten automaattien ja säännöllisten lausekkeiden minimointi

Formalisoimme nyt edellä kuvatun laskennan.

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

DFA:n käyttäytyminen ja säännölliset kielet

Pinoautomaatit. Pois kontekstittomuudesta

uv n, v 1, ja uv i w A kaikilla

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja

Rajoittamattomat kieliopit

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

Algoritmin määritelmä [Sipser luku 3.3]

Laskennan mallit

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Ei-yhteydettömät kielet [Sipser luku 2.3]

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

Osoitamme, että jotkut kielet eivät ole säännöllisiä eli niitä ei voi tunnistaa äärellisellä automaatilla.

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Esimerkki 2.28: Tarkastellaan edellisen sivun ehdot (1) (3) toteuttavaa pinoautomaattia, jossa päätemerkit ovat a, b ja c ja pinoaakkoset d, e ja $:

Rekursiiviset palautukset [HMU 9.3.1]

Chomskyn hierarkia ja yhteysherkät kieliopit

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

1. Universaaleja laskennan malleja

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

ÄÄRELLISTEN AUTOMAATTIEN MINIMOINTI. 1. Äärelliset automaatit Äärellinen automaatti (DFA = deterministic finite automaton) on

3. Turingin koneet. osaa esittää yksinkertaisia algoritmeja täsmällisesti käyttäen Turingin konetta ja sen muunnelmia

Laskennan mallit

1. Universaaleja laskennan malleja

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

5.3 Ratkeavia ongelmia

8. Kieliopit ja kielet

ICS-C2000 Tietojenkäsittelyteoria. Tähän mennessä: säännölliset kielet. Säännöllisten kielten pumppauslemma M :=

Säännöllisen kielen tunnistavat Turingin koneet

ICS-C2000 Tietojenkäsittelyteoria

Lisää pysähtymisaiheisia ongelmia

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

Täydentäviä muistiinpanoja laskennan rajoista

S BAB ABA A aas bba B bbs c

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

Rajoittamattomat kieliopit (Unrestricted Grammars)

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

Laskennan rajoja. Sisällys. Meta. Palataan torstaihin. Ratkeavuus. Meta. Universaalikoneet. Palataan torstaihin. Ratkeavuus.

Yhteydettömät kieliopit [Sipser luku 2.1]

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Muodolliset kieliopit

2. Laskettavuusteoriaa

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

Luonnolliset vs. muodolliset kielet

4. Tehtävässä halutaan todistaa seuraava ongelma ratkeamattomaksi:

Injektio (1/3) Funktio f on injektio, joss. f (x 1 ) = f (x 2 ) x 1 = x 2 x 1, x 2 D(f )

Tietojenkäsittelyteorian alkeet, osa 2

Täydentäviä muistiinpanoja epädeterministisistä äärellisistä automaateista

ongelma A voidaan ratkaista ongelman B avulla, joten jossain mielessä

Tehtävä 2: Säännölliset lausekkeet

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

Olkoon G = (V,Σ,P,S) yhteydetön kielioppi. Välike A V Σ on tyhjentyvä, jos A. NULL := {A V Σ A ε on G:n produktio};

811120P Diskreetit rakenteet

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

Transkriptio:

Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen suhteen, eli jos kielet A ja B ovat säännöllisiä, niin myös A B on. Tätä voi havainnollistaa seuraavalla kuvalla: P(Σ ) Säännölliset kielet A B A B Tätä ei pidä sekoittaa edellisen kalvon kuvaan. Tärkeimmät erot ovat: Kaavion pisteet ovat kieliä (eivät merkkijonoja). Alueet ovat kieliluokkia (eivät yksittäisiä kieliä). Koko laatikko on kaikkien kielten (ei merkkijonojen) joukko. (P(X) on joukon X potenssijoukko eli kaikkien osajoukkojen joukko.) 57

Jatkossa osoitetaan myös Lause 1.2: [Sipser Thm. 1.26] Säännöllisten kielten joukko on suljettu konkatenaation suhteen; ts. jos kielet A ja B ovat säännöllisiä, niin myös A B on. Todistaminen on kuitenkin edellistä lausetta hankalampaa. Oletaan A = L(M 1 ) ja B = L(M 2 ), ja halutaan muodostaa M, jolla L(M) = A B. Luonnollinen ajatus olisi pistää automaatit M 1 ja M 2 peräkkäin. Tässä tulee ongelmaksi, milloin pitäisi siirtyä automaatista M 1 automaattiin M 2. Erityisesti jollain w A B voi olla kaksi esitystä w = uv = u v, missä u A ja u A, ja v B mutta v B. Jos tässä vielä u on merkkijonon u alkuosa (eli u = u x jollain x), niin emme voi ilman muuta siirtyä automaattiin M 2 heti, kun M 1 pääsee hyväksyvään tilaan. 58

Esimerkki. Tarkastellaan aakkoston {, 1 } kieliä A = { v1 v {, 1 } } B = { 1w w {, 1 } } jotka sisältävät 1-loppuiset (A) ja 1-alkuiset (B) merkkijonot. Vastaavat automaatit ovat 1, 1 1 A B C 1 a b c 1 1 d, 1 A:n ja B:n konkatenaatio on selvästi kieli A B = { v11w v, w {, 1 } } eli merkkijonon 11 osajononaan sisältävät merkkijonot. 59

A B:n tunnistaminen vaihtamalla automaatista toiseen ei toimi: Syötteellä 11 oikea hetki vaihtaa on alkuosan 1 jälkeen. Syötteellä 11111 taas sama vaihtohetki olisi virhe ja johtaisi väärään hylkäykseen. Oikeaa vaihtohetkeä ei tiedetä siinä vaiheessa, kun vaihto pitäisi tehdä. Kielen A B tunnistava automaatti 1, 1 1 A B C/a 1 b 1 c muistuttaa toki peräkkäin asetettuja alkuperäisiä automaatteja mutta erojakin on. Yleisen säännön antaminen konkatenaatioautomaatin muodostamiselle tätä kautta on hankalaa. Pääsemme paljon helpommalla, kun yleistämme äärellistä automaattia sallimalla epädeterminismin. 6

Epädeterministiset äärelliset automaatit [Sipser s. 47 54] Tarkastellaan esimerkkinä seuraavaa automaattia: a, b b a, ε 1 2 3 Tämä ei noudata edellä esitettyä formalismia: tilasta pääsee merkillä b sekä tilaan että tilaan 1, tilasta 1 on ε-siirtymä, jolla pääsee tilaan 2 käyttämättä yhtään syötemerkkiä ja joitain siirtymiä ei ole määritelty. Aiottu tulkinta on, että annetulla syötteellä kokeillaan kaikkia mahdollisia siirtymävaihtoehtoja. Automaatti hyväksyy, jos yksikin näistä vaihtoehdoista päätyy hyväksyvään tilaan. b a 61

Tällaisen automaatin laskentaa voidaan havainnollistaa ryhmittämällä vaihtoehdot puuksi: esimerkkinä syöte abbab vaakanuolet kuvaavat ε-siirtymiä viimeisellä rivillä esiintyy (kahteenkin kertaan) hyväksyvä tila 3, joten automaatti hyväksyy merkkijonon abbab merkkijonon abba automaatti hylkää, koska puun syvyydellä 4 ei ole yhtään hyväksyvää tilaa a b b a b 1 1 1 2 2 3 2 2 2 3 3 62

Kutsumme tällaista yleisempää automaattia epädeterministiseksi äärelliseksi automaatiksi (nondeterministic finite automaton, NFA). Aluksi esitetty perusversio on vastaavasti deterministinen äärellinen automaatti (deterministic finite automaton, DFA). NFA:lle ei ole samalla lailla ilmeistä fyysistä toteutusmallia kuin DFA:lle. Se kannattaa mieltää lähinnä kuvausformalismiksi. Näemme jatkossa, että mille tahansa NFA:lle voidaan muodostaa DFA, joka tunnistaa saman kielen. Siis epädeterminismi ei anna tässä mielessä lisää ilmaisuvoimaa. Epädeterminismiä käyttämällä esitystä voidaan kuitenkin usein selkeyttää ja yksinkertaistaa. 63

Esimerkki. Kielet A = { v1 v {, 1 } } ja B = { 1w w {, 1 } } tunnistavat NFA:t ovat yksinkertaisempia kuin aiemmin nähdyt DFA:t, 1, 1 1 A B C 1 a b c ja konkatenaation A B = { v11w v, w {, 1 } } tunnistava NFA saadaan helposti yhdistämällä automaatit ε-siirtymällä:, 1, 1 1 A B C ε 1 a b c Myöhemmin nähdään, että yleinen tapaus yhtä yksinkertainen. 64

Mille tahansa aakkostolle Σ merkitsemme Σ ε = Σ { ε }. Muistetaan, että joukon A potenssijoukkoa eli kaikkien osajoukkojen joukkoa merkitään P(A). Muodollisesti NFA on viisikko (Q, Σ, δ, q, F ), missä 1. Q on äärellinen tilajoukko, 2. Σ on äärellinen aakkosto, 3. δ : Q Σ ε P(Q) on siirtymäfunktio, 4. q Q on alkutila ja 5. F Q on hyväksyvien tilojen joukko. Erotukseksi DFA:sta siirtymäfunktio siis antaa yhden seuraajatilan sijaan joukon tiloja. Nämä tulkitaan mahdollisiksi seuraajatiloiksi. 65

Esimerkkiautomaattimme a, b b a, ε 1 2 3 formaali esitys on siis ({, 1, 2, 3 }, { a, b }, δ,, { 3 }), missä δ saadaan taulukosta δ a b ε { } {, 1 } 1 { 2 } { 2 } 2 { 3 } 3 { 2 } b a 66

Määrittelemme nyt, että epädeterministinen äärellinen automaatti (Q, Σ, δ, q, F ) hyväksyy merkkijonon w, jos jollain n voidaan valita jonot (y 1,..., y n ) Σ n ε ja (r,..., r n ) Q n+1, joilla w = y 1... y n, r = q, r i+1 δ(r i, y i+1 ) kun i =,..., n 1 ja r n F. Edellisen sivun automaatilla ja merkkijonolla abbab voidaan valita esim. n = 6 (y 1, y 2, y 3, y 4, y 5, y 6 ) = (a, b, ε, b, a, b) (r, r 1, r 2, r 3, r 4, r 5, r 6 ) = (,, 1, 2, 3, 2, 3), mistä nähdään, että automaatti hyväksyy merkkijonon. 67

Determinismi vs. epädeterminismi Deterministisessä automaatissa siirtymä δ(q, a) = r tarkoittaa, että tilasta q syötteellä a mennään aina tilaan r. Epädeterministisessä automaatissa siirtymä r δ(q, a) tarkoittaa, että tilasta q syötteellä a eräs mahdollisuus on mennä tilaan r. Epädeterministinen automaatti hyväksyy, jos on mahdollista päätyä hyväksyvään tilaan. Huomaa epäsymmetria: jos jollain syötteellä voi päätyä sekä hyväksyvään että ei-hyväksyvään tilaan, niin syöte hyväksytään. Epädeterminismi voidaan mieltää korkean tason kontrollirakenteeksi. Jos DFA-formalismia ajatellaan primitiivisenä ohjelmointikielenä, niin NFA-formalismi on sama kieli laajennettuna operaatiolla kokeile kaikki vaihtoehdot. Seuraavaksi tarkastelemme, miten tämä kontrollirakenne voidaan toteuttaa. 68

Lähtökohtana on NFA:n simuloiminen. Simulaation ideana on laskentapuun (ks. sivu 61) läpikäynti leveyssuuntaisesti (taso kerrallaan). Algoritmi pitää muuttujassa CurrentStates listaa niistä tiloista, joissa se tällä hetkellä voisi olla (laskentapuun taso). Kullakin aika-askelella CurrentStates päivitetään: 1. haetaan saatua syötemerkkiä vastaavat seuraajatilat ja 2. lisätään mahdolliset ε-siirtymät. Kun R Q on joukko tiloja, olkoon E(R) niiden tilojen joukko, joihin päästään jostain joukon R tilasta suorittamalla tai useampia ε-siirtymiä: q E(R) on olemassa k N ja tilat r, r 1,..., r k Q joilla r R, r k = q ja r i δ(r i 1, ε) kun i = 1,..., k. Siis erityisesti aina R E(R). 69

Saadaan seuraava algoritmi: SimulateNFA(Q, Σ, δ, q, F ) CurrentStates E({ q }) while syötettä riittää do lue seuraava syötemerkki a NextStates for q CurrentStates do NextStates NextStates δ(q, a) CurrentStates E(NextStates) if CurrentStates F then return accept else return reject 7

Algoritmi SimulateNFA osoittaa, miten epädeterminismi voidaan implementoida tulkkaamalla. Algoritmi antaa myös idean, miten epädeterminismi voidaan implementoida kääntämällä : annetusta NFA:sta voidaan muodostaa DFA, joka tunnistaa saman kielen. (DFA:ta ei enää tarvitse kääntää mihinkään, sen toteutus laitteistotasolla on ilmeinen.) Havainto: muuttujan CurrentStates arvot kuuluvat potenssijoukkoon P(Q) muuttujalla CurrentStates on korkeintaan 2 Q mahdollista arvoa algoritmin vaatima muistitila on äärellinen DFA-toteutus on mahdollinen. 71

Esitämme muunnoksen täsmällisemmin: Lause 1.3: [Sipser Thm. 1.39] Mille tahansa NFA:lle on olemassa DFA, joka tunnistaa saman kielen. Todistus: On siis annettu NFA N = (Q, Σ, δ, q, F ), ja halutaan muodostaa DFA M = (Q, Σ, δ, q, F ), jolla L(M) = L(N). Edellä esitetyn mukaisesti idea on, että yksi DFA:n tila esittää joukkoa NFA:n tiloja. Siis valitsemme Q = P(Q). Automaatin M tila annetulla hetkellä tulkitaan automaatin N mahdollisten tilojen joukoksi. Huomaa, että Q = 2 Q. Jos r Q on mahdollinen tila nykyhetkellä, seuraavaksi luetaan merkki a, ja s δ(r, a), niin s on eräs mahdollinen tila seuraavalla hetkellä. Siis jos δ (R, a) = S (missä siis R, S Q), niin joukossa S pitää olla kaikki ne tilat, jotka voivat seurata jotain joukon R tilaa merkillä a. 72

Esitetään sama formaalisti olettaen ensin, että automaatissa N ei ole ε-siirtymiä (eli δ(r, ε) = kaikilla r Q). Siis M = (Q, Σ, δ, q, F ), missä 1. Q = P(Q), 2. jos R Q (eli R Q) ja a Σ, niin δ (R, a) = r R δ(r, a) = { s Q s δ(r, a) jollain r R, } 3. q = { q } ja 4. F = { R Q R F }. 73

Sallitaan nyt automaatissa N myös ε-siirtymät. Kuten edellä, joukko E(R) koostuu niistä tiloista, joihin pääsee jostain tilasta r R tekemällä nolla tai useampia ε-siirtymiä. Siirtymäfunktion määritelmä muutetaan muotoon ( ) δ (R, a) = E δ(r, a). Alkutilaksi asetetaan r R q = E({ q }). Konstruktion perusteella on selvää, että L(M) = L(N). Käänteinen suunta eli DFA:n muuntaminen NFA:ksi on triviaali. Siis DFA:t ja NFA:t ovat yhtä ilmaisuvoimaisia: Korollaari 1.4: [Sipser Cor. 1.4] Kieli on säännöllinen, jos ja vain jos se voidaan tunnistaa epädeterministisellä äärellisellä automaatilla. 74

Esimerkki 1.5: Muodostetaan DFA, joka vastaa seuraavaa NFA:ta: a ε c 1 1, ε b d Koska DFA:n alkutila on a, NFA:n alkutilaksi tulee E({ a }) = { a, c, d }. DFA:n tiloja ovat periaatteessa kaikki joukon { a, b, c, d } osajoukot, joita on 2 4 = 16 kappaletta. Meidän ei kuitenkaan kannata välittää tiloista, joihin ei koskaan päästä alkutilasta. Ruvetaan siis purkamaan siirtymäfunktiota alkutilasta alkaen (seur. sivu). 75

δ ({ a, c, d }, ) = E(δ(a, ) δ(c, ) δ(d, )) = E({ a, b } { c } ) = { a, b, c, d } δ ({ a, c, d }, 1) = E(δ(a, 1) δ(c, 1) δ(d, 1)) = E( { d } ) = { d } δ ({ a, b, c, d }, ) = E(δ(a, ) δ(b, ) δ(c, ) δ(d, )) = E({ a, b } { c } ) = { a, b, c, d } δ ({ a, b, c, d }, 1) = E(δ(a, 1) δ(b, 1) δ(c, 1) δ(d, 1)) = E( { c } { d } ) = { c, d } δ ({ c, d }, ) = E(δ(c, ) δ(d, )) = E({ c } ) = { c, d } δ ({ c, d }, 1) = E(δ(c, 1) δ(d, 1)) = E({ d } ) = { d } δ ({ d }, ) = E(δ(d, )) = E( ) = δ ({ d }, 1) = E(δ(d, 1)) = E( ) = Voidaan lopettaa, koska uusia tiloja ei enää löydy. (Määritelmistä seuraa, että aina δ (, a) =.) 76

DFA:n hyväksyviä tiloja ovat kaikki, jotka sisältävät NFA:n hyväksyvän tilan d, eli tässä tapauksessa kaikki muut kuin. 1 { a, c, d } { a, b, c, d } { c, d } 1 1, 1 { d }, 1 77

Epädeterminismin sovelluksia Näemme pian, että epädeterminismi yksinkertaistaa huomattavasti monia automaattikonstruktioita. Sillä on käyttöä tietojenkäsittelytieteessä laajemminkin, esim. Rinnakkaisjärjestelmät: Asynkronisessa laskennassa eri prosessorien suoritusjärjestys ei ole kontrolloitavissa. Ajattelemme siis, että suoritusjärjestys määräytyy epädeterministisesti ja vaadimme esim. että järjestelmä ei saa lukkiutua millään suoritusjärjestyksellä. Laskennan vaativuus: Monille tärkeille etsintä- ja optimointiongelmille on helppo esittää epädeterministinen ratkaisu, mutta epädeterminismin tehokas simuloiminen deterministisellä (=oikealla) tietokoneella on avoin ongelma. Vrt. edellä: NFA:n muuntaminen DFA:ksi saattaa aiheuttaa tilojen lukumäärän eksponentiaalisen kasvun. 78

Säännöllisten kielten sulkeumaominaisuudet [Sipser s. 58 63] Osoitamme nyt, että säännöllisten kielten joukko on suljettu yhdisteen, konkatenaation ja tähtioperaation suhteen. Toisin sanoen jos A ja B ovat säännöllisiä, niin myös A B, A B ja A ovat. Kieli on määritelmän mukaan säännöllinen, jos se voidaan tunnistaa deterministisellä äärellisellä automaatilla. Todistimme juuri (korollaari 1.4), että voimme yhtä hyvin käyttää epädeterministisiä automaatteja. Katsotaan ensin, miten tämä yksinkertaistaa jo esitetyn tapauksen A B (lause 1.1) todistusta. Lause 1.6: [Sipser Thm. 1.45] Jos A ja B ovat säännöllisiä, myös A B on. Todistus: Oletetaan siis annetuksi NFA:t N 1 ja N 2, joilla A = L(N 1 ) ja B = L(N 2 ). Muodostetaan NFA N, jolla L(N) = A B. 79

Konstruktion periaate on seuraava: ε N 1 ε N 2 N 8

Muodollisemmin olkoon N 1 = (Q 1, Σ, δ 1, q 1, F 1 ) ja N 2 = (Q 2, Σ, δ 2, q 2, F 2 ). Voidaan tietysti olettaa, että Q 1 Q 2 =. Nyt N = (Q, Σ, δ, q, F ), missä 1. q Q 1 Q 2 on uusi tila 2. Q = { q } Q 1 Q 2 3. δ toteuttaa δ(q, a) = δ 1 (q, a) kun q Q 1 ja a Σ ε δ(q, a) = δ 2 (q, a) kun q Q 2 ja a Σ ε δ(q, ε) = { q 1, q 2 } δ(q, b) = kun b ε 4. F = F 1 F 2. Selvästi N tunnistaa kielen A B. 81

Sovelletaan samaa ideaa konkatenaatioon. Lause 1.7: [Sipser Thm. 1.47] Jos A ja B ovat säännöllisiä, myös A B on. Todistus: Periaatepiirros on nyt seuraava: N 1 N 2 ε ε N 82

Muodollisesti olkoon taas A = L(N 1 ) ja B = L(N 2 ), missä N 1 = (Q 1, Σ, δ 1, q 1, F 1 ), N 2 = (Q 2, Σ, δ 2, q 2, F 2 ) ja Q 1 Q 2 =. Muodostetaan N = (Q, Σ, δ, q, F ), missä 1. Q = Q 1 Q 2, 2. q = q 1, 3. F = F 2 ja 4. kun q Q ja a Σ ε, niin δ(q, a) on seuraava: Selvästi L(N) = A B. δ(q, a) = δ 1 (q, a) kun q Q 1 F 1 δ(q, a) = δ 1 (q, a) kun q F 1 ja a ε δ(q, ε) = δ 1 (q, ε) { q 2 } kun q F 1 δ(q, a) = δ 2 (q, a) kun q Q 2. 83

Vielä viimeiseksi tähtioperaatio: Lause 1.8: [Sipser Thm 1.49] Jos A on säännöllinen, niin A on myös. Todistus: Oletetaan taas A = L(N 1 ), ja muodostetaan N jolla L(N) = A. Periaate: ε ε N 1 N ε (Huomaa, että alkutilan vaihtaminen hyväksyväksi ei välttämättä toimisi.) 84

Olkoon siis N 1 = (Q 1, Σ, δ 1, q 1, F 1 ). Nyt N = (Q, Σ, δ, q, F ), missä 1. q Q 1 on uusi tila, 2. Q = Q 1 { q }, 3. F = F 1 { q } ja 4. δ määritellään δ(q, ε) = { q 1 } δ(q, a) = kun a ε δ(q, a) = δ 1 (q, a) kun q Q 1 F 1 δ(q, a) = δ 1 (q, a) kun q F 1 ja a ε δ(q, ε) = δ 1 (q, ε) { q 1 } kun q F 1. Selvästi L(N) = A. 85

Säännölliset lausekkeet [Sipser luku 1.3] Kiinnitetään jokin aakkosto Σ. Säännöllinen lauseke on kaava, jonka arvona on jokin aakkoston Σ kieli. Kun R on säännöllinen lauseke, sen arvoa eli sen esittämää kieltä merkitään L(R). Perusajatuksena on muodostaa uusia kieliä edellä esitettyjen operaatioiden, ja avulla. Esimerkki Säännöllisen lausekkeen a(b c) esittämään kieleen kuuluvat ne merkkijonot, joiden alussa on a ja sen jälkeen nolla tai useampia b- ja c-merkkejä. Siis L(a(b c) ) = { a } ({ b, c }) = { a, ab, ac, abb, abc, acb, acc, abbb,... }. Osoitamme jatkossa, että tälla tavoin voidaan esittää (tai kuvata) tasan ne kielet, jotka voidaan tunnistaa äärellisellä automaatilla, eli säännölliset kielet (mistä nimi). 86

Määrittelemme säännölliset lausekkeet seuraavasti: 1. ja ε ovat säännöllisiä lausekkeita, ja L( ) = ja L(ε) = { ε }. 2. a on säännöllinen lauseke kaikilla a Σ, ja L(a) = { a }. 3. Jos R 1 ja R 2 ovat säännöllisiä lausekkeita, niin myös (R 1 R 2 ) ja (R 1 R 2 ) ovat, ja L((R 1 R 2 )) = L(R 1 ) L(R 2 ) ja L((R 1 R 2 )) = L(R 1 ) L(R 2 ). 4. Jos R on säännöllinen lauseke, niin myös (R ) on, ja L((R )) = (L(R)) ; ja 5. ei ole muita säännöllisiä lausekkeita, kuin mitä edelläolevasta seuraa. Siis säännöllinen lauseke muodostetaan lähtemällä liikkeelle peruslausekkeista, ε ja a, a Σ, ja soveltamalla yhdistettä, konkatenaatiota ja tähteä äärellinen määrä kertoja. 87

Yksinkertaistamme säännöllisten lausekkeiden kirjoitusasua seuraavilla konventioilla: Konkatenaatio jätetään merkitsemättä; esim. a b a kirjoitetaan aba. Operaatiot evaluoidaan presedenssijärjestyksessä tähti, konkatenaatio, yhdiste ja turhat sulut jätetään pois. Siis a bc tarkoittaa (a (b (c ))). Jos Σ = { a 1,..., a k }, niin lauseketta a 1... a k merkitään lyhyesti Σ. Lausekkeen R konkatenaatiota itsensä kanssa k kertaa merkitään R k. R... R }{{} k kertaa Lauseke RR lyhennetään R + ; siis R = ε R +. 88