Laskennan perusmallit (LAP)



Samankaltaiset tiedostot
ICS-C2000 Tietojenkäsittelyteoria Kevät 2015

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 5 Demonstraatiotehtävien ratkaisut. ja kaikki a Σ ovat säännöllisiä lausekkeita.

Laskennan perusmallit (LAP)

Q = {q 1, q 2, q 3, q 4 } Σ = {a, b} F = {q 4 },

2.6 SÄÄNNÖLLISET LAUSEKKEET Automaattimalleista poikkeava tapa kuvata yksinkertaisia kieliä. Olkoot A ja B aakkoston Σ kieliä. Perusoperaatioita:

Automaattimalleista poikkeava tapa kuvata yksinkertaisia kieliä. Olkoot A ja B aakkoston Σ kieliä. Perusoperaatioita:

Riemannin integraalista

Olkoon. M = (Q, Σ, δ, q 0, F)

3.3 KIELIOPPIEN JÄSENNYSONGELMA Ratkaistava tehtävä: Annettu yhteydetön kielioppi G ja merkkijono x. Onko

Olkoon. äärellinen automaatti. Laajennetaan M:n siirtymäfunktio yksittäisistä syötemerkeistä merkkijonoihin: jos q Q, x Σ, merkitään

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

2.2 Automaattien minimointi

Laskennan mallit (syksy 2010) 1. kurssikoe, ratkaisuja

Automaatin tunnistama kieli on sen hyväksymien merkkijonojen joukko. Täsmällinen muotoilu: δ,q 0,{q 2,q 3,q 6 }), missä

6.2 Algoritmin määritelmä

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

Q on automaatin tilojen äärellinen joukko; Σ on automaatin syöteaakkosto; δ : Q Σ Q on automaatin siirtymäfunktio; q 0 Q on automaatin alkutila;

Esimerkki 8.1 Määritellään operaattori A = x + d/dx. Laske Af, kun f = asin(bx). Tässä a ja b ovat vakioita.

OSA 1: POLYNOMILASKENNAN KERTAUSTA, BINOMIN LASKUSÄÄNTÖJÄ JA YHTÄLÖNRATKAISUA

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Matematiikan tukikurssi

Kuvausta f sanotaan tällöin isomorfismiksi.

Syksyn 2015 Pitkän matematiikan YO-kokeen TI-Nspire CAS -ratkaisut

Laskennan mallit Erilliskoe , ratkaisuja (Jyrki Kivinen)

Laskennan mallit (syksy 2007) Harjoitus 5, ratkaisuja

Laskennan perusmallit 2013: Kertausta

Pythagoraan lause. Pythagoras Samoslainen. Pythagoraan lause

Kognitiivinen mallintaminen I, kevät Harjoitus 1. Joukko-oppia. MMIL, luvut 1-3 Ratkaisuehdotuksia, MP

Kieli, merkitys ja logiikka, kevät 2011 HY, Kognitiotiede. Vastaukset 2.

II.1. Suppeneminen., kun x > 0. Tavallinen lasku

Ristitulo ja skalaarikolmitulo

Riemannin integraalista

10. MÄÄRÄTYN INTEGRAALIN KÄYTTÖ ERÄIDEN PINTA-ALOJEN LASKEMISESSA

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Numeeriset menetelmät TIEA381. Luento 9. Kirsi Valjus. Jyväskylän yliopisto. Luento 9 () Numeeriset menetelmät / 29

3 Mallipohjainen testaus ja samoilutestaus

LINSSI- JA PEILITYÖ TEORIAA. I Geometrisen optiikan perusaksioomat

AUTOMAATTIEN SYNKRONISAATIOSTA

Havaitaan: muuttujan NykyisetTilat arvot kuuluvat potenssijoukkoon P(Q).

Suorat, käyrät ja kaarevuus

Esimerkki 1: Kahviautomaatti.

Tehtävä 1. Jatka loogisesti oheisia jonoja kahdella seuraavaksi tulevalla termillä. Perustele vastauksesi

Laskennan perusmallit (LAP)

Käydään läpi: ääriarvo tarkastelua, L Hospital, integraalia ja sarjoja.

LAP: Laskennan perusmallit

Neliömatriisin A determinantti on luku, jota merkitään det(a) tai A. Se lasketaan seuraavasti: determinantti on

Matematiikan tukikurssi

2.4 Pienimmän neliösumman menetelmä

Polynomien laskutoimitukset

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 8: Integraalifunktio ja epäoleellinen integraali

Reaalinen lukualue. Millainen on luku, jossa on päättymätön ja jaksoton desimaalikehitelmä?

Diskreetin matematiikan perusteet Laskuharjoitus 6 / vko 13

MS-A010{2,3,4,5} (SCI, ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 8: Integraalifunktio ja epäoleellinen integraali

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

Riemannin integraali

MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 7: Integraali ja analyysin peruslause

MS-A010{2,3,4,5} (SCI,ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 7: Integraali ja analyysin peruslause

Integraalilaskentaa. 1. Mihin integraalilaskentaa tarvitaan? MÄNTÄN LUKIO

Matematiikan johdantokurssi, syksy 2017 Harjoitus 6, ratkaisuista. 1. Onko jokin demojen 5 tehtävän 3 relaatioista

Preliminäärikoe Pitkä Matematiikka

11. MÄÄRÄTTY INTEGRAALI JA TILAVUUS

Numeerinen integrointi

2.5 Säännöllisten kielten rajoituksista

Kirjallinen teoriakoe

9 A I N. Alkuperäinen piiri. Nortonin ekvivalentti R T = R N + - U T = I N R N. Théveninin ekvivalentti DEE SÄHKÖTEKNIIKAN PERUSTEET

TAMPEREEN YLIOPISTO Valinnaisten opintojen syventäviin opintoihin kuuluva tutkielma. Lauri Kumpulainen. Büchin automaateista

Vastaa tehtäviin 1-4 ja valitse toinen tehtävistä 5 ja 6. Vastaat siis enintään viiteen tehtävään.

763333A KIINTEÄN AINEEN FYSIIKKA Ratkaisut 1 Kevät 2014

θ 1 θ 2 γ γ = β ( n 2 α + n 2 β = l R α l s γ l s 22 LINSSIT JA LINSSIJÄRJESTELMÄT 22.1 Linssien kuvausyhtälö

Mutta esimerkiksi 0-kertaisesti pumpattaessa: Siten L ei voi olla säännöllinen.

HAVAINNOINTI JA TUTKIMINEN

Kertausta: kielet ja automaatit. ICS-C2000 Tietojenkäsittelyteoria. Alue ja aiheet. Äärelliset automaatit

2.1 Vaillinaiset yhtälöt

Vuokrahuoneistojen välitystä tukeva tietojärjestelmä.

Digitaalinen videonkäsittely Harjoitus 5, vastaukset tehtäviin 25-30

Sarjaratkaisun etsiminen Maplella

6 Integraalilaskentaa

Tee B-osion konseptiin etusivulle pisteytysruudukko! Muista kirjata nimesi ja ryhmäsi. Välivaiheet perustelevat vastauksesi!

Määritelmä Olkoon C R m yksinkertainen kaari ja γ : [a, b] R m sen yksinkertainen parametriesitys, joka on paloittain C 1 -polku.

TEHTÄVÄ 1. Olkoon (f n ) jono jatkuvia funktioita f n : [a, b] R, joka suppenee välillä [a, b] tasaisesti kohti funktiota f : [a, b] R.

x k 1 Riemannin summien käyttö integraalin approksimointiin ei ole erityisen tehokasta; jatkuvasti derivoituvalle funktiolle f virhe b

7.lk matematiikka. Geometria 1

4.7.2 Testerit. Test ok. virhe vast.ota. lähetä τ. virhe. virhe. vast.ota. τ τ. vast.ota. lähetä. lähetä. lähetä ok

Kertymäfunktio. Kertymäfunktio. Kertymäfunktio: Mitä opimme? 2/2. Kertymäfunktio: Mitä opimme? 1/2. Kertymäfunktio: Esitiedot

4 DETERMINANTTI JA KÄÄNTEISMATRIISI

Viivaintegraali: "Pac- Man" - tulkinta. Viivaintegraali: "Pac- Man" - tulkinta. "Perinteisempi" tulkinta: 1D 3/19/13

SARJAT JA DIFFERENTIAALIYHTÄLÖT Funktiojonot 1

4 Taso- ja avaruuskäyrät

Mikrotalousteoria 2, 2008, osa III

Teoriaa tähän jaksoon on talvikurssin luentomonisteessa luvussa 10. Siihen on linkki sivulta

Graafinen ohjeisto. Julkis- ja yksityisalojen toimihenkilöliitto Jyty

5 Epäoleellinen integraali

A-Osio. Valitse seuraavista kolmesta tehtävästä kaksi, joihin vastaat. A-osiossa ei saa käyttää laskinta.

// Tulostetaan liukulukutyyppinen muuttuja riviä vaihtamatta // yhden desimaalin tarkkuudella. System.out.printf("%.

Aiheet. ICS-C2000 Tietojenkäsittelyteoria M := Äärelliset automaatit vs. säännölliset lausekkeet. Äärelliset automaatit

R4 Harjoitustehtävien ratkaisut

MITEN MÄÄRITÄN ASYMPTOOTIT?

a = x 0 < x 1 < x 2 < < x n = b f(x) dx = I. lim f(x k ) x k=1

Transkriptio:

Lskennn perusmllit (LAP) Kimmo Fredrikssonin j Mtti Nykäsen mterileist muoknnut Pekk Kilpeläinen Tietojenkäsittelytieteen litos, Itä-Suomen yliopisto sähköposti: pekk.t.kilpelinen@uef.fi Lukuvuoden 2014 15 III periodi Sisältö 1 Kurssin sisällöstä 1 1.1 Histori..................................... 3 1.2 Kurssin sisältö tästä eteenpäin......................... 4 1.3 Peruskäsitteitä: Akkosto j merkkijono................... 5 2 Säännölliset lusekkeet j kielet 6 2.1 Säännölliset lusekkeet pienin skelin..................... 7 2.2 Yhteenveto: säännöllisten lusekkeiden syntksi j semntiikk....... 9 2.3 Äärelliset utomtit.............................. 13 2.4 Äärellisen utomtin esitystpoj...................... 15 2.5 Äärellisen utomtin formli määrittely.................. 17 2.6 Automtin tunnistm kieli.......................... 20 2.7 Äärellisen utomtin lskentvoimst.................... 23 2.8 Sovelluksist................................... 27 2.9 Epädeterministiset äärelliset utomtit................... 28 2.9.1 Epädeterministisen utomtin simulointi.............. 34 2.10 Automtin determinisointi ( osjoukkokonstruktio )............ 35 2.11 Säännölliset lusekkeet j äärelliset utomtit................ 42 2.11.1 Säännöllisestä lusekkeest utomtti................ 43 2.11.2 Automtist säännöllinen luseke.................. 44 2.12 Säännöllisten kielten sulkeumominisuudet................. 49 2.13 Säännöllisten kielten rjoituksist....................... 52 3 Kontekstittomt kielet j pinoutomtit 60 3.1 Kontekstittomt kieliopit............................ 61 3.2 Säännölliset j kontekstittomt kielet..................... 69 3.2.1 Äärellistä utomtti vstv linerinen kielioppi........ 70 3.2.2 Linerist kielioppi vstv äärellinen utomtti........ 71 3.3 Pinoutomtti................................. 73 3.3.1 Deterministiset j epädeterministiset pinoutomtit........ 78 3.3.2 Pinoutomtit j kontekstittomt kielet............... 80 3.4 Kielioppien jäsennysongelm.......................... 85 3.5 Kontekstittomien kielten rjoituksist..................... 93 3.6 Jäsennysongelmn soveltmisest j rtkisemisest............. 95 i

3.6.1 Cocke-Younger-Ksmi-lgoritmi................... 97 3.6.2 LL(1)-kieliopit j rekursiivisesti etenevä jäsennys.......... 97 3.6.3 LR-kieliopeist............................. 110 4 Yleisemmistä kieliluokist j rtkevuudest 112 4.1 Päätösongelmt j formlit kielet....................... 112 4.2 Lskennllisten ongelmien rtkevuus..................... 113 4.2.1 Pysähtymisongelmn rtkemttomuus................ 116 5 Summ summrum 118 Viitteet Alfred V. Aho, Monic S. Lm, Rvi Sethi, nd Jeffrey D. Ullmn. Compilers: Principles, Techniques, nd Tools. Addison Wesley, second edition, 2007. John E. Hopcroft, Rjeev Motwni, nd Jeffrey D. Ullmn. Introduction to Automt Theory, Lnguges nd Computtion. Addison Wesley, second edition, 2001. John R. Levine, Tony Mson, nd Doug Brown. Lex & Ycc. O Reilly, second edition, 1992. Hrry R. Lewis nd Christos H. Ppdimitriou. Elements of the Theory of Computtion. Prentice-Hll, second edition, 1981. Michel Sipser. Introduction to the Theory of Computtion. Course Technology, second edition, 2005. Thoms A. Sudkmp. Lnguges nd Mchines: An Introduction to the Theory of Computer Science. Addison Wesley, second edition, 1997. ii

1 Kurssin sisällöstä Käsitellään tietojenkäsittelyteorin (trkemmin formlikielten j utomttien teorin) lkeit siltä osin kuin ne ovt ohjelmistotekniikss keskeisiä erityisesti ohjelmointikielten syntksin kuvmisess j ohjelmien syntktisen oikeellisuuden trkistmisess; Soveltuvt vstviin trkoituksiin myös muiss ohjelmistoiss Sovelluksi myös esim. tekstihuss, hjutettujen j rektiivisten järjestelmien spesifioinniss j nlysoinniss, ioinformtiikss, tiedontiivistyksessä, koneoppimisess,... Trkstelln (formli)kieliä eli merkkijonojen joukkoj. Esim: 1. Suomlisten nimet { Ad Akul,..., Yrjö Öörni } 2. Jv-kielessä sllitut tunnukset (muuttujille, luokille, metodeille yms.) 3. Syntksiltn kelvolliset Jv-kieliset ohjelmt 4. Syötteet, joill tietyn ohjelmn suoritus pysähtyy. Keskeinen jäsenyysongelm: Kuuluuko nnettu syöte trksteltvn kieleen? Äärelliset kielet kuten (1) eivät ole teorin knnlt kovin kiinnostvi: Niiden merkkijonot voidn luetell/tllett, j jäsenyysongelm rtke vertmll syötettä tlletettuihin jonoihin. Äärettömät kielet kuten (2) (4) ovt kiinnostvmpi, j niiden käsittelytekniikt hyödyllisiä myös äärellisten kielten käsittelyssä. Tutustutn säännöllisiin kieliin j kontekstittomiin kieliin, joit edustvt esimerkiksi kielet (2) j (3). Niiden jäsenyysongelmill on kurssill käsiteltäviin tekniikoihin perustuen tehokkt lgoritmiset rtkisut. On lisäksi kieliä (eli päätösongelmi), joille ei tunnet tehokst rtkisulgoritmi, j kieliä joill todistettvsti ei ole tehokst rtkisulgoritmi. On lisäksi rtkemttomi ongelmi, joill todistettvsti ei voi oll täydellistä rtkisulgoritmi. Kurssin lopull totemme, että kielen (4) jäsenyysongelm on yleisessä tpuksess rtkemton. Kurssin sem opetuksess Tietojenkäsittelytieteen pääineopiskelijoille pkollinen ineopintokurssi (3 op). Esitietovtimukset: Johdtus tietojenkäsittelytieteeseen (JTT): Lskennn, lgoritmin j tietokoneen käsitteet. 1

Diskreetit rkenteet (DSR): Sovelletn diskreetin mtemtiikn peruskäsitteitä, kuten joukkoj, reltioit, funktioit, puit j verkkoj. Lisäksi molemmill kursseill lähestymistp j jtusmilm on mtemttinen (eikä esimerkiksi ohjelmointitekninen). Tietorkenteet 1 (TRA1): Käytetään joitkin siellä selostettuj perustietorkenteit, kuten pinoj j puit. Lisäksi viittn joihinkin siellä esiteltyihin käsitteisiin, kuten symptoottiseen ikvtivuuteen. Oppimterili Nämä luentomuistiinpnot ovt wikissä: http://wiki.uef.fi tkt-wiki Kurssien kotisivuj - Course homepges LAP - Lskennn perusmllit (3621317, 3op). Pohjutuvt Kimmo Fredrikssonin j Mtti Nykäsen luentoihin edellisiltä vuosilt. Muokttu hiljkkoin; sttvt siksi sisältää päättömiä ristiviittuksi tms. Luentomuistiinpnot on trkoitettu luentojen tueksi. Itseopiskeluun suositelln lisäksi jonkin oppikirjn seurmist. Esimerkiksi kirjn Hopcroft, John E., Motwni, Rjeev j Ullmn, Jeffrey D.: Introduction to Automt Theory, Lnguges nd Computtion, 2. pinos (Addison Wesley, 2001) luvut 1 8.2, 9 9.3 j 10 kttvt vltosn kurssin sioist (näitä luentoj yksityiskohtisemmin). Näistä sioist on julkistu moni muitkin oppikirjoj, kuten esimerkiksi Lewis nd Ppdimitriou (1981) j Sipser (2005), joit voi myös käyttää. Osittvn jäsennyksen j LL(1)-kielioppien itseopiskeluun suositeltv lähde on Aho et l. (2007, luvut 4.2 4.4). Kurssin suorittminen Luennot: Hrjoitukset: 2 + 2 tunti viikoss, yhteensä 22 tunti. Videoidn Kuopion kmpukselt; tllenteet Moodless 2 tunti viikoss, yhteensä 5 viikko. 20 % (... 30 %) kurssin pisteistä tulee tehdyistä lskuhrjoituksist linerisesti. Tehtävät tulevt Wikiin edellisen viikon ikn. Luentokuulustelu j sen uusintkuulustelu: Loput 80% kurssin pisteistä. Koelue: ne sit, joit on käsitelty luennoill ti hrjoituksiss. 2

Arvostelu: Alimpn hyväksyttyyn rvosnn 1/5 vditn vähintään 50% kokonispisteistä, korkeimpn 5/5 vähintään 90%, j muut linerisesti. Niiden jälkeiset yleiset tentit: Koelue käsittää vin luennot j rvosteluss huomioidn vin koepisteet. Hrjoituksi ei enää huomioid. 1.1 Histori Lskentongelmn käsitteen muotoilu sekä ongelmien erottelu utomtisoituviin j utomtisoitumttomiin tehtiin 1930-luvull. Siis jo ennen tietokoneit! (Ensimmäiset yleiskäyttöiset tietokoneet rkennettiin pin II milmnsodn jälkeen.) Motivtion oli mtemtiikn filosofin j formlin logiikn kehitys: Hluttiin erott toisistn selliset mtemttiset j loogiset ongelmt, jotk vtivt ito luovuutt, sellisist joihin riitti pelkkä lskeminen...... siis nt trkk formli määritelmä rkikielen käsitteelle mekninen lskent. Näin syntyi lskettvuuden teori yhdeksi keskeiseksi osksi mtemttist logiikk. Tällä kurssill esitetään mekniselle lskennlle trkk formli määritelmä käyttäen ns. Turingin koneit tietokonepioneeri Aln M. Turingin vuonn 1936 esittämää strkti mtemttist mlli hypoteettiselle lskulitteelle. Smn ikn oli muitkin loogikkojen ehdotuksi meknisen lskennn määritelmäksi, esimerkiksi: Kurt Gödel kehitti 1930-luvun lust lken rekursiivisten funktioiden teori osn kuuluisn (ensimmäisen) epätäydellisyysluseens todistust. Iden oli induktio: funktion seurv rvo f(n+1) voidn määritellä edellisen rvon f(n) vull, joss n N. Alonzo Church esitti vuonn 1936 omn λ-lskentns. Iden oli lskent lusekkeen sievennyksenä. Nämä ts olivt tärkeitä ohjelmoinnin j ohjelmointikielten kehitykselle. Tällä kurssill niitä ei käsitellä, mutt kurssill Johdtus funktionliseen ohjelmointiin (FOH) sivutn λ-lskent. Miksi vlittiin Turingin litelähtöinen lähestymistp meknisen lskennn määritelmäksi eikä Gödelin ti Churchin ohjelmointilähtöistä? Eksplisiittinen lite jok kulke rksutt kuin kello on konkreettisempi käsite kuin induktio ti sievennys joiden voisi epäillä sittenkin vtivn sitä ito luovuutt... Lskentn kuluv ik j til on helpompi määritellä litteen kuin siinä pyörivän ohjelmn kutt. Tietokoneiden yleistymisen myötä lettiin huomt, että tämä mekninen lskent jkutui edelleen vivlloiseen j vivttomn mekniseen lskentn. 3

Yksi tp selventää tätä jko on tutki vielä yksinkertisempi lskulitteit kuin Turingin kone. Tätä utomttien teori on kehitetty 1960-luvult lähtien. Tällä kurssill tutustummekin sen keskeisiin käsitteisiin kuten äärellisiin j pinoutomtteihin. Toinen tp on sett resurssirjoj Turingin koneille. Tätä lskennn vtivuusteori on kehitetty 1970-luvult lähtien. Sen keskeinen ongelm on tunnettu P? = NP. Vtivuusteori kuitenkin jätetään vltosin kursseille ASA j LAT. 1.2 Kurssin sisältö tästä eteenpäin 1. Peruskäsitteitä: merkkijonot, kielet 2. Säännölliset kielet: lineristen rkenteiden kuvminen j tunnistminen Säännölliset lusekkeet: säännöllisten kielten kuvusnottio. Äärelliset utomtit: mhdollisimmn yksinkertisi lskulitteit. Säännölliset kielet voidn tunnist näillä litteill. Kun esimerkiksi kirjoitt Linuxin komentoriville ls *.jr niin käytät säännöllistä lusekett *.jr kuvilemn säännöllisen kielen kikki selliset ASCII-merkkijonot, jotk päättyvät merkkijonoon.jr j kone list sinulle kikki ne tämän hkemiston tiedostonimet, jotk tämän kielen tunnistv utomtti hyväksyy sen jäseniksi. Käytännössä niihin törmää esimerkiksi merkkijonolgoritmeiss, hjutettujen järjestelmien mllintmisess sekä dokumenttirkenteiden kviokielissä (kuten XML DTD j XML Schem). 3. Kontekstittomt kielet: hierrkkisten/rekursiivisten rkenteiden kuvminen j tunnistminen Kontekstittomt kieliopit: kontekstittomien kielten kuvustp Pinoutomtit ovt pinomuistill vrustettuj äärellisiä utomttej, joill voidn tunnist kontekstittomt kielet. Käytännössä tärkeitä rkenteisen syötteen käsittelyssä. Esimerkiksi HTML, XML sekä rkenteisell ohjelmointikielellä kirjoitettu lähdekoodi ovt rkenteisi syötteitä. Niissä on rjoittmttomi sisäkkäisyyksiä, joit selvitelläkseen syötettä lukevn ohjelm trvitsee (pino)muisti. 4. Säännöllisiä j kontekstittomi kieliä yleisemmistä kieli-/ongelmluokist Lskettvuuden j vrsinkn lskennn vtivuuden teori emme vlitettvsti ennätä käsitellä juuri linkn. Lskennllisesti vtiviin ti jop kokonn rtkemttomiin ongelmiin törmää esimerkiksi tekoälyssä sekä ohjelmien j järjestelmien formliss verifioinniss. 4

1.3 Peruskäsitteitä: Akkosto j merkkijono Akkosto on äärellinen, epätyhjä joukko merkkejä eli symoleit. Esimerkiksi inäärikkosto B = {0, 1}, DNA-kkosto = {A, C, G, T}, ASCII, UNICO- DE Akkosto voidn määritellä ihn miten hlutn, esim: {HiiriVsenNppi, HiiriOikeNppi, HiiriKeskiNppi, HiiriRullYlös, HiiriRullAls}. Merkkijonot Merkkijono (eli sn) on äärellinen järjestetty jono jonkin kkoston merkkejä. Esim. 01001 j 000 ovt inäärikkoston B merkkijonoj, j LAP j XYZZY ovt ASCII-kkoston merkkijonoj. Kun Σ on kkosto, niin merkintä Σ trkoitt tämän kkoston kikkien merkkijonojen joukko. Siis esim. B = {ε, 0, 1, 00, 01, 10, 11, 000,... }. Tyhjä merkkijono ε ei sisällä yhtään merkkiä. (Huom! Se ei ole merkki, vn jono, joss ei ole yhtään merkkiä.) Merkkijonon x pituus x on siihen sisältyvien merkkien määrä. Esim. ε = 0 j 01001 = XYZZY = 5. Merkkijonojen ktenointi j kääntäminen Ktentio on merkkijonojen kirjoittmist peräkkäin, esimerkiksi: Jos x = 0 j y = 110, niin xy = 0110 j yx = 1100; Kikill x pätee xε = εx = x; Kikill x j y pätee xy = x + y. Toisto eli merkkijonon ktentio itsensä knss voidn merkitä potenssin: 3 = ( 2 ) 3 = () 3 =. Käänteismerkkijono x R on merkkijono x kirjoitettun tkperin. Esim. (c) R = c, () R = 5

2 Säännölliset lusekkeet j kielet Säännöllisellä lusekkeell (regulr expression) voi kuvill, minkä muotoisi merkkijonoj hyväksytään. Trkstelln ensin johdttelevi esimerkkejä tietoteknisistä sovelluksist. (Sovellusten merkintätvt yleensä poikkevt hiemn kurssill käytetystä säännöllisten lusekkeiden nottiost.) Spesifiktioiss käytetään säännöllisiä lusekkeit kielten lkiorkenteen kuvmiseen. Esim. XQuery-kielen desimlivkiot: Digits ::= [0-9]+ DecimlLiterl ::= ("." Digits) (Digits "." [0-9]*) Dokumenttirkenteiden kuvminen XML-dokumenttikvioiden sisältömllit ovt oleellisesti säännöllisiä lusekkeit. Esim. XHTML-kielen tulukkoelementtien rkennekuvus: <!ELEMENT tle (cption?, (col* colgroup*), thed?, tfoot?, (tody+ tr+))> XHTML-tulukko voi sisältää järjestyksessä vlinnisen otsikon jonon srke-elementtejä ti jonon srkeryhmä-elementtejä vlinnisen otskkeen j vlinnisen ltunnisteen epätyhjän jonon tody-elementtejä ti epätyhjän jonon rivielementtejä. Tekstinhku säännöllisillä lusekkeill Unix-komennoll grep (=glol regulr expression prser) voidn etsiä tiedostost säännöllisellä lusekkeell kuviltuj rivejä. Esim. Etsi tekstitiedostost lp.txt rivit, joill esiintyy sn utomtti : egrep utomtti lp.txt Etsi tekstitiedostost lp.txt rivit, joill esiintyy sn utomtti ti sn kieli : egrep utomtti kieli lp.txt Etsi tekstitiedostost lp.txt rivit, joill esiintyy äärellinen utomtti ti khviutomtti : egrep (äärellinen khvi)utomtti lp.txt Etsi tekstitiedostost tiedosto.txt osoitteit, jotk ovt muoto... ktu ti... tie jot seur tlon numero: 6

egrep [A-ZÅÄÖ][-zåäö]*(ktu tie) [1-9][0-9]* tiedosto.txt Monien editoreiden hku- j korvustoiminnot sllivt myös säännölliset lusekkeet, j uset ohjelmointikielet sisältävät regexp -kirjstoj. Jtkoss käymme läpi peritteen, joll nnettu säännöllinen luseke voidn kääntää utomtiksi, joll voidn suoritt hluttu hkutehtävä. Edellä muodostettiin hhmoist äärellinen, khvi j utomtti uusi hhmo ti-operttorin j ktenoinnin vull. Smoin sllittiin hhmon iterointi eli ktenointi itsensä knss ([0-9]*). Täsmennetään seurvksi näitä perusopertioit peräkkäisyys, vlint j toisto käyttävien säännöllisten lusekkeiden ide 2.1 Säännölliset lusekkeet pienin skelin Olkoon Σ kkosto. Kehitetään sen säännöllisten lusekkeiden ide viheittin. Perusperite: Jokinen säännöllinen luseke E kuv jotin kkoston Σ kieltä, jot merkitään L(E) Kukin merkki Σ on luseke, jok kuv itseään täsmällisemmin kieltä, jonk muodost merkin sisältävä 1-merkkinen jono: L() = { } Vihtoehtoisuus: Jos hyväksytään ti, niin kuvtn kieli, joss on molemmt. Niiden vlint vst siis merkkijonojen j muodostmien kielten yhdiste: L( ) = {} {} = {, } Huom: Käytämme vlintoperttorin usein myös yhdisteoperttori Peräkkäisyys esitetään kirjoittmll lusekkeet peräkkäin L() = { } Alilusekkeiden ktenointi kuv niiden kuvmien kielten ktenointi Kielten A j B ktentio eli tulo on kieli AB = {xy Σ x A, y B} S.o. merkkijonot joill on lkuosn jokin kielen A merkkijono x j loppuosn jokin kielen B merkkijono y. Esim. L(( )(c d)) = {, }{c, d} = {c, d, c, d} 7

Tyhjä jono j vlinnisuus Tyhjälle jonolle on om lusekkeens ε, joll L(ε) = {ε} Kyseessä on kielten ktenoinnin neutrlilkio: {ε} X = X {ε} = X ε-luseke on lähinnä hyödyllinen vlinnisuuden kuvmiseen. Esim. -jonot, joiden lopuss voi oll jok voi myös puuttu: L(( ε)) = {, } Käytännön vritioiss tyhjän jonon merkkiä ei usein ole, mutt niissä on vlinnisuusoperttori?, joll Itertio eli toisto L(E?) = L(E) {ε} Luseke E kuv jonoj, jotk sdn ktenoimll peräkkäin mielivltisen mont kuvuksen E mukist merkkijono; Täsmällinen määritelmä perustuu kielen L(E) potensseihin eli ktenointeihin itsensä knss: Kielen A potenssit A k, joss k N: A 0 = {ε} Kielen A sulkeum on kieli A k = AA... A } {{ } k kert = {w 1 w 2 w k w i A kikill i = 1, 2,..., k} A k A = k N = {ε} A AA AAA... = {w 1 w 2 w k k 0, w i A kikill i = 1, 2,..., k} Itertioluseke E esittää sen lilusekkeen kuvvmn kielen sulkeum: L(E ) = L(E) Esimerkki 1. Trkstelln kkoston {,, c, 0, 1, 2} kieliä A = {, c} j B = {ε, 1, 02}. Nyt A B = {, c, ε, 1, 02} AB = {, 1, 02, c, c1, c02} A = {ε,, c,, c, c, cc,, c, c, cc, c,...} 8

Tyhjä kieli Täydellisyyden tki mukn on vielä tyhjän joukon symoli, jok kuv tyhjän kielen: L( ) = Muuhun sitä ei trvitkn Nimittäin luseke, joss niitä esiintyy voidn in muokt yhtäpitävään muotoon joss joko niitä ei esiinny ti jäljellä on pelkkä. Huom: tyhjä kieli j tyhjä merkkijono ε ovt eri sioit. Kielessä {ε} on yksi lkio, nimittäin ε, joten se ei ole tyhjä. Erikoistpuksen = {ε}... = {ε} 2.2 Yhteenveto: säännöllisten lusekkeiden syntksi j semntiikk Syntksi E Semntiikk L(E) ε {ε} (jokisell Σ) {} (F G) L(F )L(G) (F G) L(F ) L(G) F L(F ) Yllä F j G ovt induktiivisesti vstvnmuotoisi lilusekkeit. Esimerkki 2. Akkoston {, } säännöllisiä lusekkeit ovt esimerkiksi r 1 = (()), r 2 = (), r 3 = ( ), r 4 = (( ())). näiden lusekkeiden kuvmt kielet ovt L(r 1 ) = ({}{}){} = {}{} = {}; L(r 2 ) = {} = {ε,,,,...} = {() i i 0}; L(r 3 ) = {}({}) = {,,,,...} = { i i 0}; L(r 4 ) = ({}{, }) = {, } = {ε,,,,,...} = {x {, } kutkin -kirjint x:ssä seur 1 ti 2 -kirjint } 9

Lyhennysmerkintöjä Sulkumerkkejä voidn vähentää seurvill säännöillä: Operttoreist sitoo vhvimmin, sitten ktenointi, j heikoimmin. Yhdiste- j ktenointiopertiot ovt ssositiivisi: L(((r s) t)) = L((r (s t))) L(((rs)t)) = L((r(st))). Siksi smn operttorin suoritusjärjestystä ei trvitse kiinnittää: ((c)) = (c) j (( ) c) = ( c) Lyhennysmerkintä r + := rr trkoitt toist r inkin kerrn. Esim. jos d = (0... 9), niin d + kuv jonoj, jotk koostuvt yhdestä ti usemmst numeromerkistä. Säännöllinen kieli Määrittelemme säännöllisen kielen A sellisen, jok voidn kuvt jollkin säännöllisellä lusekkeell r, eli A = L(r). Osoitmme jtkoss, että (täsmälleen) nämä säännölliset kielet voidn tunnist äärellisillä utomteill. Esimerkki 3. Olkoon kkosto Σ = {,, c,..., z}. Säännöllisen lusekkeen ( z) utomtti( z) kuvm kieli on niiden merkkijonojen joukko jotk sisältävät osmerkkijonon utomtti. Siis tämä kieli on säännöllinen. Esimerkki 4. Olkoon Σ = {A, B, C,..., Ö,,, c,..., ö, 0, 1, 2,..., 9, }. Osoite on muoto joss (Ll )(ktu tie) dd (l ε)(dd ε) ddddd Ll L on lyhenne lusekkeelle (A B C... Ö) eli suurille kirjimille ( LETTERS ), l on lyhenne lusekkeelle ( c... ö) eli pienille kirjmille ( letters ), j d on lyhenne lusekkeelle (0 1 2... 9). Huom: Monet regexp -kirjstot j -työklut lisäävät lusekkeisiin ei-säännöllisiä piirteitä (kuten esimerkiksi rjoittmttomt viitteet tksepäin). Tällä kurssill käsitellään vin itoj säännöllisiä lusekkeit ilmn tällisi lisäyksiä. Esimerkki 5. Ohjelmointikielen C etumerkittömät liukuluvut määritellään seurvsti: (kokonisos).(desimlios) (e ti E) [+ ti ] (eksponentti) [suffiksi] Hksulkujen [... ] välinen os voi puuttu Kokonisos j desimlios koostuvt numeroist 10

Joko kokonis- ti desimlios voi puuttu (mutt eivät molemmt) Joko (i) desimlipiste ti (ii) (e ti E) j eksponentti voivt puuttu (mutt eivät molemmt) Suffiksi on F ti f (flot), L ti l (long doule) ; (muuten doule) Säännöllinen luseke (ilmn suffiksej): (d +.d.d + )(ε ((e E)(+ ε)d + )) d + (e E)(+ ε)d + Kieleen kuuluvt esim. jonot 12.,.12, 1.2, 1.2E3, 1.2e3, 1.2E-3, 1E2 j 1e23. Tehtävä 1. Trkstelln seurvi kkoston Σ = {, } säännöllisiä lusekkeit. Esitä kunkin lusekkeen kuvmst kielestä kksi merkkijono, jotk kuuluvt kieleen, j kksi, jotk eivät kuulu kieleen! 1. 2. () 3. 4. () 5. (ε ) 6. Σ Σ Σ Σ Tehtävä 2. Etsi lyhyin merkkijono, jok kuuluu seurvn lusekkeen kuvmn kieleen! 1. ( ) 2. ( () ) 3. ( )( ) Tehtävä 3. Muodost seurvi kieliä vstvt säännölliset lusekkeet: 1. {w {, } w:n kolmnneksi viimeinen merkki on } 2. {w {, } w sisältää joko merkkijonon ti } 3. {w {, } w sisältää prillisen määrän merkkiä } 4. {w {, } w:n pituus on priton} 5. {w {, } w:ssä on 3:ll jollinen määrä merkkiä } Tehtävä 4. Esitä yksinkertisemmss muodoss seurvt lusekkeet (eli nn luseke, jok yhä kuv smn kielen, mutt joss on vähemmän operttoreit): 1. (0 1 01 11) 2. (0 10 ) 3. 1 (011 ) 1 (011 ) 0 11

Säännöllisten lusekkeiden sieventäminen Säännöllisillä kielillä on yleensä useit vihtoehtoisi kuvuksi, esim.: Σ = L(( ) ) = L(( ) ) = L( ( ) ( ) ) =... Merkitään r s, kun L(r) L(s), eli kun säännollisen lusekkeen r kuvm kieli on os säännöllisen lusekkeen s kuvm kieltä. Säännölliset lusekkeet r j s ovt ekvivlentit, merkitään r = s, silloin kun r s j s r, eli kun L(r) = L(s). Lusekkeen sievennys = yksinkertisimmn ekvivlentin lusekkeen määritys. Tässä luontev yksinkertisuuden mitt on sen sisältämien operttoreiden lukumäärä sen pituus kirjoitettun. Sievennyssääntöjä Muistisääntö: yhteenlsku, j sen neutrlilkio 0. Ktenointi kertolsku, j ε sen neutrlilkio 1. r r = r (mutt rr r kun r, ε) r (s t) = (r s) t r(st) = (rs)t r s = s r r(s t) = rs rt (r s)t = rt st r = r = r εr = r (mutt ε r = r vin jos ε L(r)) = ε r = r r ε = r + ε r = (r ε) (r ) = r Tvlliset joukko-opertiot vs. säännöllisten kielten opertiot Olkoot A = {, } j B = {c, d}. 12

Joukot Kielet A B = {,, c, d} A B = {,, c, d} krteesinen tulo A B = tulo AB = {(, c), (, d), (, c), (, d)} {c, d, c, d} potenssijoukko P(A) = sulkeum A = {, {}, {}, {, }} {ε,,,,,,,,,,,,,,,,,,,...} P(X) = 2 n, kun X = n X =, jos X {ε} Miten osoitt, että L(r) = L(s)? Yleensä on mhdotont generoid j verrt lusekkeiden kuvmi kieliä, kosk ne voivt oll äärettömiä Mtemttinen rtkisutp on perustell, että 1. L(r) L(s) eli r s, j 2. L(s) L(r) eli s r. Algoritminen rtkisu perustuu lusekkeit vstviin utomtteihin: 1. Muodost lusekkeille r j s deterministiset utomtit M r j M s. 2. Tutki hyväksyvätkö utomtit smn kielen. (Tämän voi tehdä joko tutkimll tuottko niiden minimointi identtisen tuloksen sivuutmme minimoinnin ti trkstelemll niiden ns. tuloutomtti.) Opimme myöhemmin miten lusekkeest voidn muodost sitä vstv utomtti 2.3 Äärelliset utomtit Äärellinen utomtti (engl. Finite (Stte) Automton, FSA (ti FA)) on hyvin yksinkertinen lskennn mlli (eli strkti lskentlite). Äärellisillä utomteill pystytään tunnistmn täsmälleen säännöllisillä lusekkeill kuvttviss olevt kielet. Niillä on sovelluksi esim. tekstihuss j ohjelmien syötteiden tunnistmisess. Tvoittein on oppi mitä ovt äärelliset utomtit j mikä on niiden j säännöllisten lusekkeiden välinen suhde muodostmn yksinkertisi äärellisiä utomttej tekemään muunnoksi determinististen j epädeterminististen äärellisten utomttien j säännöllisten lusekkeiden välillä. osoittmn kieli joko säännölliseksi ti ei-säännölliseksi. Esimerkki 6. Khviutomtti, jok ei nn vihtorh, hyväksyy vin 50 sentin j yhden euron kolikoit j minimimksu on 2 euro. Millisi syötejonoj khviutomtti hyväksyy? 13

50, 100 q 100 0 q 2 100 q 4 50 50 50 50, 100 q 1 100 q 3 Kuv 1: Khviutomtti. Kelvollisi syötejonoj ovt esim. seurvt (yksikkönä snt): 50, 50, 50, 50,... 100, 100,... 50, 100, 100,... 100, 50, 50,... Ts. khviutomtti hyväksyy syötejonot, jotk ovt muoto 50 senttiä + 50 senttiä + 50 senttiä + 50 senttiä + [0 ti usempi 50 sentin ti 1 euron kolikoit] 1 euro + 1 euro + [0 ti usempi 50 sentin ti 1 euron kolikoit] 50 senttiä + 1 euro + 1 euro + [0 ti usempi 50 sentin ti 1 euron kolikoit] 1 euro + 50 senttiä + 50 senttiä + [0 ti usempi 50 sentin ti 1 euron kolikoit] jne... Khviutomtin toimint voidn kuvt äärellisenä utomttin. Automtin syötteitä ovt 50 sentin j 1 euron kolikot j utomtti hyväksyy syötejonon, jos siihen sisältyvien rhojen summ on vähintään 2 euro Automtti voidn esittää tilsiirtymäkvion (kuv 1). Tämä kvio on suunnttu verkko jonk kret on nimetty syötekkosill. Automtill on tiloj (5 kpplett), jotk on esitetty ympyröinä j nimetty q 0,... q 4, siirtymiä jotk on esitetty tilojen välisinä krin; kkosto jonk symoleill siirtymät on merkitty; 14

lkutil (til q 0 ) jok on merkitty tyhjästä tulevll krell; j lopputil (til q 4 ) jok on rengstettu. Tilojen nimet ovt vpvlintisi, utomtin toimintn ne eivät vikut. Jokiseen kuvn 1 khviutomtin tiln liittyy se tilnne, johon syötetyt lntit ovt koneen settneet: q 0 : Asiks ei ole syöttänyt vielä yhtään rh lkutil(nne) joss lite on, kun siks tulee sen luo j lk syöttää siihen lnttejn q 1 : Asiks on syöttänyt tsn 50 senttiä rh. q 2 : Asiks on syöttänyt tsn 1 euro rh. q 3 : Asiks on syöttänyt tsn 1 euro 50 senttiä rh. q 4 : Asiks on syöttänyt vähintään 2 euro rh joten lite voi hyväksyä sneens trpeeksi rh, j ryhtyä nnostelemn khvi. Kun suunnitelln utomtti hyväksymään jotin formlikieltä A Σ niin knntt miettiä 1. mitä tilnteit utomtin pitää muist, jott se voisi tehdä oiken päätöksen siitä, kuuluuko sen nykyinen syöte x Σ kieleen A viko ei. Näin sdn utomttiin trvittvt tilt. Kuvn 1 khviutomtiss muistetn tähän mennessä syötetty rhsumm. 2. miten näiden tilnteiden välillä siirrytään, kun syötettä luetn merkki merkiltä. Näin sdn utomttiin trvittvt siirtymät. Kuvn 1 khviutomtiss jokinen lntti on om merkkinsä, j se vie nykyisestä rhsummst seurvn. 2.4 Äärellisen utomtin esitystpoj Tilsiirtymäkvion eli kuvien 1 j 2 mukisen piirroksen. Tilsiirtymätulukkon joss jokisell tilll on om rivinsä jokisell syötekkosell on om srkkeens tiln q srke c ilmoitt tiln (eli rivin) jonne siirrytään tilst q merkillä c. Kuvn 1 khviutomtin tilsiirtymätulukko: 50 snt 1 euro q 0 q 1 q 2 q 1 q 2 q 3 q 2 q 3 q 4 q 3 q 4 q 4 q 4 q 4 q 4 15

q Til q q 0 Alkutil Lopputil eli hyväksyvä til q q Tilsiirtymä δ(q, ) = q Kuv 2: Tilsiirtymäkvion merkinnät. 50, 100 q 100 0 q 2 100 q 4 50 50 50 50, 100 q 1 100 q 3 Esimerkki 7. Etumerkillisen kokonisluvun tunnistminen. Tilsiirtymäkvion (joss d = {0, 1,..., 9} ovt 10-järjestelmän lukumerkit): d +, d q 0 q 1 q 2 d Tilsiirtymätulukkon (Puuttuvt kohdt vstvt Error -til): +, d q 0 q 1 q 2 q 1 q 2 q 2 q 2 Tehtävä 5. C-kielessä 0-lkuiset luvut tulkitn oktliluvuiksi (jolloin merkkejä 8 j 9 ei sllit linkn), j 1... 9-lkuiset 10-kntisiksi luvuiksi. Muut esimerkin 7 utomtti siten, että nämä tpukset erotelln, eli että ne johtvt eri hyväksyviin tiloihin. Tehtävä 6. (Jtko tehtävään 5.) C-kielessä 0x-lkuiset luvut tulkitn heksdesimliluvuiksi. Ot tämäkin huomioon. Ohjelmn (esim. C:llä): 16

int q=0; int c; while ((c=fgetc(stdin))!= EOF) switch (q) { cse 0: if (c== + c== - ) q=1; else if (isdigit(c)) q=2; else q=3; rek; cse 1: if (isdigit(c)) q=2; else q=3; rek; cse 2: if (isdigit(c)) q=2; else q=3; rek; cse 3: rek; } Esimerkki 8. C-kielen etumerkittömän liukulukuvkion tunnistus: d. E, e +, 1 3 2 2 4 3 3 4 5 4 4 5 5 7 6 6 7 7 7 1. d 2 3. d e,e 4 d e,e 5 d 7 d d +, 6 d 2.5 Äärellisen utomtin formli määrittely Äärellinen utomtti M koostuu seurvist osist: ohjusyksiköstä joss on äärellinen määrä tiloj j jonk toimint ohj utomtin siirtymäfunktio δ syötenuhst jok on jettu yhden syötemerkin kokoisiin pikkoihin. nuhpäästä jok kullkin hetkellä osoitt yhtä syötenuhn merkkipikk. 17

i n p u t q 1 q 2 q 0 δ Automtin toimint Automtti käynnistetään erityisessä lkutilss q 0, siten että trksteltv syöte on kirjoitettun syötenuhlle j nuhpää osoitt sen ensimmäistä merkkiä. Yhdessä toimint-skeless utomtti lukee nuhpään kohdll olevn syötemerkin, päättää ohjusyksikön tiln j luetun merkin perusteell siirtymäfunktion mukisesti ohjusyksikön uudest tilst, j siirtää nuhpäätä yhden merkin eteenpäin. Automtti pysähtyy, kun viimeinen syötemerkki on käsitelty. Jos ohjusyksikön til tällöin kuuluu erityiseen (hyväksyvien) lopputilojen joukkoon, niin utomtti hyväksyy syötteen, muuten hylkää sen. Automtin tunnistm kieli on sen hyväksymien merkkijonojen joukko. Määritelmä 1. Äärellinen utomtti on viisikko M = (Q, Σ, δ, q 0, F ), missä Q on utomtin tilojen äärellinen joukko; Σ on utomtin syötekkosto; δ : Q Σ Q on utomtin siirtymäfunktio; q 0 Q on utomtin lkutil; F Q on utomtin hyväksyvien tilojen joukko. Siirtymäfunktio δ on määritelmän 1 kiinnostvin os. Intuitiivisesti: Jos utomtti on nyt tilss q j seurvksi tulee merkki c niin silloin siirrytään tiln δ(q, c), eli siihen jonk siirtymäfunktio ilmoitt. 18

Toisin snoen: Siirtymäfunktion rvo δ(q, c) = tilsiirtymätulukon sisältö sen rivillä q j srkkeell c. Esimerkki 9. Kokonislukuutomtin (esimerkki 7) formli esitys on M = ({q 0, q 1, q 2, error}, {0, 1,..., 9, +, }, δ, q 0, {q 2 }), joss δ on kuten tulukoss; esim. jne. δ(q 0, 0) = δ(q 0, 1) = δ(q 0, 2) = = δ(q 0, 9) = q 2 δ(q 0, +) = δ(q 0, ) = q 1 δ(q 1, +) = δ(q 1, ) = error Huom: Määritelmän mukn äärellisen utomtin siirtymäfunktio on täydellinen: Jokiselle tillle j jokiselle merkille on esitetty niiden määräämä seurjtil Automtti voi yksinkertist esittämällä vin sen hyväksymiin jonoihin vikuttvt tilt j siirtymät. Tällinen osittinen utomtti voidn tulkit täydellinä utomttin, johon on lisätty puuttuvt siirtymät johtmn erityiseen virhetiln. Siis δ(q, ) := Err, jos δ(q, ) on muuten määrittelemättä, j δ(err, ) := Err kikill Σ Automtin lskennn mtemttinen esitys Automtin tilnne on pri (q, w) Q Σ joss q = utomtin nykyinen til w = syötemerkkijonon vielä käsittelemätön loppuos. Erityisesti utomtin lkutilnne syötteellä x on pri (q 0, x) joss q 0 on utomtin lkutil. Tilnne (q, cw), joss c Σ on seurv syötemerkki, joht suorn tilnteeseen (δ(q, c), w). Tätä merkitään lyhyesti (q, cw) (δ(q, c), w). Tilnne (q, w) joht tilnteeseen (q, w ) jos on olemss tilnnejono (q 0, w 0 ) (q 1, w 1 ) (q 2, w 2 ) (q 3, w 3 ) (q n, w n ) missä (q 0, w 0 ) = (q, w) j (q n, w n ) = (q, w ) (jollkin n N). Tätä merkitään lyhyesti (q, w) (q, w ). Jos hlutn merkitä näkyviin minkä utomtin M tilnnejonoist on kyse, niin voidn käyttää lindeksiä: siis M j M. 19

Automtti M hyväksyy syötemerkkijonon x Σ, jos j muuten hylkää sen. (q 0, x) (q f, ε) jollin q f F Toisin snoen, utomtti M hyväksyy syötteen x, jos sen vstv lkutilnne (q 0, x) joht johonkin hyväksyvään lopputilnteeseen, joss koko syöte on luettu. Vstv tilnnejono (q 0, x) M (q, ε) kutsutn utomtin M lskennksi syötteellä x. Se on siis hyväksyvä lskent jos lopputil q F j hylkäävä jos q F. Vihtoehtoisesti voidn ljent siirtymäfunktion δ yksittäisiltä merkeiltä Σ kokonisille merkkijonoille w Σ (j niin teemmekin jtkoss): δ (q, w) = q silloin kun (q, w) (q, ε). (1) Siis δ (q, w) on se til, johon päästään loittmll tilst q j lukemll merkkijono w loppuun skk. Erityisesti δ (q, ε) = q j δ (q, ) = δ(q, ), kun Σ. Automtti siis hyväksyy merkkijonon w, jos δ (q 0, w) F. Tämä on helppo määritellä myös rekursiivisesti: { δ q jos w = ε (q, w) = δ (δ(q, ), v) jos w = v joss Σ Tästä sdn suorn rekursiivinen lgoritmi, jonk rekursio on niin yksinkertist (ns. häntärekursiot), että se on helppo toteutt while-silmukkn. (Vrt. sivu 16.) 2.6 Automtin tunnistm kieli Automtti M tunnist kielen { } L(M) = x Σ (q 0, x) (q f, ε) jollkin q f F M = {x Σ δ (q 0, x) F } eli niiden merkkijonojen x joukon, jotk M hyväksyy. Esitämme (pikkuhilj) keskeisen tuloksen: Kieli A on säännöllinen jos j vin jos jokin äärellinen utomtti tunnist sen, ts. A = L(M) jollin M. Huom: Säännöllisyys on kielen, eli merkkijonojoukon ominisuus, ei yksittäisen merkkijonon. Ei ole mielekästä kysyä yksittäisestä merkkijonost, onko se säännöllinen. (Mistä thns merkkijonost w Σ voidn toki muodost yksilkioinen kieli {w} Σ, jok on selvästi säännöllinen.) 20

Esimerkki 10. Merkkijonon +1210 hyväksyminen esimerkin 7 (s. 16) kokonislukuutomtill: (q 0, +1210) (q 1, 1210) (q 2, 210) (q 2, 10) (q 2, 0) (q 2, ε) Nyt jäätiin hyväksyvään lopputiln q 2 eli +1210 L(M). Littomn merkkijonon 12 + 10 lskent onkin hylkäävä: (q 0, 12 + 10) (q 2, 2 + 10) (q 2, + 10) (error, 10) eli päädyttiin virhetiln error eli 12 + 10 L(M). Äärelliseen utomttiin voidn helposti lisätä muutkin tulostust j toimintoj kuin pelkkä hyväksyminen ti hylkääminen. Nämä ovt pelkkiä sivuvikutuksi eivätkä ne vikut utomtin toimintn siihen, miten se vlitsee tilsiirtymänsä...... ti jos ne vikuttvt, niin silloin kyseessä ei enää olekn äärellinen utomtti, vn jokin muu sitä vhvempi lskennn mlli. Tälliset modifiktiot eivät tämän kurssin knnlt tuo mitään kovin oleellist uutt sin. Muiss yhteyksissä ne voivt kuitenkin oll hyvinkin hyödyllisiä. Esimerkki 11. Lisätään esimerkin 7 etumerkillisen kokonisluvun tunnistmiseen toiminto, jok lskee luvun rvon muuttujn vlue eli muunt syötemerkkijonon sitä vstvksi kokonisluvuksi. int q=0; int c; int sign=1; int vlue=0; while ((c=fgetc(stdin))!= EOF) switch (q) { cse 0: if (c== + ) q=1; else if (c== - ) { q=1; sign=-1; } else if (isdigit(c)) { q=2; vlue=c- 0 ; } else q=3; rek; cse 1: if (isdigit(c)) { q=2; vlue=sign*(c- 0 ); } else q=3; rek; cse 2: if (isdigit(c)) { q=2; vlue=10*vlue+sign*(c- 0 ); } else q=3; rek; cse 3: rek; } Sivuhuomutus: Äärellisen utomtin tämän tpinen formlimpi ljennus on nimeltään äärellinen trnsduktori (finite stte trnsducer). Tässä jokiseen tiln liittyy pitsi yhden syötemerkin lukeminen, niin myös yhden (ti usemmn) tulostemerkin kirjoittminen erilliselle tulostenuhlle (ti syötteen päälle). 21

Syntx error... Aluksi lähdekoodi ASCII merkkijonon while(i>0)... Lopuksi konekoodin 00 FF 1A 8C 17 1F 05 5E AA C0 7F 99... koodin generointi selus (scnning) while jonon pidempiä yksiköitä vrttu sn: muuttujn nimi: operttori: kokonislukuvkio:... komento while komento luseke while i > 0 täydennettynä jäsennyspuun komento jäsennys (prsing) ttriuuttien lskent jäsennyspuun komento while komento while luseke > komento i 0 tyyppi: totuusrvo tyyppi: kokonisluku > i 0 Error: undefined vrile... Error: type mismtch...... Kuv 3: Ohjelmointikielen kääntäjän vihejko. Ohjelmointikielten kääntämisessä ensimmäinen vihe on leksiklinen nlyysi eli selus. Trkoituksen on poimi j erotell ohjelmn lähdekoodist erityyppiset lkiot, kuten kokonislukuvkiot (rvoineen), vrtut snt (if, else, while, jne.), muuttujien nimet, jne. Siis esimerkiksi nähtyään merkit for tällinen selin lukee vielä yhden merkin c eteenpäin. Jos tämä c on jokin muuttujn nimessä sllittu merkki, niin se tietää kokovns nyt muuttujn nimeä muoto forc... ; muuten se tietääkin löytäneensä vrtun snn for j tämä c kuuluukin seurvn lkioon. Selin voidn toteutt (j usein toteutetn) yhtenä äärellisenä trnsduktorin, jok lukee lähdekooditiedosto merkki merkiltä j nähtyään jonkin kokonisen lkion tulost vstvn tiedon. Selint ei kuitenkn (yleensä) koodt käsin, vn sen koodi voidn tuott utomttisesti ohjelmointikielen kuvuksest jollin sopivll työklull (esim. lex j sen GNU-versio flex), jok myös voi utomttisesti liittää hyväksyviin tiloihin käyttäjän määrittelemän toimintokoodin (tulostuksen yms.). fredriks@cs ~$ ct ex.lex %{ #include <stdio.h> %} %option noyywrp %% [0-9]+ { printf("kokonisluku: %s\n",yytext); } lp { printf("lap!\n"); } /* Tunnistetn "lp" */. { } /* Sivuutetn muu */ %% int min(void) { yylex(); return 0; } 22

fredriks@cs ~$ flex ex.lex fredriks@cs ~$ gcc lex.yy.c -o foo fredriks@cs ~$./foo c123def456lpxxxxx Kokonisluku: 123 Kokonisluku: 456 LAP! Tehtävä 7. Tee prnneltu versio esimerkin 6 khviutomtist: utomtti hyväksyy vin tsrhn, mutt lisäksi siihen on lisätty sellinen peruutusnppi, jok plutt kikki syötetyt kolikot (ntmtt khvi). Tehtävä 8. Ldi kkoston Σ = {, } äärellinen utomtti jok tunnist kielen {w w sisältää täsmälleen kksi :t}. Tehtävä 9. Edellisen komplementti: ldi äärellinen utomtti jok tunnist kielen {w w ei sisällä täsmälleen kht :t}. Tehtävä 10. Ldi utomtti kielelle: {w w ei muodostu pelkästä :st ti :stä} Tehtävä 11. Ldi utomtti kielelle: {w w ei sisällä jono } Tehtävä 12. Osoit että kieli {() n n > 0} on säännöllinen. Tehtävä 13. Trkstelln kieltä, jok koostuu niistä merkkijonoist, joiss jokinen priton (eli ensimmäinen, kolms, viides,... ) merkki on. Osoit, että se on säännöllinen. Tehtävä 14. Ldi äärellinen utomtti, jok tunnist kielen L = {0 n 1 m n, m N} {1 n 0 m n, m N}. 2.7 Äärellisen utomtin lskentvoimst Kieli L 1 = {0 n 1 m n, m N} on helppo tunnist äärellisellä utomtill, eli se on säännöllinen. Äärellinen utomtti on vrsin rjoittunut lskennn mlli. Niinkin yksinkertinen kieli kuin L 2 = {0 n 1 n n N} (eli merkkijonot joiss on ensin jono nolli j sitten smn verrn ykkösiä) ei olekn säännöllinen! Mikä on se perustv ero näiden kielten välillä, jok tekee toisest helpon j toisest mhdottomn tunnist äärellisellä utomtill? Intuitiivisesti, kielen L 1 = {0 n 1 m n, m N} tunnistminen vtii vin vkiomäärän muisti. Kieli L 1 = merkkijonot joss on ensin pelkkiä nolli j sitten pelkkiä ykkösiä. Siis niiden lukumäärällä ei ole väliä, j riittää muist mikä oli edellinen merkki (til). 23

Toislt, kielen L 2 = {0 n 1 n n N} tunnistmiseen ei riitäkään vkiomäärä muisti. L 2 = merkkijonot joss on ensin jokin määrä n nolli j sitten yhtä mont ykköstä. Tässä tämä yhteinen n voi oll kuink suuri thns sehän riippuu syötteen pituudest. Äärellinen utomtti ei pysty muistmn montko noll se on nähnyt ennen kuin ykköset lkvt, kun n on riittävän suuri. Formlisoimme tämän myöhemmin niin snottun pumppuslemmn. Toislt ominisuutt vkiomäärä muisti käyttävät kikki utomttimme, esim. khviutomttimme esimerkissä 6 muist syötetyn kokonisrhsummn, jos se on < 200 senttiä. Muuten se muist vin että syötetty summ on 200 senttiä. Eli se muist vin äärellisen mont eri vihtoehto. Esimerkki 12. Tunnist inäärijonot, joiden toiseksi viimeinen merkki on noll: 0?? 1 0 0 0 0?0 00 10?1 0 1 0 1 1 1 01 11 1 1 Automtti muist kksi viimeksi lukemns ittiä. Tilt on nimetty näiden mukn: tilss 01 viimeisin luettu itti oli 1 j edeltävä oli 0. Akkostot Akkosto Σ voidn määritellä vrsin vpsti j sovellukseen sopivksi. Esim. ti Γ = {left, right, middle} Σ = {[ 0 0 0 ], [ 0 0 1 ], [ 0 1 0 ], [ 0 1 1 ],..., [ 1 1 1 ]}. Akkoston Σ muodostvt siis kolmeittiset inäärivektorit; Σ = 2 3 = 8. 24

Akkoston Σ syötteitä voidn kutsu kolmiurisiksi. Esimerkiksi 4-merkkisessä syötteessä [ 0 0 0 ] [ 1 0 0 voidn mieltää kolme rinnkkist ur: ] [ 0 0 1 ] [ 0 1 0 ylin ur joll on 0100, keskimmäinen ur joll on 0001, j lin ur joll on 0010. Automtti lukee näitä uri smn thtiin rinnkkin, sillähän on vin yksi lukupää. Tehtävä 15. Jono kkoston Σ symolej määrittelee kolme riviä ykkösiä j nolli. Tulkitn nämä inäärilukuin, joiss eniten merkitsevä itti on oikell. Olkoon L = {w Σ lin rivi on khden ylemmän rivin summ} ] Esimerkiksi eli [ 1 1 0 ] [ 1 0 0 ] [ 0 0 1 ] L mutt [ 1 0 1 ] [ 0 0 1 ] L Osoit että tämä kieli L on säännöllinen. Rtkisu: 3 + 1 = 4 mutt 1 + 0 3. Todistetn kieli (määritelmän mukn) säännölliseksi osoittmll, että sillä on sen tunnistv äärellinen utomtti: A D B 0 1 C A = {[ 0 0 0 D = {[ 1 0 0 ] ], [ 1 0 1, [ 0 1 0 ] ], [ 0 1 1, [ 1 1 1 ]} ]} B = {[ 1 1 0 C = {[ 0 0 1 ]} ]} Tiln nimi = muistiitin (crry it) rvo. Siirtymä suoritetn, kun muistiitin + ylimmän urn itin + keskiurn itin summss vähemmän merkitsevä itti = limmn urn itti, j enemmän merkitsevä itti = seurv muistiitti eli kohdetil. 25

Tehtävä 16. Olkoon Σ = {[ 0 0 ], [ 0 1 ], [ 1 0 ], [ 1 1 Jono kkoston Σ symolej määrittelee kksi ur ykkösiä j nolli. Tulkitn nämä inäärilukuin, joiss eniten merkitsevä itti on oikell. Olkoon ]}. L = {w Σ lin rivi on kolme kert ylin rivi} Esimerkiksi [ 1 1 ] [ 0 1 ] [ 1 1 ] [ 1 0 ] [ 0 0 ] [ 0 1 ] L j [ 1 1 ] [ 0 1 ] L eli Osoit että tämä kieli L on säännöllinen. Rtkisu: 13 3 = 39 j 1 3 = 3. Smn tpn kuin edellinen tehtävä, mutt nyt muistiittejä voi oll kksi: 0 0 1 1 0 1 10 1 0 1 1 0 1 0 0 0 3 = 0, 1 3 = 3 = (11) 2, eli tulokseen tulee 1 j muistiin litetn 1. Jos muistiss on 1, j lsketn 0 3, tulokseksi tulee 1 (muistist), jos ts 1 3, tulos on 4 = (100) 2, joten tulositti on 0 j muistiin jää 10, jne... Tämän (j edellisen) tehtävän rtkisu tunnist kuuluuko syöte kieleen. Jos hluisi oikesti tehdä yhteenlskukoneen (ti syötteen vkioll kertovn koneen), niin rtkisu voidn helposti muutt trnsduktoriksi, jonk syötteenä luettisiin vin ylintä (j keskimmäistä) ur, j tulosteen kirjoitettisiin lint ur. (Khden syöteluvun kertolsku ei kuitenkn voine toteutt äärellisenä utomttin.) Jos ei käytettäisikään ur-kkosto, vn kkoston olisikin Σ = {0, 1, +, =}, niin kieli L = {x + y = z x, y j z ovt inäärilukuj j luku z on lukujen x j y summ} ei olekn säännöllinen: jos x j y ovt trpeeksi suuri lukuj, niin äärellinen utomtti ehtii unoht ne lukiessn syötettä. 26

2.8 Sovelluksist Äärelliset utomtit sellisenn ovt hyödyllisiä merkkijonojen käsittelyssä, mistä myöhemmin lisää... Lisäämällä tilsiirtymiin stunnisuutt sdn Mrkovin ketjut eli stunnisprosessit, joill on äärellinen muisti. Perusversioss Mrkovin ketjuihin ei tosin liity mitään syötettä. Mrkovin piilomllit (hidden Mrkov models) ovt lähempänä tässä esitettyjä äärellisiä utomttej. Tilsiirtymäjärjestelmiä käytetään (etenkin hjutettujen järjestelmien) spesifioinniss j verifioinniss. Sovellus: viestinvälitysprotokollt Erilisi protokolli voidn kuvt äärellisinä utomttein ti tilkonein. Trkstelln yksikertist vuorottelevn itin protokoll, joss lähettäjäprosessi S j vstnottjprosessi R kommunikoivt. S lähettää pkettej d 0, d 1, d 2,.... Pketti voi hukku mtkll (kuten kuvss d 1 ). R kuitt sdun pketin (viestillään ) j S lähettää seurvn pketin lähetetään vst kun on snut edellisestä kuittuksen. Jos kuittust ei kuulu sovituss jss, niin pketti lähetään uudestn: S timeout d 0 d 1 d 1 d 2 R Ongelm: Jos kuittus hukkuu, niin R voi sd duplikttiviestin: S timeout d 0 d 1 d 1 d 2 R Rtkisu 1: Numeroidn viestit j kuittukset: timeout S d 0, 0 d 1, 1 d 1, 1 d 2, 2 R, 0, 1, 1, 2 27

Mutt tällöin trvittisiin yhä suurempi j suurempi numeroit 0, 1, 2... Protokolln prnnus Riittää käyttää kht numero (0 j 1 prillinen/priton viesti ): timeout S d 0, 0 d 1, 1 d 1, 1 d 2, 0 R, 0, 1, 1, 0 S j R voidn mllint tilsiirtymäjärjestelminä: Vuorottelevn itin protokoll tilkonein lähettäjä S, 1 vstnottj R, 1 d, 1 timeout timeout d, 0 d, 1 d, 1 d, 0 d, 1 d, 0, 0, 0 d, 0 Jos S ei s joiss symoli, niin se lukee sen sijn timeout-symolin. 2.9 Epädeterministiset äärelliset utomtit Esitellään äärellisille utomteille yleistys, jok on käytännöllinen säännöllisten kielten tunnistus- j hkutehtävien toteuttmisess. Epädeterministisellä utomtill siirtymäfunktio δ liittää nykyisen tiln j syötemerkin priin (q, x) äärellisen joukon vihtoehtoisi seurvi tiloj. Epädeterministinen utomtti hyväksyy merkkijonon x jos sille on olemss jokin hyväksyvä lskent. Siis se hylkää merkkijonon x vin jos kikki sen lskennt ovt hylkääviä. Ihn loogisesti: kosk niin kääntäen x hyväksytään sille on jokin hyväksyvä lskent x hylätään sille ei ole hyväksyvää lskent sen kikki lskennt ovt hylkääviä. 28

Esimerkiksi epädeterministinen utomtti q 0 q 1 q 2 q 3 hyväksyy syötemerkkijonon, kosk sillä on hyväksyvä lskent (q 0, ) (q 0, ) (q 0, ) (q 0, ) (q 1, ) (q 2, ) (q 3, ε). Sillä on myös hylkääviä lskentoj kuten (q 0, ) (q 0, ) (q 0, ) (q 0, ) (q 0, ) (q 0, ) (q 0, ε) mutt niitä ei siis otet huomioon. Determinismi vs. epädeterminismi Deterministisessä utomtiss siirtymä trkoitt, että nykyisestä tilst mennään in kohdetiln sen δ(q, ). Epädeterministisessä utomtiss siirtymä r δ(q, ) trkoittkin, että tilst q syötemerkillä on mhdollist mennä tiln r. Mutt voi oll muitkin mhdollisuuksi s δ(q, ). Epädeterministinen utomtti hyväksyy, jos on mhdollist päätyä hyväksyvään lopputilnteeseen. Eli jos on jokin tp vlit in sopivsti nykyiselle tillle q i seurv til q i+1 δ(q i, i ) siten, että syötteen 0 1 2... n loputtu olln josskin hyväksyvässä tilss q n. Tämä näyttää epäilyttävän epämekniselt: miten nykyisessä tilss q i voitisiin ost tehdä juuri oike vlint näkemättä syötteen loppuos i+1 i+2 i+3... n? Epädeterminismillä onkin erilisi tulkintoj, kuten: Spesifiktion, joss kuvilln minkäliset merkkijonot pitäisi hyväksyä, kertomtt trksti miten niiden hyväksyntä etenisi skel skeleelt. Etsintänä, joss on opertio etsi reitti tästä tilnteest johonkin hyväksyvään lopputilnteeseen. Tämä voitisiin meknisoid vikkp TRA-kurssin keinoin syvyyssuuntisen etsintänä kikkien tilnteiden verkost: 29

DFS(q, x) : 1 if merkkijono x = ε 2 then return onko til q hyväksyvä viko hylkäävä 3 else olkoon x = y joss Σ j y Σ 4 for ech r δ(q, ) 5 do if DFS(r, y) 6 then return true 7 return flse Epädeterministinen utomtti M = (..., q 0, F ) hyväksyy syötteen w jos kutsu DFS(q 0, w) plutt rvon true. Rinnkkisuuten, joss epädeterministinen utomtti seur mhdollisi lskentojn rinnkkin: Deterministinen lskent Epädeterministinen lskent...... hyväksy ti hylkää hyväksy hylkää Epädeterministiset lskennt muodostvt siis kokonisen lskentpuun, jonk hrt vstvt eri vlintkohti. Ilmisen neuvon. Epädeterministisen utomtin voidn jtell svn jokisess vlinttilnteessn Mihinköhän seurvist mhdollisist tiloist δ(q, ) minun knnttisi siirtyä? jostkin ulkopuolelt vstuksen Siirry tiln r, luot minuun! Silloin utomtin itsensä tehtäväksi jää vin vrment että sen smt neuvot olivt oikein. Ti jos jtelln etsintää, niin utomtti ei itse joudu tekemään rskst työtä, vn työn tekee neuvonntj j utomtti s työn tulokset ilmiseksi. Tämän tulkint tulee erityisen kiinnostvksi silloin kun trkstelln utomttej vhvempi lskentmllej mutt rjoitetn niille nnettvien resurssien määrää esimerkiksi P? = NP-ongelm s silloin tulkinnn jos jokin vstus voidn vrment nopesti, niin voisiko sen myös lske nopesti ilmn neuvojkin?. 30

0 1 2 3 ε Kuv 4: ε-utomtti eli ε-nfa Tärkeä tulos Deterministiset ( Deterministic Finite Automt, DFA) j epädeterministiset (Nondeterministic Finite Automt, NFA) utomtit tunnistvt täsmälleen smt kielet (eli säännölliset kielet). DFA j NFA ovt ilmisuvoimltn yhtä vhvoj lskennn mllej niillä voidn hyväksyä smt kielet. Epädeterminismin käyttämimen kuitenkin usein selkeyttää j yksinkertist kielen esitystä. Epädeterministisessä utomtiss sllitn myös ε-siirtymiä kuten kuvss 4. Tällisen ε-siirtymän kuten 1 ε 2 tulkint on, että utomtti voi siirtyä tilst 1 tiln 2 lukemtt yhtään syötemerkkiä. 0 Esimerkkinä kuvn 4 utomtti j lskentpuu syötteellä Vknuolet kuvvt ε-siirtymiä, joiss ei siis luet syötettä. Automtti hyväksyy syötteen, kosk sillä on kksikin hyväksyvää lskent. 0 0 1 2 0 1 2 3 0 2 2 0 1 2 3 3 Seurv NFA hyväksyy kkoston {,, c} merkkijonot, joiss on osjonon ensin j sen jälkeen c ti c. Huom konstruktion modulrisuus: ε-siirtymien vull utomtti voidn muodost helposti osrtktkisuist 31

,,c,,c ε " moduuli" "mitä thns moduuli" ε ε "c moduuli" c ε,,c ε c ε "c moduuli" Määritelmä 2. Epädeterministinen äärellinen utomtti on viisikko M = (Q, Σ, δ, q 0, F ) joss Q on äärellinen tilojen joukko, Σ on äärellinen syötekkosto, δ : Q Σ P(Q) on joukkorvoinen siirtymäfunktio siis sen rvot δ(q, ) Q ovt tiljoukon Q osjoukkoj q 0 Q on lkutil j F Q hyväksyvien lopputilojen joukko. Muist: Mtemtiikss merkintä P(S) (joskus myös 2 S ) trkoitt joukon S potenssijoukko {X X S} eli kikkien niiden joukkojen X joukko, jotk voidn muodost joukon S lkioist. Esimerkiksi P({,, }) = {, { }, { }, { }, {, }, {, }, {, }, {,, }}. Esimerkki 13. q 0 q 1 q 2 q 3 q 0 {q 0, q 1 } {q 0 } q 1 {q 2 } q 2 {q 3 } q 3 {q 3 } {q 3 } Nyt virhetilnne on helposti ilmistviss tyhjän seurjtiljoukon vull. Siirtymätulukoss voidn jättää joukkosulut poiskin: siis joukko {q 0, q 1 } voidn merkitä myös suorn sen lkioiden listn q 0, q 1. Tilnne (q, w) voi joht suorn tilnteeseen (q, w ), jot merkitään smoin kuin ennen eli (q, w) (q, w ), jos w = w j q δ(q, ). Silloin (q, w ) on tilnteen (q, w) M mhdollinen välitön seurj. 32

Muutoin määritelmät epädeterministisille utomteille ovt smt kuin iemmin. Esimerkki 14. NFA inäärijonoille, joiden toiseksi viimeinen itti on 0: 0, 1 0 0, 1 c Vert esimerkin 12 DFA:hn. Tehtävä 17. Ldi kkoston Σ = {, } epädeterministinen utomtti, jok hyväksyy täsmälleen ne merkkijonot, joiss esiintyy merkkijono j sen jäljessä merkkijono. Hetut esiintymät svt oll päällekkäinkin: siis esimerkiksi merkkijono hyväksytään, kosk siinä on lle- j ylleviivuksell merkityt esiintymät. Tehtävä 18. Ldi deterministinen utomtti edellisen tehtävän 17 kielelle. Tärkeän tuloksemme DFA NFA perustelu : Selvästikin deterministiset utomtit ovt epädeterminististen erikoistpus joss in δ(q, ) 1. Siten kikki edellisillä tunnistettvt kielet ovt tunnistettviss myös jälkimmäisillä. : Mutt myös kääntäen (j tämä on se yllättävämpi j vikempi suunt): Jokiselle epädeterministiselle utomtille M on olemss smn kielen tunnistv deterministinen utomtti M. Tämä osoitetn myöhemmin kehittämällä menetelmä, joll syötteenä sdust utomtist M voidn muodost sitä vstv M eli menetelmä determinisoid M. 33

2.9.1 Epädeterministisen utomtin simulointi Pltn iempn esimerkkiin kuvss 4. Lditn lgoritmi, jok käy läpi lskentpuut leveyssuuntisesti. Algoritmi pitää muuttujss NykyisetTilt list niistä tiloist, joiss se tällä hetkellä voisi oll (lskentpuun tso). Kullkin skeleell sitä päivitetään lskemll 0 1 2 3 ε 0 0 1. stu syötemerkkiä vstvt seurjtilt j 2. ne tilt, joihin niistä päästään ε- siirtymillä. 0 1 2 0 1 2 3 0 2 2 0 1 2 3 3 Tiljoukon R Q ε-sulkeum E(R) koostuu niistä tiloist, joihin tiljoukost R pääsee ε-kri pitkin. Siis R E(R) kosk jokisest tilst pääsee suorn itseensä ilmn yhtään (edes ε-)siirtymää, j jos tilst s E(R) on ε-siirtymä s ε t niin myös sen kohdetil t E(R). Muut sitten ei kuulukn joukkoon E(R). SimulteNFA(M, syöte): 1 NykyisetTilt E(q 0 ) // lkutiln ε-sulkeum 2 while syötettä on jäljellä 3 do lue seurv syötemerkki 4 SeurjTilt 5 for q NykyisetTilt 6 do SeurjTilt SeurjTilt δ M (q, ) 7 SeurjTilt E(SeurjTilt) 8 NykyisetTilt SeurjTilt 9 return F NykyisetTilt // onko svutettu joku lopputil? Algoritmi SimulteNFA tulkitsee epädeterministisen lskennn deterministiseksi. Yksittäinen syötemerkki käsitellään (phimmss tpuksess) jss O( Q 2 ). 34

Tästä tulkkuksest päästään eroon kääntämällä, eli muodostmll deterministinen utomtti, jok tunnist smn kielen. Menetelmä muodost DFA:n siirtymätulukon siis etukäteen. Muuttujn NykyisetTilt rvot kuuluvt potenssijoukkoon P(Q). Siten sillä on korkeintn P(Q) = 2 Q mhdollist rvo joten voimme muodost äärellisen DFA:n littmll kukin mhdollinen NykyisetTiltrvo omksi tilkseen j siirtymät kuten SimulteNFA ne lskisi. Siis muodostmme NFA:st M DFA:n M seurvsti: Akkosto on molemmill sm Σ. Tiljoukko Q cm = P(Q M ). Siirtymäfunktio koostuu siirtymistä NykyisetTilt SeurjTilt joss nämä muuttujt NykyisetTilt, j SeurjTilt ovt kuten tulkkilgoritmin SimulteNFA riveillä 4 7. Eli kun nnetn til NykyisetTilt Q cm ( P(Q M )), niin käydään läpi jokinen Σ, j lsketn sille vstv SeurjTilt P(Q M ) ( Q cm ). Alkutil on kuten SimulteNFA-lgoritmin rivillä 1: E(q 0 ), missä q 0 on NFA:n M lkutil. Hyväksyvät tilt ovt kuten sen rivillä 9: ne tilt, joihin sisältyy inkin yksi NFA:n M lopputil. 2.10 Automtin determinisointi ( osjoukkokonstruktio ) 1 Alust tulos M sisältämään lkutil E(q 0 ), missä q 0 on NFA:n M lkutil, j merkitse se uudeksi 2 while tuloksess M on uusi tiloj 3 do NykyisetTilt ot jokin niistä j merkitse se vnhksi 4 if NykyisetTilt sisältää NFA:n M jonkin hyväksyvän tiln 5 then merkitse NykyisetTilt hyväksyväksi tilksi 6 for ech Σ 7 do lske SeurjTilt kuten lgoritmin SimulteNFA riveillä 4 7 8 if til nimeltä SeurjTilt puuttuu tuloksest M 9 then luo sellinen j merkitse se uudeksi 10 Lisää tulokseen M siirtymä NykyisetTilt SeurjTilt Esimerkki 15. Determinisoidn epädeterministinen utomtti M q 0 q 1 q 2 q 3 35

Esimerkiksi tiln s 2 = {q 0, q 2 } seurj syötemerkillä on til s 3 = {q 0, q 1, q 3 }, jok koostuu joukon s 2 lkioiden seurjist merkillä : s 3 s 2 q 0 q 2 q 0 q 3 q 1 1. Aloitetn lisäämällä lkutil {q 0 } j lskemll siitä lähtevät siirtymät. {q 0 } = s 0 {q 0, q 1 } {q 0 } Jtketn uudell tilll {q 0, q 1 }. 2. Lsketn tiln {q 0, q 1 } siirtymät: {q 0 } = s 0 {q 0, q 1 } {q 0 } {q 0, q 1 } = s 1 {q 0, q 1 } {q 0, q 2 } Jtketn uudell tilll {q 0, q 2 }. 3. Lsketn tiln {q 0, q 2 } siirtymät: {q 0 } = s 0 {q 0, q 1 } {q 0 } {q 0, q 1 } = s 1 {q 0, q 1 } {q 0, q 2 } {q 0, q 2 } = s 2 {q 0, q 1, q 3 } {q 0 } 4. Stiin uusi til {q 0, q 1, q 3 } j jtketn sillä... 5.... j iknn sdn lopputulos: {q 0 } = s 0 {q 0, q 1 } {q 0 } {q 0, q 1 } = s 1 {q 0, q 1 } {q 0, q 2 } {q 0, q 2 } = s 2 {q 0, q 1, q 3 } {q 0 } {q 0, q 1, q 3 } = s 3 {q 0, q 1, q 3 } {q 0, q 2, q 3 } {q 0, q 2, q 3 } = s 4 {q 0, q 1, q 3 } {q 0, q 3 } {q 0, q 3 } = s 5 {q 0, q 1, q 3 } {q 0, q 3 } 36

q 0 q 0, q 1 q 0, q 2 q 0, q 1, q 3 q 0, q 2, q 3 q 0, q 3 Esimerkki 16. Determinisoidn 0 0 ε c 0 1 1 ε d Siinä on sekä ε-siirtymiä että tvllinen epädeterministinen siirtymä (tilst merkillä 0). 1. Alkutilksi sdn 2. Alkutilst päästään tiloihin E({}) = {, c, d} δ({, c, d}, 0) = E(δ(, 0) δ(c, 0) δ(d, 0)) δ({, c, d}, 1) = {d} = E({, } {c} ) = E({,, c}) 3. Käsitellään uudet tilt {,, c, d} j... 4. sitten til {d}: = {,, c, d} ensimmäinen uusi til δ({,, c, d}, 0) = {,, c, d} δ({,, c, d}, 1) = {c, d} toinen uusi til. sm vnh til kolms uusi til. δ({d}, 0) = δ({d}, 1) = neljäs uusi til. 5. Sitten tiln {c, d} seurjt: δ({c, d}, 0) = {c, d} δ({c, d}, 1) = {d} sm vnh til toinen vnh til. 37

6. Ei enää uusi tiloj; Lopputulos: til 0 1 {, c, d} {,, c, d} {d} {,, c, d} {,, c, d} {c, d} {c, d} {c, d} {d} {d} {, c, d} 0 1 0 {,, c, d} {d} 1 1 0 1 0 {c, d} 0 1 Esimerkki 17. Determinisoidn kkoston Σ = {M, I, U} seurv epädeterministinen utomtti: M,I,U M,I,U M I U 0 1 2 3 Rtkisu: Kun generoidn koko potenssijoukko eli käytetään suor mtemttist määritelmää eikä while-lgoritmi niin sdn tulokseksi: 38

M I U A {0} {0, 1}=E {0}=A {0}=A B {1} {2}=C C {2} {3}=D D {3} {3}=D {3}=D {3}=D E {0, 1} {0, 1}=E {0, 2}=F {0}=A F {0, 2} {0, 1}=E {0}=A {0, 3}=G G {0, 3} {0, 1, 3}=L {0, 3}=G {0, 3}=G H {1, 2} {2}=C {3}=D I {1, 3} {3}=D {2, 3}=J {3}=D J {2, 3} {3}=D {3}=D {3}=D K {0, 1, 2} {0, 1}=E {0, 2}=F {0, 3}=G L {0, 1, 3} {0, 1, 3}=L {0, 2, 3}=M {0, 3}=G M {0, 2, 3} {0, 1, 3}=L {0, 3}=G {0, 3}=G N {1, 2, 3} {3}=D {2, 3}=J {3}=D O {0, 1, 2, 3} {0, 1, 3}=L {0, 2, 3}=M {0, 3}=G joss S P(Q) ovt svutettvt tilt ne jotk myös while-lgoritmi tuottisi P(Q) \ S ovt svuttmttomt tilt ne jotk while-lgoritmi jättäisi tuottmtt. Tulos tilsiirtymäkvion johon on piirretty vin svutettvt tilt: I,U M I,U M I A E F U M U G I M L U I M I,U M M Sm minimoitun: I,U M M,I,U A M I E U M F I U G Tehtävä 19. Determinisoi seurv utomtti: 39

1 Tehtävä 20. Determinisoi utomtti:, 2 1 ε 2 3, Tehtävä 21. Determinisoi utomtti: ε 1 2, 3 Hhmonsovituksest Epädeterministisellä utomtill voi helposti kuvt hhmonsovitusongelmi: esiintyykö nnettu merkkijono y syötteessä x? Mikä thns yksittäinen merkkijono (eli yksilkioinen kieli) y = y 1 y 2 y 3... y m Σ voidn tunnist yksinkertisell epädeterministisellä utomtill: y 1 y 2 y 3 y m... Σ Σ Kun tällinen utomtti determinisoidn, tilojen lukumäärä m+1 ei muutu. (Vrt. esimerkki 17.) 40

Tällisen epädeterministisen utomtin kikki lskentpolkuj voi myös simuloid tehokksti, jos m = O(tietokoneen ittisyys eli nykyään 32 ti 64) ns. shift-or/shift-nd lgoritmill. Mutt yleisessä tpuksess (eli kun kyseessä on mielivltinen säännöllinen kieli) voi tilojen määrä ksv phimmilln eksponentiliseksi, onhn P(Q) = 2 Q. Toislt yksinkertiselle hhmonsovitusongelmlle ostn muodost deterministinen utomtti suornkin jss O(m), ns. Knuth-Morris-Prtt lgoritmi. Ensimmäinen ekskursio: NFA:n simulointi Olkoon pitkä teksti t j lyhyt merkkijono p ASCII-kkoston merkkijonoj, j n = t, m = p, j m w, missä w on ittien lukumäärä int-muuttujss (esim. 32 ti 64). Seurv C-kielinen funktio kertoo kikki kohdt missä p esiintyy t:ssä. Algoritmi perustuu NFA:n simuloimiseen, j se toimii jss O(n) (nyt kun m w). Yleisesti otten mielivltisen NFA:n tehoks simuloiminen on kuitenkin voin ongelm. Miten lgoritmi toimii??? Tämä ei kuulu kurssiin. Ongelm on mhdollist rtkist myös keskimääräisessä jss O(n log Σ (m)/m)... void shift_or (chr * t, int n, chr * p, int m) { unsigned [256], d = ~0, mm = 1 << (m - 1); int i; } for (i = 0; i < 256; i++) [i] = ~0 >> (sizeof (int) * 8 - m); for (i = 0; i < m; i++) [p [i]] &= ~(1 << i); for (i = 0; i < n; i++) { d = (d << 1) [t [i]]; if ((d & mm)!= mm) printf("löytyi, kohdst %d\n", i); } Toinen ekskursio: Knuth Morris Prtt Olkoot edelleen t j p ASCII kkoston merkkijonoj, j n = t, m = p. Seurv C-kielinen funktio kertoo kikki kohdt missä p esiintyy t:ssä. Algoritmi perustuu deterministiseen utomttiin. Tässä on kuitenkin ε-siirtymiä, mutt näitä ei seurt jos on toinenkin vihtoehto, joten hrutumist ei tphdu... Algoritmi toimii jss O(n+m). Miten se täsmällisesti otten toimii??? Tämäkään ei kuulu kurssiin. 41

void kmp (chr * t, int n, chr * p, int m) { int i = 0, j = -1, [m]; [i] = j; while (i < m) { while (j >= 0 && p [i]!= p [j]) j = [j]; [++i] = ++j; } i = j = 0; while (i < n) { while (j >= 0 && t [i]!= p [j]) j = [j]; i++; j++; if (j == m) { printf("löytyi, kohdst %d\n", i); j = [j]; } } } Epädeterminismin sovelluksi Näemme pin, että epädeterminismi yksinkertist huomttvsti moni utomttikonstruktioit. Sillä on käyttöä tietojenkäsittelytieteessä ljemminkin, esim. Rinnkkisjärjestelmät: Asynkronisess lskennss eri prosessien suoritusjärjestys ei ole tiuksti kontrolloitviss. Ajttelemme siis, että suoritusjärjestys määräytyy epädeterministisesti j vdimme esim. että järjestelmä ei s lukkiutu millään suoritusjärjestyksellä. Lskennn vtivuus: Monille tärkeille etsintä- j optimointiongelmille on helppo esittää epädeterministinen rtkisu, mutt sen tehoks simuloiminen deterministisellä (eli oikell) tietokoneell on voin ongelm. Vrt. edellä: NFA:n muuntminen DFA:ksi stt iheutt tilojen lukumäärän eksponentilisen ksvun. (Mutt ei in, kuten nähtiin.) 2.11 Säännölliset lusekkeet j äärelliset utomtit Osoitetn seurv tärkeä tulos: 1. Jokisen säännöllisen lusekkeen r kuvm kieli voidn tunnist äärellisellä utomtill M r : Muodostetn lusekett r vstv (epädeterministinen) ε-utomtti. Hluttess tämä epädeterministinen utomtti voidn vielä determinisoid (j minimoid). 2. Jokisen äärellisen utomtin M tunnistm kieli L(M) voidn kuvt säännöllisellä lusekkeell r M : Redusoidn utomtti 2-tiliseksi ns. lusekeutomtiksi, jost voidn luke vstv säännöllinen luseke. 42

r = : r = s t: r = ε: ε ε M s ε r =, Σ ε M t ε r = st: r = s : ε M s M t ε M s ε ε Kuv 5: Thompson-muuunnos säännöllisestä lusekkeest ɛ-utomtiksi. 2.11.1 Säännöllisestä lusekkeest utomtti Säännöllinen luseke on käytännöllinen tp määritellä esim. tekstinhku- ti tyypintrkistustehtäviä. Miten näin määritelty tehtävä sdn suoritettu? Luse 1. Säännöllisen lusekkeen kuvm kieli voidn tunnist äärellisellä utomtill. Todistus: Annetn kuvn 5 eräs menetelmä, joll voidn muodost mielivltist säännöllistä lusekett r vstv ε-utomtti M r, joll L(M r ) = L(r). (Tämä on ns. Thompson-konstruktio. Muitkin menetelmiä on.) Tehtävä 22. Muodost säännöllistä lusekett (c) vstv ε-utomtti. Esimerkki 18. Muodostetn säännöllistä lusekett (( ) ( )) vstv äärellinen utomtti. 43

ε ε ε ε ε ε M ε ε M ( ) ( ) ε ε ε M ε ε ε ε ε ε ε ε ε, Tehtävä 23. Muodost säännöllistä lusekett (0 1) 0 (0 1) 01 = (0 1) (0 01) = (0 1 ) (0 01) vstv äärellinen utomtti. Tehtävä 24. Muodost C-kielen liukuluvut tunnistv utomtti säännöllisestä lusekkeest (d +.d.d + )(ε ((e E)(+ ε)d + )) d + (e E)(+ ε)d + joss d = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ovt 10-järjestelmän numeromerkit. Luseke voidn esittää ekvivlentisti monell tp, j os-utomtit jost lopullinen rtkisu sdn voivt oll erilisi. Lusekett vstvi utomttej on siis erilisi (kunnes on determinisoitu j minimoitu). 2.11.2 Automtist säännöllinen luseke Luse 2. Jokinen äärellisen utomtin tunnistm kieli voidn kuvt säännöllisellä lusekkeell. Todistus: Esitetään menetelmä, joll utomtist M voidn kirjoitt ekvivlentti säännöllinen luseke r M, eli joll L(r M ) = L(M). Menetelmä toimii poistmll välitiloj, jotk esiintyvät utomtin lkutilst lopputiln johtvill poluill. Polku välitiln edeltäjätilst i sen seurjtiln j korvtn oikotiellä eli yhdellä suorll siirtymällä. Oikotien on kuvttv kikki merkkijonot jotk voitiin kerätä kuljettess tilst i tiln j poistetun välitiln kutt 44

ε ε f ε Kuv 6: Lopputilojen korvminen yhdellä uudell. Niinpä oikotie i merkkijonot. r j nimetään säännöllisellä lusekkeell r, jok kuv nämä Menetelmässä käytetään siis ns. lusekeutomttej, joiss siirtymillä on yksittäisen syötemerkin sijst kokoninen säännöllinen luseke intuitio on, että siirtymässä i r j 1. luetn jäljellä olevn syötteen lust jokin lusekkeen r mukinen merkkijono, j 2. jtketn jäljelle jääneen syötteen loppuosn käsittelyä tilst j. Tvlliset utomtit j ε-utomtit ovt lusekeutomttien erikoistpuksi, kosk yksittäiset merkit j ε ovt myös säännöllisiä lusekkeit. Ohitmme formlin määritelmän (vikkei se olekn hnkl). Olkoon utomtin lkutil s. Yksinkertistetn käsittelyä olettmll, että utomtill on täsmälleen yksi lopputil, jost lisäksi ei lähde siirtymiä eikä se myöskään ole lkutil s. (Jos näin ei ole, korvtn vnht lopputilt yhdellä uudell, johon lisätään ε-siirtymät vnhoist lopputiloist. Ks. kuv 6.) Oikoteiden muodostminen: 1. Poistetn ensin kikki rinnkkiset siirtymät: Jos on kksi smojen tilojen p q välistä siirtymää i j j i j, korv ne yhdellä yhteisellä siirtymällä i p q j kuten kuvss 7. Selvästi tämä säilyttää smoin ne merkkijonot, jotk kerättäisiin kulkemll näitä siirtymiä pitkin solmust i solmuun j. 2. Sitten poistetn utomtist välitilt: Snotn, että til k s on välitil, til i sen edeltäjä j til j sen seurj, p i r j jos utomtiss on siirtymät i k j k j, j k i, j. (Edeltäjä j seurj voivt kuitenkin keskenään oll sm til.) Millisi merkkijonoj pitää välitiln k ohittvn oikopolun i R i,j j hyväksyä? 45

p i j = i p q j q Kuv 7: Kksi rinnkkist siirtymää yhdeksi. V: Niitä, joiden lkuos hyväksytään krell (i, k) j loppuos krell (k, j). Lähtökohtisesti sdn siis suor siirtymä i p i.r j j. Jos välitilst k on lisäksi silmukksiirtymä k q k tkisin itseensä, tällist voidn kulke mielivltisen mont kert. Tällöin oikopoluksi tulee i p i.q.r j j (2) kuten kuvss 8. Jos välitiln edeltävän i j seurjn j välillä oli jo suor siirtymä i r i,j j, niin oikopolun luseke lisätään siihen uuten vihtoehton: ti (jos välitilll oli silmukksiirtymä) i r i,j p i r j j (3) i r i,j p i q r j j (4) Jos välitiln edeltäjä j seurj ovt sm til, niin oikopolku on silmukksiirtymä. Kun välitillle on muodostettu oikopolku sen jokisest edeltäjästä sen jokiseen seurjn, niin tämä välitil k j kikki siihen liittyvät siirtymät voidn poist. Kun rinnkkiset siirtymät j välitilt on poistettu, niin: Automtiss on jäljellä sen lkutil s j lopputil f. Jos lkutilst ei ole siirtymää lopputiln, utomtti vstv luseke on : Alkuperäisessä utomtiss ei ole millään syötteellä lopputiln johtv polku. Muuss tpuksess redusoiduss lusekeutomtiss on siirtymä s r f. Jos tilst s on lisäksi silmukk s q s tkisin itseensä, tunnistettu kieltä kuvv luseke lk itertioll q. Tällöin tulos on q r (5) Jos tällist lkutiln silmukk ei ole, niin sitä vstv os q jää pois lopputuloksest (5). 46

q i. p i k r j. j p i q r j Kuv 8: Oikotie välisolmun k ohi. q r s r f q Kuv 9: Luseke kutistuneest utomtist. Esitetään tämä menetelmä vielä lgoritmin: 1 Lisää kuvn 6 mukinen yksikäsitteinen lopputil f jollei sellist jo ole p q 2 while on rinnkkiset siirtymät i j j i j 3 do korv ne yhdellä siirtymällä i p q j 4 while on välitiloj s, f 5 do k jokin (mikä thns) välitil p i 6 for ech siirtymä i k joss i k 7 do for ech siirtymä k r j j joss j k 8 do if on siirtymä k q k 9 then t p i q r j 10 else t p i r j 11 u if on siirtymä i j 12 then päivitä se muotoon i u t j 13 else lisää siirtymä i t j 14 poist til k j kikki nämä siihen liittyvät siirtymät 15 if on siirtymä s r f 16 then if on siirtymä s q s 17 then return q r 18 else return r 19 else return 47

Otetn esimerkki tästä menetelmästä: (i) lkuperäinen utomtti: (ii) lisätään yksikäsitteinen lopputil: 0 0 0 0 0 0 s 1 s 1 1 1 1 (iii) yhdistetään rinnkkiset: 1 1 ε 1 f (iv) poistetn til: ε s 1 0 1 0 1 s 1 0 1 0 1 ε f ε 0 1 ε (0 1)ε f (v) poistetn til: (vi) poistetn til: s 1 (0 1)(ε (0 1)ε) s 1(0 1)(ε (0 1)ε) 0 1 f 0 1 f Nyt voidn luke lopputulos (0 1) 1(0 1)(ε (0 1)ε) jot voidn vielä hiemn sieventää muotoon (0 1) 1(0 1)(ε 0 1) jost voidn luke vstus: lkuperäinen utomtti hyväksyy ne inäärijonot, joiden toiseksi ti kolmnneksi viimeinen merkki on 1. Lusekkeit voi j knnttkin sievennellä jo menetelmän ikn. Tehtävä 25. Muodost seurvn utomtin tunnistm kieltä kuvv säännöllinen luseke:, 1 2 3 48

2.12 Säännöllisten kielten sulkeumominisuudet Mtemtiikss snotn että joukko X on suljettu jonkin opertion suhteen, jos soveltmll opertiot joukon X lkioihin sdn tulokseksi in joukon X lkioit eli jos opertio ei vie pois joukost X. Esimerkiksi luonnollisten lukujen joukko N on suljettu yhteenlskun suhteen, kosk m + n N jokisell m, n N. Se ei kuitenkn ole suljettu vähennyslskun suhteen, kosk esimerkiksi 5 8 N, vikk 5, 8 N. Trkstelln säännöllisten kielten joukko (s.o. merkkijonojoukkojen joukko). Minkälisten opertioiden suhteen se on suljettu? Luse 3. Olkoot L 1 j L 2 kkoston Σ säännöllisiä kieliä. Tällöin myös seurvt ovt säännöllisiä kieliä: yhdiste L 1 L 2 leikkus L 1 L 2 ktentio eli tulo L 1 L 2 komplementti L 1 = Σ \ L 1 erotus L 1 \ L 2 (Kleenen) sulkeum (L 1 ) käänteiskieli (L 1 ) R = {w R w L 1 } eli kielen L 1 merkkijonot tkperin kirjoitettuin. Toisin snoen säännöllisten kielten joukko on suljettu kikkien näiden opertioiden suhteen. Todistus: Perustelln ll. Huom että luse 3 on yksisuuntinen: Esimerkiksi yhdiste L 1 L 2 voi oll säännöllinen, vikk sen ost L 1 j L 2 eivät ole. Esimerkiksi säännöllinen kieli L( ) = L 1 L 2 voidn muodost osist L 1 = { i j i j} j L 2 = { i j i > j} joist kumpikn ei ole säännöllinen (mikä voidn osoitt pumppuslemmll ). 49

Sulkeum säännöllisten operttoreiden suhteen Sännölliset kielet nähdään helposti suljetuiksi säännöllisten lusekkeiden operttoreiden suhteen: Olkoot A j B säännöllisiä kieliä, eli A = L(p) j B = L(q) joillin säännöllisillä lusekkeill p j q. Tällöin A B = L((p q)) AB = L((pq)) j A = L(p ) Kukin on ilmistviss säännöllisellä lusekkeell, eli kukin on säännöllinen kieli. Sulkeum komplementoinnin suhteen Esimerkki 19. Lditn utomtti, jok tunnist kielen L(M) = {w {, } w ei sisällä merkkijono }. Lditn ensin deterministinen utomtti, jok tunnist sen komplementtikielen L(M) = {w {, } w sisältää merkkijonon }. Hluttu utomtti sdn vihtmll hyväksyvät tilt hylkääviksi j päinvstoin.,, 0 1 2 3 0 1 2 3 Huom: virhetilojen on oltv mukn, kosk niistä tulee komplementtiutomtin hyväksyviä tiloj. Sm voidn tehdä jokiselle deterministiselle utomttille j siten jokiselle säännölliselle kielelle. Säännöllisten kielten leikkus/yhdiste/erotus utomtill Säännöllisten kielten A j B joukko-opillinen yhdistelmä L (leikkus, yhdiste ti erotus) voidn tunnist ns. tuloutomtill, jonk simuloi khden utomtin siirtymiä rinnkkin Olkoot M A = (Q A, Σ, δ A, q A, F A ) j M B = (Q B, Σ, δ B, q B, F B ) deterministiset utomtit, joill A = L(M A ) j B = L(M B ). Tuloutomtin M tiloj ovt tilprit (p, q) Q A Q B ; lkutil on (q A, q B ). Tuloutomtin siirtymäfunktio δ muodostuu komponenttitilojen siirtymistä: δ ((p, q), ) = (δ 1 (p, ), δ 2 (q, )) Lopputilt F vlitn sen mukn mitä joukko-opertiot toteutetn: 50

Jos L = A B, niin F = {(p, q) p F A j q F B } Jos L = A B, niin F = {(p, q) p F A ti q F B } Jos L = A \ B, niin F = {(p, q) p F A j q F B }. Esimerkki 20. Trkstelln kkoston {, } kieliä A := jonot jotk loppuvt -merkkiin j B := jonot joiden pituus on prillinen Yhdistetään niitä tunnistvt utomtit M A j M B : p q, 0 1, Jonot, joiden viimeinen merkki on j pituus prillinen: (p,0) (p,1) (q,1) (q,0) Jonot, joiden viimeinen merkki on ti pituus prillinen: (p,0) (p,1) (q,1) (q,0) Jonot, joiden viimeinen merkki on j pituus priton: 51

(p,0) (p,1) (q,1) (q,0) Säännöllisen kielen käänteiskieli Miksi säännöllisen kielen L käänteiskieli (L) R olisi säännöllinen? Olkoon M = (Q, Σ, δ, q 0, F ) kielen L tunnistv DFA. Kuten iemmin, voidn olett (sllimll ε-siirtymiä), että utomtill on yksikäsitteinen lopputil f. Muodostetn käänteiskielen hyväksyvä NFA M settmll sen lkutilksi f j lopputilksi q 0 j kääntämällä utomtin M siirtymät päinvstisiksi. Formlisti utomtin M siirtymäfunktio δ : Q (Σ {ε}) P (Q) määräytyy säännöllä δ (q, ) := {p Q δ(p, ) = q}. 2.13 Säännöllisten kielten rjoituksist Kysymys: Kuink voidn hvit, ettei ongelm rtkekn äärellisillä utomteill? Eli ettei vstv formlikieli olekn säännöllinen? Esimerkki 21. Onko sisäkkäisten sulkulusekkeiden muodostm kieli L ( ) = {( i ) i i 0} säännöllinen? Yritetään tehdä sille utomtti: p 0 ( ( ( ( ( p 1 p 2 p n 1 ) ) ) ) p n ) ) ) q 0 q 1 q n 2 ) q n 1 Mutt entäpä jos sisäkkäisiä sulkuprej onkin n + 1 kpl? Automttien rjllinen muisti Äärellinen utomtti muist syötteen lkuosn vin tilojens vull. Se ei siis voi pitää kirj kikist näkemistään merkeistä. Ääretön kieli voi oll säännöllinen vin jos siinä on jokin toistuv rkenne. Automtiss silmukk, säännöllisessä lusekkeess sulkeum (...). Säännöllisten kielten pumppuslemm formlisoi tämän hvinnon. 52

Kielen osoittminen säännölliseksi on yleisessä tpuksess lgoritmisesti rtkemton ongelm; siihen trvitn ihmisen mtemttist intuitiot on keksittävä sille utomtti ti luseke ti todistettv se sulkeumominisuuksien vull säännöllisiksi tiedetyistä kielistä ti... Stt näyttää ilmeiseltä, että äärellisen muistin jtuksen soveltminen olisi jotenkin intuitiivisesti selvää, eli että muistivtimukset näkisi jotenkin suorn. Kieli A = {w {0, 1} w sisältää yhtä mont noll j ykköstä} ei ole säännöllinen (todistetn pin... ). Mutt kieli onkin säännöllinen. B = {w {0, 1} w:ssä esiintyy 01 j 10 yhtä mont kert} Tehtävä 26. Todist että tämä kieli B on säännöllinen. Vihje: Mitä rvoj osjonojen 01 j 10 lukumäärän ero voi sd? Luse 4. Kieltä C = {0 n 1 n n N} ei voi tunnist äärellisellä utomtill. Todistus: Osoitetn, että vstoletuksest C = L(M) jollin äärellisellä utomtill M seur ristiriit: Olkoon M vstoletuksen mukinen utomtti j siinä p = Q til. Kosk L(M) = C, niin silloin myös syöte s = 0 p 1 p L(M). Merkitään syötteen s merkkejä s 1 s 2 s 2p. Syötteellä s utomtti käy yhteensä 2p + 1 tilss, mukn lukien lkutil (joist os on smoj): r 1 0 r 2 0 Siis r 1 on lkutil j δ(r i, s i ) = r i+1 0 r 1 p+1 r 1 1 p+2 r 2p+1. Kosk Q < p + 1, jonoss r 1,..., r p+1 inkin yksi til esiintyy usemmin kuin kerrn, eli r i = r j jollin i < j p + 1. Automtti tekee merkkijonoll s i... s j 1 silmukn tilst r i tkisin tiln r i = r j : x = s 1... s i 1 r i = r j z = s j... s 2p r 1 r 2p+1 y = s i... s j 1 Automtti siis hyväksyy lkuperäisen jonon s = xyz = xy 1 z kiertämällä silmukn yhden kerrn. Merkitään vstv hyväksyvää lskent lyhyesti: r 1 x r i y ri z r 2p+1. 53

Silmukn sisältävästä hyväksyvästä lskennst sdn uusi hyväksyvä lskent ohittmll silmukk: r 1 x r i z r 2p+1 Siis utomtti hyväksyy myös merkkijonon xy 0 z = xz. Silmukk voidn myös toist mielivltisen mont kert: r 1 x r i y ri y ri z r 2p+1 r 1 x r i y ri y ri y ri z r 2p+1 Siis utomtti hyväksyy myös merkkijonot xy 2 z = xyyz, xy 3 z = xyyyz,... Kysymys: Kuuluuko merkkijono xy l z kieleen C = {0 n 1 n n N} jokisell toistokertojen lukumäärällä l N? Jono y = 0 k, missä k = j i > 0 xy 0 z = xz = 0 p k 1 p ei kuulu kieleen C; xy 2 z = xyyz = 0 p+k 1 p ei kuulu kieleen C; xy 3 z = 0 p+2k 1 p ei kuulu kieleen C jne. Kosk utomtti kuitenkin hyväksyy nämä jonot, tämä on ristiriit oletuksen C = L(M) knss. Siis kieltä C ei voi tunnist millään p-tilisell äärellisellä utomtill, eli kieli C ei ole säännöllinen. Edellisen todistuksen peruside oli osoitt, että jos M on p-tilinen utomtti, niin kielellä L(M) on pumppuspituus p: Määritelmä 3. Kielellä A on äärellinen pumppuspituus p N, jos mikä thns s A, joll s p, voidn esittää muodoss s = xyz, missä 1. xy i z A kun i = 0, 1, 2,..., 2. y > 0 j 3. xy p. Siis x = ε j z = ε ovt sllittuj, mutt y ε (ehto 2, kosk muuten pumpttvuus olisi trivili). Kun kielellä on äärellinen pumppuspituus, millä thns riittävän pitkällä merkkijonoll s on epätyhjä keskios y, jot pumppmll sdn uusi kieleen kuuluvi merkkijonoj xy 2 z, xy 3 z,... Luse 5 (Säännöllisten kielten pumppuslemm). Jokisell säännöllisellä kielellä on äärellinen pumppuspituus. Todistus: Vstv kuin edellisen luseen todistuksess. Intuitiivisesti: Äärettömän säännöllisen kielen tunnistvss utomtiss on silmukk siten, että 54

1. xy i z A: silmukk voidn kiertää mielivltisen mont (i) kert, j silti voidn päästä jonoll z hyväksyvään tiln. 2. y > 0: silmukk ei ole tyhjä, vn siihen kuuluu vähintään yksi ei-tyhjä siirtymä. 3. xy p: lskennn täytyy joutu silmukkn ennen kuin utomtist loppuvt tilt. Pumpputuvuusehto 1 trkoitt, että kieli sisältää merkkijonot xz, xyz, xyyz, xyyyz,... Ehdost 2 seur, että nämä jonot ovt toinen toistn pidempiä. Siis merkkijono y pumppmll sdn rjttomsti uusi kieleen kuuluvi merkkijonoj. Ehdon 3 nojll tämä osjono y löytyy snn s lkuosst, jonk pituus on p. Kielen pumpputuvuus trkoitt, että jokinen trpeeksi pitkä kieleen kuuluv merkkijono on pumpputuv jollin ehdot täyttävällä osjonolln y. Pumppuslemmn soveltminen Kiinnostv vin äärettömille kielille (äärelliset kielet ovt in säännöllisiä). Pumppuslemmn mukn jokisell säännöllisellä kielellä A on pumppuspituus p N, joll pätee seurv: mille thns riittävän pitkälle s A (eli s p) on olemss jko s = xyz joll pumppusehdot 1 3 toteutuvt. Pumppuslemmll ei voi osoitt kielen säännöllisyyttä, vin ei-säännöllisyyden. (Eikä in sitäkään, kosk on olemss ei-säännöllisiä kieliä, joill on äärellinen pumppuspituus... ) Iden todistus kontrpositioll, eli lemm käytetään käänteisesti ; A on säännöllinen A on pumpttviss A ei ole pumpttviss A ei ole säännöllinen Toisin snoen, on osoitettv, että oletetulle pumppuspituudelle p N on olemss sellinen s A, että s p j mille thns sen jolle s = xyz jokin pumppusehdoist 1 3 jää toteutumtt. Siis luksi voimme itse vlit snn s sopivsti helpottmn todistust, mutt sitten meidän pitää käydä läpi kikki mhdolliset tvt jk se osiin x, y j z j osoitt, että mikään jko ei toteut pumppusehtoj. Toisin snoen, kun hlutn todist kieli ei-säännölliseksi, tehdään vstoletus että se olisikin säännöllinen, j osoitetn että tästä seur ristiriit...... jonk voi osoitt käyttämällä pumppuslemm...... mutt jonk voi osoitt muutenkin: Esimerkiksi sulkeumominisuuksien vull ( plutetn ongelm tunnettuun kieleen). 55

Esimerkki 22. Kieli C = {0 n 1 n n N} ei ole säännöllinen. Todistus: Tehdään vstoletus että C olisikin säännöllinen. Silloin sillä olisi äärellinen pumppuspituus p siten, että jokinen inkin sen pituinen merkkijono s C (eli s p) jkutuu jotenkin osiin s = xyz jotk täyttävät ominisuuden 3 ehto. Me emme tiedä vkion p rvo, mutt me smme vlit sellisen merkkijonon s kuin hlumme (kunhn vlitsemme trpeeksi pitkän). Kun olemme vlinneet merkkijonomme s, niin me emme tiedä sen jost s = xyz muut kuin nämä 3 ominisuutt. Kosk tvoittelemme ristiriit, niin useimmiten knntt vlit s siten, että ehdot 2 j 3 ovt voimss, j osoitt että silloin ehto 1 ei enää sdkn voimn. Tässä todistuksess knntt vlit s = 0 p 1 p (ti jokin vielä pidempi) kosk silloin ehdot 2 j 3 kertovt meille pljon osien xy rkenteest: joss k > 0 mutt j + k p. x = 0 j y = 0 k z = 0 p (j+k) 1 p Kosk tämä järkeilymme ei olet näistä rvoist j j k mitään muut, niin olemme tulleet käyneeksi läpi smll kert kikki mhdolliset jot. Nyt ehdon 3 mukn (vikkp) i = 0 kert pumpttu merkkijono 0 j 0 p (j+k) 1 p = 0 p k 1 p C. Mutt toislt kielen C määritelmän mukn pitäisi oll kosk k > 0. smll merkkijonoll 0 p k 1 p C Tässä on etsimämme ristiriit jok todist, että vstväite olikin väärin, eli että lkuperäinen väite olikin oikein. Pumppuslemmn ohell käytössämme ovt myös säännöllisten kielten sulkeumominisuudet (luse 3) j muut säännöllisiksi j ei-säännöllisiksi tunnetut kielet. Esimerkki 23. Osoit, että D = {w {0, 1} w sisältää yhtä mont noll j ykköstä} ei ole säännöllinen. Todistus: Tehdään ts vstoletus: D on säännöllinen. Kieli 0 1 on selvästi säännöllinen (joko kuvvn lusekkeens ti tunnistvn utomttins kutt). Siten kieli (0 1 ) D on säännöllinen (tunnettu sulkeumominisuus). 56

Tämä on ristiriit, kosk (0 1 ) D on sm kuin C = {0 n 1 n iemmin todistettu ei-säännölliseksi esimerkissä 22. n N}, jok on Esimerkki 24. Osoit (toistmiseen), että kieli D = {w {0, 1} w sisältää yhtä mont noll j ykköstä} ei ole säännöllinen. Todistus: Tehdään jälleen se vstoletus että D on säännöllinen. Edetään tällä kert pumppuslemmll: Vlitn s = 0 p 1 p D. Olkoon s = xyz, missä y ε j xy p. Nyt y koostuu yhdestä ti usemmst nollst. Kosk xyz D, niin xyyz sisältää nolli enemmän kuin ykkösiä, joten xyyz D. Ristiriit. Miten vlitn sopiv s? Jos olisi vlittu s = (01) p, ei olisi stu ristiriit, kosk tätä voidn pumpt (esim. x = ε, y = 01, z = (01) p 1 ). Pitäisi siis keksiä (sille tuntemttomlle) utomtille hnkli tpuksi. Heuristisi ohjeit ei-säännöllisyystodistuksiin Mikä ominisuus tekee kielen ei-säännölliseksi?. Usein ominisuus koskee kht snn os, joiden välillä vllitsee jokin ehto. Tämä ominisuus voi koske esim. tiettyjen merkkien lukumäärien keskinäistä suhdett, esim. L 1 = { k m c m k, m = 0, 1, 2,...} L 2 = { m 2m m = 0, 1, 2,...} snn eri osi, esim. snn lku- j loppuos riippuvt jotenkin toisistn: L 3 = {ww R w Σ } L 4 = {ww w Σ }. Mikä on yksinkertisin, mielivltisen pituinen merkkijono, joss tämä ominisuus esiintyy? Joskus kielessä on todistuksen knnlt täysin turhi (säännöllisiä) osi, esim. kielessä L 1 merkin lukumäärällä ei ole mitään väliä voidn vlit merkkijono m c m. Mutt jos ehdon ospuolten välissä on tuollinen säännöllinen os, se stt oll trpeen ospuolien erottmiseen toisistn, esim. kielessä L 5 = { m k m m, k = 0, 1, 2,...} trvitn inkin yksi erottmn lkuosn j loppuos merkit. Vlitn esim. m m. 57

Jos kielen lku- j loppuos riippuvt jotenkin toisistn, mutt muuten ne svt oll mitä thns, riittää erott lku- j loppuos toisistn. Esim. kielen L 4 kohdll voidn vlit m m ti m m. Vlitse sn s siten, että pumpttv osjono y kuuluu sen ensimmäiseen p merkkiin. Test kikki pumppuslemmn mukiset jot s = xyz, xy p j y ε. Jokisell joll kokeile pumppust kierroslskurin i rvoill 0, 2, 3,... kunnes löytyy sellinen rvo i, että xy i z ei kuulu kieleen yleensä i = 0 ti i = 2 riittää. Tutkittvien tpusten vähentämiseksi knntt vlit sn s siten, että sen erilisi jkoj osiin xyz olisi mhdollisimmn vähän. Tätä käytimme esimerkin 22 todistessmme, että kieli C = {0 n 1 n n N} ei ole säännöllinen: vlitsimme merkkijonon s niin pitkäksi, että lkuos x j pumpputuv os y olivt molemmt 0-jonoj. Säännöllisten kielten luokk on suljettu (erityisesti) leikkuksen j komplementin suhteen. On nnettu kieli A, jok pitäisi osoitt ei-säännölliseksi. Vlitn jokin säännöllinen kieli B, Jos nyt A B ei ole säännöllinen, niin myöskään A ei ole säännöllinen. (On kuitenkin oltv trkkn, esim. khden ei-säännöllisen kielen leikkus voi oll säännöllinen.) Jos A (komplementti) on ei-säännöllinen, niin myös A on ei-säännöllinen. Voidn siis sovelt pumppuslemm kieliin C = A B ti D = A mutt jos C ti D on jokin tunnetusti ei-säännöllinen kieli, erillistä pumppuslemmtodistust ei trvit. Pikkertus: tähän mennessä... Säännölliset kielet: niiden kielten luokk, jok voidn kuvt sännöllisillä lusekkeill j tunnist äärellisillä utomteill. Deterministinen äärellinen utomtti (DFA): yksinkertinen lskentlite, muisti vin vkiomäärä, syötteen pituudest riippumtt. Epädeterministinen äärellinen utomtti (NFA): kieli voidn tunnist DFA:ll jos j vin jos se voidn tunnist NFA:ll. NFA on hyödyllinen kuvusformlismi. DFA voi vti eksponentilisesti enemmän tiloj kuin NFA. Kieli voidn tunnist DFA:ll jos j vin jos se voidn kuvt säännöllisellä lusekkeell. Kikki kielet eivät ole säännöllisiä. Pumppuslemm voidn käyttää kielen epäsäännöllisyyden osoittmiseen. Eräs esimerkki ei-säännöllisestä kielestä on {w {, } w = w R } Tähän mennessä: säännölliset kielet, tunnistus äärellisellä utomtill Seurvksi: kontekstittomt kielet, tunnistus pinoutomtill 58

Myöhemmin (LAT-kurssill): kontekstilliset j rekursiiviset kielet: tunnistus Turingin koneell ( tietokoneell ) Kikki muut kielet: vin osittin rtkevi ( kyllä -tpuksess) ti täysin rtkemttomi. Koetehtäviä? Yleisesti, smntyylisiä kuin luentojen esimerkit j kotitehtävät. Perustehtäväprototyyppi: Tehtävä 27. Ldi DFA / NFA jok tunnist kielen X. Determinisoi utomtti käyttäen luennoill nnettu menetelmää. Mikä on utomtti / kieltä vstv säännöllinen luseke? Muunn säännöllinen luseke utomtiksi ti utomtti lusekkeeksi käyttäen luennoill nnettu menetelmää. Jne... Soveltvmp: Tehtävä 28. Säännöllinen kieli A voidn tunnist deterministisellä äärellisellä utomtill M A. Kielen A komplementtikieli A voidn tunnist utomtill M A, jok sdn utomtist M A vihtmll hyväksyvät tilt ei-hyväksyviksi, j ei-hyväksyvät hyväksyviksi. Toisin snoen säännöllisten kielten luokk on suljettu komplementin suhteen. Edelleen, olkoon M A epädeterministinen utomtti, jok tunnist kielen A. Voidnko utomtist M A viht hyväksyvien j ei-hyväksyvien tilojen roolit edellä kuvtull tvll, j sd tulokseksi epädeterministinen äärellinen utomtti jok tunnist kielen A? Onko epädeterminististen utomttien tunnistmien kielten luokk suljettu komplementoinnin suhteen? Tehtävä 29. Miten mielivltisest NFA:st sdn NFA joss on vin yksi hyväksyvä til? Tehtävä 30. Voiko säännöllistä kieltä 0 1 tunnist deterministisellä äärellisellä utomtill, joss on vin yksi hyväksyvä til? Perustele. Tehtävä 31. Osoit, että säännöllisten kielten luokk on suljettu leikkuksen suhteen. Tehtävä 32. Olkoon A säännöllinen kieli. Osoit, että myös A R = {w R säännöllinen. w A} on Tehtävä 33. Olkoot kielet A j B säännöllisiä. Onko kieli C = A B = (A B) (B A) säännöllinen? (Siis w C, jos w kuuluu joko kieleen A ti B, mutt ei molempiin.) Perustele. Tehtävä 34. Mitkä seurvt kkoston Σ = {, } kielistä ovt säännöllisiä? 1. E = { n n n N} 2. F = {wuw R w, u Σ + } 3. G = {ww w Σ } 4. H = { i j i j} 59

3 Kontekstittomt kielet j pinoutomtit Kontekstittomt kielet (context-free lnguges, yhteydettömät kielet) voidn kuvt kontekstittomill kieliopeill (context-free grmmr) j tunnist pinoutomteill (pushdown utomton). Verrttun edelliseen lukuun, korvmme säännölliset lusekkeet kieliopeill, j äärelliset utomtit (epädeterministisillä) pinoutomteill. Pinoutomtti on kuten äärellinen utomtti, johon on lisätty rjoittmttomn suuri muisti. Tämä muisti on TRA-kurssilt tuttu pino (stck). Tämä rjoittmttomn suuri muisti trkoitt, että pino-opertiot eivät koskn jumiudu virheilmoitukseen Out Of Memory Error. Tvoitteet: Opitn ymmärtämään kontekstittomi kielioppej Opitn muodostmn kielioppi yksinkertisille kontekstittomille kielille. Opitn mitä ovt pinoutomtit j niiden suhde kontekstittomiin kieliin Opitn jäsentämisen perusidet. Esimerkki 25. Ohjelmointikielten syntksin kuvus. Yksinkertistettu Psclin osjoukko: luse ehtoluse koottu-luse sijoitus kutsu ehtoluse if ehto then luse else luse ehto x=0 koottu-luse egin lusejono end lusejono luse luse ; lusejono sijoitus x:=0 kutsu c Tästä on hyötyä ohjelmoijlle (syntksi pitää ost, jos ikoo ohjelmoid), mutt myös kääntäjä (ti yksi sen os, jäsennin (engl. prser )) voidn lti suorviivisesti perustuen kielioppiin. Jäsennystä edeltää yleensä selusvihe, joss ohjelmn lähdekoodi pilkotn yllä kuvttuihin osiin (vrtut snt, muuttujt, liohjelmien nimet, vkiot, jne) käyttäen äärelliseen utomttiin perustuv trnsduktori. (Ks. sivu 95.) Johdttelev esimerkki: Miten kuvisit seurvt kielet? Sisäkkäisten sulkulusekkeiden kieli: if else-prien muodostm kieli: L ( ) = { ( k ) k k 0 } L if-else = { if k else l l k } Ne eivät ole säännöllisiä, joten säännöllisillä lusekkeill se ei onnistu. 60

Rtkisuyritys: Annetn kielelle L ( ) rekursiivinen kuvus: Merkitään S = mielivltinen sisäkkäinen sulkuluseke. Tällöin S on sisäkkäinen sulkuluseke, jos 1. S = ε ti 2. S on muoto (S ), missä myös S on sisäkkäinen sulkumerkkijono. Toinen kuvustp (ensimmäinen kontekstiton kielioppimme): 1. S ε 2. S (S) Esimerkiksi merkkijonon ((())) tuottminen: S (S) ((S)) (((S))) (((ε))) = ((())) Vstv jäsennyspuu (tähän pltn vielä): S S S ( ( ( ε ) ) ) 3.1 Kontekstittomt kieliopit Kontekstittomn kieliopin ide Joukko muuttujsymoleit j muunnossääntöjä tämän muuttujn esiintymän s korvt tuoll merkkijonoll jok voi vuorostn sisältää uusi muuttujsymolien esiintymiä. Yksi näistä muuttujsymoleist on erityinen loitussymoli. Muunnetn merkkijono näillä säännöillä, kunnes siinä ei enää esiinny muuttujsymoleit. Näin on tuotettu lopullinen merkkijono. Esimerkki 26. Kielioppi yksinkertisten ritmeettisten lusekkeiden rkenteelle: E T E + T T F T F F (E) Esimerkiksi ensimmäinen rivi luetn muuttujsymoli E voidn korvt jonoll T ti jonoll E + T, joss T on toinen muuttujsymoli j + merkki. Se tuott vikkp ritmeettisen lusekkeen ( + ) seurvsti: E T T F F F (E) F (E + T ) F (T + T ) F (F + T ) F ( + T ) F ( + F ) F ( + ) F ( + ) Kusskin viheess on korvttu lleviivttu muuttujsymolin esiintymä. 61

Kontekstittomn kieliopin formli määritelmä Määritelmä 4. Kontekstiton kielioppi on nelikko joss G = (V, Σ, P, S) äärellinen joukko V on kieliopin kkosto; Σ V on kieliopin päätemerkkien joukko; sen komplementti N = V \ Σ on kieliopin välikemerkkien eli -symolien joukko (joit edellä kutsuimme muuttujsymoleiksi); äärellinen joukko P N V on kieliopin sääntöjen eli produktioiden joukko; j S N on kieliopin lähtösymoli. Sääntöä (A, ω) P merkitään A ω. Sen voi luke välike A voi tuott/joht merkkijonon ω. Intuitiivisesti kontekstiton kielioppi G = (V, Σ, P, S) tuott merkkijonoj Σ seurvll epädeterministisellä lgoritmill: 1 r S 2 while r sisältää välikesymolej 3 do vlitse jonost r = αaβ jokin välikesymoli A, missä α V on sitä ennen tulev os, j β V on sen jälkeen tulev os 4 vlitse jokin välikkeen A sääntö A ω P 5 r αωβ 6 tulost näin stu r Kieliopin G tuottm (ti kuvm) formlikieli L(G) muodostuu jonoist r, jotk tämä lgoritmi voi tuott vlitsemll säännöt sopivsti rivillä 4. Kontekstittomn kielen formli määritelmä Merkkijono αaβ V, joss A N, voi tuott ti joht suorn merkkijonon αωβ V, jos kieliopiss G on sääntö A ω P. Tätä merkitään Esimerkiksi sekä että αaβ G αωβ T F G F F T F G T esimerkin 26 kieliopiss G ritmeettisille lusekkeille. 62

Merkkijono γ 0 V, voi tuott ti joht merkkijonon γ n V, jos on olemss jono merkkijonoj V siten, että γ 0 γ 1 γ 2 G G G G γ n eli jos merkkijono γ 0 voi tuott suorn merkkijonon γ 1 jok voi tuott suorn merkkijonon γ 2 jok voi tuott suorn merkkijonon... jok voi tuott suorn merkkijonon γ n. (n 0) Tätä merkitään γ 0 γ n G Esimerkiksi ritmeettisten lusekkeiden kieliopill G pätee kosk siinä voidn joht T F (E) G T F G G F F (E) F G (E). Erikoistpuksen jokinen merkkijono γ V voi tuott itsensä eli γ γ G tyhjällä jonoll (joss n = 0). Esimerkiksi T F T F. G Merkkijono γ V on kieliopin G lusejohdos, jos γ voidn joht sen lähtösymolist S: S γ. G Esimerkiksi (E) j ( + ) ovt lusejohdoksi esimerkin 26 kieliopiss ritmeettisille lusekkeille. Kieliopin G luse on sen pelkistä päätemerkeistä koostuv lusejohdos: S γ j γ Σ. G Esimerkiksi ( + ) on luse esimerkin 26 kieliopiss ritmeettisille lusekkeille. Kieliopin G tuottm ti kuvm kieli koostuu sen luseist: { } L(G) = γ Σ S γ. G L(G) on siis kikkien niiden luseiden (merkkijonojen) joukko, jotk voidn tuott kieliopill G loittmll sen lähtösymolist S. Määritelmä 5. Formli kieli L Σ on kontekstiton, jos se voidn tuott jollkin kontekstittomll kieliopill. 63

Kontekstist Sn konteksti (englnniksi context ) on suomeksi luseyhteys. Siten snn kontekstiton tilll käytetäänkin joskus snoj yhteydetön ti yhteysvp. Kontekstiton viitt siihen, että kieliopin säännöt ovt muoto A ω, mikä voidn tulkit siten, että muuttuj A voi tuott merkkijonon ω, olip sen ympärillä mitä thns. Kontekstittomn kieliopin yleistys on konteksti(lli)nen kielioppi (context-sensitive grmmr). Tällisen kieliopin säännöt ovt muoto αaβ αωβ joss α, β V j ω V +. Tällinen sääntö tulkitn siten, että muuttuj A voidn korvt (epätyhjällä) merkkijonoll ω jos sen edessä on α j perässä β eli jos A on luseyhteydessä jotkinαaβmuut niin silloin siitä voidn joht jotkinαωβmuut. Lisäksi voidn slli produktio S ε, jott kielioppi voi hyväksyä myös tyhjän merkkijonon. Esimerkiksi kieli { n n c n n N} ei ole kontekstiton, mutt se voidn esittää käyttämällä kontekstisi sääntöjä. Kontekstisi kielioppej ei käsitellä tällä kurssill. Nekin ovt silti kiintoisi... utomttien teoriss: Kuten jo vihjttiin, kontekstittomt kielet voidn tunnist utomteill joill on tvllinen pino. Kontekstiset ts utomteill joill on vopino. lskennn vtivuusteoriss: Kontekstiset kielet ovt ne, jotk voidn tunnist käyttämällä relistinen eli polynominen määrä muisti. Jos sllitn rjoittmttomt produktiot α β, missä α V + j β V, niin sdn rjoittmttomt kieliopit, joill voidn kuvt kikki lgoritmisesti generoitviss olevt kielet. Vkiintuneit merkintätpoj Välikesymoleit merkitään isoill kirjimill: A, B, C,..., S, T Päätemerkkeinä käytetään pieniä kirjimi,, c,..., s, t; numeromerkkejä 0, 1,..., 9; erikoismerkkejä; vrttuj snoj kuten if,for,end,... lihvoituin ti lleviivttuin. 64

Mielivltisin merkkeinä (kun välikkeitä j päätemerkkejä ei erotell) käytetään X, Y, Z. Päätemerkkijonoin käytetään u, v, w, x, y, z. Sekmerkkijonoin käytetään α, β, γ,..., ω. Kielioppi esitetään usein pelkkänä sääntöjoukkon: Tällöin A 1 ω 11... ω 1k1 A 2 ω 21... ω 2k2. A m ω m1... ω mkm välikesymolit päätellään joko edellisten merkintäsopimusten mukn ti siitä, että ne esiintyvät sääntöjen vsempin puolin lähtösymoli on ensimmäisen säännön vsempn puolen esiintyvä välike; tässä siis A 1. Esimerkki 27. Sisäkkäisten sulkujonojen muodostmn kielen L ( ) = {( k ) k k 0} tuott kielioppi G ( ) = ({S, (, )}, {(, )}, {S ε, S (S)}, S) Esimerkki 28. Tspinoisten sulkujonojen muodostmn kielen tuott kielioppi G ( ) = ({S, (, )}, {(, )}, {S ε, S (S), S SS}, S) Esimerkiksi ()(()) on tspinoinen muttei sisäkkäinen sulkujono. Tämän mhdollist uuden säännön lisäämisen edellisen esimerkin 27 kielioppiin. Esimerkki 29. Kielen { i k c k i, k = 0, 1,...} voi tuott kieliopill G = (V, Σ, P, S), joss V = {S, A, B,,, c} Σ = {,, c} P = {S AB, A A, A ε, B Bc, B ε}. Esimerkki 30. Yksinkertisten ritmeettisten lusekkeiden muodostmn kielen L expr tuott kielioppi G expr = (V, Σ, P, E) (6) joss V = {E, T, F,, +,, (, )}, Σ = {, +,, (, )}, P = {E T, E E + T, T F, T T F, F, F (E)}. 65

Kieliopill G expr voidn joht esim. seurvt lusejohdokset: E G E + T G T + T G T F + T G F F + T G F + T G (E) + T G (T ) + T G (F ) + T G () + T G () + F G () + Toinen kielioppi kielen L expr tuottmiseen on joss V = {E,, +,, (, )}, Σ = {, +,, (, )}, G expr = (V, Σ, P, E), (7) P = {E E + E, E E E, E, E (E)} Esimerkki 31. XML-dokumenttien kvioformlismit kuten DTD (Document Type Definition) muistuttvt kontekstittomi kielioppej. Dokumenttikvio kuv dokumentin elementtirkennett, jok näkyy sen XML-kooduksess käytettävistä elementtitunnisteist (eli tägeistä ) kuten <lsku> j </lsku> ll: <lsku><siks><etunimi>klle</etunimi> <sukunimi>könönen</sukunimi> </siks> <tuote><nimi>suksi</nimi><hint>99</hint><lkm>2</lkm></tuote> <tuote><nimi>pitoteippi</nimi><hint>5</hint><lkm>1</lkm></tuote> </lsku> Dokumenttikvioiden välikesymolein käytetään elementtien nimiä kuten ll: <!ELEMENT lsku (siks, tuote+)> <!ELEMENT siks (etunimi, sukunimi, osoite?)> <!ELEMENT tuote (nimi, hint, lkm)> Vlidi elementti on tällöin sitä vstvn välikesymolin tuottm luse. Elementtisisällölle tyypillinen vlinnisuus j toisto kuvtn säännöllisillä lusekkeill. Sikäli dokumenttikviot muistuttvt ns. ljennettuj kontekstittomi kielioppej (ECFG), joiden produktiot voivt smoin sisältää säännöllisiä lusekkeit. 66

Oleellisin ero kontekstittomiin kielioppeihin: Kontekstittomt kieliopit kuvvt merkkijonoj. Dokumenttikviot puolestn kuvvt dokumentin hierrkkist elementtirkennett (esim. DOM-rjpinnn mukist puurkennett). Siten dokumenttikviot vstvt pikemmin ns. säännöllisiä puukielioppej, joit vstvt lskentmllit ovt ns. puuutomttej. Esimerkki 32. Trkstelln suomen kielen virkettä, jok koostuu yksinkertisest pääluseest sekä nollst ti usemmst sisäkkäisestä reltiiviluseest: L rel = {suj (jok pred ttr oj) pred ttr oj} Tällisi virkkeitä voidn tuott esim. seurvill kontekstittomn kieliopin G rel säännöillä: VIRKE SUBJ SL PRED ATTR OBJ SL jok PRED ATTR OBJ SL ε SUBJ poik tyttö jänis susi peikko PRED pelkäsi metsästi ATTR suurt pientä vihist hirmuist rk OBJ poik tyttöä jänistä sutt peikko Mitä virkkeitä voit joht lähtösymolist VIRKE? Kontekstittomt kieliopit ovt luontisi positionlisille kielille, joss kuk teki mitä kenelle ilmistn niiden pikoill luseess. Esimerkiksi englnnin kielessä on snjärjestys on vltosin sujekti-veriojekti (SVO) kuten yllä. Mutt suomen kielessä snjärjestys onkin vp j kuk teki mitä kenelle ilmistnkin sijmuodoill. Muit sovelluksi ovt esimerkiksi pseudotiedettä suoltv puppugenerttori http: //pdos.csil.mit.edu/scigen/...... sekä ksvikieliopit (nimeltään L- eli Lindenmyer-systeemit): 67

Niiden iden on mllint sitä iologist kontrollimeknismi, jok määrää, että tähän kohtn ksv uusi oks, tuohon kohtn ts uusi lehti. Vstvntpisi, hyödyllisempiä, sovelluksi on muitkin, kuten neuroverkkojen rkenteen generointi kieliopill ti tiedon tiivistys (SEQUITUR-lgoritmi). Tehtävä 35. Ldi kontekstiton kielioppi, jok tuott rjttomn monist sisäkkäisistä for-silmukoist, lkeisopertioist j kokonislukuvkioist N koostuvt ohjelmointikielen luseet, kuten for (i=n; i<n; i++) { for (j=n; j<n; j++) { } } Miten keksiä nnetulle kielelle kielioppi? On nnettu kontekstiton kieli L, j ldittv sen tuottv kontekstiton kielioppi G. Lähtökoht: Millisen kielen L määrittely kuv? Yritä esittää L usemmn yksinkertisemmn kielen yhdisteenä (kuten L = L 1 L 2 L 3 ), tulon (kuten L = L 1 L 2 ) ti sulkeumn (kuten L = (L 1 L 2 ) ). Ldi näille oskielille L 1, L 2,... kieliopit. Olkoot niiden lkusymolit S 1, S 2 j S 3. Ldi sitten koko kielen L kielioppi seurvsti: Usein toistuvi rkenteit: Kieli Säännöt L = L 1 L 2 L 3 S S 1 S 2 S 3 L = L 1 L 2 S S 1 S 2 L = (L 1 ) S S 1 S ε L = (L 1 L 2 ) S AS ε, A S 1 S 2 Kieli Säännöt {,, c} A c L( ) = {ε,,,,...} A A ε { n c n n = 0, 1, 2,...} B Bc ε { 2n c n n = 0, 1,...} B Bc ε Tehtävä 36. Ldi kielioppi seurville kielille: 68