Laskennan perusmallit (LAP)
|
|
|
- Pia Hakola
- 9 vuotta sitten
- Katselukertoja:
Transkriptio
1 Lskennn perusmllit (LAP) Pekk Kilpeläinen Tietojenkäsittelytieteen litos, Itä-Suomen yliopisto sähköposti: Lukuvuoden III periodi Versiohistori: vuodet luennoij Pekk Kilpeläinen Mtti Nykänen Kimmo Fredriksson Sisältö 1 Kurssin sem opetuksess 1 2 Kurssin sem tietojenkäsittelytieteessä Histori Kurssin sisältö tästä eteenpäin Johdnto Lskennlliset ongelmt Päätösongelmt j formlit kielet Lskennllisten ongelmien rtkevuus Churchin Turingin teesi Pysähtymisongelmn rtkemttomuus Säännölliset kielet j äärelliset utomtit Äärellisen utomtin esitystpoj Äärellisen utomtin formli määrittely Säännöllinen kieli Äärellisen utomtin lskentvoimst Sovelluksist Automtin minimointi Epädeterministiset äärelliset utomtit Säännölliset lusekkeet j kielet Säännölliset lusekkeet j äärelliset utomtit Säännöllisestä lusekkeest utomtti Automtist säännöllinen luseke Säännöllisten kielten sulkeumominisuudet Säännöllisten kielten rjoituksist i
2 5 Kontekstittomt kielet j pinoutomtit Kontekstittomien kielten sulkeumominisuuksist Säännölliset j kontekstittomt kielet Äärellistä utomtti vstv linerinen kielioppi Linerist kielioppi vstv äärellinen utomtti Pinoutomtti Deterministiset j epädeterministiset pinoutomtit Pinoutomtit j kontekstittomt kielet Kielioppien jäsennysongelm Cocke-Younger-Ksmi-lgoritmi Tehokkmmt jäsennysmenetelmät LL(1)-kielioppi LR-kieliopeist Kontekstittomien kielten rjoituksist Lskennn filosofi Turingin kone Algoritmin määritelmä Rtkemttomuudest Lskennn vtivuusteorist Ongelmien vikeusluokitukset j plutukset Summ summrum 162 Viitteet Alfred V. Aho, Monic S. Lm, Rvi Sethi, nd Jeffrey D. Ullmn. Compilers: Principles, Techniques, nd Tools. Addison Wesley, second edition, Michel R. Grey nd Dvid S. Johnson. Computers nd Intrctility: A Guide to the Theory of NP-Completeness. Freemn, John E. Hopcroft, Rjeev Motwni, nd Jeffrey D. Ullmn. Introduction to Automt Theory, Lnguges nd Computtion. Addison Wesley, second edition, John R. Levine, Tony Mson, nd Doug Brown. Lex & Ycc. O Reilly, second edition, Hrry R. Lewis nd Christos H. Ppdimitriou. Elements of the Theory of Computtion. Prentice-Hll, second edition, Michel Sipser. Introduction to the Theory of Computtion. Course Technology, second edition, Thoms A. Sudkmp. Lnguges nd Mchines: An Introduction to the Theory of Computer Science. Addison Wesley, second edition, ii
3 1 Kurssin sem opetuksess Tietojenkäsittelytieteen pääineopiskelijoille pkollinen ineopintokurssi (3 op). Esitietovtimukset: Johdtus tietojenkäsittelytieteeseen (JTT): Lskennn, lgoritmin j tietokoneen käsitteet. Diskreetit rkenteet (DSR): Sovelletn joitkin diskreetin mtemtiikn peruskäsitteitä, kuten 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. Kiinnostuneille lisää vlinnisill syventävien opintojen jtkokursseill: Algoritmien suunnittelu j nlyysi (ASA): Tätä kurssi ljemmt perustiedot ns. P? = NP-ongelmst sekä teoreettisest että lgoritmisuunnittelun näkökulmst. Lskennn teori (LAT): Syvällisemmin tästä ongelmst j muistkin tällä kurssill esitellyistä sioist. Tämä P =? NP-ongelm onkin tunnetuin esimerkki lskennn vtivuusteorin käsittelemistä ongelmist. Yksi (mutt ei läheskään ino!) tp luke se on: P = selliset lskentongelmt, joiden vstukset voi lske tvllisell tietokoneell tehokksti NP = voisi jos koneeseen lisättäisiin mginen konekäsky vlitse hyppäätkö nyt riville X viko riville Y jok jotenkin in osisi vlit juuri oikein. Silloin kysymys on: Voisiko tvllinen tietokone in löytää itsekin oiken vlinnn nopesti? Yleisesti uskotn, että ei voisi: Uskotn, että on sellisi ongelmi j tilnteit, joiss on väistämättä hidst löytää se oike vlint. Tämä P? = NP-ongelm on kuitenkin osoittutunut teoriss hyvin vikeksi rtkist se on yhä voin, j on stu tuloksi inkn menetelmällä X sitä ei voi rtkist erilisille lähestymistvoille X. käytännössä merkittäväksi, kosk monet käytännön ongelmt ovt osoittutuneet ns. NP-vikeiksi, eli sellisiksi että jos yksikin niistä voitisiin rtkist tehokksti (eli se kuuluisi luokkn P) niin sen vull ne kikki muutkin voitisiin rtkist tehokksti. 1
4 Cly Mthemtics Institute onkin vlinnut sen yhdeksi seitsemästä Millenniumongelmstn, j nt sen rtkisust plkinnoksi USD! ( clymth.org/millennium/) Jo tietojenkäsittelijän yleissivistykseen kuuluu tunte peruskäsitteet kuten lskentongelm jne., j tämän kurssin tvoitteen onkin tutustutt niihin. Oppimterili Nämä luentomuistiinpnot ovt wikissä: tkt-wiki Kurssien kotisivuj - Course homepges LAP - Lskennn perusmllit ( , 3op). Pohjutuvt Kimmo Fredrikssonin j Mtti Nykäsen luentoihin edellisiltä vuosilt. Pelkät muistiinpnot eivät välttämättä riitä itseopiskeluun, vn voivt vti tuekseen joko luentojen ti jonkun 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, j 10 kttvt vltosn kurssin sioist (näitä luentoj yksityiskohtisemmin). Näistä sioist on julkistu moni muitkin oppikirjoj, kuten esimerkiksi Lewis nd Ppdimitriou (1981), Sipser (2005) j Sudkmp (1997), joit voi myös käyttää. 2 Kurssin sem tietojenkäsittelytieteessä Erään määritelmän mukn tietojenkäsittely tutkii 1. milliset tietojenkäsittelytehtävät on mhdollist utomtisoid j 2. miten tämä utomtisointi tulisi suoritt. Useimpien kurssien lähestymistp on yleensä konstruktiivinen, eli koht 2. Esimerkiksi TRA: Kehitetään nnetun lskentongelmn tehokksti rtkisev lgoritmi j sen trvitsemt tietorkenteet. Tällä kurssill pinolue onkin kohdss 1. Osoittutuu, että on olemss erilisi tehtäviä; sellisi 1. joit ei edes peritteess voi utomtisoid lgoritmin olemssolo on looginen mhdottomuus. 2. jotk voi utomtisoid, mutt vin tehottomsti tehokst lgoritmi ei voi oll olemss. 3. jotk voi utomtisoid j tehokksti tehokskin lgoritmi on keksitty: luokk P. 4. joist emme vielä tiedä ovtko ne tehokksti rtkistviss vi idosti työläitä; erityisesti päteekö NP P? 2
5 2.1 Histori Lskentongelmn käsitteen muotoilu sekä ongelmien erottelu utomtisoitumttomiin (eli tyyppiin 1) j utomtisoituviin 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 (eli tyypin 2) j vivttomn (eli tyypin 3) mekniseen lskentn. 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. 3
6 Toinen tp on sett resurssirjoj Turingin koneille. Tätä lskennn vtivuusteori on kehitetty 1970-luvult lähtien. Sen keskeinen ongelm on juuri edellä minittu P? = NP. Vtivuusteori kuitenkin jätetään vltosin kursseille ASA j LAT. 2.2 Kurssin sisältö tästä eteenpäin 1. Johdnto: Yleisktsus lskennn teorin, lskennn vtivuusteorin j lskennn mlleihin. Kurssill käytettävien käsitteiden j nottioiden määritelmiä. 2. Säännölliset kielet: äärelliset utomtit j säännölliset lusekkeet. Äärelliset utomtit ovt mhdollisimmn yksinkertisi lskulitteit. Säännölliset kielet ts ovt sellisi merkkijonojoukkoj, joihin kuuluminen voidn rtkist näillä litteill. Säännölliset lusekkeet ts ovt nottio, joll niitä voidn kuvt lyhyesti. 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 j kieliopit sekä pinoutomtit. Vstvsti pinoutomtit ovt hiemn mutkikkmpi lskulitteit j kontekstittomt kielet niitä, joit ne voivt tunnist. Ne ovt käytännössä tärkeitä rkenteisen syötteen käsittelyssä. Esimerkiksi HTML, XML sekä rkenteisell ohjelmointikielellä kirjoitettu lähdekoodi ovt rkenteisi syötteitä, kosk niissä on mielivltisen mutkikkit sisäkkäisyyksiä, joist syötettä lukevn ohjelmn pitää ott selvää. Esimerkiksi HTML-syötettä lukevn ohjelmn pitää löytää korostuksen loittvlle tgille <em> juuri oike sitä vstv lopettv tg </em>, j niiden välissä voi oll muit senkltisi tgprej, jotk pitää smoin pritt. Kontekstittomt kieliopit ts ovt näiden kielten kuvilutp, vstvsti kuin säännölliset lusekkeet ovt säännöllisille kielille. 4. Johdnto lskennn teorin, eli lskettvuuden teorin j lskennn vtivuusteorin peruskäsitteisiin. Lskennllisesti vtiviin ti jop kokonn rtkemttomiin ongelmiin törmää esimerkiksi tekoälyssä sekä ohjelmien j järjestelmien formliss verifioinniss. 4
7 3 Johdnto Lskennn teori (theory of computtion) käsittelee sitä, miten ongelm luokitelln rtkevuuden, vikeuden j tehokkuuden perusteell ennen kuin se rtkistn. Se jetn perinteisesti khteen os-lueeseen: Lskettvuuden teori (theory of computility) tutkii, mitä tietokoneell ylipäänsä voidn rtkist j kuink vike nnettu ongelm on. Ongelmien vikeus määritellään melko krkell tsoll sen perusteell, kuink monimutkist lskennn mlli rtkisuss trvitn. Lisäksi lskettvuuden teori nt hyviä eväitä itse rtkisun ltimiseen. (LAP, LAT) Lskennn vtivuusteori (theory of computtionl complexity) tutkii, kuink tehokksti ongelm voidn rtkist. Lskennn vtivuusteori muistutt lgoritmien nlyysi, mutt siinä ei määritellä yksittäisen rtkisulgoritmin ik- ti tilvtivuutt, vn itse ongelmn phimmn tpuksen ik- j tilvtivuusluokk. Lskennn vtivuusteori nt myös hyvät eväät ongelmien pluttmiseksi toisiin, jo tunnettuihin ongelmiin. (LAT, ASA) Tällä kurssill käsitellään jonkin verrn lskennn teorin ensimmäistä os-luett eli lskettvuuden teori. Aihepiirinä ovt lskennlliset ongelmt j niiden rtkisun mekniset mllit, joit kutsutn lskennn mlleiksi. Käsittelemme kht eri lskennn mlli äärellisiä utomttej j pinoutomttej sekä tutkimme, mitä kullkin mllill voidn rtkist. Kurssin loppupuolell esitellään lyhyesti myös Turingin koneet (joist enemmän kurssill LAT). Lskettvuuden teorist Lskennn mekninen mlli, utomtisointi, trkoitt tämän kurssin knnlt lgoritmin esittämistä. Intuitiivisesti lgoritmi kuv tietojenkäsittelyprosessin niin täsmällisesti, että se voidn tämän kuvuksen perusteell suoritt meknisesti (ilmn luov jttelu ). Meknisen lskennn trkemmksi määrittelemiseksi, eli lgoritmikäsitteen mtemttiseksi formlisoimiseksi, on kksi lähestymistp: 1. Lähdetään liikkeelle tyhjästä j mietitään, mitä voidn pitää meknisen lskentn. 2. Otetn lähtökohdksi nykyiset tietokoneet, jotk selvästi suorittvt meknist lskemist, j pelkistetään pois epäolennisuudet. Kosk mekninen lskent on keskeistä mtemtiikn perusteiden trksteluss, mtemtikot j loogikot miettivät si pljon 1930-luvull. He sovelsivt luonnollisesti lähestymistp 1 kosk tietokoneit ei silloin vielä ollut. 5
8 Jos ts hlutn sovelt tuloksi käytännön tietojenkäsittelyyn, lähestymistp 2 tuntuisi lupvmmlt. Tämä on oleellisesti se tp, jot käytettiin esimerkiksi kurssill TRA, kun siellä lskettiin symptoottisi resurssitrpeit eli O-rvioit. Onneksi osoittutuu, että lähestymistvt 1 j 2 johtvt smn lgoritmikäsitteen formlisointiin. Siis mtemttist logiikk j tietokoneit koskevill peritteellisill rjoituksill on syvällinen yhteys. Lskettvuuden teori trkstelee näitä rjoituksi, eli sitä millisille ongelmille on olemss rtkisulgoritmi. Automttiteori Kun on stu vlmiiksi strkti mlli tietokoneelle, voidn kysyä, mikä muuttuu, jos mllist jätetään jokin piirre pois. Rjoitettujen mllien trksteleminen utt ymmärtämään yleisempiä mllej. Äärellinen utomtti on hyvin yksinkertinen (strkti) lskentlite, joll kuitenkin voi tehdä mielenkiintoisi sioit. Teoreettisen mielenkiinnon lisäksi se on hyödyllinen käytännössä ohjelmointi- j mllinnustekniikkn. Kontekstittomt kieliopit ovt hiemn äärellisiä utomttej ilmisuvoimisempi meknismi, joll on tärkeitä sovelluksi esimerkiksi ohjelmointikielten määrittelemisessä j kääntämisessä j luonnollisen kielen mllintmisess. 3.1 Lskennlliset ongelmt Lskennllinen ongelm = mikä thns tehtävä, jok voidn mllint rtkistvksi digitlisell tietokoneell. (Kuv 1.) Lskennllisi ongelmi: kokonislukujen kertolsku kirjstokortiston kkostminen yrityksen plknlskent yliopistollisen kurssin kurssitietojen ylläpito nnetun kokonislukulist järjestäminen... Ongelmn rtkisev ohjelm on sen yksi esitystp. Mihin sijoittuu ongelm Onko oikein huijt tentissä? Jos mielestäsi tentissä huijminen on kikiss olosuhteiss väärin, niin silloin ongelm on trivilisti lskennllinen j tehokksti rtkistviss: Tietenkin voidn kirjoitt ohjelm, jok ei lue syötettään, vn tulost heti Ei!. 6
9 ONGELMA LASKENNALLINEN ONGELMA EI LASKENNALLINEN ONGELMA RATKEAVA ONGELMA RATKEAMATON ONGELMA TEHOKKAASTI RATKAISTAVISSA TEHOKASTA RATKAISUA EI OLE MISSÄ NÄIDEN VÄLINEN RAJA KULKEE? OSITTAIN RATKEAVA TÄYSIN RATKEAMATON (useit eri steit) Kuv 1: Ongelmien hyvin krke luokittelu Jos ts mielestäsi tentissä huijminen voi oll oikein joisskin lieventävissä olosuhteiss niin silloin on mietittävä jtkokysymystä Voiko nämä olosuhteet kuvill tyhjentävästi snllisesti? Jos mielestäsi näiden olosuhteiden kikki relevntit spektit voi kuvill vikkp jollkin sopivll logiikll, niin silloin ongelm on lskennllinen: Jos olosuhteet ovt kuten tämä kv φ kuvilee, niin onko silloin oikein huijt tentissä viko ei? Tämä φ on se syöte, jok luetn, j jonk perusteell rtkistn onko vstus Kyllä! viko Ei!. Ongelm on rtkev, jos tämä käytetty logiikk on riittävän yksinkertinen; muuten rtkemton. Esimerkiksi luselogiikk on rtkev, predikttilogiikk rtkemton. Vikk ongelm olisikin rtkev, se tuskin on tehokksti rtkistviss; looginen päättely on yleensä työlästä tietokoneellekin. Esimerkiksi luselooginen päättely on NP-vike eli luultvsti työlästä. Jos ts ktsot todellisuuden olevn niin monimutkinen j hienosyinen, että on mhdotont kuvill loogisesti kikki tälliseen morliseen päätöksentekoon vikuttvi spektej, niin silloin ongelm ei ole lskennllinen: Silloin meillä ei ole riittävän ilmisuvoimist kieltä joll voisimme kuvill olosuhteet riittävän kttvsti j trksti syötekvksi φ. Siis lgoritminen tietojenkäsittely eli lskent on oleellisesti syntktist mnipulointi. Ongelmn esitys Lskennllinen ongelm = kuvus äärellisesti esitettävien tpusten joukost äärellisesti esitettävien vstusten joukkoon Ongelmll on potentilisesti ääretön joukko tpuksi ( syötteitä ). 7
10 Syötteet Tulosteet π (1,1) (1,3)... (2,2) (2,4)... (1,2) (2,3) jne Kuv 2: Kertolskuongelmn syötteet j tulosteet. Ongelmn rtkisu on lgoritmi, jok liittää kuhunkin tpukseen sen oiken vstuksen ( tulosteen ). Jokisen yksittäisen tpuksen j sen vstuksen on oltv äärellisesti esitettäviä (muutenhn lskent ei päättyisi). Esimerkki 1. Kokonislukujen kertolskuongelmss (kuv 2) tpuksi ovt kikki kokonislukuprit (p, q) (merkkijonoiksi koodttun) vstus nnetulle tpukselle on kyseisen lukuprin tulo p q (merkkijonoksi koodttun) rtkisu on mikä thns yleinen kertolskulgoritmi (esimerkiksi kouluss opittu lkkin lskeminen ). Äärellinen esitys Kikki tietokoneen käsittelemä tieto täytyy viime kädessä koodt ittijonoiksi. On luontev slli koodukseen käytettävän myös muit merkkejä kuin itit 0 j 1 (kosk nämä muut merkit voidn tietenkin trvittess edelleen esittää ittijonoin). Määritelmä: äärellinen esitys = äärellisen pituinen merkkijono (eli jono merkkejä) josskin äärellisessä kkostoss. Peruskäsitteitä: Akkosto Akkosto on äärellinen, epätyhjä joukko lkeismerkkejä eli symoleit. Esimerkiksi inäärikkosto B = {0, 1} j ltinlinen kkosto {A, B, C,..., Z}. Akkosto voidn määritellä ihn miten hlutn, esim: {HiiriVsenNppi, HiiriOikeNppi, HiiriKeskiNppi, HiiriRullYlös, HiiriRullAls}. 8
11 Peruskäsitteitä: Merkkijonot Merkkijono on äärellinen järjestetty jono jonkin kkoston merkkejä. Esim j 000 ovt inäärikkoston B merkkijonoj, j LAP j XYZZY ovt ltinlisen kkoston merkkijonoj. Merkintä Σ trkoitt kikkien niiden merkkijonojen joukko, jotk voidn muodost nnetun kkoston Σ eli merkkien merkeistä. Siis B = {ε, 0, 1, 00, 01, 10, 11, 000,... }. Tyhjä merkkijono ε ei sisällä yhtään merkkiä. (Huom! Eri si kuin välilyönti ). Merkkijonon x pituus x on siihen sisältyvien merkkien määrä. Esim = XYZZY = 5 j ε = 0. Merkkijonojen ktenointi j kääntäminen Ktentio on merkkijonojen kirjoittmist peräkkäin, esimerkiksi: jos x = 00 j y = 11, niin xy = 0011 j yx = 1100; kikill x on xε = εx = x; kikill x j y on xy = x + y. Toisto eli merkkijonon ktentio itsensä knss voidn merkitä potenssin: 3 = ( 2 ) 3 = () 3 =. Itse siss merkintä (...) voidnkin luke toisto mielivltisen (mutt äärellisen) mont kert. Käänteismerkkijono x R Esim. (c) R = c. on merkkijono x kirjoitettun tkperin. 3.2 Päätösongelmt j formlit kielet Yleisesti lskennllinen ongelm π on kuvus eli funktio π : Σ Γ joss Σ j Γ ovt kkostoj: syötekkosto Σ on se joll kysymys, j tuloskkosto Γ on se joll vstus kirjoitetn. Päätösongelmt ovt lskennllisten ongelmien liluokk, joss kunkin ongelmn tpuksen vstus on kyllä ti ei. Formlisti päätösongelm on muoto π : Σ B. Intuitio: Yksinkertistetn mutkikst yleiskäsitettä tietokoneohjelm selliseksi, jok lukee syötteenä smns tekstitiedosto 9
12 Σ A π A 0 1 Kuv 3: Kielen A Σ päätös- eli tunnistusongelm π A. 2. käsittelee sitä (eräjon, siis omin päin keskustelemtt käyttäjän knss tms.) 3. tulost lopuksi vstuksenn kyllä ti ei. Esimerkiksi päätösongelm onko nnettu kymmenjärjestelmän luku lkuluku? voidn esittää syötekkoston Σ = {0, 1, 2,..., 9} kuvuksen π : Σ B { 1 jos merkkijonon x esittämä luku on lkuluku, π(x) = 0 jos ei. Yleisesti, jokist päätösongelm π : Σ B vst merkkijonojoukko A π = {x Σ π(x) = 1} eli niiden ongelmn tpusten joukko, joihin vstus on kyllä. Kääntäen, jokist merkkijonojoukko A Σ vst päätösongelm (kuv 3) { 1, jos x A; π A : Σ {0, 1}, π A (x) = 0, jos x / A. Tätä π A kutsutn joukon A krkteristiseksi funktioksi kosk se kertoo kuuluuko nnettu x Σ joukkoon A viko ei. Akkoston Σ (formli) kieli on mikä thns merkkijonojoukko A Σ Olemme kiinnostuneit siitä, kuuluuko nnettu merkkijono nnettuun merkkijonojoukkoon, eli kuuluuko nnettu sn nnettuun kieleen. Kielen A Σ tunnistusongelm on merkkijonojoukkoon A liittyvä päätösongelm π A : Tässä on merkkijono x Σ. Päteekö x A? Jtkoss käsittelemme vin päätösongelmi. Huom että tämä ei peritteess ole rjoitus, kosk monimutkisemmt kysymykset voi in pilkko joukoksi kyllä-ei -kysymyksiä... 10
13 Esimerkiksi monimutkisempi kysymys Mikä on lukujen x j y tulo? voidn pilkko kysymyksiin Onko lukujen x j y tulo = z viko ei? Esimerkki 2. Olkoon A kkoston {+,, 0, 1, 2,..., 9} kieli, jok koostuu yksinkertisist kokonislukuvkioist (esim. Jv-kielessä). Siis 0 A, A j 32 A, mutt A. Tämä kieli A on esimerkki säännöllisestä kielestä. Esimerkki 3. Olkoon B kkoston {+,,, (, ), 0, 1, 2,..., 9} kieli, jok koostuu lillisist kokonislukulusekkeist. Esim B j ( ) 4 5 B, mutt (1 + 2)) B j 3+ B. Tämä kieli B on esimerkki kontekstittomst kielestä. Esimerkki 4. Muodostukoon ASCII-kkoston kieli C niistä Jv-kielisistä ohjelmist, jotk tyhjällä syötetiedostoll joutuvt ikuiseen silmukkn. Kieli C on esimerkki rtkemttomst kielestä. Sitä siis ei void tunnist millään tietokoneohjelmll. Esimerkki 5. Kieli { k k N } on säännöllinen; kieli { k k k N } on kontekstiton; kieli { k k c k k N } on kontekstillinen (eli sen kuvminen vtii kontekstitont voimkkmmn kieliopin). Ongelmn vikeuden rviointi päätösongelmll Trkstelln mielivltist lskentongelm π: Syötteellä x, plut y = π(x) j vstv päätösongelm: Päteekö syötteellä (x, y), että y = π(x)? Tätä vst kielen tunnistmisen ongelm. L π = {(x, y) y = π(x)} Ongelm π voisi esim. oll neliöjuuren lskent π(x) = x ). (vikk lspäin pyöristäen, eli Tiedämmekö yleisesti jotin näiden välisestä suhteest? Jos lskentongelm π on rtkev, on sitä vstv päätösongelm myös rtkev: Syötteellä (x, y) voidn ensin lske z = π(x), minkä jälkeen riittää trkist onko z = y. Kääntäen: Jos päätösongelm ei ole rtkev, myöskään vstv lskentongelm ei ole rtkev. Lskentongelmn pluttminen päätösongelmn Toislt lskentongelmn voi rtkist soveltmll vstvn päätösongelmn rtkisu (M 3, kuv 4). Jos päätösongelm (komponentti M 3 ) on rtkev niin ongelmkin on rtkev helppo (josskin mielessä) niin ongelmkin on helppo (smss mielessä; inkin jos testttvi rtkisuehdokkit y ei ole liik). 11
14 input x M 1 M 3 Aset Onko y = 0 π(x) = y on M 4 Tulost rtkisu y ei Generoi seurv y M 2 Kuv 4: Lskentongelm päätösongelmn. Kurssin rtkevuustuloksi Erityisesti, jos kieli A kuuluu säännöllisiin kieliin, niin sen tunnistusongelm π A voidn rtkist helposti rkentmll sen rtkisev äärellinen utomtti; kontekstittomiin niin rkentmll pinoutomtti; rekursiivisiin niin rkentmll Turingin kone. Jos kieli A ei kuulu edes rekursiivisiin kieliin, niin sen π A ei ole rtkev linkn. Silloin se voi oll joko osittin rtkev eli voidn tehdä Turingin kone jok os vstt kyllä mutt ei -vstuksen sijst voi myös jäädä ikuiseen silmukkn, ti sitten vieläkin vikempi jolloin se ei enää ole tietojenkäsittelyn vn esimerkiksi mtemttisen logiikn ongelm. Päätösongelmien rtkisemisest käytännössä Käytännössä päätösongelmn rtkiseminen ei useinkn poikke pljon vstvn lskentongelmn rtkisemisest. Hrvoin esim. voidn tehdä päätöstä vikkp jonkin reitin olemssolost ilmn että löydetään sellinen (mikäli on olemss). Kurssill käsiteltäviin tunnistusmenetelmiin liitetään käytännössä yleensä myös muut lskent. Esimerkiksi tietokoneohjelmn syntksin trkistminen kontekstittomn kielen tunnistusongelm. Ohjelmn jäsennyksen yhteydessä kuitenkin yleensä myös tuotetn käännöksen kohdekoodi (ti siihen trvittvt tietorkenteet). Kielten vikeusluokt Chomskyn kielihierrki (kuv 5) määrittelee seurvt kielten vikeusluokt: Tyyppi 3: säännölliset kielet (erikoistpuksenn äärelliset kielet). 12
15 rtkemttomt ongelmt tyyppi 0: rjoittmttomt kielet rekursiivisesti lueteltvt kielet tunnistus: universli Turingin kone (pysähtyy "kyllä" tpuksess) rekursiiviset kielet tunnistus: Turingin kone + riittävän mittinen työnuh (pysähtyy in), RAM kone, ohjelmointikielet tyyppi 1: kontekstiset kielet tunnistus: Turingin kone + kohtuullisen (eli polynomisen) mittinen työnuh tyyppi 2: kontekstittomt kielet tunnistus: pinoutomtti tyyppi 3: säännölliset kielet; tunnistus: äärellinen utomttivkiomäärä muisti äärelliset kielet Kuv 5: Chomskyn kielihierrki. Tyyppi 2: kontekstittomt kielet (ti yhteysvpt ti yhteydettömät ). Tyyppi 1: kontekstilliset kielet (ti kontekstiset ti yhteyksiset ). Tyyppi 0: rjoittmttomt kielet = rekursiiviset rekursiivisesti lueteltvt (ti rekursiivisesti numeroituvt ) kielet. Nom Chomsky on merkittävä kielitieteilijä. Niinpä hänen hierrkissn on vstv kieliopillinen näkökulm: esimerkiksi kontekstittomill kielillä on suor yhteys tietynlisiin formleihin kielioppeihin j kontekstillisillä kielillä sellisiin kielioppeihin, joiss huomioidn myös luseyhteys. Esimerkki 6. Joillekin yksinkertisille ohjelmointikielille (kuten Pscl) pätee Leksiklisesti oikeiden ( muodostuu oikeist snoist ) ohjelmien joukko voidn tuott säännöllisillä kielillä ( oikelle linerinen kielioppi ). Syntktisesti oikeiden ( snt järkevässä järjestyksessä ) ohjelmien joukko voidn tuott kontekstittomill kielillä. Kontekstilliset j rekursiiviset kielet eivät kuulu kurssin lueeseen, mutt näillä voitisiin kuvt ohjelmn suorittm lskent... Toislt kikkien ohjelmien joukko jotk rtkisevt jonkin ongelmn ei voi kuvt kieliopill. Rjoittmttomt kielet koostuvt rekursiivisist kielistä, joiden tunnistusongelm on rtkev 13
16 Lskennlliset ongelmt Kikki inäärijonot Σ={0,1} Päätösongelmt Lilliset konekieliohjelmt Rtkevt päätösongelmt Päätösongelmien rtkisuohjelmt Kuv 6: Lskennlliset ongelmt vs. ohjelmt. rekursiivisesti lueteltvist kielistä, joiden tunnistusongelm on osittin rtkev. Sellisell kielellä on ohjelm, jok tulost sen merkkijonot äärettömänä luettelon x 0, x 1, x 2, Lskennllisten ongelmien rtkevuus Läheskään kikki lskennllisi(kn) ongelmi ei void rtkist tietokoneell yksinkertisesti jo siksi, että ongelmi on ylinumeroituvn mont ( yhtä mont kuin relilukuj R ) mutt rtkisuohjelmi vin numeroituvn mont ( yhtä mont kuin luonnollisi lukuj N ). Perustelu Tietokoneohjelmt ovt merkkijonoj. 2. Minkä thns kkoston merkkijonojen joukko on numeroituvsti ääretön (luse 1). 3. Ongelmn rtkisevi tietokoneohjelmi on korkeintn numeroituv määrä. 4. Lskennllisi ongelmi on vähintään yhtä pljon kuin päätösongelmi. 5. Minkä thns kkoston päätösongelmien joukko on ylinumeroituv (luse 2). 6. Lskennllisi ongelmi on ylinumeroituvn mont. 7. Jokiselle lskennlliselle ongelmlle ei millään riitä sen rtkisev tietokoneohjelm. Akkoston merkkijonoj on numeroituv määrä Luse 1. Minkä thns kkoston Σ merkkijonojen joukko Σ on numeroituvsti ääretön. Todistus: Olkoon Σ = { 1, 2,..., n }. Kiinnitetään merkeille jokin kkosjärjestys, esim. 1 < 2 < < n. Joukon Σ merkkijonot voidn järjestää seurvsti (knoniseen järjestykseen): 14
17 1. Ensin luetelln 0:n mittiset merkkijonot (= ε), sitten 1:n (= 1, 2,..., n ), sitten 2:n (= 1 1, 1 2, 1 3,..., 1 n, 2 1, 2 2, 2 3,... ) jne. 2. Kunkin pituusryhmän sisällä merkkijonot luetelln kkosjärjestyksessä. Jokiseen luonnolliseen lukuun n voidn siis liittää Σ :n merkkijono j päinvstoin, joten Σ on numeroituv. Vdittu ijektio f : N Σ luseess 1 on: 0 ɛ n n n n n 1 n 2n n 2 n. n 2 + n n n n 2 + n n 2 + n Päätösongelmi on ylinumeroituv määrä Luse 2. Minkä thns kkoston Σ päätösongelmien joukko on ylinumeroituv. Todistus: Merkitään kkoston Σ kikkien päätösongelmien kokoelm Π = {π π on kuvus Σ B}. Tehdään vstväite: Oletetn, että Π onkin numeroituv, eli että on olemss numerointi Π = {π 0, π 1, π 2,...}. Olkoot Σ :n merkkijonot knonisess järjestyksessä lueteltuin x 0, x 1, x 2,... Muodostetn uusi päätösongelm ˆπ: { 1, jos ˆπ : Σ πi (x B, ˆπ(x i ) = i ) = 0; 0, jos π i (x i ) = 1. Kosk oletuksen mukn ˆπ Π (kosk Π on kikkien päätösongelmien joukko), niin ˆπ = π k jollkin k N. Tällöin { 1, jos πk (x ˆπ(x k ) = k ) = ˆπ(x k ) = 0; 0, jos π k (x k ) = ˆπ(x k ) = 1. Tämä on ristiriit. Siis vstoletus, että joukko Π on numeroituv, on väärä. 15.
18 Todistus 2 kuvn: Ajtelln (ääretöntä) tulukko ongelmist π 0, π 1, π 2,... j merkkijonoist x 0, x 1, x 2,.... Ongelm ˆπ poikke kikist muist ongelmist π i tulukon digonlill, vikk i ksvisi äärettömään: ˆπ π 0 π 1 π 2 π 3 x x x x Suomeksi: ˆπ ei voi esiintyä tulukon millään srkkeell, joten päätösongelmi (j yleisemmin lskennllisi ongelmi) on ylinumeroituv määrä. (Eli ˆπ ero jokisest srkkeest inkin yhdessä koht.) Tämä todistustekniikk on ns. Cntorin digonlirgumentti joll hän todisti, että relilukuj 0 x < 1 on idosti enemmän kuin luonnollisi lukuj. Käytännössä tämä merkitsee sitä, että kikist lskentongelmist voidn esimerkiksi Jv-ohjelmill rtkist vin häviävän pieni os: ylinumeroituvn joukon numeroituv osjoukko. Sm pätee kikill ohjelmointikielillä, sillä kikki riittävän vhvt ohjelmointikielet määrittävät täsmälleen smn rtkevien ongelmien luokn (ns. Churchin Turingin teesi; Tämä teesi pätee jop hypoteettisiin kvnttitietokoneisiin, vikk ne vikuttvtkin rtkisevn joitkin lskenttehtäviä oleellisesti tehokkmmin kuin muut lskentmllit.). Useimmt lskennlliset ongelmt ovt siis soluuttisesti rtkemttomi. Vlitettvsti rtkemttomt ongelmt käsittävät myös moni mielenkiintoisi / käytännöllisiä ongelmi, erityisesti pysähtymisongelmn: jos on nnettu ohjelm P j sen syöte w, niin pysähtyykö ohjelmn P lskent syötteellä w vi jääkö se ikuiseen silmukkn? (Tämä ongelm on kuitenkin osittin rtkev... ) Churchin Turingin teesi Churchin Turingin teesi väittää seurv: Epäformlin käsitteen funktio f on meknisesti lskettviss oike formli vstine on f on lskettviss Turingin koneell. Siis että on olemss Turingin kone M f rvon f(x) j pysähtyy. jok syötteellä x tulost sitä vstvn 16
19 Tämä on teesi eikä tulos: sitä ei voi todist, kosk sehän väittää että nyt olemme löytäneet juuri sen oiken määritelmän tälle rkikielen käsitteelle. Teesin tueksi voi esittää seurv: : Turingin koneet ovt niin yksinkertisi litteit, että jos f on lskettviss koneell M f, niin silloin f on selvästi meknisesti lskettviss. : Muutkin esitetyt yleisesti hyväksytyt vihtoehtoiset määritelmät voidn toteutt myös Turingin koneill. Helppo suunt on näyttää, että nnettu Turingin kone M voidn toteutt jollkin tämän vihtoehtoisen määritelmän mukisell ohjelmll P M. Vike suunt on näyttää, että nnettu tämän vihtoehtoisen määritelmän mukinen ohjelm Q voidn toteutt myös jollkin Turingin koneell M Q eli kääntäjä. Tällisi muit vihtoehtoisi mllej ovt esimerkiksi edellä minitut Gödelin j Churchin omt ehdotukset RAM-koneet, jotk ovt idelisoitu mlli nykyikiselle digitliselle tietokoneelle jop kksilskurikoneet, joiss on vin kksi muuttuj x, y N sekä opertiot ksvt/vähennä muuttujn rvo yhdellä j testi if muuttujn rvo on = 0 then... John Conwyn Life -peli, jne Pysähtymisongelmn rtkemttomuus Näimme edellä, että vltos päätösongelmist on rtkemttomi lskemll, että niitä on pljon enemmän kuin rtkisulgoritmej. Osoitetn nyt yksi konkreettinen päätösongelm rtkemttomksi eli että rtkemttomuus on joidenkin oikeidenkin ongelmien piirre, eikä pelkkä mtemttinen ilmiö. Kiinnitetään lskentmlliksemme vikkp C-ohjelmointikieli. Church Turingin teesin nojll sm pätee myös muillkin yhtä ilmisuvoimisill lskentmlleill. Pysähtymisongelmn C-kielinen tulkint on: Ei ole olemss totlist (in pysähtyvää) C-ohjelm, jok rtkisisi, pysähtyykö nnettu C-ohjelm P nnetull syötteellä w. Tehdään vstoletus, että voitisiinkin kirjoitt totlinen C-funktio ool h(chr p[],chr w[]) jonk syöteprmetrit ovt p: merkkijono, jok sisältää tutkittvn C-kielisen ohjelmn P lähdekoodin 17
20 w: merkkijono, jok sisältää tutkittvn syötteen w j jonk tulos on true jos ohjelmn p suoritus syötteellä w pysähtyisi flse jos se jäisi ikuiseen silmukkn. Vstoletust käyttäen voitisiin kirjoitt toinen C-funktio void g(chr p[]){ if (h(p,p)) while (true); } jok siis pysähtyy täsmälleen silloin, kun C-lähdekoodi p ei pysähtyisi sdessn syötteenään omn itsensä. Olkoon q tämän funktion g lähdekoodi merkkijonon. Mitä tphtuu kutsuss g(q)? Sdn hluttu ristiriit: g(q) pysähtyy h(q,q) plutt flse g(q) ei pysähdykään! Niinpä tehty vstoletus ei pädekään. Tässä todistuksess istutetn ns. vlehtelijn prdoksi Tämä luse on vlhett! totuuden sijst lskennn pysähtymiseen. Sm ide käytti jo Kurt Gödel kuuluisiss epätäydellisyysluseissn istuttmll se totuuden sijst todistuvuuteen: Tällä väitteellä ei ole todistust! Formlismist (Tietojenkäsittely)tieteessä on rvokst, että lskent sdn esitetyksi täsmällisessä mtemttisess muodoss. Jtkoss hlumme esittää väitteitä muoto: Kikki äärelliset utomtit toteuttvt ehdon p j konstruktioit Mistä thns ehdon r toteuttvst utomtist voidn muodost utomtti, jok toteutt ehdon s. Onnistuu kyllä tiettyyn rjn skk piirtämällä kuvi j heiluttmll käsiä (kuten tällä kurssill vrmn pljolti tulln tekemään... ), mutt uskottvuuden j ymmärrettävyyden rjt tulevt melko pin vstn. Mtemttinen formlismi on työklu, jot on hyvä opetell käyttämään... 18
21 4 Säännölliset kielet j äärelliset utomtit Äärellinen utomtti (engl. Finite (Stte) Automton, FSA (ti FA)) on hyvin yksinkertinen lskennn mlli (eli strkti lskentlite). Säännölliset kielet (engl. regulr lnguges) on se luokk lskentongelmi, jonk näin yksinkertisell litteell pystyy rtkisemn. Näillä on sovelluksi esim. tekstihuss j ohjelmien syötteiden tunnistmisess. Tvoitteet: oppi mitä ovt äärelliset utomtit j säännölliset lusekkeet j mikä on niiden välinen suhde muodostmn yksinkertisi äärellisiä utomttej j säännöllisiä lusekkeit (engl. regulr expressions) 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 7. 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? Kelvollisi syötejonoj ovt esim. seurvt (yksikkönä snt): 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 + [1 ti usempi 50 sentin ti 1 euron kolikoit] 1 euro + 50 senttiä + 50 senttiä + 1 euro + [1 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 7). 19
22 50, q 0 q q , 100 q q 3 Kuv 7: Khviutomtti. TRA-kurssin terminologill se olisi suunnttu verkko jonk kret on pinotettu 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; 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 7 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ämään 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. Kuvn 7 khviutomtille voi jtell hyvin konkreettisen sähkömeknisen rkenteen: Litteess on yksi kolo 1 euron j toinen kolo 50 sentin kolikolle. Kun siks työntää kolikon oiken koloon, se sulkee virtpiirin, jok lähettää sähköpulssin relelitteistolle jok rksht uuteen sentoon, jok vst seurv til. 20
23 q Til q q 0 Alkutil Lopputil eli hyväksyvä til q q Tilsiirtymä δ(q, ) = q Kuv 8: Tilsiirtymäkvion merkinnät. Lopult päästään sentoon, joss relelitteisto käynnistää khvin vlmistuksen. Kun nnetn tehtäväksi suunnitell utomtti hyväksymään jonkin formlin kielen A Σ niin knntt miettiä 1. ensiksi millisi 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 7 khviutomtiss muistetn tähän mennessä syötetty rhsumm. 2. toiseksi miten näiden tilnteiden välillä siirrytään, kun syötettä x luetn merkki merkiltä. Näin sdn utomttiin trvittvt siirtymät. Kuvn 7 khviutomtiss jokinen lntti on om merkkinsä, j se vie nykyisestä rhsummst seurvn. 4.1 Äärellisen utomtin esitystpoj Tilsiirtymäkvion eli kuvien 7 j 8 mukisen piirroksen. Tilsiirtymätulukkon joss jokisell tilll on om rivinsä jokisell syötekkosell on om srkkeens tiln p srke c ilmoitt sen tiln (eli rivin) jonne siirrytään tilst p merkillä c. Kuvn 7 khviutomtin tilsiirtymätulukko on yhtälönä (1). 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 (1) 21
24 Esimerkki 8. 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: d +, q 0 q 2 q 1 q 1 q 2 q 2 q 2 Tulukon puuttuvt kohdt vstvt virhetil Error. Tehtävä 1. C-kielessä 0-lkuiset luvut tulkitn oktliluvuiksi (jolloin merkkejä 8 j 9 ei sllit linkn), j lkuiset 10-kntisiksi luvuiksi. Muut esimerkin 8 utomtti siten, että nämä tpukset erotelln, eli että ne johtvt eri hyväksyviin tiloihin. Tehtävä 2. (Jtko tehtävään 1.) C-kielessä 0x-lkuiset luvut tulkitn heksdesimliluvuiksi. Ot tämäkin huomioon. Ohjelmn tässä C-ohjelmointikielellä: 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 9. C-kielen etumerkittömän liukulukuvkion tunnistv utomtti: d. E, e +,
25 1. d 2 3. d e,e 4 d e,e 5 d 7 d d +, 6 d 4.2 Ää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. 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. 23
26 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. Toisin snoen: Siirtymäfunktion rvo δ(q, c) = tilsiirtymätulukon sisältö sen rivillä q j srkkeell c. Esimerkki 10. Kokonislukuutomtin (esimerkki 8) formli esitys on joss δ on kuten tulukoss; esim. M = ({q 0, q 1, q 2, error}, {0, 1,..., 9, +, }, δ, q 0, {q 2 }), 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 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). 24
27 Tilnne (q, w) joht tilnteeseen (q, w ) jos on olemss välitilnnejono (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. 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 välitilnnejono (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, ε). (2) 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. 4.3 Säännöllinen 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. Snomme, että kieli A on säännöllinen, jos jokin äärellinen utomtti tunnist sen, ts. A = L(M) jollin M. 25
28 Huom, että 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.) Esimerkki 11. Merkkijonon hyväksyminen esimerkin 8 (s. 22) 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 L(M). Littomn merkkijonon lskent onkin (q 0, ) (q 2, ) (q 2, + 10) (error, 10) eli päädyttiin virhetiln error eli 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 12. Lisätään esimerkin 8 etumerkillisen kokonisluvun tunnistmiseen toiminto, jok lskee luvun rvon muuttujn vlue eli muunt syötemerkkijonon sitä vstvksi kokonisluvuksi. Huom: Jos utomtti hylkääkin syötteensä (eli jos lopuksi q 2), niin silloin vluen rvo ei trkoit mitään! 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; } 26
29 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). 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 selj 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. Selj voidn toteutt (j usein toteutetn) yhtenä äärellisenä trnsduktorin, jok lukee lähdekooditiedosto merkki merkiltä j nähtyään jonkin kokonisen lkion tulost vstvn tiedon. Selj 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; } fredriks@cs ~$ flex ex.lex fredriks@cs ~$ gcc lex.yy.c -o foo fredriks@cs ~$./foo c123def456lpxxxxx Kokonisluku: 123 Kokonisluku: 456 LAP! Tehtävä 3. Tee prnneltu versio esimerkin 7 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ä 4. Ldi kkoston Σ = {, } äärellinen utomtti jok tunnist kielen {w w sisältää täsmälleen kksi :t}. Tehtävä 5. Edellisen komplementti: ldi äärellinen utomtti jok tunnist kielen {w w ei sisällä täsmälleen kht :t}. 27
30 Tehtävä 6. Ldi utomtti kielelle: {w w ei muodostu pelkästä :st ti :stä} Tehtävä 7. Ldi utomtti kielelle: {w w ei sisällä jono } Tehtävä 8. Osoit että kieli {() n n > 0} on säännöllinen. Tehtävä 9. 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ä 10. Ldi äärellinen utomtti, jok tunnist kielen L = {0 n 1 m n, m N} {1 n 0 m n, m N}. 4.4 Ää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 hyvin rjoittunut lskennn mlli. Vikkp 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! (Tähän pltn.) 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). 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 -prk ehtii unoht 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ä 7 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. 28
31 Esimerkki 13. Äärellinen utomtti jok tunnist kielen toiseksi viimeinen merkki on noll : 0?? ? ? Automtti muist kksi viimeistä lukemns ittiä. Tilt on nimetty näiden ittien mukn, eli tilss 01 viimeisin luettu itti oli 1 j sitä edellinen oli 0. Tiln nimessä? ts trkoitt sellist ittiä ei vielä ole luettu. Akkostot Akkosto Σ voidn määritellä melkein miten vin. Sovellus rtkisee luontevimmn tvn. Esim. Γ = {omen,päärynä,ppelsiini} 1 ti Σ = {[ ], [ ], [ ], [ ],..., [ ]}. Toisin snoen, Σ sisältää kikki kolmen lkion pituiset inäärivektorit, Σ = 2 3 = 8. Akkoston Σ syötteitä voidn kutsu kolmiurisiksi. Esimerkiksi 4-merkkisessä syötteessä [ ] [ ] [ ] [ voidn jtell olevn kolme rinnkkist ur: ylin ur joll on 0100, keskimmäinen ur joll on 0001, j lin ur joll on Automtti lukee näitä uri smn thtiin rinnkkin, sillähän on vin yksi lukupää. Tehtävä 11. 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} 29 ]
32 Esimerkiksi [ eli ] [ ] [ ] L mutt [ ] [ ] L Osoit että tämä kieli L on säännöllinen. Rtkisu: = 4 mutt Kieli on säännöllinen, jos on olemss äärellinen utomtti jok tunnist sen. Siis yksi tp todist kieli säännölliseksi on esittää sen tunnistv äärellinen utomtti. Sellinen on olemss tälle kielelle, esimerkiksi: A D B 0 1 C A = {[ D = {[ ] ], [ 1 0 1, [ ] ], [ 0 1 1, [ ]} ]} B = {[ C = {[ ]} ]}. Tiln nimi = muistiitin (crry it) rvo. Siirtymä lskee muistiitin + ylimmän urn itin + keskiurn itin summn, jonk vähemmän merkitsevä itti nt limmn urn itin, j enemmän merkitsevä itti seurvn muistiitin eli tiln. Tehtävä 12. 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 = 39 j 1 3 = 3. 30
33 Rtkisu: Smn tpn kuin edellinen tehtävä. Eron on se, että nyt muistiittejä voi oll kksi. 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ä. 4.5 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. 31
34 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: Numeroidn viestit j kuittukset: timeout S d 0, 0 d 1, 1 d 1, 1 d 2, 2 R, 0, 1, 1, 2 Mutt silloinhn pitäisi lähettää yhä suurempi j suurempi numeroit 0, 1, 2... Prnnus: Riittää käyttää kht numero (0 j 1 eli prillinen/priton viestin numero ): S timeout d 0, 0 d 1, 1 d 1, 1 d 2, 0 R, 0, 1, 1, 0 32
35 S j R voidn mllint tilsiirtymäjärjestelminä: lähettäjä S vstnottj R, 1, 1 d, 1 timeout timeout d, 0 d, 1 d, 1 d, 0 d, 1 d, 0, 0, 0 d, 0 Jos S ei skn joiss symoli, niin se lukeekin sen sijn timeout-symolin. 4.6 Automtin minimointi 1. Mikä on ll olevn utomtin M 1 tunnistm kieli? , Yritetään helpott vstmist yksinkertistmll utomtti. 2. Mikä on ll olevn utomtin M 2 tunnistm kieli? , 3. Mikä on ll olevn utomtin M 3 tunnistm kieli? 33
36 , 4. Virhetiloj kuten 3 ei ole välttämätöntä piirtää. Sdn minimoitu utomtti M 4 : Lopputulost vstv säännöllinen luseke on ( ). Niihin pltn myöhemmin., ,,,, 0 1, 4 Ekvivlenssi: Jos kksi utomtti M j M tunnistvt smn kielen (kuten yllä; minkä?) niin ne ovt keskenään ekvivlenttej eli yhtäpitäviä voimme käyttää kump thns. Minimlisuus: Automtti M on minimlinen jos siinä on mhdollisimmn vähän tiloj jos jokisell sen knss ekvivlentill utomtill M on inkin yhtä mont til. Redundnssi: Automtti on redundntti ellei se ole minimlinen silloin siinä on redundnttej eli ylimääräisiä kopioit smoist tiloist (yllä prittomt/prilliset). 34
37 Miksi minimoid? Automttej muodostvt lgoritmit eivät in tuot minimlist utomtti. On helpompi nähdä mikä on minimlisen utomtin tunnistm kieli. Minimlisen utomtin käsittely on tehokkmp. Minimlinen utomtti on sen tunnistmn kielen knoninen esitys. Miten minimoid? (Vrt. yrityksen sneerus) Poistetn turht yksiköt (svuttmttomt tilt). Yhdistetään toiminnltn identtiset (smt snt hyväksyvät tilt). Apukäsitteitä Muistetn siirtymäfunktion δ ljennus yksittäisiltä merkeiltä Σ kokonisille merkkijonoille w Σ yhtälöstä (2). Automtin M tilt q j q ovt keskenään ekvivlentit, merkitään q q, jos kikill merkkijonoill x Σ on δ (q, x) F jos j vin jos δ (q, x) F (3) eli jos loittmll tilst q hyväksytään täsmälleen smt merkkijonot kuin loittmll tilst q. Huom: Tämä ei ole sm si kuin q = q eikä edes sm kuin δ (q, x) = δ (q, x), kosk syötteellä x svutettvien hyväksyvien tilojen ei trvitse oll smt. Tilt q j q ovt keskenään k-ekvivlentit jollkin k N, jos niiden ekvivlenssiehto (3) pätee kikill merkkijonoill x Σ joill x k. Eli jos syötteen pituus on korkeintn k merkkiä niin tiloj q j q ei voi vielä erott toisistn. Jos tilt q j q ovt k-ekvivlentit, merkitään q k q. Selvästi lopputilt ovt keskenään 0-ekvivlenttej, j hylkäävät tilt keskenään 0- ekvivlenttej: vin ensinnä minituist pääsee tyhjällä syötteellä hyväksyvään lopputiln (itseensä). q q jos j vin jos q k q kikill k N. Minimoinnin ide: 1. Aloitetn utomtin tilojen krkeimmst luokittelust eli 0-ekvivlenssist: lopputilt vs. muut. 2. Trkennetn tilojen luokittelu jkmll k-ekvivlenssiluokki (k+1)-ekvivlenssiluokkiin. Tilt q j q voivt oll k +1-ekvivlenttej vin jos q k q. Kääntäen: k Jos q q niin q k+1 q. Siis k:n ksvess jko voi inostn trkentu. 3. Lopetetn kun mikään ekvivlenssiluokk ei enää trkennu. 35
38 Äärellisen utomtin minimointilgoritmi Syöte: utomtti M = (Q, Σ, δ, q 0, F ). 1. (Turhien tilojen poisto) Poist syötteestä M kikki tilt, joit ei void svutt sen lkutilst q 0 millään syötemerkkijonoll. 2. (0-ekvivlenssi) J jäljelle jääneet tilt khteen luokkn: hyväksyviin vs. muihin tiloihin. 3. (k-ekvivlenssist (k + 1)-ekvivlenssiin): 1 k 0 2 while josskin luokss on eri tvoin käyttäytyviä tiloj 3 do J tälliset luokt pienemmiksi siten, että kunkin uuden luokn kikki tilt käyttäytyvät smoin 4 k k + 1 Huom: Yhden luokn jkminen voi joht siihen, että jokin toinenkin luokk pitää jk, vikkei siltä ensin vikuttnutkn. Siksi while. 4. Tuloksen on utomtti M jonk tilt ovt vielä jäljellä olevt luokt Q siirtymäfunktio niiden välillä sdn seurvsti: Tuloksess on siirtymä Q Q täsmälleen silloin kun syötteessä oli siirtymä q q joss q Q j q Q Q sisältää eri tvoin käyttäytyviä tiloj jos tällä säännöllä tulisi keskenään ristiriitiset siirtymät Q Q j Q Q joill Q Q (joist toinen voi oll myös näkymätön virhetil). Huom: Sen tekeminen näkyväksi helpott eri tvoin käyttäytyvien tilojen huommist! Tällist Q kutsutn epädeterministiseksi kosk siinä ei ole determinoitu eli määrätty kumpn tiloist Q ti Q pitäisi siirtyä syötemerkillä. Epädeterminismiin pltn trkemmin myöhemmin luvuss 4.7. lkutil on se luokk jok sisältää syötteen lkutiln q 0 lopputilt ovt ne luokt joihin kuuluu jokin utomtin M lopputil. Algoritmi pysähtyy kosk syötteessä oli äärellinen määrä tiloj, j whilesilmukn jokisell kierroksell jkutuu inkin yksi luokk. (Siis kierroksi kertyy korkeintn smn verrn kuin syötteessä oli tiloj.) Tulos on syötteen knss ekvivlentti utomtti, joss on minimimäärä tiloj. Tulos on oleellisesti (eli tilojen nimentää lukuunottmtt) yksikäsitteinen. (Todistus sivuutetn.) Esimerkki 14. Olkoon M = (Q, Σ, δ, q 0, F ) joss tilojen joukko Q = {1, 2, 3, 4, 5, 6}, syötekkosto Σ = {, }, lkutil q 0 = 1, 36
39 lopputilojen joukko F = {4, 5} j siirtymäfunktio δ: Askel 1: Turhien tilojen poisto. ennen jälkeen Askel 2: Jottele syötteen M (jäljelle jääneet) tilt 0-ekvivlenssiluokkiin, eli hyväksyviin j hylkääviin tiloihin. Merkitään ekvivlenssiluokki roomlisin numeroin. 37
40 2 4 I: 1 2, I 3, I 2 4, II 2, I 3 2, I 3, I II: 4 3, I 5, II 5 1, I 4, II Automtti M lk kehittyä tästä lähtotilnteest: I II I: 1 2, I 3, I 2 4, II 2, I 3 2, I 3, I II: 4 3, I 5, II 5 1, I 4, II, Til I on epädeterministinen, kosk merkillä voidn siirtyä tiln I ti II. Askel 3: k-ekvivlenssist (k + 1)-ekvivlenssiin. I Jos M ei sisällä enää yhtään epädeterminististä til, niin lgoritmi päättyy j tulost sen vstuksenn. Nyt kuitenkin sen luokk I pitää jk, kosk syötteen M tilt 1 j 3 käyttäytyvät keskenään smoin: kummllkin syötemerkillä pysytään luokss I, mutt til 2 käyttäytyy toisin kuin ne: syötemerkillä siirrytäänkin tiln II. Siis tilt 1 j 3 pysyvät luokss I, kun ts til 2 muodost uuden luokn III. II I: 1 2, III 3, I 3 2, III 3, I III: 2 4, II 2, III II: 4 3, I 5, II 5 1, I 4, II I III II 38
41 A B D C E Kuv 9: Tehtävän 13 utomtti. Askel 4: Nyt jokinen luokk I, II j III on deterministinen, joten tulos M on vlmis. Tehtävä 13. Muodost kuvn 9 utomtti vstv minimiutomtti. Tehtävä 14. Muodost kuvn 10 utomtti vstv minimiutomtti. 4.7 Epädeterministiset äärelliset utomtit Epädeterminismi trkoitt, ettei koskn trvitse myöntää olevns väärässä. Anon. 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 ei niin, että sille olisi jokin hyväksyvä lskent sen kikki lskennt hylkäävät. Esimerkiksi epädeterministinen utomtti 39
42 Kuv 10: Tehtävän 14 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, ). 40
43 Deterministinen utomtti hyväksyy, jos se ino mhdollinen lopputilnne on hyväksyvä. 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 n loputtu olln josskin hyväksyvässä tilss q n. Mutt epädeterminismi 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? Sillä onkin erilisi tulkintoj, kuten: Spesifiktion. Epädeterminismi kuvilee minkäliset merkkijonot pitäisi hyväksyä mutt ei kerro trksti miten niiden hyväksyntä etenisi skel skeleelt. Etsintänä. Epädeterminismi on opertio etsi reitti tästä tilnteest johonkin hyväksyvään lopputilnteeseen. Se ts voitisiin meknisoid vikkp TRA-kurssin keinoin syvyyssuuntisen etsintänä kikkien tilnteiden verkost: 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. Epädeterministisen utomtin voidn jtell seurvn mhdollisi lskentojn rinnkkin: Deterministinen lskent Epädeterministinen lskent.. hyväksy ti hylkää.... hylkää hyväksy 41
44 ε Kuv 11: Epädeterministinen utomtti joss on siirtymä tyhjällä merkkijonoll. Eli deterministinen lskent on yksi polku, mutt epädeterministiset lskennt muodostvt kokonisen lskentpuun, jonk hrt vstvt eri vlintkohti. Ilmisen neuvon. Epädeterministisen utomtin voidn jtell svn jokisess vlinttilnteessn Mihinköhän seurvist mhdollisist tiloistni δ(q, ) minun knnttisi siirtyä? jostkin ulkopuolelt vstuksen Siirry tiln r, luot minuun! Tärkeä tulos 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 olisiko se voitu lskekin ilmn neuvoj nopesti?. 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ädeterminismiä käyttämällä kielen esitystä voidn kuitenkin usein selkeyttää j yksinkertist. Epädeterministisessä utomtiss sllitn myös ε-siirtymiä kuten kuvss 11. Tällisen ε-siirtymän kuten 1 ε 2 tulkint on, että sitä pitkin pääsee tilst 1 tiln 2 lukemtt yhtään syötemerkkiä. 42
45 0 Esimerkkinä kuvn 11 utomtti j syöte. Vknuolet kuvvt ε-siirtymiä, joiss ei siis luet syötettä. Viimeisellä rivillä esiintyy (khteenkin kertn) hyväksyvä til 3, joten utomtti hyväksyy syötteen 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,,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. 43
46 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 15. 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. Muutoin määritelmät epädeterministisille utomteille ovt smt kuin iemmin. 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ä sdulle utomtille M voidn lske jokin sitä vstv M eli menetelmä determinisoid M. Tehtävä 15. Ldi sellinen kkoston Σ = {, } epädeterministinen utomtti, jok hyväksyy täsmälleen ne merkkijonot, joiss esiintyy sekä merkkijono että merkkijono. Huom, että nämä esiintymät svt oll päällekkäinkin: siis esimerkiksi merkkijono hyväksytään, kosk siinä on lle- j ylleviivuksell merkityt esiintymät. Tehtävä 16. Ldi deterministinen utomtti edellisen tehtävän 15 kielelle. Epädeterministisen utomtin simulointi 44
47 Pltn iempn esimerkkiin kuvss 11. Kirjoitetn 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 1. stu syötemerkkiä vstvt seurjtilt j 2. ne tilt, joihin niistä päästään ε- siirtymillä ε 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(lkutil q 0 ) 2 while syötettä on yhä 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 lopputilt F NykyisetTilt Algoritmi SimulteNFA tulkk epädeterministisen lskennn deterministiseksi. Yksittäinen syötemerkki käsitellään (phimmss tpuksess) jss O( Q ). 45
48 Tästä tulkkuksest päästään eroon kääntämällä lskent deterministiseksi, eli muodostmll NFA:st M DFA M jok tunnist smn kielen, eli lskemll etukäteen NFA:n M siirtymätulukost DFA:n M siirtymätulukko. Hvitn: muuttujn NykyisetTilt rvot kuuluvt potenssijoukkoon P(Q). Siten muuttujll NykyisetTilt on korkeintn P(Q) = 2 Q mhdollist rvo joten voimme muodost äärellisenä pysyvän deterministisen utomtin littmll kukin sen mhdollinen rvo omksi tilkseen j siirtymät kuten SimulteDFA 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 sen rivillä 1. Eli E(DFA:n M lkutil q 0 ). Hyväksyvät tilt ovt kuten sen rivillä 9. Eli ne tilt, joihin sisältyy inkin yksi DFA:n M lopputil. 1 Alust tulos M sisältämään lkutil nimeltä E(DFA:n M lkutil q 0 ) ilmn yhtään krt, j merkitse se uudeksi 2 while tuloksess M on uusi tiloj 3 do NykyisetTilt ot jokin niistä j merkitse se vnhksi 4 if joukkoon NykyisetTilt kuuluu inkin yksi epädeterministisen utomtin M hyväksyvä til 5 then merkitse NykyisetTilt hyväksyväksi tilksi 6 else merkitse NykyisetTilt hylkääväksi tilksi 7 for ech Σ 8 do lske SeurjTilt kuten lgoritmin SimulteNFA riveillä if til nimeltä SeurjTilt puuttuu tuloksest M 10 then luo sellinen j merkitse se uudeksi 11 Lisää tulokseen M siirtymä NykyisetTilt SeurjTilt Esimerkki 16. Determinisoidn epädeterministinen utomtti M q 0 q 1 q 2 q 3 46
49 Esimerkiksi tiln s 2 = {q 0, q 2 } seurj syötemerkillä on til s 3 = {q 0, q 1, q 3 }, sillä s 3 sisältää täsmälleen kikki joukkoon s 2 kuuluvien lkioiden seurjt 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 } 2. Stiin uusi til {q 0, q 1 } j jtketn sillä. {q 0 } = s 0 {q 0, q 1 } {q 0 } {q 0, q 1 } = s 1 {q 0, q 1 } {q 0, q 2 } 3. Stiin uusi til {q 0, q 2 } j jtketn sillä. {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ä 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 } 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 47
50 Esimerkki 17. Determinisoidn kkoston Σ = {M, I, U} seurv epädeterministinen utomtti: M,I,U M,I,U M I U Rtkisu: Kun generoidn koko potenssijoukko eli käytetään suor mtemttist määritelmää eikä while-lgoritmi niin sdn tulokseksi: joss 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 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: 48
51 I,U M I,U M I A E F U M U G I L M U I M I,U M M Se minimoitun: I,U M M,I,U A M I E U M F I U G Tehtävä 17. Determinisoi seurv utomtti: 1, 2 Esimerkki 18. Determinisoidn seurv utomtti: 0 0 ε c ε d 49
52 Siinä on sekä ε-siirtymiä että tvllinen epädeterministinen siirtymä (tilst merkillä 0). 1. Alkutilksi sdn E({}) = {,...} = {, c,...} = {, c, d}. 2. Tästä lkutilst päästään tiloihin δ({, c, d}, 0) = E(δ(, 0) δ(c, 0) δ(d, 0)) = E({, } {c} ) = E({,, c}) = {,, c, d} ensimmäinen uusi til δ({, c, d}, 1) = {d} toinen uusi til. 3. Käsitellään nämä uudet tilt vikkp niiden luontijärjestyksessä. Siten: δ({,, c, d}, 0) = {,, c, d} δ({,, c, d}, 1) = {c, d} sm vnh til kolms uusi til. 4. Sitten: 5. Sitten: δ({d}, 0) = δ({d}, 1) = δ({c, d}, 0) = {c, d} neljäs uusi til. sm vnh til δ({c, d}, 1) = {d} toinen vnh til. 6. Kikki syntyneet tilt on nyt käsitelty, j sdn lopputulos: til 0 1 {, c, d} {,, c, d} {d} {,, c, d} {,, c, d} {c, d} {c, d} {c, d} {d} {d} {, c, d} {,, c, d} {d} {c, d}
53 Tehtävä 18. Determinisoi seurv utomtti: 1 ε 2 3, Tehtävä 19. Determinisoi seurv 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. 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 deterministinen utomtti ostn muodost suornkin jss O(m), ns. Knuth-Morris-Prtt lgoritmi. 51
54 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)... 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. 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.) 4.8 Säännölliset lusekkeet j kielet Säännöllisellä lusekkeell (regulr expression) voi kuvill, minkä muotoisi merkkijonoj hyväksytään. XML-dokumenttien kvioformlismeiss käytetyt elementtien sisältömllit ovt oleellisesti säännöllisiä lusekkeit. Esim. XHTML-kielen tulukkoelementtien rkennekuvus: 52
55 <!ELEMENT tle (cption?, (col* colgroup*), thed?, tfoot?, (tody+ tr+))> XHTML-tulukko voi sisältää ll olevss järjestyksessä vlinnisen otsikon mielivltisen jonon srke- ti srkeryhmä-elementtejä vlinnisen ylä- j ltunnisteen epätyhjän jonon ody- ti 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 sunnon numero: egrep [A-ZÅÄÖ][-zåäö]*\(ktu\ tie\) [0-9][0-9]* tiedosto.txt Monien editoreiden serch j serch & replce -komennot sllivt myös säännölliset lusekkeet; smoin jotkut ohjelmointikielet sisältävät regexp kirjstoj. Eräs mhdollisuus grep-toiminnon toteuttmiseksi olisi seurv: 1. Muodostetn äärellinen utomtti, jok hyväksyy tsn selliset merkkijonot, joiss esiintyy nnettu hhmo. 2. Seltn syöte rivi kerrlln käyttämällä tätä utomtti, j tulostetn hyväksytyt rivit. Kysymys: Kuink monimutkisi hhmoj tällä peritteell voidn käsitellä? Esim. edellä muodostettiin hhmoist utomtti j kieli uusi hhmo tioperttorill. Smoin sllittiin hhmon iterointi eli ktenointi itsensä knss ([0-9]*). Kuink voimkkt operttorit voidn siis slli? 53
56 Kielten yhdiste, tulo j sulkeum Olkoot A j B kkoston Σ kieliä, eli A, B Σ. Kielten A j B yhdiste on kieli suorn joukko-opist. A B = {x Σ x A ti x B} Jos yhdistettä jttelee eräänlisen yhteenlskun niin sen noll on kosk sen lisäämisellä ei ole vikutust: X = X = X. Kielten A j B ktentio eli tulo on kieli AB = {xy Σ x A, y B} eli ne merkkijonot xy jotk lkvt jollkin kielen A merkkijonoll x j jtkuvt jollkin kielen B merkkijonoll y. Jos tulo jttelee eräänlisen kertolskun niin sen ykkönen on {ε} kosk Vstvsti nollll kertominen noll : {ε} X = X {ε} = X. X = X =. Tyhjä kieli j tyhjä merkkijono ε ovt eri sioit, niillähän on eri tyyppikin. Kielessä {ε} on yksi lkio, nimittäin ε, joten se ei ole tyhjä. Kielen A potenssit A k, joss k N, määritellään itertiivisesti: A 0 = {ε} A k = AA k 1 = AAA... A }{{} k kert = {x 1 x 2 x 3... x k x i A kikill i = 1, 2, 3,..., k} (k 1) Kielen A sulkeum on kieli A k A = k N = {ε} A AA AAA... = {x 1... x k k 0, x i A kikill i = 1, 2, 3,..., k} Tässä vihdoin on moniss pikoissä käyttämämme merkinnän potenssiin trkoitettu sisältö: (...) koostuu niistä merkkijonoist, jot sdn liimilemll yhteen äärellisen mont tämän kuvuksen (...) mukist merkkijono. 54
57 Erikoistpuksen = {ε}... = {ε} kosk noll(kin) potenssiin noll on yksi. Esimerkki 19. Trkstelln kkoston {,... z, 0,..., 9} kieliä A = {, } j B = {01, 02}. Nyt Säännöllinen luseke A B = {,, 01, 02} AB = {01, 02, 01, 02} A = {ε,,,,,,,,,,,,...} Määritelmä 3. Akkoston Σ säännölliset lusekkeet (regulr expressions) määritellään induktiivisesti säännöillä: Vkiot j ε ovt jokisen kkoston säännöllisiä lusekkeit; kkoston jokinen merkki Σ on sen säännöllinen luseke; jos r j s ovt kkoston Σ säännöllisiä lusekkeit, niin myös (r s), (rs) j r ovt sen säännöllisiä lusekkeit; j muit kkoston Σ säännöllisiä lusekkeit ei ole. Akkoston Σ säännöllinen luseke r kuv kielen L(r) Σ : L( ) = L(ε) = {ε} L() = {} kikill Σ L((r s)) = L(r) L(s) L((rs)) = L(r)L(s) L(r ) = (L(r)) Esimerkki 20. 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 } 55
58 Lyhennysmerkintäsopimuksi Sulkumerkkejä voidn vähentää seurvill säännöillä: Operttoreist sitoo vhvimmin, sitten tulo, j heikoimmin. Yhdiste- j tulo-opertioiden ssositiivisuus: L(((r s) t)) = L((r (s t))) L(((rs)t)) = L((r(st))). Käytetään tvllisi kirjsimi mikäli seknnuksen vr merkkijonoihin ei ole. Esim. edellisen esimerkin 20 lusekkeet r 1 = (()), r 2 = (), r 3 = ( ), r 4 = (( ())) yksinkertisemmin: r 1 =, r 2 = (), r 3 =, r 4 = (( )) Lyhennysmerkintä r + trkoitt toist r inkin kerrn. Siten r + = rr = r r. Esim. jos d = (0... 9), niin d + (ti dd ) trkoitt, että merkkijono koostuu yhdestä ti usemmst numeromerkistä. Säännöllinen kieli (uudelt knnlt) Voimme määritellä säännöllisen kielen A myös sellisen, jok voidn kuvt jollkin säännöllisellä lusekkeell r, eli A = L(r). Osoitmme pin, että tämä on yhtenevää iemmn määritelmämme ( äärellisen utomtin hyväksymä kieli ) knss. Esimerkki 21. Olkoon kkosto Σ = {,, c,...}. Säännöllisen lusekkeen Σ utomttiσ kuvm kieli on niiden merkkijonojen joukko jotk sisältävät osmerkkijonon utomtti. Siis tämä kieli on säännöllinen. Esimerkki 22. Olkoon Σ = {A, B, C,..., Ö,,, c,..., ö, 0, 1, 2,..., 9, }. Osoite on muoto (Ll )(ktu tie) dd (l ε)(dd ε) ddddd Ll joss d on lyhenne lusekkeelle ( ) l on lyhenne lusekkeelle ( c... ö) eli pienille kirjmille ( letters ), j L on lyhenne lusekkeelle (A B C... Ö) eli suurille kirjimille ( LETTERS ). Huom: Monet regexp -kirjstot j -työklut lisäävät ominisuuksi jotk eivät ole säännöllisiä (kuten esimerkiksi rjoittmttomt viitteet tksepäin, NP-täydellinen ongelm... ). Tällä kurssill esitetellään nämä idot säännölliset lusekkeet ilmn sellisi lisäyksiä. 56
59 Esimerkki 23. Ohjelmointikielen C etumerkittömät liukuluvut (jotk ovt tyyppiä flot, doule ti long doule) määritellään seurvsti: (kokonisos).(desimlios) (e ti E) [+ ti ] (eksponentti) [suffiksi] merkintä [... ] trkoitt että kyseinen os voi myös puuttu kokonisos j desimlios koostuvt numeroist joko kokonisos 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: 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. seurvt merkkijonot: 12.,.12, 1.2, 1.2E3, 1.2e3, 1E2, 1e E-3, Tehtävä 20. Trkstelln seurvi kkoston Σ = {, } kieliä. Ann kustkin kielestä kksi merkkijono, jotk kuuluvt kieleen, j kksi, jotk eivät kuulu kieleen! () () 5. (ε ) 6. Σ Σ Σ Σ Tehtävä 21. Etsi lyhyin merkkijono, jok kuuluu seurvn lusekkeen kuvmn kieleen! 1. ( ) 2. ( () ) 3. ( )( ) Tehtävä 22. 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ä } 57
60 Tehtävä 23. Esitä yksinkertisemmss muodoss seurvt lusekkeet (eli nn luseke, jok yhä kuv smn kielen, mutt joss on vähemmän operttoreit): 1. ( ) 2. (0 10 ) 3. 1 (011 ) 1 (011 ) 0 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ö: on hiemn kuin yhteenlsku, j on hiemn kuin 0. Tulo on hiemn kuin kertolsku, j ε on hiemn kuin 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 58
61 Jos ε L(s) niin kielten välisen yhtälön x = xs t pienin rtkisu (osjoukkoreltion suhteen) on kieli x = ts. Itse siss tämän yhtälön pienin rtkisu rvoll t = ε onkin opertion s lgerllinen määritelmä. Tvlliset joukko-opertiot vs. säännöllisten kielten opertiot Olkoot A = {, } j B = {c, d}. 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 =, kun X = n Miten osoitt, että L(r) = L(s)? Mtemttinen rtkisutp on osoitt, että 1. L(r) L(s) eli r s, j 2. L(s) L(r) eli s r. Ti helpommin (mutt ehkä työläämmiin) vstvill utomteill: 1. Muodost minimliset ääreelliset deterministiset utomtit lusekkeille s j r. 2. Jos utomtit ovt (tilojen nimiä lukuunottmtt) smt, niin kieletkin ovt smt onhn minimlinen deterministinen utomtti yksikäsitteinen. Miten lusekkeest voidn muodost utomtti? 4.9 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. 59
62 r = : r = s t: r = ε: ε ε M s ε r =, Σ ε M t ε r = st: r = s : ε M s M t ε M s ε ε Kuv 12: Säännöllisestä lusekkeest äärelliseksi utomtiksi 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 3. Jokinen säännöllinen kieli voidn tunnist äärellisellä utomtill. Todistus: Annetn kuvn 12 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.) Esimerkki 24. Muodostetn säännöllistä lusekett (( ) ( )) vstv äärellinen utomtti. (Vert tulost tehtävään 13.) 60
63 ε ε M ε ε ε ε ε ε M ( ) ( ) ε ε ε M ε ε ε ε ε ε, ε ε ε Tehtävä 24. Muodost säännöllistä lusekett (0 1) 0 (0 1) 01 = (0 1) (0 01) = (0 1 ) (0 01) vstv äärellinen utomtti. Tehtävä 25. 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. Toislt ekvivlentti säännöllinen luseke voidn esittää monell tp, j osutomtit jost lopullinen rtkisu sdn voivt oll erilisi. Eli rtkisuj on erilisi (siihen skk kunnes on determinisoitu j minimoitu) Automtist säännöllinen luseke Luse 4. Jokinen äärellisellä utomtill tunnistettv 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. 61
64 ε ε f ε Kuv 13: Lopputilojen korvminen yhdellä uudell. Menetelmän edetessä polku tilst i tiln j korvtn oikotiellä eli yhdellä suorll siirtymällä. Tällisen oikotien pitää yhä kuvt kikki smt merkkijonot jotk kerätään kuljettess tilst i tiln j lkuperäisiä siirtymiä pitkin. 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 13.) 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 14. 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: 62
65 p i j = i p q j q Kuv 14: Kksi rinnkkist siirtymää yhdeksi. 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ä? 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 (4) kuten kuvss 15. 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 (5) i r i,j p i q r j j (6) 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 63 r f.
66 q i. p i k r j. j p i q r j Kuv 15: Oikotie välisolmun k ohi. 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 (7) Jos tällist lkutiln silmukk ei ole, niin sitä vstv os q jää pois lopputuloksest (7). Esitetään tämä menetelmä vielä lgoritmin: 64
67 q r s r f q Kuv 16: Luseke kutistuneest utomtist. 1 Lisää kuvn 13 mukinen uusi hyväksyvä til f ellei 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 Otetn esimerkki tästä menetelmästä: 65
68 (i) lkuperäinen utomtti: (ii) lisätään uusi lopputil: s 1 s (iii) yhdistetään rinnkkiset: 1 1 ε 1 f (iv) poistetn til: ε s s ε f ε 0 1 ε (0 1)ε f (v) poistetn til: (vi) poistetn til: s 1 (0 1)(ε (0 1)ε) s 1(0 1)(ε (0 1)ε) f Nyt voidn luke lopputulos (0 1) 1(0 1)(ε (0 1)ε) f jot voidn vielä hiemn sieventää muotoon (0 1) 1(0 1)(ε 0 1) jost voidn luke vstus: lkuperäinen utomtti hyväksyy ne inäärikkoston merkkijonot, joiden toiseksi ti kolmnneksi viimeinen merkki on 1. Lusekkeit voi j knnttkin sievennellä jo menetelmän ikn. Tehtävä 26. Muodost seurvn utomtin tunnistm kieltä kuvv säännöllinen luseke:,
69 4.10 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. Tskstelln säännöllisten kielten joukko (s.o. merkkijonojoukkojen joukko). Minkälisten opertioiden suhteen se on suljettu? Luse 5. 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 5 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 ). 67
70 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 25. Lditn utomtti, jok tunnist kielen L(M) = {w {, } w ei sisällä merkkijono }. Lditn ensin sen komplementtikielen tunnistv deterministinen utomtti, jok siis tunnist kielen L(M) = {w {, } w sisältää merkkijonon }. Hluttu utomtti sdn vihtmll hyväksyvät tilt hylkääviksi j päinvstoin.,, Konstruktio edellyttää, että mhdolliset virhetilt on esitetty eksplisiittisesti, kosk komplementtiutomtiss niistä tulee hyväksyviä tiloj. Sm voidn tehdä jokiselle deterministiselle utomttille j siten jokiselle säännölliselle kielelle. Muistutus: De Morgnin säännöt Tuttuj koulumtemtiikst ti diskreeteistä rkenteist ti mtemttisest logiikst. Ilmisevt joukko-opiss, että komplementointi kääntää yhdisteet leikkuksiksi j päinvstoin: A B = A B A B = A B. Osoitetn näiden nojll, että säännöllisten kielten A j B leikkus on säännöllinen: 1. A B = A B 68
71 2. De Morgn: A B = A B 3. Säännöllisten kielten komplementtein A j B ovt säännöllisiä. 4. Siten myös niiden yhdiste A B on säännöllinen, j smoin sen komplementti. Säännölliset kielet nähdään edellisen nojll suljetuiksi myös joukkoerotuksen suhteen, kun lähdetään liikkeelle tiedost A \ B = A B. Säännöllisten kielten leikkus/yhdiste/erotus utomtill Vihtoehtoisesti säännöllisten kielten A j B joukko-opillinen yhdistelmä L (yhdiste, leikkus ti erotus) voidn tunnist ns. tuloutomtill. Olkoot M 1 = (Q 1, Σ, δ 1, q 1, F 1 ) j M 2 = (Q 2, Σ, δ 2, q 2, F 2 ) deterministiset utomtit, joill A = L(M 1 ) j B = L(M 2 ). Muodostetn uusi utomtti M, jonk tiloj ovt lkuperäisten utomttien tilojen prit (p, q) Q 1 Q 2 siirtymäfunktio δ muodostuu komponenttitilojen siirtymistä: δ ((p, q), ) = (δ 1 (p, ), δ 2 (q, )) lopputilt F vlitn sen mukn mitä joukko-opertiot toteutetn: Jos L = A B, niin F = {(p, q) p F 1 ti q F 2 } Jos L = A B, niin F = {(p, q) p F 1 j q F 2 } Jos L = A \ B, niin F = {(p, q) p F 1 j q F 2 }. 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} Säännöllisten kielten rjoituksist Kysymys: Kuink voidn hvit, ettei ongelm rtkekn äärellisisllä utomteill? Eli ettei vstv formlikieli olekn säännöllinen? Esimerkki 26. Onko sisäkkäisten sulkulusekkeiden muodostm kieli L ( ) = {( k ) k k 0} säännöllinen? Yritetään tehdä sille utomtti: 69
72 ( ( ( ( q 0 q 1 q n 1 q n ) ) ) ) q 2n q 2n 1 q n+2 q n+1 ) ( ( ( ( q 0 q 1 q n 1 q n ) ) ) ) Mutt entäpä jos sisäkkäisiä sulkuprej onkin n + 1 kpl? Automttien rjllinen muisti Ääärellinen utomtti muist merkkijonon 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. Kielen osoittminen säännölliseksi ei ole lskennllisesti rtkev ongelm, vn 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ä 27. Todist että tämä kieli B on säännöllinen. Vihje: Mieti millä merkillä jono w B voi lk j millä loppu. Luse 6. 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ä k = Q til, j m = k/2. Kosk L(M) = C, niin silloin myös syöte s = 0 m 1 m L(M). 70
73 Tämän syötteen s pituus s = 2m k. Merkitään sen merkkejä s = s 1 s 2... s 2m. Syötteellä s utomtti käy yhteensä 2m + 1 tilss, mukn lukien lkutil (joist os (ti kikki) voivt oll smoj). Toisin snoen, utomtti käy tiloiss: r 1 0 r r 1 m+1 r 1 1 m+2 r 2m+1. Eli lkutil q 0 = r 1 j δ(r i, s i ) = r i+1, missä r i Q. Hvinto: Q = k < 2m + 1 joten jonoss r 1... r 2m+1 inkin yksi til esiintyy usemmin kuin kerrn, eli r i = r j jollin i < j. Siis merkkijonoll s i... s j 1 utomtti tekee silmukn tilst r i tkisin tiln r i = r j : x = s 1... s i 1 r i = r j z = s j... s 2m r 1 r 2m+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 2m+1. Silmukn sisältävästä hyväksyvästä lskennst sdn uusi hyväksyvä lskent ohittmll silmukk: r 1 x r i z r 2m+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 2m+1. r 1 x r i y ri y ri y ri z r 2m+1. Siis utomtti hyväksyy myös merkkijonot xy 2 z = xyyz, xy 3 z = xyyyz, xy 4 z = xyyyyz,... Kysymys: Kuuluuko merkkijono xy l z kieleen C = {0 n 1 n n N} jokisell mhdollisell toistokertojen lukumäärällä l N? 71
74 Trkstelln silmukn erilisi mhdollisi sijintej merkkijonon s keskikohdn suhteen: 1. i < j m + 1: nyt y = 0 j i. 2. i < m + 1 < j: nyt y = 0 m+1 i 1 j m m + 1 i < j: nyt y = 1 j i. Missään näistä tpuksist esimerkiksi xy 2 z ei kuulu kieleen C: tpuksess 1 siinä on liik nolli tpuksess 2 se on muoto tpuksess 3 siinä on liik ykkösiä. Kosk utomtti kuitenkin hyväksyy merkkijonon xy 2 z, tämä on ristiriit oletuksen C = L(M) knss. Siis kieltä C ei voi tunnist k-tilisell äärellisellä utomtill millään k, eli kieli C ei ole säännöllinen. Edellisen todistuksen peruside oli osoitt, että jos M on k-tilinen utomtti, niin kielellä L(M) on pumppuspituus k: Määritelmä 4. Kielellä A on äärellinen pumppusominisuus, jos on olemss sellinen p, että 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. Tällöin p on (eräs) kielen A pumppuspituus. Siis x = ε j z = ε ovt sllittuj, mutt y ε (ehto 2, kosk muuten pumpttvuus olisi trivili). Kun kielellä on äärellinen pumppusominisuus, 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 7 (Säännöllisten kielten pumppuslemm). Jokisell säännöllisellä kielellä on äärellinen pumppusominisuus. Todistus: Sivuutetn, ide on kuten edellisen luseen todistuksess yleistettynä mille thns säännölliselle kielelle. Intuitiivisesti, sm suomeksi: Äärettömän säännöllisen kielen tunnistvss utomtiss on silmukk siten, että 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ä. 72
75 3. xy p: lskennn täytyy joutu silmukkn ennen kuin utomtist loppuvt tilt. Siis pumpputuvuusehto 2 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. Jos merkkijono s on pumpputuv, se kuuluu kieleen, kosk s = xy 1 z. Lisäksi se sisältää osjonon y, jonk poistminen ti monistminen tuott uusi kielen merkkijonoj. Ehdon 3 nojll tämä osjono y löytyy jonon s lkuosst, jonk pituus on p. Kielen pumpputuvuus trkoitt, että jokinen trpeeksi pitkä kieleen kuuluv merkkijono on pumpputuv. Pumppuslemmn soveltminen Kiinnostv vin äärettömille kielille (äärelliset kielet ovt in säännöllisiä). Pumppuslemmn mukn millä thns säännöllisellä kielellä A on pumppusominisuus, toisin snoen jollkin p N mille thns selliselle s A jok on riittävän pitkä 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ä mille thns 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 s sopivsti helpottmn todistust, mutt sitten meidän pitää käydä läpi kikki mhdolliset tvt jk vlitsemmme s osiin x, y j z j osoitt, että mikään ei toteut pumppusehtoj. Toisin snoen, kun hlutn todist kieli ei-säännölliseksi, tehdään vstoletus, eli oletetn se säännölliseksi, 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). 73
76 Esimerkki 27. 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 pumppusominisuus, eli jokin vkio p siten, että jokinen inkin niin pitkä 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 yhtään mitään muut, niin olemme todellkin 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 5) j muut säännöllisiksi j ei-säännöllisiksi tunnetut kielet. Esimerkki 28. 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). 74
77 Tämä on ristiriit, kosk (0 1 ) D on sm kuin C = {0 n 1 n iemmin todistettu ei-säännölliseksi esimerkissä 27. n N}, jok on Esimerkki 29. Osoit, 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 pumppuslemmll: Vlitn s = 0 p 1 p. Olkoon s = xyz D. Siis y ε j xy p, joten 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. 75
78 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 s siten, että eheysehdon toinen ospuoli kuuluu ensimmäiseen p merkkiin j sitä päästään pumppmn. Toinen tvoite on, että merkkijonon mhdollisi erilisi jkoj osiin xyz olisi mhdollisimmn vähän. Tätä käytimme esimerkin 27 todistuksessmme, ettei kieli C = {0 n 1 n n N} ole säännöllinen: vlitsimme merkkijonon s niin pitkäksi, että lkuos x j pumpputuv os y olivt molemmt 0-jonoj. Test kikki pumppuslemmn mukiset jot w = 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ää. 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. Voitisiin siis sovelt pumppuslemm kieliin C = A B ti D = A, mutt joskus C ti D voi oll jokin tunnetusti ei-säännöllinen kieli, jolloin erillistä pumppuslemm-todistust ei trvit. Pikkertus: tähän mennessä... Deterministinen äärellinen utomtti (DFA): yksinkertinen lskentlite, muisti vin vkiomäärä, syötteen pituudest riippumtt. Säännölliset kielet: niiden kielten luokk, jok voidn tunnist DFA:ll. 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 esittää lusekkeell. säännöllisellä 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, w {, } } Tähän mennessä: säännölliset kielet, tunnistus äärellisellä utomtill Seurvksi: kontekstittomt kielet, tunnistus pinoutomtill Kikki muut kielet: vin osittin rtkevi ( kyllä -tpuksess) ti täysin rtkemttomi. 76
79 Koetehtäviä? Yleisesti, smntyylisiä kuin luentojen esimerkit j kotitehtävät. Perustehtäväprototyyppi: Tehtävä 28. Ldi DFA / NFA jok tunnist kielen X. Minimoi / 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ä 29. 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ä 30. Miten mielivltisest NFA:st sdn NFA joss on vin yksi hyväksyvä til? Tehtävä 31. Voiko säännöllistä kieltä 0 1 tunnist deterministisellä äärellisellä utomtill, joss on vin yksi hyväksyvä til? Perustele. Tehtävä 32. Osoit, että säännöllisten kielten luokk on suljettu leikkuksen suhteen. Tehtävä 33. Olkoon A säännöllinen kieli. Osoit, että myös A R = {w R säännöllinen. w A} on Tehtävä 34. 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ä 35. 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} 77
80 5 Kontekstittomt kielet j pinoutomtit Kontekstittomt kielet (context-free lnguges, yhteydettömät kielet) voidn kuvt kontekstittomill kieliopeill (context-free grmmr) j tunnist epädeterministisillä pinoutomteill (pushdown utomton). Verrttun edelliseen lukuun, korvmme säännölliset lusekkeet näillä kieliopeill, j epädeterministiset äärelliset utomtit näillä 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 mitä ovt kontekstittomt kielet j pinoutomtit, j mikä on niiden välinen suhde. Opitn muodostmn kielioppi yksinkertisille kontekstittomille kielille. Opitn jäsentämisen perusidet. 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. 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ä): 78
81 S S S 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 30. Yksinkertinen kielioppi ritmeettisille lusekkeille: E T E + T T F T F F (E). Esimerkiksi ensimmäinen rivi luetn muuttujsymoli E voidn korvt merkkijonoll T ti merkkijonoll 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ä. Kontekstittomn kieliopin formli määritelmä Määritelmä 5. Kontekstiton kielioppi on nelikko joss G = (V, Σ, P, S) 79
82 ää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 jokin A N (siis vikk ensimmäinen ti viimeinen) jonost r = α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 Silloin kieliopin G tuottm formli kieli L(G) muodostuu merkkijonoist r, jotk tämä lgoritmi voi tulost vlitsemll säännöt sopivsti rivillään 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 30 kieliopiss G ritmeettisille lusekkeille. 80
83 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. 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 F F G (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 30 kieliopiss ritmeettisille lusekkeille. Kieliopin G luse on sen pelkistä päätemerkeistä koostuv lusejohdos: S γ j γ Σ. G Esimerkiksi ( + ) on luse esimerkin 30 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ä 6. Formli kieli L Σ on kontekstiton, jos se voidn tuott jollkin kontekstittomll kieliopill. 81
84 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 j kielet, 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. 82
85 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 ω ω 1k1 A 2 ω ω 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 31. Sisäkkäisten sulkujonojen muodostmn kielen L ( ) = {( k ) k k 0} tuott kielioppi G ( ) = ({S, (, )}, {(, )}, {S ε, S (S)}, S) Esimerkki 32. 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 31 kielioppiin. Esimerkki 33. 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 34. Yksinkertisten ritmeettisten lusekkeiden muodostmn kielen L expr tuott kielioppi G expr = (V, Σ, P, E) (8) joss V = {E, T, F,, +,, (, )}, Σ = {, +,, (, )}, P = {E T, E E + T, T F, T T F, F, F (E)}. 83
86 Kieliopill (8) 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), (9) P = {E E + E, E E E, E, E (E)} Esimerkki 35. 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älikkesymolein 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. 84
87 Oleellisin ero kontekstittomiin kielioppeihin: Kontekstittomt kieliopit kuvvt merkkijonoj. Dokumenttikviot sitä vstoin kuvvt konkreettisen tekstiesityksen sijst hierrkkist elementtirkennett. Siten dokumenttikviot vstvt pikemmin ns. säännöllisiä puukielioppej, joit vstvt lskentmllit ovt ns. puuutomttej. Esimerkki 36. 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. Esimerkki 37. Ohjelmointikielten syntksin kuvus. 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 (englnniksi 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 114.) Tehtävä 36. 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++) { } } 85
88 Induktiivisist nottion määritelmistä Usein määritellään jokin nottio induktiivisesti eli itseensä viittvsti kuvilemll se luonnollisell kielellä. Itse siss silloin määritelläänkin usein nottiolle kontekstiton kielioppi, sitä vin ei lusut ääneen. Esimerkiksi edellä määriteltiin kkoston Σ säännölliset lusekkeet: Vkiot j ε ovt jokisen kkoston säännöllisiä lusekkeit siis kieliopiss on säännöt S j S ε. kkoston jokinen merkki Σ on sen säännöllinen luseke siis kieliopiss on om sääntönsä S jokiselle Σ jos r j s ovt kkoston Σ säännöllisiä lusekkeit, niin myös (r s), (rs) j r ovt sen säännöllisiä lusekkeit siis kieliopiss on säännöt S (S S) S (SS) S S joiss on käytetty sitä mhdollisuutt viitt tähän prhilln määriteltävänä olevn nottioon myös sitä määrittelevien sääntöjen oikeill puolill. Sitten usein jtketn määrittelemällä säännöt, joill sulkuj voi jättää pois. Sen vstine kieliopiss on hierrkkinen rkenne. Esimerkiksi säännöllisille lusekkeille määriteltiin että Operttoreist sitoo vhvimmin, sitten tulo, j heikoimmin. Vstv hierrkkinen rkenne esitetään uusill välikkeillä j säännöillä jotk korvvt entiset: S T S T UT S T T U U U U V U (S) V V ε V jokisell merkillä Σ joss U sitoo vhvimmin, sitten T j heikoimmin S. Sulkuj trvitn vin silloin, kun hypätään vhvemmst tkisin heikompn. Iden on, että nottioll kirjoitettujen ilmusten rkenne eli ns. jäsennyspuu säilyy yksiselitteisenä vikk sukuj ei olekn. Tähän pltn myöhemmin. Myös induktiivisesti määritellyn nottion merkitys määritellään induktiivisesti, eli suhteess tähän ääneen lusumttomn kielioppiin. Esimerkiksi säännöllistä lusekett r vstv kieli L(r) Σ määriteltiin tähän tpn: L( ) = L() = {} jokisell Σ L((rs)) = L(r)L(s) L(ε) = {ε} L((r s)) = L(r) L(s) L(r ) = (L(r)) Kieliopillisesti tällinen määritelmä trkoitt esimerkiksi että Kun käytetään sääntöä S (S S) niin silloin 86
89 1. ensin luodn näillä smoill peritteill se kieli L 1 jonk määrittelee säännön oiken puolen ensimmäinen S jot edellä merkittiin r 2. sitten se L 2 jonk määrittelee jälkimmäinen S jot merkittiin s 3. lopuksi sovitn, että säännön oikell puolell olev S määrittelee niistä rkennetun kielen L 1 L 2. Näin kielioppisääntöihin voidn liittää ominisuuksi eli ttriuuttej sekä niille lskusääntöjä, j sdn määriteltyä nottiolle yhtä ik syntksi eli miten nottion ilmukset pitää kirjoitt semntiikk eli miten nämä oikein kirjoitetut ilmukset pitää ymmärtää. Tälliset ttriuuttikieliopit ovt keskeinen työväline silloin kun tietokone ohjelmoidn käsittelemään nottiot syntktisesti eli trkistmn että ilmus on oikein kirjoitettu tätä jäsennysongelm käsitellään tällä kurssill semnttisesti eli lskemn oikein kirjoitetun ilmuksen merkitys sen jäsennyspuust näillä lskusäännöillä tätäkin sivutn. (Tämä on kuitenkin syntktist semntiikk eihän tietokone todellisuudess mitään ymmärrä... ) Kehitimmekin lskusäännöt tämän säännöllisen lusekkeen määrittelemää kieltä vstv äärellinen utomtti luseen 3 todistuksen! 5.1 Kontekstittomien kielten sulkeumominisuuksist Kontekstittomi kielioppej on helppo tuott soveltmll moni vstvi opertioit kuin säännöllisissä lusekkeiss. Huom: Kontekstittomien kielten luokk ei kuitenkn ole suljettu kikkien smojen opertioiden suhteen kuin säännöllisten kielten luokk! Luse 8. Jos A j B ovt kontekstittomi kieliä, niin myös niiden yhdiste A B, tulo AB j sulkeum A ovt kontekstittomi kielitä. Todistus: Trkstelln esimerkkinä yhdistettä A B; muut kohdt menevät smn tpn. Olkoot siis A j B kkoston Σ kontekstittomi kieliä. Siis A = L(G A ) j B = L(G B ) joillin kontekstittomill kieliopeill G A = (V A, Σ, P A, S A ) j G B = (V B, Σ, P B, S B ). Olkoon S / N A N B. Määritellään G = (V A V B {S}, Σ, P, S), missä Selvästi L(G) = A B. P = P A P B {S S A } {S S B }. Toislt, toisin kuin säännöllisten kielten luokk, kontekstittomien kielten luokk ei ole suljettu leikkuksen j komplementin suhteen. Toislt ts jos kieli A on säännöllinen, j kieli B kontekstiton, niin niiden leikkus A B on kontekstiton. Joitkin ei-säännöllisiä kieliä, kuten {0 n 1 n n N} ti {w {0, 1} w = w R } on helppo tuott kontekstittomll kieliopill. Toislt esimerkiksi kopiokieli {ww w {0, 1} } ei ole kontekstiton (vn kontekstinen). 87
90 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: Muit 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 SA ε, A S 1 S 2 Kieli Säännöt {, } A L( ) = {ε,,,,...} A A ε { n c n n = 0, 1, 2,...} B Bc ε { 2n c n n = 0, 1,...} B Bc ε Tehtävä 37. Ldi kielioppi seurville kielille: (0 1) 3. {0 n 1 n n N} {1 n 0 n n N} 4. {ww R w {0, 1} } 5. {w {0, 1} w = w R } 5.2 Säännölliset j kontekstittomt kielet Säännölliset kielet sisältyvät idosti kontekstittomiin kieliin, jotk vuorostn sisältyvät idosti kontekstisiin kieliin. Siis jokinen säännöllinen kieli voidn kuvt kontekstittomll kieliopill jop rkenteeltn yksinkertisell linerisell kieliopill. tyyppi 2: kontekstittomt kielet tunnistus: pinoutomtti tyyppi 3: säännölliset kielet tunnistus: äärellinen utomtti rjllinen muisti äärelliset kielet; tunnistus: ns. "trie" 88
91 Lineriset kieliopit Määritelmä 7. Kontekstiton kielioppi on oikelle linerinen jos sen kikki produktiot ovt muoto A ε ti A B, j vsemmlle linerinen jos sen kikki produktiot ovt muoto A ε ti A B. Intuitiivisesti kielioppi on oikelle linerinen jos välikesymoli s esiintyä vin säännön oikess lidss eikä missään muull. Oikelle lineriset kieliopit j epädeterministiset äärelliset utomtit vstvt toisin. Jokist oikelle linerist kielioppi vst ekvivlentti vsemmlle linerinen kielioppi, j kääntäen Äärellistä utomtti vstv linerinen kielioppi Luse 9. Jokinen säännöllinen kieli voidn tuott oikelle linerisell kieliopill. Todistus: Olkoon kieli L Σ säännöllinen, j M = (Q, Σ, δ, q 0, F ) sen tunnistv äärellinen utomtti. Iden on muodost kielioppi G M jok tuott smt merkkijonot jotk M tunnist. Silloin L(G M ) = L(M) = L kuten hlutn. Siten kieliopin G M päätekkostoksi on vlittv utomtin M syötekkosto eli Σ. Luodn kielioppiin G M om välike A q jokiselle utomtin M tillle q Q. Muit välikkeitä ei kielioppiin G M tule. Kieliopin L G lähtösymoliksi tulee A q0 eli utomtin M lkutil q 0 vstv välike. Kieliopin G M säännöt suunnitelln oikelle linerisiksi j siten, että siinä on lusejohdos ua p täsmälleen silloin kun utomtiss M päästään lkutilst q 0 tiln p lukemll syötemerkkijono u Σ. Ti toisin merkiten, kieliopin G M lusejohdokset ovt muoto ua δ (p 0,u). Tämä svutetn siten, että jokinen utomtin M siirtymä p c q tuott kielioppiin G M säännön A p ca q. Silloinhn ua p G M uca q kuten hlusimmekin. Automtin M pysähtyminen esitetään siten, että lusejohdoksen oikess lidss olev ino välike kto; silloinhn merkkijono u on sellinen jonk M hyväksyy, joten sen pidentäminen lisämerkeillä c voidn lopett. Siis siten, että kielioppiin G M lisätään sääntö A q ε jokiselle utomtin M lopputillle q F. Kielioppi G M on nyt vlmis. Esimerkki 38. Kuvss on yksinkertinen äärellinen utomtti, jok hyväksyy kielen L = {w {, } w sisältää vähintään yhden merkin }. 89
92 , 1 2 Automtti vstv kielioppi on: A 1 A 1 A 2 A 2 ε A 2 A Linerist kielioppi vstv äärellinen utomtti Luse 10. Jokinen oikelle linerisell kieliopill tuotettv kieli on säännöllinen. Todistus: Tehdään edellisen luseen 9 todistuksen konstruktio toiseen suuntn. Olkoon siis G = (V, Σ, P, S) oikelle linerinen kielioppi. Muodostetn kielen L(G) tunnistv epädeterministinen äärellinen utomtti M G = (Q, Σ, δ, q S, F ) seurvsti: Tilt vstvt kieliopin välikkeitä: Q = {q A A V \ Σ} Alkutil on lähtösymoli S vstv til q S. Syötekkosto on päätekkosto Σ. Siirtymäfunktio δ jäljittelee produktioit siten, että produktiost A B tulee siirtymä q A q B (eli q B δ(q A, )). Lopputiloj ovt ne tilt, joit vstviin välikkeisiin liittyy ε-produktio: F = {q A Q A ε P } Yhteenveton lineristen kielioppien j äärellisten utomttien vstvuuksist: Äärellinen utomtti til q lähtötil q 0 Linerinen kielioppi välikesymoli A q lähtösymoli A q0 siirtymä q q sääntö A q A q hyväksyvä til q F sääntö A q ε Esimerkki 39. Olkoon d lyhenne lukumerkille {0, 1,..., 9}. Trkstelln seurv oikelle linerist kielioppi: S +A A db A db B db ε 90
93 d +, d q S q A q B d Kuv 17: Kokonislukuutomtti niiden kieliopist. Automttiin tulee kolme til: q S, q A j q B. Lähtösymoli S vst lkutil q S j säännöstä B ε tiedämme, että q B on (ino) lopputil. Muit sääntöjä vstvt tilsiirtymät q S + q A q S q A q S d q B q A d q B q B d q B Sdn kuvn 17 tuttu utomtti, jok tunnist etumerkilliset kokonisluvut. Huom: Kielioppi voi usein oll luontevmpi luke kuin äärellistä utomtti ti säännöllistä lusekett. Tässäkin välike B voidn luke 0 ti usempi numeromerkkejä jne. Tehtävä 38. Piirrä seurvi kielioppej vstvt äärelliset utomtit: 1. Luseke:, kielioppi: S S ε. 2. Luseke: + =, kielioppi: S S. 3. Luseke: ( ), kielioppi: S A B A S A B B ε 4. Luseke: (), kielioppi: S S ε. 5. Luseke: ( ), kielioppi: S BBBS ε B B ε 6. Luseke: ( )( ), kielioppi: S DN N DN ε D
94 Muit sovelluksi ovt esimerkiksi pseudotiedettä suoltv puppugenerttori http: //pdos.csil.mit.edu/scigen/ sekä ksvikieliopit (nimeltään L- eli Lindenmyer-systeemit): 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 (jok on voitu generoid vikkp geneettisillä lgoritmeill), yms. 5.3 Pinoutomtti Pinoutomtti (push-down utomton, PDA) on äärellinen utomtti, johon on lisätty rjoittmton määrä muisti pinon muodoss kuvn 18 tpn. Kuten ennenkin, syöte hyväksytään jos sen loputtu olln hyväksyvässä tilss. Muistutus kurssilt TRA: Pino on tietorkenne, joll on seurvt opertiot: Luo tyhjä pino. Test onko pino tyhjä vi onko siinä tietolkioit. Vie pinoon jokin tietolkio x eli opertio push(x). Poist epätyhjästä pinost sinne viimeiseksi viety tietolkio eli opertio pop. Pinon vull voidn pitää kirj luetuist merkeistä j tehdä moni muitkin sioit... 92
95 syötenuh tutkittv syöte... nuhpää ohjusyksikkö q 0 q 3 q 1 q 2 δ A A A A_ pino Kuv 18: Kvkuv pinoutomtist. Kielen voi tunnist pinoutomtill täsmälleen silloin kun se on kontekstiton. n N} voi hyväksyä pinon vull seur- Esimerkki 40. Ei-säännöllisen kielen {0 n 1 n vn tpn: 1 luss pino on tyhjä 2 while seurv luettu syötemerkki on 0 3 do push(0) 4 while seurv luettu syötemerkki on 1 nd pino ei ole tyhjä 5 do pop 6 return onko koko syöte luettu nd pino jälleen tyhjä Pinoutomtin formli määritelmä Määritelmä 8. Pinoutomtti on kuusikko M = (Q, Σ, Γ, δ, q 0, F ), joss Q on tilojen äärellinen joukko; Σ on äärellinen syötekkosto; Γ on äärellinen pinokkosto; 93
96 funktio δ : Q (Σ {ε}) (Γ {ε}) P(Q (Γ {ε})) on (joukkorvoinen) siirtymäfunktio; q 0 Q on lkutil; j F Q on hyväksyvien lopputilojen joukko. Siirtymäfunktion tyyppi Siirtymäfunktioll δ(q, σ, γ) on nyt 3 rgumentti: 1. q Q on nykyinen til, kuten ikisemminkin; 2. σ Σ on seurv syötemerkki, kuten ikisemminkin; j 3. γ Γ on pinon päällimmäinen merkki. Jokisell skeleelln pinoutomtti siis voi käyttää näitä kikki kolme tieto vlitessn mitä tehdä seurvsti mutt sen ei ole pkko käyttää seurv syötemerkkiä σ j/ti pinon päällimmäistä merkkiä γ: Jos merkkiä ei käytetä, niin sen tilll on rgumenttin ε. Jos merkki käytetään, niin se myös kulutetn: siis seurv syötemerkki σ ohitetn j/ti pinon päällimmäinen merkki γ poistetn pinost. Siirtymäfunktion rvo δ(q, σ, γ) on (äärellinen) joukko prej (q, γ ) joiss q Q on pinoutomtin seurv til, j γ Γ on pinon päälle lisättävä merkki. Kuten γ yllä, myös tämä γ voi puuttu, j silloin sen tilll onkin ε. Siirtymäfunktion rvot Kosk seurv syötemerkki σ, pinon päällimmäinen merkki γ j seurv pinoon vietävä merkki γ voivt myös puuttu, siirtymiä on yhteensä 8 erilist: 1. (q, γ ) δ(q, σ, γ) eli mikään niistä ei puutu: 1 lue syötteestä sen seurv merkki σ 2 popp γ pois pinost 3 push γ pinoon Siten merkki σ luetn syötteestä j merkki γ pinon päällä korvutuu merkillä γ. 2. (q, γ ) δ(q, σ, ε) eli vin γ puuttuu: Rivi 2 jää pois, eli merkki σ luetn syötteestä j pino ksv merkillä γ. 3. (q, γ ) δ(q, ε, γ) eli vin σ puuttuu: Rivi 1 jää pois, eli syötettä ei luet mutt merkki γ korvutuu pinon päällä merkillä γ. 94
97 4. (q, ε) δ(q, σ, γ) eli vin γ puuttuu: Rivi 3 jää pois, eli merkki σ luetn j merkki γ poistuu pinon päältä. 5. (q, ε) δ(q, σ, ε) eli vin σ on jäljellä: Vin rivi 1 jää jäljelle, eli merkki σ luetn mutt pino ei muutu. 6. (q, ε) δ(q, ε, γ) eli vin γ on jäljellä: Vin rivi 2 jää jäljelle, eli syötettä ei luet mutt merkki γ poistuu pinon päältä. 7. (q, γ ) δ(q, ε, ε) eli vin γ on jäljellä: Vin rivi 1 jää jäljelle, eli syötettä ei luet mutt pino ksv merkillä γ. 8. (q, ε) δ(q, ε, ε) eli kikki ne puuttuvt: Automtti siirtyy tilst q tiln q lukemtt syötettään ti muuttmtt pinon eli tekee ε-siirtymän. Pinoutomtin lskennn eteneminen Pinoutomtin M tilnne on kolmikko (q, w, α) Q Σ Γ eli siinä on nykyinen til q Q vielä lukemton syöte w Σ pinon nykyinen sisältö α Γ kirjoitettun merkkijonoksi siten, että sen päällimmäinen merkki tulee ensimmäisenä (vsemmlt oikelle lukiess) jne. Alkutilnne syötteellä x on kolmikko (q 0, x, ε) eli pino on luss tyhjä. Tilnne (q, σw, γα), joss σ Σ {ε} γ Γ {ε}, j voi joht suorn tilnteeseen (q, w, γ α) jos Tätä merkitään (q, γ ) δ(q, σ, γ). (q, σw, γα) (q, w, γ α). M Tilnne (q 0, w 0, α 0 ) voi joht tilnteeseen (q n, w n, α n ) jos on olemss tilnnejono (q 0, w 0, α 0 ) (q 1, w 1, α 1 ) (q 2, w 2, α 2 ) M M M (q n, w n, α n ). M Tätä merkitään (q 0, w 0, α 0 ) (q n, w n, α n ). (Tilnne voi joht myös itseensä; siis M sllitn, että johdon pituus n = 0.) Pinoutomtti M hyväksyy syötemerkkijonon x Σ jos joillkin q F F j α Γ. (q 0, x, ε) (q F, ε, α) M Toisin snoen, jos sen lkutilnne syötteellä x voi joht johonkin selliseen tilnteeseen, joss koko syöte x on luettu j olln josskin hyväksyvässä tilss q F. Muuten M hylkää tämän syötteen x. 95
98 Pinoutomtin hyväksymä kieli on L(M) = {x Σ M hyväksyy syötteen x} eli sen hyväksymät syötemerkkijonot x. Epäoleellisi yksityiskohti Tässä määritelmässä pinon ei trvitse oll tyhjä lskennn päättyessä. Toisiss lähteissä ts vditn pinonkin olevn tyhjä (eli α = ε) ennen kuin voidn hyväksyä. Tämä ei kuitenkn ole oleellinen ero, kosk voimmehn lisätä loppuun silmukn jok tyhjentää pinon. Tässä määritelmässä ei ole testiä onko pino tyhjä viko ei? Tällinen testi on kuitenkin helppo lisätä trvittess: Lisätään pinokkostoon Γ uusi symoli $ j loitetn utomtin lskent viemällä se pinon pohjimmiseksi merkiksi. Sen jälkeen voidn tämä testi suoritt kysymällä onko pinon päällimmäinen merkki $ viko ei kunhn sitä ei koskn poistet pinost (pitsi juuri ennen syötteen x hyväksymistä, mikäli pino pitää tyhjentää ennen sitä kuten yllä). Kksi pino olisi liik Jos pinokkostoss Γ on pohjmerkin $ lisäksi vin yksi muu merkki, niin silloin kyseessä on yksilskuriutomtti (one-counter utomton): Sellisell pinoll voi ylläpitää yhtä lskuri N j kysyä onko sen rvo = 0 viko > 0. Käytimme tätä ominisuutt ikisemmss esimerkissä 40. Yhdellä lskurill voi tunnist joitkin ei-säännöllisiä kieliä, mutt ei kikki kontekstittomi kieliä. Olemme määritelleet utomtin, joll on yksi pino. Entäpä jos pinoj olisikin usempi? Ehkä yllättäen: Jo khdell pinoll hyppäisimme kontekstittomist kielistä in rekursiivisesti lueteltviin kieliin skk eli lskettvuuden äärirjoille. Entäpä jos sllisimmekin usempi lskureit nehän ovt yleisiä pinoj yksinkertisempi? Ehkä vieläkin yllättävämmin: Jo khdell lskurillkin hyppäisimme yhtä kus. Pinoutomtin tilsiirtymäkvio Pinoutomtille voidn piirtää muuten smnlinen tilsiirtymäkvio kuin äärelliselle utomtillekin, mutt nyt tilsiirtymänuoli koristellnkin (pelkän syötemerkin Σ sijn) kolmell eri tiedoll: q σ,γ/γ q trkoitt, että pinoutomtti voi siirtyä tilst q Q tiln q Q lukemll seurvn syötemerkin σ Σ j korvmll pinoss sen päällimmäisen merkin γ Γ merkillä γ Γ. (Kuv 19.) 96
99 q Til q q 0 Alkutil Hyväksyvä til, γ/γ q q Tilsiirtymä (q, γ) δ(q,, γ) Kuv 19: Pinoutomtin tilsiirtymäkvion merkinnät. Kukin näistä eri tiedoist σ, γ j γ voi myös puuttu, jolloin sen tilll onkin ε. Esimerkki 41. Kieli { k k k 0} voidn tunnist seurvnlisell pinoutomtill M = ({q 1, q 2, q 3, q 4 }, {, }, {, $}, δ, q 1, {q 1, q 4 }) joss on käytetty pinon pohjmerkkiä $. δ(q 1, ε, ε) = {(q 2, $)}, δ(q 2,, ε) = {(q 2, )}, δ(q 2,, ) = {(q 3, ε)}, δ(q 3,, ) = {(q 3, ε)}, δ(q 3, ε, $) = {(q 4, ε)}, δ(q, σ, γ) = muill (q, σ, γ). ε, ε/$ q 1 q 2 q 4 q 3 ε, $/ε, /ε, ε/, /ε Esimerkiksi syötteellä esimerkin 41 utomtill on seurv lskent: (q 1,, ε) (q 2,, $) (q 2,, $) (q 2,, $) (q 3,, $) (q 3, ε, $) (q 4, ε, ε). Kosk q 4 F = {q 1, q 4 }, pätee siis L(M). 97
100 5.3.1 Deterministiset j epädeterministiset pinoutomtit Determinismin intuitio on, että lskulitteell on in korkeintn yksi mhdollinen seurv skel Epädeterminismin intuitio ts on, että mhdollisi skeleit onkin useit, j lskulite rv ti tietää mikä niistä on tällä hetkellä se oike vlint, jok iknn joht syötteen hyväksymiseen. Määritelmä 9. Pinoutomtti M on deterministinen, jos jokisell tilnteell (q, w, α) on korkeintn yksi mhdollinen seurj (q, w, α ), joll (q, w, α) (q, w, α ). M Määritelmän 9 mukn pinoutomtti on epädeterministinen, jos siinä on smst tilst p kksi eri siirtymää p σ 1,γ 1 /γ 1 q 1 j p σ 2,γ 2 /γ 2 q 2, joill σ 1 σ 2, γ 1 γ 2 j q 1 q 2 ti γ 1 γ 2, missä trkoitt että merkit j ovt smt ti inkin toinen niistä on ε. Silloin utomtti voisi sovelt sopivss tilnteess kuten (p, σ 1 σ 2..., δ 1 δ 2...) kump thns niistä j ne johtisivt khteen eri seurvn tilnteeseen. Huom, että tämän määritelmän 9 mukinen epädeterministinen pinoutomtti ei välttämättä koskn oikesti teekään epädeterminististä rvust: Vikk siinä olisikin kksi tällist siirtymää, niin sen rkenne voikin kokonisuudessn oll sellinen, ettei tällist sopiv tilnnett koskn ilmene sen lskennoiss esimerkiksi jos tilss q ei koskn pino olekn muoto δ 1 δ Huom: Toisin kuin äärelliset utomtit, epädeterministiset pinoutomtit ovt tunnistusvoimltn idosti vhvempi kuin deterministiset! On olemss kontekstittomi kieliä, jotk voidn tunnist jollkin epädeterministisellä mutt ei millään determistisellä pinoutomtill. Eräs tällinen on prillisen pituisten plindromien muodostm kieli { ww R w {, } }. (10) Intuitiivisesti, epädeterministinen pinoutomtti rv ti tietää syötteensä keskikohdn, joss sen lkuos w on luettu j voidn lk lukemn sen loppuos w R. (Ks. kuv 20.) Deterministisen utomtin pitäisi jotenkin pystyä hvitsemn tämä keskikoht omin päin j siihen se ei pystykään. Mutt jos tämä keskikoht on merkitty, niin kielestä tuleekin deterministinen: { wcw R w {, } }. Toinen tp jtell tätä ero on, että epädeterminististä pinoutomtti ei välttämättä pystykään determinisoimn. Intuitiivisesti kyse on seurvst: 98
101 ε, ε/$ q 1 q 2, ε/, ε/ ε, ε/ε q 4 ε, $/ε q 3, /ε, /ε Kuv 20: Plindromin keskikohdn rvv pinoutomtti. Tilnne: Epädeterministisen pinoutomtin yksi siirtymä hlu pusht jotkin pinoons kun ts toinen popt jotkin pois siitä. Ongelm: Mitä determinisoidun utomtin pitäisi silloin tehdä? Senhän pitäisi jotenkin pystyä seurmn molempi vihtoehtoj! Esimerkki 42. Edellinen kieli (10) voidn tunnist seurvll peritteell: 1. Syötteen ensimmäisen puolikkn jn litetn merkkejä pinoon. 2. Syötteen keskikoht rvtn epädeterministisesti. 3. Syötteen toisen puolikkn jn poimi merkkejä pinost j vert juuri luettuun merkkiin. Esimerkiksi syötteellä kuvn 20 epädeterministisellä pinoutomtill on seurv hyväksyvä lskent: (q 1,, ε) (q 2,, $) (vihe 1) (q 2,, $) (q 2,, $) (rvus 2) (q 3,, $) (vihe 3) (q 3,, $) (q 3, ε, $) (q 4, ε, ε) jonk lopputil q 4 F = {q 1, q 4 } on siis hyväksyvä. Deterministinen kontekstiton kieli Määritelmä 10. Kontekstiton kieli on deterministinen, jos se voidn tunnist jollkin deterministisellä pinoutomtill, muuten se on epädeterministinen. Esimerkiksi edellä trksteltu kieli (10) j kieli ovt epädeterministisiä. L 2 = { n m c k n m ti m k } 99
102 Deterministiset kielet ovt tärkeä kieliluokk, sillä ne voi hyväksyä eli jäsentää tehokkmmin kuin epädeterministiset kielet. Siksi jos voimme itse suunnitell kielen (kuten vikkp määritellessämme uutt ohjelmointikieltä) teemme siitä deterministisen Pinoutomtit j kontekstittomt kielet Luse 11. Kikki kontekstittomt kielet voidn tunnist (epädeterministisillä) pinoutomteill j kikki pinoutomttien tunnistmt kielet ovt kontekstittomi. Todistus: kääntäen: Mielivltisen kontekstittomn kieliopin voi muunt pinoutomtiksi, j 1. Esitetään ensin muunnos kieliopist utomtiksi. 2. Sitten luonnostelln myös käänteinen muunnos utomtist kieliopiksi. Kieliopist pinoutomtiksi Peruside on lti nnetun kieliopin pohjlt pinoutomtti, jok toteutt seurvn lgoritmin: Generoi: Tuot epädeterministisesti pinoon merkkijono w Σ, joll S w. Test: Vert pinon merkkijono w syötteeseen merkki kerrlln. Jos löytyy ero, hylkää. Jos pino tyhjenee smn ikn, kun syöte loppuu, niin hyväksy. Toisin snoen, generointivihe rv minkä syötteen utomtti si, j testusvihe trkist että rvus meni oikein. Epädeterminismi on oleellist: vlitsemll generoimisviheess sovellettvt säännöt epädeterministisesti vrmistetn, että jokisell kieleen kuuluvll merkkijonoll w on mhdollisuus tull tuotetuksi. Toteutust rjoitt, että utomtin tietorkenne on pino, jost vin huippu on kulloinkin näkyvissä. Siksi generointi- j testusvihe pitää lomitt: Ain kun pinon huipulle sdn päätesymoleit, käydään vertmss niitä syötteeseen ennen generoinnin jtkmist. Sdn kuvn 21 trkennettu lgoritmi jok pitää vielä koodt pinoutomtiksi. Tämän pinoutomtin pinokkostoksi Γ = V {$} tulee siis kieliopin kkosto V sekä pinon pohjmerkki $ V. syötekkostoksi tulee puolestn kieliopin päätemerkkien joukko Σ. Esimerkki 43. Trkstelln kielioppi S S T T T c ε j merkkijono cc, jok voidn joht seurvsti: 100
103 1. Alust pinon sisällöksi S$, joss S on kieliopin lähtösymoli j $ pinon pohjmerkki. 2. Toist seurv: () Jos pinon huipull on muuttujsymoli A, niin vlitse epädeterministisesti jokin sääntö A w. Korv A merkkijonoll w. () Jos pinon huipull on päätesymoli, niin poist se pinost j vert seurvn syötemerkkiin. Jos ne erovt, hylkää. (c) Jos pino on tyhjä (eli sen huipull on $) niin hyväksy jos syötekin on loppu; muuten hylkää. Kuv 21: Generoi-j-test -lgoritmi. S S T T c T cc cc. Hlumme siis muodost pinoutomtin, jok syötteellä cc vuorotellen sovelt pinoon ylläolevn johdon sääntöjä j poist pinost syötettä vstvi päätemerkkejä. Pino käyttäytyy siis kuten vieressä: jäljellä olev syöte pinon sisältö cc ε cc $ cc S$ cc S$ cc T $ cc T c$ cc T c$ cc T cc$ cc T cc$ cc cc$ c c$ $ ε $ ε ε Otmme käyttöön lyhennysmerkinnän (q, γ ) δ(q, σ, γ) missä γ = g 1 g 2 g 3... g m Γ on jono pinomerkkejä (kun iemmin sllittiin korkeintn yksi pinomerkki eli m 1). Tämä merkintä luetn seurvsti: Jos utomtti on tilss q, niin voidn siirtyä tiln q lukemll syötemerkki σ j korvmll pinon päällä pinomerkki γ tällä pinomerkkijonoll g 1 g 2 g 3... g m. Automttin tämä tulkitn kuten ll. σ, γ/g 1... g m σ, γ/g m ε, ε/g m 1 ε, ε/g 1 q q q q Huom: Pinomerkkijono viedään pinoon tkperin eli push(g m ); push(g m 1 ); push(g m 2 );... ; push(g 1 ) jott pinon päälle muodostuu tämä hluttu pinomerkkijono g 1 g 2 g 3... g m etuperin. 101
104 Automttiimme tulee lkutil q strt toistotil q loop, hyväksyvä til sekä muit tiloj. 1. Toteutettvn lgoritmimme (kuv 21) ensimmäinen skel on pinon lustus. Se voidn toteutt seurvsti: strt ε, ε/s$ ε, ε/$ ε, ε/s loop strt loop 2. Sen toinen skel toist seurv: () Jos pinon huipull on muuttujsymoli A, niin vlitse epädeterministisesti sääntö A w. Korv A merkkijonoll w. Siis kikill säännöillä A w lisätään siirtymä: loop ε, A/w Nyt käytetään siis äsken käyttöön otettu merkintää, joll pinoon viedään kokoninen pinomerkkijono w, eli silmuklle ilmestyy w 1 välitil, joit tässä kuvss ei näy. () Jos pinon huipull on päätesymoli, poist se pinost j vert seurvn syötemerkkiin. Jos ne erovt, hylkää. Siis kikill päätemerkeillä Σ tulee siirtymä: loop, /ε (c) Jos pinon huipull on $, hyväksy jos syöte on loppu; muuten hylkää. loop ε, $/ε Muit siirtymiä ei tule, eli utomttimme on nyt vlmis. Tehtävä 39. Muunn kielioppi S S T T T c ε pinoutomtiksi. Pinoutomtist kieliopiksi Hhmotelln myös muunnos toiseen suuntn eli nnetust pinoutomtist sen hyväksymää kieltä kuvvksi kontekstittomksi kieliopiksi. Oletetn yksinkertisuuden vuoksi, että utomtti tyhjentää pinons ennen kuin hyväksyy syötteensä. 102
105 Oletetn myös, ettei siinä ole opertioit korv pinon päällä merkki γ merkillä γ. Sellinen opertio p σ,γ/γ q voidn nimittäin toteutt erillisellä poppush-yhdistelmällä p σ,γ/ε ε,ε/γ q. Ajtelln sitten, että utomtin jokiseen siirtymään p σ,γ/γ q on liitetty sivuvikutuksen tulost σ, γ/γ. Tässä ltikko ilmisee, että kunkin tulosteen jtelln olevn yksi (mutkiks) merkki. Automtti siis tulost sivuvikutuksenn sen, mitä se tekee pinolleen j syötteelleen. (Lopullisess kieliopiss kukin ltikko σ, γ/γ toimii välikkeenä, jok generoi vstvn päätesymolin σ.) Sitten letn lti kielioppi, jotk tuott täsmälleen nämä sivuvikutuksen tulostuvt ltikkomerkkijonot. Lditn ensin kielioppi kikille sellisille ltikkomerkkijonoille, joiss jokist push-opertiot seur myöhemmin sen kumov pop-opertio. Jokinen tulostuv ltikkomerkkijono on oletusten nojll sellinen, mutt utomtti ei välttämättä tulost jokist sellist jono. Tämän kieliopin voi muodost smn tpn kuin esimerkin 32 (s. 83) tspinoiset sulkumerkkijonot. Nyt vin sulkumerkkejä on moni erilisi: push(γ) on vv sulkumerkki lji γ j sitä vstv pop(γ) on sulkev sulkumerkki lji γ. (Vrt. normlin merkistön eriliset sulkuprit (...), [...] j {...}.) Sdn kielioppi, joss on toistiseksi vin yksi välike A j sillä seurvt säännöt: A ε A AA A σ, ε/ε A jokiselle σ Σ {ε} j A σ, γ/ε A σ, ε/γ jokiselle pinomerkille γ Γ. Tulkitn sitten pinoutomtti tvlliseksi äärelliseksi utomtiksi, jonk syötekkoston ovt nämä ltikot. σ, γ/γ Toisin snoen, tulkitn jokinen siirtymä p σ,γ/γ q siirtymäksi p q. Nyt etsimämme ltikkomerkkijonokieli on tämän kieliopin tuottmn kielen j tämän äärellisen utomtin hyväksymän kielen leikkus. Tässä viheess tekisi mieli vedot iemmin minitsemmme tulokseen, että kontekstittomn j säännöllisen kielen leikkus on kontekstiton mutt sen todistmisess voimme vuorostn trvit tätä tulost, jolloin tekisimme kehäpäätelmän! Siksi teemme leikkuksen tässä todistuksess käsin onneksi kielioppi on yksinkertinen. 103
106 Otetn käyttöön välikkeet B p q joiden ylä- j lindeksit ovt utomtin tiloj eli p, q Q. Määritellään uusi kielioppi siten, että tällinen välike B p q trkoitt niitä ltikkomerkkijonoj jotk voidn tuott välikkeestä A j jotk voivt esiintyä jollkin polull tilst p tiln q. B p p ε B p r B p q B q r B p r σ, ε/ε B q r σ, ε/γ s sekä tiloille p, q, r, s Q j pinomer- kikille siirtymille p keille γ Γ. kikill p Q B p s σ, γ/ε B q r σ, ε/γ kikill p, q, r Q σ, γ/ε q j r jokiselle siirtymälle p σ, ε/ε q j r Q Nyt etsimämme ltikkomerkkijonokieli voidn tuott lisäämällä lähtösymoli S j sille säännöt S B p 0 p f joiss p 0 on utomtin lkutil j p f F mikä thns sen hyväksyvä til. Lopuksi muunnmme vielä ltikkomerkkijonon vstvksi syötemerkkijonoksi. Tämä voidn tehdä lisäämällä jokiselle ltikkomerkille muuntosääntö σ, γ/γ σ eli tulkitsemll nekin välikesymoleiksi jot tuottvt siinä luetun syötemerkin σ (ti eivät mitään kun sellist ei ole eli kun σ = ε). Tehtävä 40. Ldi pinoutomtti, jok tunnist seurvnliset ohjelmointikielen rkenteet: merkkijonoss jokist vv ltosulku { vst sulkev ltosulku } jokist else:ä vst if, mutt if:iin ei ole pkko liittyä else-hr if-luseen ehto esitetään päätemerkillä c muut komennot esitetään päätemerkillä, jot seur puolipiste ; Lillinen: { } if c { if c ; else ; } Liton: } if c { if c { ; else ; } Akkosto Σ koostuu siis merkkijonoist { {, }, if, else, c, ; }. Kielioppin tämän voi esittää esim. seurvsti: S {S} if c ST ; T else S ε 104
107 5.4 Kielioppien jäsennysongelm Annettu kielioppi G j merkkijono x. Onko x kieliopin luse, eli päteekö x L(G)? Esimerkkejä jäsennysongelmist: Kuuluuko virke jänis jok pelkäsi rk peikko metsästi suurt sutt esimerkin 36 reltiivilusekieleen L rel? Onko ( ) 7 1 lillinen ritmeettinen luseke? Onko seurv funktio C-kielen syntksin mukinen? flot lske(int x, int y) { if (x >= y) return x-y; else return y-x; } Kontekstittomien kielten jäsennys on tärkeä os ohjelmointikielten kääntämisessä. Yleisemmin, jäsentäminen on tp testt kuuluuko nnettu merkkijono nnettuun kieleen, riippumtt vrsinisest sovelluksest. Jäsentimet Jäsennysongelm voidn rtkist jäsennyslgoritmill eli jäsentimellä eli jäsentäjällä (englnniksi prser mutt suomeksi jäsentäminen ei ole prsimist!). On useit vihtoehtoisi menetelmiä erityyppisille kieliopeille: Lineriset kieliopit eli säännölliset kielet: äärellinen utomtti. LL(1)-kielet: Rekursiivinen LL(1)-jäsennin. Deterministiset kielet: deterministinen pinoutomtti ti rekursiivinen LR(1)- jäsennin. Vhvemmt kontekstittomt kielet: CYK-lgoritmi. Jäsennyksen trkoitus on yleensä oikeellisuustrkstuksen x L(G) lisäksi liittää luseeseen x (esim. lähdekieliseen ohjelmn) sen semntiikk (esim. vstv konekoodi). Tätä vrten jäsennin tuott yleensä luseen x rkennett kuvvn jäsennyspuun. (Ks. ll.) Ensin tutustumme jäsennyksen peruskäsitteisiin. Johdot Olkoon merkkijono γ V kieliopin G = (V, Σ, P, S) lusejohdos. Sen johdoksi kieliopiss G kutsutn lähtösymolist S merkkijonoon γ johtv suorien johtojen jono S γ 1 γ 2 γ 3 γ Johdon pituus on siihen kuuluvien suorien johtojen määrä eli -skelten lukumäärä. Johto γ γ on 105
108 vsen johto jos kusskin johtoskeless on produktiot sovellettu merkkijonon vsemmnpuoleisimpn välikkeeseen; sitä merkitään γ γ lm oike johto jos kusskin johtoskeless on produktiot sovellettu merkkijonon oikenpuoleiseen välikkeeseen; sitä merkitään γ γ. rm Johto ei välttämättä ole oike eikä vsen, vn se voi oll niiden sekmuoto (eli joskus lvennetn vsemmn- j joskus oikenpuoleisin välike) ti ei kumpkn (eli joskus lvennetn välike jok on vsemmn- j oikenpuoleisimmn välissä). Esimerkki 44. Trkstelln kielioppi G expr : E E + T T T T F F F (E) Luseelle + voidn nt esimerkiksi seurvnliset johdot: (i) E E + T T + T F + T + T + T F + F F + F + (ii) E E + T T + T T + T F T + F F F + F F F + F + F + (iii) E E + T E + T F E + T E + F E + T + F + + Näistä (i) on vsen johto, (iii) oike johto j (ii) ei ole kumpkn. Jäsennyspuu Eli syntksipuu, eli johtopuu (englnniksi prse tree, syntx tree, derivtion tree). Vihtoehtoinen esitystp johdoille. Kertoo vin, miten välikkeet on lvennettu, ei missä järjestyksessä lvennukset on tehty. Esimerkiksi kikki kolme edellä esimerkissä 44 minittu johto vst sm kuvn 22 jäsennyspuu. Määritelmä 11. Olkoon G = (V, Σ, P, S) kontekstiton kielioppi. Kieliopin G mukinen jäsennyspuu on järjestetty puu joll on seurvt ominisuudet: 1. puun solmut on nimetty joukon V {ε} lkioill siten, että sisäsolmujen nimet ovt välikkeitä (joukost N = V \ Σ); 106
109 E E T T T F F F + * Kuv 22: Esimerkki jäsennyspuust. juurisolmun nimenä on lähtösymoli S; lehtisolmujen nimet ovt päätemerkkejä (joukost Σ {ε}); 2. jos A on puun jonkin sisäsolmun nimi, j X 1,..., X k ovt sen jälkeläisten nimet järjestyksessä (vsemmlt oikelle) niin A X 1... X k on kieliopin G:n produktio. (Järjestetyssä puuss solmun kuten A lsten keskinäisellä järjestyksellä on väliä, eli että sillä on ensimmäinen lpsi nimeltään X 1, toinen lpsi nimeltään X 2, jne.) Jäsennyspuun τ tuotos on se päätemerkkijono, jok sdn liittämällä yhteen sen lehtisolmujen nimet vsemmlt oikelle. Esimerkiksi edellisen kuvn 22 jäsennyspuun tuotos on +. Jäsennyspuu on hyvä esitys sille miten sen tuotos on stu kieliopin säännöillä. Tehtävä 41. Muistetn iempi kielioppimme: Ann ohjelmn johto j jäsennyspuu. 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 if x=0 then else egin x:=0 ; end 107
110 Johdot j jäsennyspuu Lusekkeen johdost voidn in muodost jäsennyspuu j päinvstoin: 1. Kun nnetn johto S γ, niin voidn muodost jäsennyspuu τ, jonk tuotos on γ. 2. Kun nnetn jäsennyspuu τ, niin voidn muodost sen tuotoksen γ vsen j oike johto S γ j S γ. lm rm Johdost jäsennyspuuksi Kun on nnettu johto S = γ 0 γ 1 γ 2 γ 3 γ n = γ, jonk tuotos on γ, niin siitä voidn muodost jäsennyspuu τ seurvsti: 1 luksi τ koostuu vin juurisolmust nimeltään S 2 for j 0, 1, 2,..., n 1 3 do olkoon seurv johdos γ j+1 stu nykyisestä johdoksest γ j korvmll sen k:s symoli merkkijonoll g 1 g 2 g 3... g m 4 l k:s lehti puuss τ vsemmlt oikelle lskien 5 liitä lehteen l lpset nimiltään g 1, g 2, g 3,..., g m Tämän for-silmukn invrintti on, että nykyinen johdos γ j luettelee in nykyisen puun τ lehtien nimet vsemmlt oikelle (lukuunottmtt ε-lehtiä). Kun käytetään esimerkin 44 vsent johto (i) j merkitään jokisen solmun viereen monesko johdos sen synnytti, niin sdn: 0 E 1 1 E T T T F 3 F 6 F * 108
111 Tehtävä 42. Kielioppi S SS (S) ε tuott kikki oikein muodostetut sulkulusekkeet (siis päätesymolit ovt vsen j oike sulkumerkki). Sulkuluseke on oikein muodostettu, jos vsemmt j oiket sulkumerkit voidn priutt siten, että mikään pri ei mene ristiin. Sulkulusekkeen ()(()()) eräs johto on S SS (S)S ()S ()(S) ()(SS) Piirrä vstv jäsennyspuu. Jäsennyspuust johdoiksi ()((S)S) ()(()S) ()(()(S)) ()(()()) Kieliopin mukisest jäsennyspuust sdn puun tuotoksen vsen johto käymällä solmut läpi esi järjestyksessä ( ylhäältä ls, vsemmlt oikelle ) j lventmll vstn tulevt välikkeet järjestyksessä puun osoittmll tvll oike johto käymällä puu läpi käänteisessä esijärjestyksessä ( ylhäältä ls, oikelt vsemmlle ). Yleensä käytämme vsent johto. Oike johto käytetään myös tietyn tyyppisten (ohjelmointikielten) kielioppien jäsentämiseen. Tehtävä 43. Kirjoit edellisen tehtävän 42 jäsennyspuut vstv oike johto. Esimerkiksi kun kuvn 22 esimerkkipuumme solmut numeroidn esijärjestyksessä, niin sdn 1 E 2 E 7 T T T F 4 F 9 F * j vsemmn johdon rkentminen etenee siis tässä numerojärjestyksessä. 109
112 Menetelmät ovt yksikäsitteisiä Jos muodostetn nnetust vsemmst (ti oikest) johdost S x (ti S x) lm rm ensin jäsennyspuu edellä minitull tvll, j sitten jäsennyspuust vsen (oike) johto, niin sdn tkisin lkuperäinen johto. Luse 12. Olkoon G = (V, Σ, P, S) kontekstiton kielioppi. Tällöin: (i) jokisell kieliopin G lusejohdoksell γ on sen mukinen jäsennyspuu τ, jonk tuotos on γ; (ii) jokist kieliopin G mukist jäsennyspuut τ, jonk tuotos on päätemerkkijono x, vstvt yksikäsitteiset vsen j oike johto S x j S x. lm rm Seurus: Jokisell kieliopin G luseell on vsen j oike johto. Ti siis kontekstittomn kieliopin tuottmien luseiden jäsennyspuut, vsemmt j oiket johdot vstvt yksikäsitteisesti toisin, joten riittää nt vin yksi vihtoehtoisist jäsennyksen esitystvoist. Kieliopin moniselitteisyys Smll luseell voi oll kieliopiss useit erilisi jäsennyksiä. Esimerkiksi luseell + kieliopiss G expr (9, sivu 84): E E E + E E E E E E + E Määritelmä 12. Kontekstiton kielioppi G on moniselitteinen (englnniksi miguous ), jos jollkin sen luseell x on kksi erilist sen mukist jäsennyspuut. Muuten kielioppi on yksiselitteinen ( unmiguous ). Kontekstiton kieli, jonk voi tuott vin moniselitteisellä kieliopill, on luonnostn moniselitteinen ( inherently miguous ). Esimerkki 45. Aritmeettisi lusekkeit kuvvlle kielelle nnettiin kksi kielioppi. Niistä G expr on yksiselitteinen: E T E + T T F T F F (E). Se toinen kielioppi G expr nähtiin edellä moniselitteiseksi: E E + E E E (E) Itse kieli L expr = L(G expr) ei kuitenkn ole luonnostn moniselitteinen, kosk sillä on myös yksiselitteinen kielioppi G expr. 110
113 Aritmeettisen lusekkeen jäsennyspuun vull voidn helposti lske lusekkeen rvo, kun muuttujien rvot tunnetn. Yleisemmin, kääntäjä voi jäsennyspuun vull generoid koodi lusekkeen evluoimiseksi. Tätä sovellust silmällä pitäen edellisen esimerkin yksiselitteinen kielioppi G expr noudtt koulust tuttu presedenssisääntöä, jonk mukn kertolskut lsketn ennen yhteenlskuj. ei ole tätä ominisuutt, vn sille kelpisi kumpi thns ls- Kieliopill G expr kujärjestys. Kärjistäen: jos kielioppi ti kieli on moniselitteinen, niin on myös sen merkityskin. Siksi yksiselitteisyys on hyve! Jäsennyspuun hyödyntämiseksi pitää tietysti ensinnäkin ost muodost nnetulle merkkijonolle jäsennyspuu (eli yhtäpitävästi johto) nnetuss kieliopiss, ti todet, että merkkijono ei kuulu kieleen. Plmme tähän pin... Esimerkki 46. Kieli { i j c k i = j ti j = k} on luonnostn moniselitteinen. Kieliopin moniselitteisyys on lgoritmisesti rtkemton ongelm. Eli sen osoittminen edellyttää ihmisen ltim todistust. Kieliopin moniselitteisyyden osoittminen on helppo: Riittää keksiä yksikin merkkijono, joll on useit erilisi jäsennyspuit. Kielen osoittminen luonnostn moniselitteiseksi ts on hnkl: Onhn osoitettv, ettei mikään kieltä kuvv kielioppi ole yksiselitteinen. Kikki determinististen pinoutomttien tunnistmt kielet ovt yksiselitteisiä. (Ks. esim. Hopcroft et l. (2001, Luse 6.21).) Toislt... Luonnostn moniselitteiset kielet voidn tunnist vin epädeterministisillä pinoutomteill. Lisäksi on olemss myös yksiselitteisiä kieliä, jotk vtivt epädeterministisen pinoutomtin. Esimerkki 47. Kielelle L = {ww R w {, } } voidn nt yksiselitteinen kielioppi S S S ε mutt sitä ei void tunnist deterministisellä utomtill. (Ongelm: utomtin täytyy rvt, milloin on tultu merkkijonon keskikohtn.) Kontekstittomien kielten liluokill pätee siis seurvt idot sisältyvyydet: 111
114 tyyppi 2: kontekstittomt kielet tunnistus: pinoutomtti yksiselitteiset kielet tunnistus:?? deterministiset kielet tunnistus: deterministinen pinoutomtti tyyppi 3: säännölliset kielet tunnistus: äärellinen utomtti Esimerkki 48. Myös kieli L = { n m n/2 m n} on yksiselitteinen, mutt epädeterministinen. Yksinkertisin kielen tuottv kielioppi on S S S ε jok on kuitenkin moniselitteinen. (Ann esimerkki vihtoehtoisist jäsennyksistä.) Smn kielen voi kuitenkin kuvt yksiselitteisellä kieliopill: S S A ε A A Kielelle voidn lti kuvn 23 epädeterministinen pinoutomtti, mutt determinististä utomtti ei pystytä ltimn. Esimerkki 49. Trkstelln seurv sääntöä if else-luseiden jäsentämiseksi: S if B then S else S if B then S i = N Tässä B voi oll mikä thns ehtoluseke, i mikä thns muuttujnnimi j N mikä thns kokonislukuvkio. Kun sillä jäsennetään merkkijono if x == 1 then if y == 1 then z = 0 else z = 1 niin vstuksen sdn kksi erilist jäsennyspuut Miten käy, jos muuttujt vstvt esimerkiksi seurvi signlej: x = plohälytin soi, y = koehälytys, z = hälytä plokunt? 112
115 , ε / A 1, ε / A, ε / A, ε / ε 2, ε / A, ε / ε,a/ ε 4 3 5,A/ ε,a/ ε,a/ ε 6 Kuv 23: Esimerkin epädeterministinen pinoutomtti. S if B then S x==1 if B then S else S y==1 z=0 z=1 S if B then S else S x==1 if B then S z=1 y==1 z=0 Tätä esimerkkiä 49 kutsutn roikkuvn else-hrn ongelmksi (englnniksi the dngling else prolem : Kumpn if-ehdoist tämä yksinäinen else-hr pitäisi liittää? Ohjelmointikielen syntksimäärittelyt rtkisevt tämän lusumll else-hr 113
116 liittyy in lähimpään selliseen edeltävään if-ehtoon joll ei vielä ole om else-hr. Ohjelmointikielen kieliopin (eli syntksin) tulee oll yksiselitteinen, jott sillä kirjoitettu ohjelm voidn kääntää yksiselitteisesti toimivksi ohjelmksi. Siksi niissä käytetään formlej esitystpoj j tällisi lusumi. Sm olisi toivottv myös ohjelmointikielen merkitysopille (eli semntiiklle), eli siinäkään ei sisi oll sioit joiden käyttäytymistä ei ole määritelty. Myös merkitysopiss voidn käyttää formlej esitystpoj, mutt vlitettvsti läheskään kikille ohjelmointikielille niin ei tehdä. Kärjistäen: Ohjelmointikielen määrittelyn pitäisi poist eikä lisätä ohjelmoijn epätietoisuutt siitä, mitä hänen kirjoittmns ohjelm trkoitt! Ohjelmointikielen kääntämisestä Ohjelmointikielen kääntäjän viheet peritteellisell tsoll (kuv 24): 1. Selminen (scnning, lexicl nlysis): jk syötteen tekstilkioiksi (token) kuten muuttujnimiin, liukulukuvkioihin, vrttuihin snoihin,... jott jäsennyksen ei enää trvitse edetä yksi tekstimerkki kerrlln Tekniikk pohjutuu tekstilkioden tunnistmiseen äärellisillä utomteill. UNIX-työklu lex jonk GNU-versio on flex. 2. Jäsentäminen (prsing): Muodost seluksen tuottmlle tekstilkiojonolle jäsennyspuun jok perustuu ohjelmointikielen määrittelyn osn ldittuun kontekstittomn kielioppiin. Tässä on ohjelmointikielen kieliopin yksikäsitteisyysvtimus: jäsennyspuit tehdään vin yksi! UNIX-työklu ycc jonk GNU-versio on ison on ns. kääntäjäkääntäjä (englnniksi compiler compiler ): Se lukee sisäänsä kieliopin kuvuksen j generoi siitä jäsennystä tekevän liohjelmn, jonk ohjelmoij voi liittää osksi sitä kääntäjää, jot hän on nyt toteuttmss. Selus j jäsennys ovt ne viheet, joist kääntäjää käyttävä sovellusohjelmoij s ne virheilmoitukset, jotk lkvt "Syntx Error...". 3. Semnttinen nlyysi: tyypitys jne. Esimerkiksi kielioppi ilmisee vin, että se os ohjelmkoodi, joss muuttujt esitellään, edeltää sitä os, joss niitä käytetään. Esittelyos jäsentäessään kääntäjä kerää esitellyt muuttujt j niiden tyypit symolituluun. Kun se myöhemmin koht jonkin muuttujn kuten i käytön, niin se kysyy tästä tulust mikä sen tyypiksi on määritelty. Jos muuttuj ei ole tuluss, niin tulee virheilmoitus "Error: undefined vrile...". 114
117 Syntx error... Aluksi lähdekoodi ASCII merkkijonon while(i>0)... Lopuksi konekoodin 00 FF 1A 8C 17 1F 05 5E AA C0 7F koodin generointi selus (scnning) while tyyppi: kokonisluku jonon pidempiä yksiköitä vrttu sn: muuttujn nimi: operttori: kokonislukuvkio:... komento while komento luseke > i 0 while i > 0 täydennettynä jäsennyspuun komento tyyppi: totuusrvo jäsennys (prsing) ttriuuttien lskent while jäsennyspuun komento while komento luseke > i 0 Error: undefined vrile... Error: type mismtch komento Kuv 24: Ohjelmointikielen kääntäjän vihejko. Tyyppi on yksi muuttujn ttriuuteist eli ominisuuksist. Semnttisen nlyysin voi jtell koristelevn jäsennyksen tuottmn jäsennyspuun tällisill ttriuuteill j niiden rvoill. Esimerkiksi while-silmukn testin tyyppittriuutiksi pitää tull totuusrvo, muuten tulee semnttinen virhe kuten "Error: type mismtch...". Kielioppi, johon on yhdistetty ttriuuttien määrittelyt j niiden lskusäännöt, kutsutn ttriuuttikieliopiksi (englnniksi ttriute grmmr ). Itse siss ycc-työklu lukeekin sisään tällisen ttriuuttikieliopin j tuott siitä sellisen jäsennysliohjelmn, jok smll lskee nämä ttriuuttirvot. 4. Koodin tuottminen j optimointi. Suoritetn käymällä läpi tätä jäsennyspuut, jok on koristeltu koodin tuottmiseen trvittvill ttriuuteill. Tässä viheess ei enää tule virheilmoituksi. Aho et l. (2007) kertovt syvällisesti näistä ohjelmointikielen kääntämisen eri viheist. Levine et l. (1992) kertovt näistä kääntäjien j vstvien ohjelmien toteuttmist merkittävästi helpottvist työkluist lex j ycc. Käytännössä jäsennys j muut viheet limittyvät jllisesti: Esimerkiksi jäsennin pyytää selimelt nn minulle seurv tekstilkio. Vstvsti jäsenninkään ei yleensä tuot koko jäsennyspuut kerrll muistiin, vn inostn sen osn, jot semnttinen nlyysi kullkin hetkellä trvitsee. Ohjelmointikielen jäsentämiseen on useit tekniikoit. Lähtökohtn on tyypillisesti ohjelmointikielen määrittelyssä eli spesifiktioss nnettu kontekstiton kielioppi. 115
118 Tehokkt jäsennysmenetelmät edellyttävät, että kielioppi on jossin rjoitetuss muodoss. Näistä tärkeimmät ovt LL(k) j LR(k). Ohjelmointikelten syntktinen käsittely (eli viheet 1 j 2) on hllittu jo pitkään, j siihen on ljlti levinneitä puvälineitä kuten lex j ycc. Ohjelmointikielten kehitys j tutkimus pinottuukin nykyään erityisesti niiden tyyppijärjestelmiin (eli viheeseen 3). Esimerkiksi funktionlisten j olio-ohjelmointikielten tyyppijärjestelmät voivt oll hyvinkin monipuolisi j -mutkisi... Tuotetun konekoodin optimointi (viheess 4) ts on kiinnostv erityisesti mikroprosessoreiden j tietokonelitteistojen vlmistjille. Esimerkiksi nykyikinen mikroprosessori sisältää useit ytimiä, jotk voivt lske rinnkkin jos vin käännetty ohjelmkoodi os hyödyntää tätä mhdollisuutt Cocke-Younger-Ksmi-lgoritmi Mille thns kontekstittomll kieliopill G kysymys päteekö w L(G)? voidn rtkist jss O( w 3 ) Cocken, Youngerin j Ksmin kehittämällä j heidän mukns nimetyllä CYK-lgoritmill. CYK-lgoritmi olett, että kielioppi G on Chomskyn normlimuodoss. Mikä thns kontekstiton kielioppi voidn muutt tähän muotoon... Edellä ei siis ole lskettu mukn tähän muunnokseen kuluv ik sehän tehdään vin kerrn kieliopille G, j sen jälkeen CYK-lgoritmi voidn käyttää monille eri w Σ. CYK-lgoritmi ei kuitenkn käytetä ohjelmointikielille, kosk niiden kieliopit G voidn suunnitell kieltä määriteltäessä siten, että on nopempikin, jop linerisi eli jss O( w ) toimivi menetelmiä. Chomskyn normlimuoto Kielioppej lgoritmisesti käsiteltäessä on hyvä, jos ne ovt rkenteeltn siistejä. Trkstelln kielioppi S AB A B CC C DD D EE E F F F ε Kieliopin tuottm kieli on yksinkertisesti {}. Johdot ovt kuitenkin pitkiä, mikä on erilisten lgoritmien knnlt ongelmllist. 116
119 Esitämme seurvksi, miten kontekstittomlle kieliopille voidn löytää Chomskyn normlimuoto (englnniksi Chomsky Norml Form eli CNF). (Huom: Logiikss lyhenne CNF trkoitt puolestn loogisen kvn konjunktiivist (englnniksi Conjunctive) normlimuoto.) Chomskyn normlimuoto trjo hyviä esimerkkejä kontekstittomien kielioppien yksinkertistmisess käytettävistä päättelyistä j lgoritmeist. Määritelmä 13. Kontekstiton kielioppi G = (V, Σ, P, S) on Chomskyn normlimuodoss, jos: Välikkeistä enintään lähtösymoli S on tyhjentyvä (nullle), eli sellinen jok voi tuott tyhjän merkkijonon, eli S ε. G Muut produktiot ovt muoto A BC ti A, joiss A, B j C ovt välikkeitä j on päätemerkki. Lisäksi vditn yksinkertisuuden vuoksi, että lähtösymoli S ei esiinny minkään produktion oikell puolell. Esimerkki 50. Kielioppi on Chomskyn normlimuodoss. S AB ε A BA B Normlimuodost seur että jos S w j w ε, niin johdon pituus on tsn 2 w 1 skelt. Tyhjän merkkijonon ino johto ts on S ε j sen pituus on 1 skel. Muunnos Chomskyn normlimuotoon Kontekstiton kielioppi voidn muunt Chomskyn normlimuotoon seurvist viheist koostuvll menetelmällä: 1. Poistetn lähtösymoli S produktioiden oikelt puolelt. 2. Poistetn muut ε-produktiot, eli ne säännöt muoto A ε joiss A S. 3. Poistetn yksikköproduktiot, eli säännöt muoto A B. 4. Pilkotn lyhyemmiksi liin pitkät produktiot, eli ne säännöt muoto A X 1 X 2 X 3... X k joiss on k > 2 symoli oikell puolell. 1. Produktioiden oikell puolell olevien lähtösymolien poistminen Luse 13. Mikä thns kontekstiton kieli voidn tuott kontekstittomll kieliopill joss lähtösymoli ei esiinny minkään säännön oikell puolell. Todistus: Olkoon nnettu kontekstiton kielioppi G = (V, Σ, P, S). Muodostetn siitä uusi kielioppi G = (V, Σ, P, S ) seurvsti: 117
120 Asetetn V V {S } missä S ole vielä käytetty kieliopiss G. / V, eli vlitn jokin uusi symoli S jot ei Sääntöjoukko P sdn lisäämällä sääntöjoukkoon P uusi sääntö S S tälle uudelle symolille S. Jos ε L(G), niin lisätään myös sääntö S ε. Kosk lähtösymoli S on uusi, se ei esiinny minkään säännön oikell puolell. 2. Tyhjentyvien välikkeiden käsittely Kieliopin G välike A on tyhjentyvä (ti nollutuv ), jos siitä voi tuott tyhjän merkkijonon, eli jos A ε. G Kksi kielioppi G j G ovt ekvivlentit jos ne tuottvt smn kielen, eli jos L(G) = L(G ). Luse 14. Mistä thns kontekstittomst kieliopist G voidn muodost ekvivlentti kielioppi G, joss enintään lähtösymoli on tyhjentyvä. Todistus: Kielioppi G rkennetn kolmess viheess. 1. Ensiksi lsketn kikkien tyhjentyvien välikkeiden joukko. Tämä tehdään lukemll jokinen kielioppisääntö A X 1 X 2 X 3... X k päättelysääntönä jos kikki sen oiken puolen symolit X 1, X 2, X 3,..., X k nollutuvt niin myös sen vsemmn puolen välike A on nollutuv j lskemll mitkä kikki välikkeet voidn näin päätellä nollutuviksi. Erityisesti sääntö A ε tekee vsemmst puolestn A heti nollutuvn, kosk nythän k = 0. Jos ts yksikin oiken puolen symoli X i on päätemerkki, niin tämä sääntö ei voi mitenkään tehdä vsemmst puolestn nollutuv. Oikell tietorkennevlinnll tämä vihe vie oleellisesti vin linerisen jn kieliopin G kokoon nähden. 1 nollutuvt 2 while kieliopiss G on sääntö A X 1 X 2 X 3... X k jonk vsen puoli A nollutuvt vikk jokinen sen oiken puolen symoli X 1, X 2, X 3,..., X k nollutuvt 3 do nollutuvt nollutuvt {A} 2. Nyt nollutuvt välikkeet tiedetään, joten niiden esiintymät voidn poist. Kun sääntö on muoto A αbβ joss B nollutuvt, niin lisätään myös sääntö A αβ. Toistetn tätä sekä kieliopin G lkuperäisiin että näin syntyviin uusiin sääntöihin, kunnes uusi sääntöjä ei enää synny. 118
121 Lopputuloksen säännöstä A X 1 X 2 X 3... X k syntyy kikki säännöt A α joss α on mikä thns seurvn äärellisen kielen merkkijono: (X 1 1 )(X 2 2 )(X 3 3 )... (X k k ) joss jokinen i = { {ε} jos X i nollutuvt jos X i nollutuvt Välike X i voi siis puuttu jonost α joss se on nollutuv. Vlitettvsti kieliopin koko ksv eksponentilisesti kosk yhdestä tällisest säännöstä syntyy yhteensä uutt sääntöä. 2 ( k ) 1 3. Lopuksi voidn poist kikki säännöt muoto A ε kosk niiden vikutukset on lisätty uusin sääntöinä edellisessä viheess 2. Jos poistettvn on myös sääntö S ε nykyiselle lähtösymolille S, niin silloin lisätäänkin uusi lähtösymoli S j sille säännöt S ε S. Esimerkki 51. Poistetn ε-produktiot kieliopist: Nyt nollutuvt = {B}. Siis S BSB A A A B B ε. S BSB tuott säännöt S S SB BS BSB B B tuott säännöt B B. Lisätään vielä uusi lkusymoli S, j otetn mukn kikki vnht säännöt lukuunottmtt ε-sääntöjä. Kieliopiksi tulee S S A A S S SB BS BSB A B B. 119
122 Esimerkki 52. Poistetn ε-produktiot seurvst kieliopist: S A B A B ε (nollutuvt = {A, B, S}) B A ε S A B ε A B ε B A ε S S ε S A B A B B A 3. Yksikköproduktioiden poistminen Produktio muoto A B, joss A j B ovt välikkeitä, on yksikköproduktio (unit production). Luse 15. Mistä thns kontekstittomst kieliopist G voidn muodost ekvivlentti kielioppi G, joss ei ole yksikköproduktioit. Todistus: Olkoon kielioppi ts G = (V, Σ, P, S) j sen välikkeet siis N = V \Σ. Tehdään siitä kielioppi G khdess viheess. 1. Ensiksi selvitetään jokiselle välikkeelle A N ne välikkeet, jotk voidn tuott välikkeestä A pelkillä yksikköproduktioill. Ajtelln sellist suunnttu verkko H, jonk solmuin ovt kikki välikkeet A N j krin kikki yksikköproduktiot A B. TRA II -kurssill käsitellään miten lsketn tämän verkon H trnsitiivinen sulkeum H, joss on kri A 0 A n täsmälleen silloin kun verkoss H on polku A 0 A 1 A 2 A n (11) jollkin n 0. Erityisesti verkoss H on jokisest solmust A kri A A tkisin itseensä polku, jonk pituus on n = 0 krt. Tämä H voidn lske jss O((sen solmujen lukumäärä) 3 ). 2. Sitten oikistn yksikköproduktiopolut kuten (11): Silloin kun verkoss H on kri A i A j j kieliopiss G on produktio A j α jok ei ole yksikköproduktio, niin lisää sääntö A i α oikisemn polku A i A i+1 A i+2 A j α. 120
123 Näiden oikisujen jälkeen yksikköproduktiot eivät enää ole trpeen, joten ne voidn jättää pois. Esimerkki 53. Jtketn iemmn esimerkin 51 lopputuloksest. S S A A B B. S S SB BS BSB A Nyt verkko H koostuu krist S S, S A j S A (itseensä plvien krten X X lisäksi). Siis muuttujlle S tulee omien lkuperäisten lisäksi kikki muuttujien S j A muut kuin yksikköproduktiot, j muuttujlle S smoin: S SB BS BSB A S SB BS BSB A. Ottmll lisäksi kikki vnht ei-yksikkösäännöt sdn tuloskielioppi: S SB BS BSB A A A B B. S SB BS BSB A Esimerkki 54. Poistetn yksikköproduktiot edellä esimerkissä 52 sdust kieliopist S S ε S A B A B B A. Verkko H on solmust S S A B pääsee solmuihin S, A j B sekä itseensä A j B sekä itseensä vin itseensä vin itseensä Korvmll yksikköproduktiot edellä esitetyllä tvll sdn tuloskielioppi S B A ε A B S B A B A. 4. Liin pitkien produktioiden lyhentäminen Chomskyn normlimuodoss säännön oike puoli s oll pituutt k =... A X 1 X 2 X 3... X k 2 mutt silloin sen kummnkin symolin pitää oll välikkeitä, eli X 1, X 2 N. 1 mutt silloin sen inon symolin pitää oll päätesymoli X 1 Σ. Edellä luseess 15 huolehdittiin, ettei tämän ino symoli X 1 ole välike. 0 mutt silloin säännön pitää oll S ε joss S on kieliopin lähtösymoli. Tästä on myös huolehdittu edellä luseess
124 Jos sääntö on liin pitkä eli k > 2 niin sitä voidn lyhentää yhdellä symolill seurvsti: 1. Olkoon U jokin kokonn uusi välikesymoli jot ei ole ikisemmin käytetty koko tässä kieliopiss. 2. Korvtn tämä liin pitkä sääntö sääntöprill A X 1 X 2 X 3... X k 2 U U X k 1 X k. Tätä toistmll voidn ylipitkät säännöt lyhentää vdittuun pituuteen k = 2. Lopuksi voidn jokiselle päätemerkille Σ lisätä om uusi välike C j sille sääntö C. Sen jälkeen päätemerkin esiintymät muiden sääntöjen oikell puolell korvtn tällä uudell välikkeellä C. Siis esimerkiksi sääntö A B muuntuu muotoon A C B jne. Olemme vihdoin päässeet Chomskyn normlimuotoon! Esimerkki 55. Jtketn edelleen iemp esimerkkiä 53: S SB BS BSB A A A S SB BS BSB A B B. Kielioppi tulee muotoon S SB BS BA 1 C A C C A 1 SB A C A C C B C C B C C. S SB BS BA 2 C A C C A 2 SB Tätä voisi vielä yksinkertist (kosk uudet välikkeet A 1 j A 2 ovt smt). Muistetn vielä että lunperin lähdettiin liikkeelle selvästi pienemmästä kieliopist: S BSB A A A B B ε. Tehtävä 44. Tuot Chomskyn normlimuoto kieliopille S BCd B C c Tehtävä 45. Olkoon nnettu kielioppi: S ASB B C cc ε A CAC B c A Muunn kielioppi Chomskyn normlimuotoon: 122
125 1. Poist lähtösymoli sääntöjen oikelt puolelt; 2. Poist ε-säännöt; 3. Poist tuloksest yksikkösäännöt; 4. Poist tuloksest ylipitkät säännöt. Rtkisu: S AX 1 C X 2 CX 3 C X 4 CX 5 C A S AX 1 C X 2 CX 3 C X 4 CX 5 C A C C c C c A CX 3 C X 4 CX 5 C A B C X 2 CX 3 C X 4 CX 5 C A X 1 SB X 2 C C c X 3 C X 4 X 4 AC X 5 C A C C C c c Huom: Välikkeet olisi voinut nimetä toisinkin. Rtkisuss on myös yhdistetty joitkin välikkeitä, joiden säännöt olivt smoj.) Edellä kuvttu muunnos Chomskyn normlimuotoon voi tuott tuloksenn phimmilln eksponentilisesti suuremmn kieliopin kuin lkuperäinen oli. Tämä ongelm voidn kuitenkin korjt siten, että pilkotnkin liin pitkät produktiot (vihe 4) jo ennen kuin poistetn ε-produktiot (vihe 2). Silloin tuloskielioppi on enää polynomisen verrn suurempi kuin lkuperäinen, j se voidn myös tuott polynomisess jss. Sivuutetn kuitenkin muunnokseen trvittvt muutokset. CYK-lgoritmi Annettuin: Kontekstiton kielioppi G, merkkijono w. Kysymys: Päteekö w L(G)?. Yksinkertistettu kysymys: Jos G muunnetn ensin Chomskyn normlimuotoon G, niin miten silloin vstuksen voisi lske? Yksinkertistettu vstus: Jos w = ε niin vst onko kieliopiss G sääntöä S ε viko ei. Jos ts w ε niin ryhdy käymään läpi kikki kieliopin G niitä johtoj, joiden pituus (eli skelten lukumäärä) on 2 w 1. Vst onko w jonkin niistä tuotos viko ei. 123
126 Chomskyn normlimuodoss jäsennyspuut ovt itoj inääripuit, eli jokisell sisäsolmull on 2 lst. Aidoss w -lehtisessä inääripuuss ts on w 1 sisäsolmu. Tästä stiin tuo 2 w 1. Ongelm: Näitä johtoj voi oll pituuteen w verrttun eksponentilisen pljon joten inkn tämä menetelmä ei ole käytännöllinen. Rtkisu: Lähdetään kehittämään jotkin tehokkmp... Hjoit j hllitse Hjoit j hllitse (englnniksi divide nd conquer ) on eräs yleinen lgoritminsuunnittelumenetelmä. Pienen syötteen vstus on yleensä helppo lske. Suuri syöte käsitellään seurvsti: 1. Jetn se jotenkin pienempiin syötteisiin. 2. Lsketn niiden vstukset rekursiivisesti smll menetelmällä. 3. Yhdistetään nämä pienten syötteiden vstukset jotenkin vstukseksi suurelle syötteelle. ASA-kurssi kertoo lisää tällisist yleisistä lgoritmisten ongelmien rtkisuperitteist. Nyt ongelmmme on yleisesti nnettun välike A j päätemerkkijono x Σ + vst voiko välikkeestä A generoid merkkijonon x? Erityisesti meitä kiinnost lopputulos joss A = S j x = w. Jos A x joss x > 1 niin voimme erott siinä johdoss ensimmäisen j loput skeleet, eli A BC x. Edelleen, tämän merkkijonon x täytyy jkutu lkuosn y j loppuosn z joill B y C z. Nämä ost eivät ole tyhjiä, kosk kyseessä on Chomskyn normlimuoto. Siten tässä ovt ne pienemmät kysymyksemme nämä y j z ovt idosti lyhyempiä kuin x. Jos ts x = 1, niin silloin vstus voidn ktso suorn kieliopist, kosk se on Chomskyn normlimuodoss. Näin sdn rekursiivinen jäsennyslgoritmi kuvss 25. Tämä lgoritmi toimii, mutt sekin on yhä eksponentilinen. 124
127 Pääohjelm: 1 if w = ε 2 then return onko kieliopiss sääntöä S ε viko ei sen lkusymolille S 3 else return Johto(S, w) Johto(A, x): 1 if x = 1 2 then return onko kieliopiss sääntöä A x viko ei 3 else for ech kieliopin sääntö A BC 4 do for ech ktkisukoht 1 l < x 5 do y x:n l ensimmäistä merkkiä 6 z x:n loput merkit 7 if Johto(B, y) nd Johto(C, z) 8 then return true 9 return flse Kuv 25: Hjoit j hllitse -jäsennyslgoritmi. Syynä on tällä kert se, että se lskee smoj välituloksi yhä uudelleen j uudelleen: Jos kielioppi on esimerkiksi S AB CA... A CB... niin silloin kutsu Johto(S, cde) tuott testit. Johto(A, c) nd Johto(B, de) Johto(C, ) nd Johto(A, cde) Johto(C, c) nd Johto(B, de). j jost vuorostn Dynminen ohjelmointi Tätä rekursiivist lgoritmi voi tehost tulukoimll nämä välitulokset, jott niitä ei trvitse lske yhä uudelleen j uudelleen. Tätä tp tehost hjoit j hllitse -lgoritmej kutsutn dynmiseksi ohjelmoinniksi (englnniksi dynmic progrmming ). Olkoon syötemerkkijono w lueteltun merkki kerrlln w 1 w 2 w 3... w n. Muodostetn nyt 2-ulotteinen tulukko R i,j, joss 1 i j n j R i,j = {A N A w i w i+1 w i+2... w j } Tulukkopikn R i,j sisältönä ovt siis ne välikkeet A N, joist voi tuott syötteen w osjonon merkistä i merkkiin j. 125
128 Eli ne A, joill Johto(A, w i w i+1 w i+2... w j ) = true. Tämä tulukko R on itse siss kolmiomtriisi: w 1 w 2 w 3 w 4 w 5 R 1,1 R 1,2 R 2,2 R 1,3 R 2,3 R 3,3 R 1,4 R 2,4 R 3,4 R 4,4 R 1,5 R 2,5 R 3,5 R 4,5 R 5,5 Tulukon R srkkeet vstvt osien lkukohti syötemerkkijonoss w. Tulukon R jokinen digonli vst tietyn mittisi osi: digonli R 1,1, R 2,2, R 3,3,... vst 1-merkkisiä digonli R 1,2, R 2,3, R 3,4,... vst 2-merkkisiä,... digonli R 1,d, R 2,d+1, R 3,d+2,... d-merkkisiä. Ensin tulukoidn tulokset kikille 1-merkkisille osille: 1 for i 1, 2, 3,..., n 2 do R i,i {A A w i P } 3 for k 1, 2, 3,..., n 1 do Aiemmin on tulukoitu tulokset kikille k-merkkisille osille, joten nyt tulukoidn tulokset kikille k + 1-merkkisille: 4 for i 1, 2, 3,..., n k 5 do j i + k 6 R i,j 7 for l i, i + 1, i + 2,..., j 1 do Kun lkuos x = w i w i+1 w i+2... w l j loppuos y = w l+1 w l+2 w l+3... w j : 8 R i,j R i,j {A A BC P, B R i,l, C R l+1,j } 9 return onko lähtösymoli S R 1,n viko ei. Kootut selitykset Esim. pikkn R i,j lsketn välikkeet A, joill A w i w i+1... w j. Tämän johdon täytyy lk skeleell A BC, missä välikkeestä B voidn joht osn w i... w j jokin lkuos, esim. B w i w i+1... w l, j välikkeestä C voidn joht sen loppuos: C w l+1 w l+2... w j. Jott ylläolev onnistuu, välikkeen B täytyy löytyä tulukon pikst R i,l j välikkeen C pikst R l+1,j. Mhdollisi tulukon pikkoj on kuitenkin useit, sillä kikki yli khden pituiset merkkijonot voidn jk usell tp khteen osn. Siis l voidn vlit monell tp (l = i... j 1). 126
129 Esimerkiksi lskettess R 3,7 trkstelln kikki prej (R 3,3, R 4,7 ), (R 3,4, R 5,7 ), (R 3,5, R 6,7 ), (R 3,6, R 7,7 ) : Siten w 3... w 7 sdn välikkeestä A säännöllä A BC jkmll se khteen osn, esim. w 3... w 4 j w 5... w 7, j tutkimll sdnko ensimmäinen os symolist B R 3,4 j jälkimmäinen os symolist C R 5,7. Jos näin on, niin lisätään A pikkn R 3,7. Algoritmi täyttää tulukkons O(n 3 ) skeleess kun emme lske mukn kieliopin normlisointiin j käsittelyyn kuluv ik. Olemme siis sneet lun perin eksponentilisest j siten epäkäytännöllisestä lgoritmist polynomisen j siten käytännöllisen. Esimerkki 56. Sovelletn CYK-lgoritmi CNF-kielioppiin G: Onko w = L(G)? Nyt S R 1,5, joten w L(G). S AB BC A BA B CC C AB i 1 : 2 : 3 : 4 : 5 : B S, A A, C B A, C B S, C B S, A, C S, A, C B S, A A, C Apukeino CYK-lgoritmin simuloimiseen 127
130 1. kierros 2. kierros ei mittnuhoj 2:n pituinen mittnuh: 3. kierros :n pituiset mittnuht: 4. kierros :n pituiset mittnuht: 5. kierros :n pituiset mittnuht: Esimerkki 57. Sovelletn CYK-lgoritmi Chomskyn normlimuotoiseen kielioppiin G: Onko L(G)? Siis L(G). Johto j jäsennyspuu tulukost S AB BC A BA B CC C AB i 1 : 2 : 3 : 4 : 5 : 6 : A, C S, C B B A, S A, C B S S, C B A, S B A, S A, C S, C B S, C S, C B Jos merkkijono w kuuluu kieleen, niin vstv johto j jäsennyspuu voidn luke tulukost, jos siihen liitetään sopivt lisätiedot. Trkstelln esimerkkinä kielioppi G: S AB BC A BA B CC C AB 128
131 Onko w = L(G)? Iden on liittää jokiseen tulukoss olevn välikkeeseen se sääntö j ne tulukkopikt, joiden tuloksen se lisättiin tulukkoon. Esimerkiksi S R 1,5 lisätään säännön S BC sekä tulukkopikkojen B R 1,1 j C R 2,5 tuloksen. Tämä voidn esittää ottmll säännöstä tulukkoindeksein koristeltu kopio S 1,5 B 1,1 C 2,5. Näistä lisämerkinnöistä voidn jäljittää vstv johto: S BC C AB B CC ABC BC C. Myös jäsennyspuun voi jäljittää näistä merkinnöistä. Puu ilmntuu selvemmin näkymiin kääntämällä tulukko: S B A C A B C B C 129
132 Jos kielioppi on moniselitteinen, niin jäsennyspuit voi oll useit. Sovelluksest riippuen tulukkoon voidn joko kerätä ne kikki ti säilyttää niistä vin jokin. Tässä esimerkissä on toinenkin johto: S AB BAB AB B CC ABC BC C Tehtävä 46. Trkstelln kielioppi: S AB BC A BA B CC C AB Kuuluuko merkkijono w = kieleen? Jos, niin mikä on vstv johto? Tehtävä 47. Trkstelln kielioppi: S AC AD A B C AC D BD Kuuluvtko merkkijonot, j kieliopin tuottmn kieleen? 5.6 Tehokkmmt jäsennysmenetelmät Hopcroft et l. (2001) eivät käsittele tätä ihepiiriä. Sitä käsittelevät esimerkiksi Aho et l. (2007, luvut ) j Sudkmp (1997, os VI). Pltn hetkeksi rekursiiviseen hjoit j hllitse -jäsennyslgoritmiimme kuvss 25 jot tehostimme dynmisen ohjelmoinnin tulukoinnill. Kysymys: Voisiko sitä tehost tulukoinnin sijst jotenkin muuten, jos kielioppi olisikin sopivsti rjoitettu? 130
133 Erityisesti: Voimmeko jotenkin vlit suorn jonkin jon x = yz, jok joht vstukseen true, jos sellinen jko on olemss? Vstus: Kyllä voimme, kunhn kielioppi on siis sopiv. Huom: Tämän kieliopin ei trvitse enää oll Chomskyn normlimuodoss. Esimerkki 58. Oikelle linerisess kieliopiss riittää in seurvn merkin trkstelu, eli jkokoht l = 1, kosk kieli on säännöllinen LL(1)-kielioppi Ljennetn edellisen esimerkin 58 intuitiot, j trkstelln sellisi kielioppej, joiss seurv sovellettv sääntö on in yksikäsitteisesti määrätty, kun nykyinen välike j seurv syötemerkki tunnetn. Näitä kielioppej j niillä jäsentyviä kieliä kutsutn LL(1)-kieliopeiksi j -kieliksi: Left to right scn, producing Left prse with 1 symol lookhed. Siis ne lukevt syötemerkkijonon vsemmlt oikelle eli kirjoitusjärjestyksessä. Tämä on tärkeää esimerkiksi ohjelmointikielten kääntäjissä: lähdekooditiedosto luetn yhden kerrn lust loppuun. (Esimerkiksi CYK ei toiminut niin.) Ne tuottvt in vsemmnpuoleisimmn johdon. Ne käyttävät 1 kurkistussymoli eli ktsovt vin seurv syötemerkkiä. Yleisemmin voi määritellä LL(k)-kieliopit j -kielet, joiss ktsotn k > 0 syötemerkkiä eteenpäin, eli ylläpidetään k merkin syötepuskuri. LL(1)-kieliopeille voidn lti yksinkertinen rekursiivinen jäsennin. Siksi niitä suositn, kun jäsennin pitää kirjoitt käsin. LL(1) riittää useimmille ohjelmointikielissä esiintyville rkenteille. Tämä jäsennin on tehoks: se toimii linerisess jss O( w ) syötemerkkijonon w pituuden suhteen. LL(1)-kielet ovt determinististen kielten osjoukko, joten voitisiin käyttää rekursion sijst myös determinististä pinoutomtti. LL(1)-kielioppeihin kuuluvt siis inkin selliset kieliopit, joiss jokisen välikkeen A säännöt ovt muoto A 1 α 1 2 α 2 3 α 3... k α k joss jokinen hr i lk eri päätemerkillä i Σ (siis i j in kun i j) kosk oike hr on se, jonk päätemerkki on seurvn syötteessä. Esimerkki 59. Trkstelln seurv kielioppi G: E T + E T E T T (E) Välike T on OK: seurv syötemerkki rtkisee, kump sen säännöistä pitää käyttää. Mutt välike E ei, joten tekijöidään se: E T E E +E E ε T (E) 131
134 Esimerkiksi luseen ( + ) vsen johto voidn nyt muodost seurvn syötemerkin ohjmn: E T E E E T E (E)E (T E )E (E )E ( + E)E ( + T E )E ( + E )E ( + )E ( + ). LL(1)-kielioppien yleinen muoto LL(1)-kielioppien yleisessä muodoss sllitn myös produktioit, joiden oiket puolet lkvt päätemerkin sijst välikkeellä, sekä tyhjentyviä eli nollutuvi välikkeitä A, joill siis A ε mutt kumpikin näistä vin rjoitetusti. Esimerkiksi kielen c d tuottv kielioppi: S A Cd A A ε C cc ε Kielioppi on LL(1)-muoto, vikk ensimmäiseksi sovellettv produktiot ei voikn päätellä pelkästään lkusymolin S produktioiden perusteell. Kuitenkin, jos merkkijono lk merkeillä ti, niin on sovellettv sääntöä S A, jos ts merkillä c ti d, niin sääntöä S Cd. Siis sovellettv sääntö on kuin onkin yksikäsitteisesti määrätty seurvn merkin perusteell. Siis trvittisiin testi tutkimn onko kielioppi LL(1)-muoto. Kielioppien muokkminen LL(1)-muotoon Kikki kontekstittomi kielioppej ei voi muunt LL(1)-muotoon. Joskus kieli on LL(1)-luokss, mutt sen kuvv kielioppi ei ole oikess muodoss. Tälliset melkein LL(1)-kieliopit voi muokt oiken muotoon seurvill opertioill: 1. vsen tekijöinti 2. vsemmn rekursion poisto. Vsen tekijöinti Kielioppi, joss on säännöt A αβ 1 αβ 2 joss α ε, β 1 β 2 ei voi oll LL(1)-muotoinen, kosk nämä hrt lkvt yhteisellä epätyhjällä osll α. 132
135 Otetn käyttöön uusi välike A j korvtn nämä produktiot produktioill A αa A β 1 β 2, joss α on jonojen αβ 1 j αβ 2 pisin yhteinen lkuos. Toisin snoen uusi produktioit käytteän ensin jäsennetään niiden pisin yhteinen lkuos α sitten vst tutkitn, jtkuuko syöte hrll β 1 viko β 2. Esimerkki 60. Kielioppi N DN D D muutetn muotoon N DN N N ε D Välittömän vsemmn rekursion poisto Kielioppi on vsemmlle rekursiivinen, jos jollkin välikkeellä A j merkkijonoll γ on A + Aγ. Jos jtelln rekursiivist jäsennintä, niin sen liohjelm A kiertäisi kehää lukemtt syötettään. Vsemmlle rekursiivinen kielioppi ei täytä LL(1)-ehto (jonk määrittelemme koht). Välitön vsen rekursio, siis suort johdot A Aγ, voidn välttää korvmll produktioill joss A on uusi välike. A Aα 1 Aα 2 Aα 3... Aα m }{{} poistettvt produktiot β 1 β 2 β 3... β n }{{} muut produktiot A β 1 A β 2 A β 3 A... β n A (12) A α 1 A α 2 A α 3 A... α m A ε (13) Alkuperäisen välikkeen A johdot ovt muoto A Aα Aαα Aααα βααα... α eli βα. Lopult on siis vlittv sääntö A β ti rekursio ei pääty ikinä. 133
136 Korvtut säännöt tuottvt uuden välikkeen A vull täsmälleen smt johdokset, mutt toisell tvll: A βa βαa βααa βαααa βααα... α. Esimerkki 61. Esimerkiksi kielioppi G 2 on välittömästi vsemmlle rekursiivinen: N ND D D Siitä sdn kielioppi G 2: N DN N DN ε D Smn tuottisi tosin myös kielioppi G 3 : N 0N 1N... 9N Muoto A A olevt produktiot voidn yksinkertisesti jättää pois. Yleinen vsemmn rekursion poisto Oletetn, että kieliopissmme G ei ole ε-sääntöjä A ε eikä myöskään kehiä A B C A. Trvittess niistä pääsee eroon Chomskyn normlimuodon yhteydessä (luku 5.5) kuvtuill menetelmillä. Silloin kikest vsemmst rekursiost pääsee eroon seurvsti: 1 Merkitse luksi kikki välikkeet käsittelemättömiksi; 2 while on yhä käsittelemättömiä välikkeitä 3 do A jokin sellinen; 4 while on sääntö A Bγ joss välike B on jo käsitelty 5 do Korv se kikill säännöillä A δγ joill kieliopiss on sääntö B δ 6 Poist välikkeen A välitön vsen rekursio säännöillä (12) j (13); 7 Merkitse A käsitellyksi; Yleinen LL(1)-ehto Esitetään nyt yleinen LL(1)-ehto. Käytetään seurvi kht pukäsitettä: first(α) = { Σ α β jollin β V } {ε α ε} : 134
137 Siis ne päätemerkit, jotk voivt loitt jonkin sellisen merkkijonon, jok voidn joht tästä α V. Lisäksi myös ε, jos jono α on kokonisuudessn nollutuv. follow(a) = { Σ S αaβ joillin α, β V } : Siis kikki ne päätemerkit Σ, jotk voivt seurt välikettä A N josskin johdoss. Päätemerkkien lisäksi tähän joukkoon voi kuulu erityinen symoli EOF ( End of File ), joll merkitään syötteen loppu. Selin plutt merkin EOF ohitettun viimeisen todellisen syötemerkin. Olkoot sitten A N kieliopin G mielivltinen välike j sen kikki säännöt. A α 1 α 2 α 3... α k Ensimmäinen os LL(1)-ehto vtii, että näiden sääntöjen oiket puolet lkvt eri tvoin, eli että in kun i j. Nimittäin jos olisi jokin first(α i ) first(α j ) = (14) x first(α i ) first(α j ), niin kump säännöistä pitäisi käyttää vuoross olevll syötemerkillä x? Tästä ensimmäisestä LL(1)-ehdost (14) seur erityisesti, että korkeintn yksi välikkeen A säännöistä voi tuott tyhjän merkkijonon ε eli tehdä välikkeestä A tyhjentyvän (eli nollutuvn). Toinen os LL(1)-ehto koskee vin tyhjentyviä välikkeitä: Olkoon välike A N tyhjentyvä j sen säännöistä viimeinen eli A α k se ino, jok voi tuott tyhjän merkkijonon ε. Silloin ehto vtii, että follow(a) first(α j ) = (15) kikill muill sen säännöillä 1 j < k. Nimittäin jos olisi jokin x follow(a) first(α j ) niin kumpko säännöistä j vi k pitäisi käyttää kun kohdtn syötemerkki x? Kielioppi G on yleisessä LL(1)-muodoss, jos sen kikki välikkeet j säännöt täyttävät molemmt ehdot (14) j (15). LL(1)-kielioppi ei voi oll moniselitteinen. LL(1)-kielioppi ei voi sisältää vsent rekursiot. Kun kielioppi G on tätä yleistä LL(1)-muoto, niin sille voidn lti rekursiivisesti etenevä jäsennin seurvin perittein: 135
138 Pidetään yllä muuttujss next seurv syötemerkkiä. error(... ) trkoitt lopet koko rekursiivinen jäsennys virheilmoitukseen... Käytännön ohjelmoinniss se voisi vikkp nost poikkeuksen (exception). Tehdään tässä esimerkissä sellinen jäsennin, jok tuott syötettä vstvn jäsennyspuun. Tätä kusutn ennustvksi (engl. predictive) jäsentämiseksi, kosk jäsennin os ennust oikein, mitä produktiot seurvksi pitää sovelt, lukemtt syötettä enempää kuin nextin verrn eteenpäin. Jokiselle päätesymolille Σ kirjoitetn om liohjelm: Proc (): 1 if next = 2 then next pyydä selimelt seurv syötemerkki 3 return uusi lpseton solmu nimeltään 4 else error( tässä olisi pitänyt oll ) Jokiselle välikkeelle A N kirjoitetn om liohjelm. Jos A ei ole tyhjentyvä, niin tämä liohjelm on: Proc A(): 1 if next first(α 1 ) then return hr(α 1 ) 2 elseif next first(α 2 ) then return hr(α 2 ). elseif next first(α k ) then return hr(α k ) else error( tästä olisi pitänyt lk A ) Huom, että nämä first-joukot ovt vkioit, jäsennin ei siis lske niitä. Niiden rvothn on jo lskettu LL(1)-ehto (14) testttess. Jokinen hr(x 1 X 2 X 3... X m ) on om ohjelmnpätkänsä 1 y 1 Proc X 1 () 2 y 2 Proc X 2 (). y m Proc X m () return uusi solmu nimeltään A lpsinn y 1, y 2, y 3,..., y m jok siis 1. ensin kutsuu rekursiivisesti muit jäsentimen liohjelmi X 1, X 2, X 3,..., X m oikess järjestyksessä 136
139 2. sitten plutt tuloksenn jäsennyspuun, jonk juuren on nykyinen välike A j sen lpsin näiden kutsujen pluttmt puut. (Ti jos jäsentimen hlutn tekevän jotkin muut kuin jäsennyspuun, niin sitten tekee mitä hlutn pohjutuen siihen, mitä rekursiokutsut ovt ensin tehneet j pluttneet.) Jos välike A on tyhjentyvä niin vin sen viimeinen sääntö A α k tuott tyhjän merkkijonon ε. Silloin sen liohjelm päättyykin. elseif next first(α k 1 ) then return hr(α k 1 ) else return hr(α k ) eli virheilmoituksen sijst kutsutn tyhjentyvää viimeistä hr. Toisin snoen, jos nextin mukn kyseessä ei ollut mikään tyhjentymättömistä hroist A α 1 α 2 α 3... α k 1 niin sitten ino mhdollisuus on tyhjentyvä hr A α k. Koko jäsentimen pääohjelmksi tulee 1 next pyydä selimelt ensimmäinen syötemerkki 2 τ Proc S() eli kutsutn lähtösymoli vstv liohjelm 3 if next = EOF 4 then return syötteen jäsennyspuu τ 5 else error( syötteen olisi pitänyt loppu tähän ) Usein hlutn sellinen jäsennysohjelm, jok ei pysähdy heti ensimmäiseen virheeseen, vn jtk j rportoi muitkin syötteessä olevi virheitä. Silloin kirjoitetn kunkin tyhjentymättömän välikkeen A liohjelmn päättävän errorin tillle tulost( tästä olisi pitänyt lk A ); while next follow(a) do next pyydä selimelt seurv syötemerkki; return uusi lpseton virhesolmu nimeltään A jok siis sel ohi virheellisen A j jtk jäsennystä sitä seurvst merkistä. Jokiselle välikkeelle A N määritellään first(a) = first(α 1 ) first(α 2 ) first(α 3 )... first(α k ) (16) first- eli sen first-joukko koostuu kikist sen sääntöjen oikeiden puolten α i joukoist. Tällisen oiken puolen α V first-joukko lsketn puolestn seurvsti: Jos α = ε, niin first(α) = {ε}. 137
140 Jos α on muoto... jollkin päätemerkillä Σ, niin first(α) = {}. Jos α on muoto Bβ, joss välike B ei ole tyhjentyvä, niin first(α) = first(b) jok ts lsketn kuten yhtälössä (16). Jos α on muoto Bβ, joss välike B on tyhjentyvä, niin eli edetään eteenpäin jonoss α. first(α) = (first(b) \ {ε}) first(β) Vsemmn rekursion poisto tk, ettei tämä ole kehämääritelmä. Välikkeiden follow-joukot voidn puolestn lske toistmll seurvi sääntöjä, kunnes mikään joukko ei enää ksv: Lisää EOF lähtösymolin S joukkoon follow(s). Jos kieliopiss on jokin sääntö muoto A αbβ, niin lisää joukkoon follow(b) kikki joukon first(β) päätesymolit. (Eli kikki muut sen lkiot, mutt ei mhdollist tyhjää merkkijono ε). Jos kieliopiss on jokin sääntö muoto A αbβ joss ε first(β) niin lisää joukkoon follow(b) kikki joukon follow(a) lkiot. Esimerkki 62. Esimerkin 59 (s. 131) tekijöidyssä kieliopiss trvitn LL(1)-jäsennintä vrten seurvt joukot: first(t ) = {, (} first(e ) = {+,, ε} first(e) = first(t ) follow(e ) = follow(e) = {EOF, )}. Näiden perusteell voidn kirjoitt jäsennin edellä kuvttuun tpn. Lyhennetään koodi kirjoittmll yksi yhteinen liohjelm kikille päätemerkeille { +,, (, ),}: Terminli(): 1 if next = 2 then next lue seurv syötemerkki 3 return uusi lpseton solmu nimeltään 4 else error( tässä olisi pitänyt oll ) Pääohjelmksi tulee: 138
141 1 next lue ensimmäinen syötemerkki 2 τ Proc E() 3 if next = EOF 4 then return τ 5 else error(syötteen olisi pitänyt loppu tähän kohtn) Välikkeen E liohjelmksi tulee: Proc E(): 1 if next { (, } then y 1 T y 2 E return uusi solmu nimeltään E j lpsinn y 1, y 2 2 else error( tästä olisi pitänyt lk E ) Välikkeen E liohjelmksi tulee: Proc E (): 1 if next { + } then y 1 Terminli( + ) y 2 Proc E() return uusi solmu nimeltään E j lpsinn y 1, y 2 2 elseif next { } then y 1 Terminli( ) y 2 Proc E() return uusi solmu nimeltään E j lpsinn y 1, y 2 3 else return uusi lpseton solmu nimeltään E (Tässä siis on hr säännölle E ε.) Välikkeen T liohjelmksi tulee: Proc T(): 1 if next {} then y 1 Terminli() return uusi solmu nimeltään T j lpsenn y 1 2 elseif next { ( } then y 1 Terminli( ( ) y 2 Proc E() y 3 Terminli( ) ) return uusi solmu nimeltään T j lpsinn y 1, y 2, y 3 3 else error( tästä olisi pitänyt lk T ) Tätä systemttisesti kirjoitettu jäsennintä voi selvästi vielä prnnell pikllisin muutoksin: esimerkiksi liohjelmn Proc T() rivillä 2 trkstetn khdesti, että next on (. Tehdään prempi C-pseudokoodill: 139
142 void E() { tulost("e TE ") T (); E (); } void E () { if (next == + ) { tulost( "E +E") next = getnext(); E(); } else if (next == - ) { tulost( "E -E") next = getnext(); E(); } else tulost( "E ε") } void T () { if (next == ) { tulost( "T ") next = getnext(); } else if (next == ( ) { tulost( "T (E)") next = getnext(); E(); if (next ) ) error( sulkev sulku puuttuu ); next = getnext(); } else error( T ei voi lk merkillä next ); } Pääohjelm käynnistää j päättää jäsennyksen: next = getnext(); E(); if (next EOF) error( ylimääräistä syötettä lusekkeen perässä ). Ktsotn esimerkki 63 sen toiminnst. Sitten korvtn sen tulosteet yksinkertisell koodingeneroinnill. Esimerkki 63. Syötejonon -(+) jäsennys tulost: 140
143 E TE T E -E E TE T (E) E TE T E +E E TE T E ε E ε Tulostus vst vsent johto: E T E E E T E (E)E (T E )E (E )E ( + E)E ( + T E )E ( + E )E ( + )E ( + ). Oikess ohjelmss tulost-komennot voivt tehdä jotin hyödyllisempää (kuten lske lusekkeen rvo, generoid koodi,... ). All yksinkertistettu esimerkki oikest kääntämisestä EI kysytä tentissä! Käskyknt: push x lit x pinoon pop x poist pinon huippu rekisteriin x dd r1,r2 r1 r1 + r2 su r1,r2 r1 r1 r2 Syötteen (x + y) ( + ) käännös: push x push y pop r1 pop r2 dd r1, r2 push r1 push push pop r1 pop r2 dd r1, r2 push r1 pop r2 pop r1 su r1, r2 push r1 pop r1 // Esimerkki pinokoneen koodin g e n e r o i n n i s t // e d e l l i s e n mukisten l u s e k k e i d e n e v l u o i m i s e k s i // r e k i s t e r i i n r1... ; TESTAAMATON, v s t u u l u k i j l l : void Ep ( ) { i f ( next == + ) { next = g e t n e x t ( ) ; T( ) ; p r i n t f ( pop r1 \npop r2 \ndd r1, r2 \ npush r1 \n ) ; Ep ( ) ; 141
144 } } e l s e i f ( next == ) { next = g e t n e x t ( ) ; T( ) ; p r i n t f ( pop r2 \npop r1 \ nsu r1, r2 \ npush r1 \n ) ; Ep ( ) ; } void T( ) { i f ( numero ti muuttuj ( next ) ) { p r i n t f ( push %c \n, next ) ; next = g e t n e x t ( ) ; } e l s e i f ( next == ( ) { next = g e t n e x t ( ) ; T( ) ; Ep ( ) ; i f ( next!= ) ) p r i n t f ( Virhe : s u l k u puuttuu \n ) ; next = g e t n e x t ( ) ; } e l s e p r i n t f ( Virhe : T e i v o i l k %c \n, next ) ; } i n t min ( ) { next = g e t n e x t ( ) ; T( ) ; Ep ( ) ; p r i n t f ( pop r1 \n ) ; r e t u r n 0 ; } Edellisessä koodiss välike E on oleellisesti poistettu, j se on korvttu sääntöjen oikell puolell suorn johdoll T E : S T E E +T E T E ε T (T E ) Pääohjelm (min) vst siis lähtösymoli S. Peruuttvst jäsentämisestä Voimme ryhtyä ohjelmoimn tämän kltist rekursiivisesti etenevää jäsennintä myös selliselle kieliopille G jok ei ole LL(1). Silloin tehdään ennustvn sijn peruuttv (engl. cktrcking) jäsennin. 1. Jäsennin rv (ennustmisen sijn) mikä voisi oll seurv produktio. 2. Jos jäsennin joutuu myöhemmin umpikujn, eli huom rvnneens väärin, niin se peruutt rekursiossn viimeisimmän rvuksens, j rvkin sen sijn jonkin muun produktion. Intuitiivisesti, otmme iemmn kuvn 21 (s. 101) generoi-j-test -lgoritmin, j toteutmme sen epädeterminismin tällä peruuttvll etsinnällä. Tämän menetelmän hnkluuksi ovt edestkisin veltelu syötemerkkijonoss: Jäsennin kulkee 142
145 eteenpäin rvttun produktion jot se kokeilee seurvksi, j tksepäin peruuttessn vääräksi osoittutuneen rvuksens. tehottomuus jos kieliopiss on pljon kokeiltvi vihtoehtoj: Jäsennin joutuu kokeilemn ne kikki rekursiivisesti. pysähtyminen jos kielioppiin on jäänyt vsent rekursiot: Jäsennin voi juuttu rvilemn loputtomiin liikkumtt syötemerkkijonoss. Tällisten peruuttvien etsintämenetelmien ohjelmointi yksinkertistuu huomttvsti, jos otetn käyttöön liskt listt. Lisk list ylläpidetään keskeneräisenä : Kun siltä kysytään Mikä on seurv lkiosi? niin se lskee seurvn lkions vst silloin j vin sen seurvn lkions, eikä vielä muit. Peruuttvss jäsennyksessä välikettä A vstv jäsennysfunktio ott prmetrinn syötemerkkijonost sen loppuosn u, jok on yhä jäsentämättä nt tuloksenn liskn listn päätemerkkijonoj w, joss w on se loppuos merkkijonost u, jok jää jäljelle kun sen lkuosst jäsennetään tämä välike A. Siis u = vw joss A v. Tuloslist koostuu kikist tällisist w, eli kikist eri vihtoehdoist jtk jäsennystä, kun ensin on jäsennetty tämä A. Silloin välikkeen A säännöistä A α 1... α k muodostetn liohjelm A(u) koodinn 1 return Lisk(α 1, u)... Lisk(α k, u) joss opertio X Y yhdistää kksi lisk list Y j Y yhdeksi liskksi listksi: 1 if list X osoittutuu tyhjäksi 2 then return Y 3 else Z listn X ensimmäinen lkio; 4 L listn X loput lkiot; 5 return list jonk ensimmäinen lkio on Z j loput Y L. Liskuuden iden on lske list X vin sen verrn, että if-lusess tiedetään kumpi hroist then viko else pitää vlit. Rivillä 5 kuljetn listoj X j Y vuorothtiin; silloin jäsennys nt reilun tilisuuden jokiselle eri kokeiltvlle vihtoehdolle. Nämä Liskt hrt voidn puolestn määritellä rekursioll sääntöjen oikeiden puolten α i rkenteen suhteen: Lisk(ε, u) = return se lisk list, jonk ino lkio on u itse kosk tyhjän merkkijonon jäsentäminen ei kulut yhtään syötemerkkiä. Päätemerkillä Σ on Lisk(β, u) ehto 143
146 1 if merkkijono u on muoto w 2 then return Lisk(β, w) 3 else return tyhjä lisk list kosk tyhjä tuloslist trkoitt että ei jäsenny mitenkään. Välikkeellä B s Lisk(Bβ, u) muodon 1 return Lisk(β, w 1 ) Lisk(β, w 2 ) Lisk(β, w 3 )... joss w 1, w 2, w 3,... on liskn listn B(u) sisältö kosk se trkoitt että jtketn jäsentämällä β jokisest sellisest merkkijonost w j jok jää jäljelle kun merkkijonon u lust on jäsennetty välike B. Pääohjelmksi lkusymolille S tulee 1 return löytyykö ε liskst listst S(koko syöte)? kosk se trkoitt että voiko koko syötteen lust jäsentää välikkeen S niin, ettei mitään jää jäljelle? Jos hlutn tämän kyllä/ei-vstuksen sijst tuott jäsennyspuut, niin ljennetn jokisess jäsennysfunktioss A(u) jokinen tuloslistn lkio pelkästä merkkijonost w priksi (τ, w) joss τ on sellinen jäsennyspuu, jonk juuri on nykyinen välike A j tuotos on se merkkijono v joll u = vw j A v. Näin s liskn listn koko syötteen kikist jäsennyspuist. Tällist liskoill listoill toteutettu peruttv jäsennintä voi onneksi tehost, jos kielioppisäännöt ovt sopivi. Esimerkiksi jos välikkeen säännöistä A α 1... α k tiedetään, että ne ovtkin muoto joko α 1 ti α 2 ti α 3 ti... ti α k jos ne esimerkiksi täyttävät LL(1)- ehdot, vikk koko kielioppi ei täytäkään niin silloin vstvksi liohjelmksi A(u) voidnkin ott 1 return Lisk(α 1, u)... Lisk(α k, u) joss X Y snookin että käytä list Y vin jos list X osoittutuukin tyhjäksi : 1 if list X osoittutuu tyhjäksi 2 then return Y 3 else return X. 144
147 5.6.2 LR-kieliopeist Simuloidnkin merkkijonon oike johto rekursiivisesti. Sdn LR(1)-kieliopit j -kielet: Left to right scn, producing Right prse with 1 symol lookhed. Yleisemmin, LR(k)-kielissä seurvt k merkkiä määrittävät seurvn johtoskeleen. LR(0) = ns. yksinkertinen LR (Simple LR, SLR). LR(1) = deterministiset kielet, joten tsot k > 1 ovt enää teoreettisesti kiinnostvi. LR-jäsennys sisältää LL-jäsennyksen sillä lim LL(k) = LR(1). k Intutiivisesti, odotmme jäsentäessämme mhdollisimmn pitkään emmekä heti kokeile sääntöä, eli teemmekin oiken emmekä vsent johto. Nämä ovt tärkeitä työkluj kääntäjien ltimisess utomttisesti. Esimerkiksi ycc-työklu tuott LALR- eli lookhed LR -jäsentimen, jok on hiemn yksinkertisempi kuin täysi LR(1)-jäsennin. LR-jäsennyksen intuitio on prnt kuvn 21 generoi-j-test -pinoutomttimme. Simme sen mielivltisest kontekstittomst kieliopist hyvin yksinkertisell käännöksellä, mutt niinpä siinä olikin vrsin pljon epädeterministisiä vlintoj. LR-jäsennyksessä tehdäänkin tämä käännös huomttvsti huolellisemmin, j sillä pyritään pääsemään eroon näistä vlinnoist. Tämän käännöksen huolellisuus nt nämä eri luokt kuten SLR, LALR ti täysi LR(1). Jos niistä kikist päästään eroon, niin on stu se etsitty jäsennyslgoritmi deterministinen pinoutomttihn on tehoks simuloid. Jos ei päästä, niin usein voidn rtko loput vlinnt käsin: Esimerkiksi esimerkin 49 roikkuvn else-hrn ongelmss pinoutomtti ei else-syötemerkin nähdessään tiedä kump sen pitäisi tehdä: sovelt kielioppisääntöä pinoss jo oleviin lkioihin vi viedä tämäkin else-merkki pinoon? Silloin else-hr kuuluu lähimpään if-ehtoon -heuristiikn mukn näistä jälkimmäinen on se mitä pinoutomtin pitää tehdä. Sivuutmme yksityiskohdt. Kysymys: Jos kerrn jo LL(1) riittää useimpiin ohjelmointikielissä esiintyviin syntktisiin konstruktioihin, niin miksi meillä silti on myös LR-jäsennys? Vstus: 145
148 Oikesti hlumme käyttää ttriuuttikielioppej, eli sellisi kontekstittomi kielioppej, joihin olemme liittäneet ttriuuttien käsittelysäännöt. Kun kielioppi muunnetn LL(1)-ehdon täyttävään muotoon (vsemmn rekursion poistoll jne.) niin lopult sen rkenne voi oll hyvinkin kukn lkuperäisestä kieliopist. Siten siihen lopputulokseen voi oll hnkl j epäintuitiivist liittää sopivi ttriuuttien käsittelysääntöjä. LR-jäsennyksessä kielioppi ei trvitse muokt niin rdiklisti, joten ttriuuttien käsittelysäännötkin pysyvät yksinkertisempin. Yhteenveto kontekstittomien kielten jäsennyksestä Sm si: kuuluuko nnettu merkkijono kieleen? Peruskysymys kikkien formlien kielten kohdll (joit on siis muitkin kuin säännölliset j kontekstittomt). Säännöllisten kielten yhteydessä vstttiin äärellisen utomtin vull. Tämä on sekä teoriss että käytännössä erinominen rtkisu. Nyt olisimme voineet käyttää pinoutomtti (j käytimmekin); mutt tämä on teoreettinen työklu. Käytännössä epädeterminististä pinoutomtti ei voi toteutt tietokoneell. Siis käytämme rjoittmttomille CF-kieliopeille CYK-lgoritmi. Erikoistpukset voidn jäsentää / tunnist helpommin: oikelle lineriset kieliopit vstvt säännöllisiä kieliä: tunnistetn siis äärellisellä utomtill (tässä tpuksess CYKin käyttö olisi liioittelu). Monet käytännössä tärkeät erityisesti ohjelmointikielille määritellyt - kieliopit ovt tyyppiä LL(k) ti LR(k). Näille on olemss yksinkertisi j tehokkit rekursioon perustuvi jäsennysmenetelmiä. Muitkin lgoritmej on. Työkluj: Bison, Ycc: syötteenä (rjoitettu) kontekstiton kielioppi, tuloksen jäsentimen lähdekoodi Kontekstittomien kielten rjoituksist Jäsennyspuit trkstelemll voi osoitt että vikkp kieli L = { n n c n n N} ei ole kontekstiton. Tämä perustuu smtpiseen pumppusiden kuin epäsäännöllisyyttä osoitettess: Jos s on kielen L merkkijono, sillä on jäsennyspuu sopivss kielen L kieliopiss G. Jos lisäksi s on kovin pitkä, niin sen jäsennyspuuss on oltv inkin yksi pitkä hr. Kun jäsennyspuun hr on riittävän pitkä, niin inkin yhden muuttujn A on pkko esiintyä inkin kksi kert. Muuttujn A esiintyminen omn jälkeläisenään jäsennyspuuss trkoitt, että A vax joillkin v, x Σ. Voimme pumpt tätä johto kuten kuvss 26: A vax vvaxx vvvaxxx
149 S S A A A A u v w x y u v v. A A A x x y v w x Kuv 26: Toistuvn välikkeen pumppus. Vert säännöllisten kielten pumppuslemmn (luse 7): tilt vs. muuttujt silmukk utomtiss vs. johto A vax. Kontekstittomien kielten pumppuslemm Smn tpinen kuin säännöllisten kielten pumppuslemm. Nyt kuitenkin pumptn kht osmerkkijono v j x smn thtiin. Hyvin krke pinoutomtti-intuitio: v = pyöritään silmukss, joss pinetn merkkejä pinoon x = pyöritään silmukss, joss poistetn pinost se, mitä v-silmukk sinne vei. Luse 16. Jos L on kontekstiton kieli, niin sille on olemss pumppuspituus p N, jolle seurv pätee: Jos s L j s p, niin voidn kirjoitt s = uvwxy, joss 1. uv i wx i y L kikill i N, 2. vx > 0 j 3. vwx p. Todistus: Sivuutetn. Kuten jo on todettu, kontekstittomille kielille pätee joitin smntpisi sulkeumominisuuksi kuin säännöllisille kielille: Luse 17. Olkoot L 1 j L 2 kontekstittomi kieliä. Tällöin myös 1. L 1 L 2 (kielten yhdiste) 147
150 2. L 1 L 2 (kielten ktentio) 3. (L 1 ) (kielen sulkeum) 4. (L 1 ) R (kielen käänteiskieli) ovt kontekstittomi. Kontekstittomt kielet eivät kuitenkn ole suljettuj leikkuksen j komplementin suhteen. Niiden pumppuslemmll eli luseell 16 voitisiin todist, että kieli ei ole kontekstiton. { n n c n n N} Todistus: (Luonnos.) Kun vlitn merkkijonoksi s = p p c p niin sen osss vwx ei voi oll kikki kolme merkkiä. Siten sen osien v j x pumppminen ei voi lisätä jokist kolme merkkiä kuten pitäisi. Kielet ovt kontekstittomi, mutt niiden leikkus L 1 = { n n c k n, k N } j L 2 = { k n c n n, k N } L 1 L 2 = { n n c n n N} ei siis olekn kontekstiton. Todistimme juuri: Luse 18. Kontekstittomien kielten luokk ei ole suljettu leikkuksen suhteen. Tähän mennessä tphtunut Kurssi lähti liikkeelle yksinkertisist lskennn mlleist: mitä niillä voidn esittää, millisi ilmiöitä hvitn. Lskennn formlisointi perustuu joukko-oppiin j logiikkn, j se mhdollist mtemttisen täsmälliset päättelyt. edellyttää idelisointi (mielivltisen pitkät syötteet jne.) tärkeä erityisseikk: epädeterminismi. Prosedurlisuus j deklrtiivisuus Smn sin määrittely prosedurlisesti utomtill ti deklrtiivisesti kieliopill. Tärkeät ekvivlenssitulokset: kieli A on tunnistettviss äärellisellä utomtill kieli A voidn esittää säännöllisenä lusekkeen. 148
151 kieli A on tunnistettviss pinoutomtill kieli A voidn tuott kontekstittomll kieliopill. Niiden vull siirrytään trpeen mukn prosedurlisest deklrtiiviseen esitykseen ti toisin päin. Ylärjoj lskentongelmien vikeudelle: esimerkiksi, mikä thns säännöllinen kieli voidn tuott kontekstittomll kieliopill. Todistukset olivt tyypillisesti konstruktiivisi, esimerkiksi kontekstiton kielioppi käännettiin pinoutomtiksi. Simultio oli erikoistpus konstruktiost, epädeterministisestä deterministiseksi äärelliseksi utomtiksi. Alrjoj ongelmien vikeudelle: esimerkiksi kieli {0 n 1 n n N} on vikempi kuin mihin äärellinen utomtti pystyy. Lähtökohtn oli formlisoitu lskentmlli. Todistetn voimks putulos (kuten pumppuslemm) lskentmllin määritelmän perusteell. Sovelletn putulost esimerkkitpuksiin (usein epäsuorn todistuksen kutt), lskentmllin yksityiskohdist ei enää trvitse välittää. Teknisesti vikeit (myös opelle). Hierrki: Esimerkiksi säännölliset kielet ovt yhteydettömien kielten ito liluokk. Simultio: kikki säännölliset kielet ovt yhteydettömiä. Erottelu: kieli {0 n 1 n n N} on kontekstiton (ylärj), mutt ei säännöllinen (lrj). Siirryttäessä trkstelemn vhvempi lskennn mllej j kieliluokki edellä esitellyt ilmiöt toistuvt tekniset yksityiskohdt monimutkistuvt entisestään tulokset ovt entistäkin kiinnostvmpi, kosk esimerkiksi Turingin kone on mlli oikelle tietokoneelle (ti mille thns nykytietämyksen vloss mhdolliselle lskentlitteelle). Tällisi sioit käsitellään trkemmin LAT-kurssill. 149
152 6 Lskennn filosofi Nyt etenemme kontekstittomien kielten tuolle puolen... Tietojenkäsittelytieteilijän yleissivistykseen kuuluvi sioit: Turingin kone, j siihen liittyen rtkevuus vs. rtkemttomuus, sekä ongelmien vikeusluokt, erityisesti P? = NP-ongelm. Emme mene yksityiskohtiin, mutt selvitämme mistä on krkesti otten kysymys. Tästä eteenpäin sit perustelln (jos perustelln linkn) käsien heiluttelull mtemttisen todistelun sijst. Siis: tsoll lskennn filosofi, vrsininen lskennn teori jää kurssille LAT. Asioit jotk on Hyvä Tietää, sillä näihin voi törmätä mitä erilisimmiss yhteyksissä eli hyödyllistä yleistieto. Lisämotivtio: termejä rtkemton j NP-täydellinen ti NP-kov käytetään usein täysin väärin, j tähän syyllistyvät myös monet oppineet. Siis erityisesti: kikki NP-täydelliset ongelmt ovt kyllä rtkevi, vikk joku muut väittäisikin. 6.1 Turingin kone Turingin kone on lkun mtemttisen logiikn trpeisiin kehitelty lskennn mlli. Trkoituksen oli vngit mhdollisimmn ljsti, millisi sioit voidn (peritteess) lske meknisesti. Mlli on sittemmin osoittutunut sopivksi myös oikeiden tietokoneiden ymmärtämiseen. Turingin koneiden keksijä Aln M. Turing oli keskeinen henkilö II milmnsodn ikn liittoutuneiden purkess skslisten Enigm-slkirjoituskoneell koodttuj viestejä j sodn jälkeen erään ensimmäisen oiken tietokoneen (ACEn) suunnitteluss Englnniss. Turingin kone (Turing mchine, TM) on utomtti, joss on peritteess rjoittmton määrä muisti. Toisin kuin pinoutomtti, Turingin kone s käsitellä tätä muistin täysin vpsti. Siten yksinkertisin tp päästä pinoutomteist Turingin koneisiin olisi viht pinon tillle pumuistin toimiv nuh, jot kone s käsitellä vpsti, kuten kuvss 27. Kikkein yksinkertisin Turingin kone on yksinuhinen Turingin kone, joss 150
153 syötenuh tutkittv syöte... nuhpää ohjusyksikkö q 0 q 3 q 1 q 2 δ A B A A_ pumuistinuh Kuv 27: Pinoutomtist Turingin koneeksi. syötenuh toimii smll työnuhn nuhpää voi liikku vpsti kumpnkin suuntn ruutu kerrlln nuhpään kohdll olevn merkin s luke j kirjoitt vpsti. Tällisen Turingin koneen peruskomponentit ovt 1. äärellinen joukko tiloj (stte) (kuten iemminkin) 2. rjoittmttomn pituinen nuh (tpe), jok luksi sisältää syötteen j lskennn ikn toimii pumuistin j 3. liikuteltv nuhpää (tpe hed, red/write hed, osoitin, pointteri ), jok osoitt seurvksi vuoross olev symoli nuhll. Turingin koneen yksityiskohdt (kuten nuhojen lukumäärä, onko nuh molempiin viko vin yhteen suuntn ääretön,... ) voidn määritellä monell eri tvll, mutt kikki ovt lskentvoimltn ekvivlenttej. Kuten muutkin käsittelemämme utomtit, Turingin kone s syötteenä merkkijonon, jonk sitten hyväksyy ti hylkää: 1. Aluksi syöte on nuhn luss, j nuhn loppu sisältää pelkkiä tyhjämerkkejä. Nuhpää osoitt nuhn lkuun. 2. Yhdessä lskent-skeless kone lukee nuhpään ll olevn symolin, vlitsee seurvn tiln, 151
154 /, R B/B, R /, R C/C, R /A, R /B, R q 0 q 1 q 2 </<, L /A, R c/c, L q 4 A/A, R q 3 </<, L q 5 B/B, R B/B, R C/C, R C/C, L /, L B/B, L /, L Kuv 28: Esimerkki Turingin koneest. kirjoitt nuhpään kohdlle uuden symolin (jok voi oll myös sm kuin vnh) j siirtää nuhpäätä vsemmlle ti oikelle. 3. Tilojen joukoss on hylkäävä j hyväksyvä lopputil, joihin päätyminen lopett lskennn välittömästi. Lskent voi oll myös päättymätön eli jäädä silmukkn. Sivuutmme Turingin koneen formlin määrittelyn. Annetn kuitenkin yksi esimerkki Turingin koneest; kieli { k k c k : k N } (jok ei ole kontekstiton), voidn tunnist kuvn 28 Turingin koneell. Siirtymänuolen merkki /A, R trkoitt, että luetn nuhpään kohdlt merkki, kirjoitetn sen tillle merkki A, j siirrytään nuhll yksi skel oikelle (Right) jne. Merkki < ts ilmoitt, mihin syöte päättyy Koneen toimintperite: Kulje syötenuh...ccc...c< eteenpäin, j muut se kulkiesssi nuhksi A...B...Ccc...c< 152
155 jos mhdollist. Pl sitten tkisin lähimmälle kirjoittmllesi merkille A, j loit siitä smnlinen kulku eteenpäin. Tuloksen on AA...BB...CCc...c< eli toisetkin merkit muuttuivt pienistä isoiksi. Jtk näin, kunnes kikki pienet -merkit ovt muuttuneet isoiksi A -merkeiksi, j trkist ettei muitkn pieniä merkkejä ole enää jäljellä. Turingin koneist (kuten muistkin utomteist) tulee nopesti hyvin monimutkisi. Monimutkisten Turingin koneiden kvioesitysten piirtäminen ei ole sinänsä kiinnostv: Turingin kone on trkoitettu yleiseksi lskentformlismiksi, jot käyttäen voidn esittää mikä thns lgoritminen lskent. Mllin motivtio on siis erilinen kuin tietoisesti rjtuiss mlleiss (äärellinen utomtti, jne). 6.2 Algoritmin määritelmä Mitä lgoritmill yleensä trkoitetn? Peritteess: Yksiselitteisesti kuvttu jono (tietojenkäsittely)opertioit, jotk voidn toteutt meknisesti. Käytännössä: luonnollist kieltä, pseudokoodi yms. käyttävä esitys, jonk pätevä ohjelmoij os koodt ilmn suurempi ongelmi. Tämä trkkuustso ei ole riittävä, jos hlutn tutki lskettvuuden rjoj. Erityisesti kun hlumme väittää jostin ongelmst, että sille ei ole olemss rtkisulgoritmi, niin mitä oikestn väitämme? Huom, että tämä on oleellisesti eri si kuin todet, että ongelmlle ei ole (vielä toistiseksi) keksitty lgoritmi. Luontev äärellisyyden vtimus: Jokinen yksittäinen opertio lgoritmiss s tehdä vin äärellisen määrän työtä. Siis erityisesti yksi opertio s luke äärellisen määrän tieto, etsiä toimintohjeen äärellisestä sääntöjoukost j kirjoitt äärellisen määrän tieto. Ti kääntäen: Jos lgoritmin kuvuksess olisi jokin ääretöntä työtä vtiv skel, niin emme kutsuisi sitä lgoritmiksi milloin tuo skel vlmistuisi, j päästäisiin sitä seurvn skeleeseen? Toislt ei ole mitään syytä kieltää lgoritmi käyttämästä niin pljon pumuisti kuin se suinkin trvitsee. Huom: Edellisen äärellisyysvtimuksen nojll lgoritmi voi kuitenkin äärellisessä jss käyttää vin äärellisen määrän pumuisti! 153
156 Siis tässä peritteess ääretön trkoitt riittävän suurt pumuisti. Tämän esittäminen mtemttisesti joht suorn jtukseen, että mtemttiselt knnlt lgoritmi on sm si kuin Turingin kone. Tämä onkin (krkesti) lkuperäinen jtus Turingin koneen tkn. Käytännön tietojenkäsittelyn knnlt tärkeä hvinto on, että myös (vstvsti idelisoitu, eli rjoittmttomll muistill vrustettu) tietokone on Turing-ekvivlentti eli pystyy rtkisemn tsn smt ongelmt kuin Turingin kone. Toisin snoen: kikki Turingin koneit koskevt tulokset j rjoitukset koskevt myös oikeit tietokoneit. Tämä on lskennn teorin j lskennn vtivuusteorin ydin. Siis Turingin kone (j vstvt kieliluokt) on kiinnostv; sitä on mtemttisten todistusten knnlt helpompi käsitellä kuin oike tietokonett (ti ohjelmointikieliä). 6.3 Rtkemttomuudest Monet lskennlliset ongelmt ovt täysin rtkemttomi; jotkut osittin rtkevi (rekursiivisesti lueteltvt kielet). Kikki ongelmt joille osmme lti rtkisulgoritmin, ovt tietenkin rtkevi (j kuuluvt siis rekursiivisten kielten luokkn). Emme käsittele si sen syvällisemmin tällä kurssill. Esimerkkinä luetelln muutm ongelm joit ei Turingin koneell (eikä siis tietokoneell) pysty rtkisemn edes peritteess: Pysähtyykö kone nnetull syötteellä? Hyväksyykö kone tyhjän syötteen? Hyväksyykö kone edes jonkin syötteen? Onko koneen tunnistm kieli säännöllinen? Jäsennysongelm (w L(G)?) yleisessä tpuksess, eli kun kielioppi G on täysin rjoittmton. Jne... Muistele johdntoluku 3.3: rtkemttomien ongelmien olemssolo on helppo todet, kosk ongelmi on enemmän kuin lgoritmej / Turingin koneit. Meditoitv: ongelmn rtkemttomuus on lskennllisesti rtkemton ongelm. Yleinen rtkemttomuustulos: Luse 19 (Ricen luse). Jokinen Turingin koneiden epätrivili semnttinen ominisuus on rtkemton. 154
157 Turingin koneiden M semnttinen ominisuus mikä thns sellinen ominisuus S, jok riippuu vin koneen M tunnistmst kielestä, ei koneen itsensä syntktisest rkenteest. Toisin snoen, intuitiivisesti: Jos meillä on koneet M j M, j L(M) = L(M ) eli ne hyväksyvät smn kielen, niin kysymykseen Onko koneell M ominisuus S? pitää vstt smoin kuin kysymykseen Onko koneell M ominisuus S? Mtemttisesti otten, semnttinen ominisuus S on mikä thns kokoelm rekursiivisesti lueteltvi kkoston {0, 1} kieliä j koneell M on ominisuus S, jos L(M) S. Semnttinen ominisuus on trivili jos vstus on in sm riippumtt kysyttävästä koneest M. Eli ominisuus S on trivili, jos jokisell koneell vstus on in kyllä eli jokisell koneell on tämä ominisuus S ei eli millään koneell ei ole tätä ominisuutt S. Kikki muut ominisuudet ovtkin sitten epätrivilej j Ricen luseen mukn siis rtkemttomi. Siis Ricen luseen mukn itse siss jokseenkin kikki ohjelmien toimint, ti trkemmin snoen niiden lskemi syöte/tulos-kuvuksi koskevt kysymykset ovt lskennllisesti rtkemttomi. Edellä luetellut ongelmt koskevt koneiden semnttisi ominisuuksi, j ovt siis rtkemttomi. Semnttisen ominisuuden vstkoht on syntktinen ominisuus, kuten kone sisältää siirtymän δ(q, ) = (q,, R) jotkut koneet M sisältävät sellisen, kun ts toiset koneet M eivät sisällä, j silti ne voivt hyväksyä smn kielen. Tälliset ominisuudet ovt (helpostikin) rtkevi. Rtkemttomuustodistukset ovt usein muoto Vstoletus: kone pysähtyy ; j tästä johdetn ristiriit: kone ei voi pysähtyä joten ongelm on rtkemton. Esimerkkinä olkoon pysähtymisongelmn rtkemttomuustodistus johdntoluvuss Jos ongelm on rtkev, koneen pitää pysähtyä in. Jos osittin rtkev, niin sen pitää pysähtyä kyllä tpuksess. 6.4 Lskennn vtivuusteorist Keskeinen (lgoritmisuunnittelun) kysymyksensettelu: Lskennn vtivuusteorin peruskysymykset ovt intuitiivisesti seurvn tyyppisiä (jn sijn voidn puhu muistist tms.): Annettu lskennllinen ongelm A j ikrj T : voiko ongelmn A rtkist jss T (ylärj ikvtivuudelle)? Annettu lskennllinen ongelm A j ikrj T : viekö ongelmn A rtkiseminen välttämättä vähintään jn T (lrj ikvtivuudelle)? 155
158 Ylärjoj todistetn tyypillisesti ltimll tehoks lgoritmi j nlysoimll sen ikvtivuus. Tietojenkäsittelytieteilijät ovt hyviä tässä (ti inkin siihen koulutuksemme pyrkii). Alrjojen todistminen on yleensä (hyvin) vike: tyypillisesti se onnistuu vin jos ongelm A on sopiv keinotekoinen ongelm; ti tehdään lisärjoituksi sille milliset lgoritmit ovt sllittuj. Esimerkiksi TRA II -kurssin Ω(n log n) lrj järjestämiselle olett lisäksi, että lgoritmi s vin vertill kokonisi tietolkioit toisiins. Siten lrj ei enää pädekään esimerkiksi silloin, jos näiden tietolkioiden yksittäisiä ittejäkin skin tutki. (Huomttkoon vielä, että tässä olln kiinnostuneit tiukoist lrjoist; esim. Ω(1) on täysin trivili lrj järjestämiselle, mutt ei kiinnostv.) Idelitpuksess ylärj j lrj ovt smt, jolloin on löydetty optimlinen lgoritmi. Lskennn vtivuusteoriss edellinen kysymyksensettelu muuntuu hiemn toiseen muotoon. Ylärjt j lrjt ovtkin vtivuusluokituksi, tyyliin: Voiko ongelmn A rtkist polynomisess jss deterministisellä Turingin koneell? Silloin jttelemme ongelmluokk kikki ne ongelmt, joille on polynomisess jss toimiv lgoritmi, kun snn lgoritmi täsmälliseksi määritelmäksi otmme Turingin koneet. Voiko ongelmn A rtkist polynomisess jss epädeterministisellä Turingin koneell? Siis on myös epädeterministisiä Turingin koneit, eli sellisi jotk voivt vlit seurvn lskent-skeleens usest eri vihtoehdost... Voiko ongelmn A rtkist polynomisess tilss? jne. Emme siis (välttämättä) ole kiinnostuneit yksittäisen lgoritmin täsmällisestä vtivuudest (edes) symptoottisess eli iso-o -mielessä, vn tietyn tyyppisten ongelmien vikeudest. Eräs Turingin koneiden yksinkertisuuden etu on, että niiden kuluttmien lskentresurssien määrä voidn määritellä suorn: Turingin koneen M syötemerkkijonoll w käyttämä ik on yksinkertisesti sen tekemien lskent-skeleiden lukumäärä ennen pysähtymistään til on yksinkertisesti niiden nuhpikkojen lukumäärä, joit sen nuhpää on osoittnut ennen koneen pysähtymistä. 156
159 Silloin kun tyydymme trkstelemn vin rtkevi ongelmi, niin voimme olett nämä äärellisiksi. Rtkemttomien ongelmien resurssitrpeet ts ovt hrvoin kiinnostvi. Syötteen pituudell n nämä määritellään mksimirvoikseen, eli ik on pisin ik jok voidn käyttää millään syötteellä w jonk pituus w n til on suurin til jok... vstvsti. Smoin epädeterminismi voidn määritellä suorn: Smss tilss voidn vlit smll nuhmerkillä mont eri siirtymää. Jos kieli voidn tunnist jossin nykyikisen tietokoneen strktiss mlliss (kuten esimerkiksi ns. hjsntikone eli RAM-kone) jss t(n) j tilss s(n), niin se voidn tunnist deterministisellä Turingin koneell jss O(t(n) 2 ) j tilss O(s(n)). Yleisemmin, ((lähes?) kikiss?) universleiss lskennn mlleiss ikvtivuudet j tilvtivuudet (kun ne määritellään järkevästi) ovt polynomisess suhteess: Jos jokin ongelm rtke jossin mlliss jss t(n), niin missä thns toisess mlliss se rtke jss O(t(n) k ), jollin vkioll k, jok riippuu käytetyistä mlleist mutt ei ongelmst. Erityisesti tämä trkoitt: jos ongelm rtke polynomisess jss (deterministisen) Turingin koneen vull, se rtke polynomisess jss myös oikell tietokoneell. (J päinvstoin.) Eli olemme kiinnostuneet rjst tehokkn eli polynomisen j tehottomn eli ylipolynomisen lskent-jn välillä emmekä trkst funktiost t(n). Käytännön lskennss ylipolynominen lgoritmi hidstuu liin rjusti ollkseen hyödyllinen, kun syötteen pituus n ksv vähänkään suuremmksi. Komintoriikn näkökulmst ylipolynomisuus trkoitt usein luettele kikki eri mhdollisuudet j vlitse niistä... -tyyppistä rtkisu, jot ei voine pitää lgoritmisesti kovinkn nokkeln... Ajtelln esimerkiksi seurv tehtävää: Meillä on n punnust, joiden pinot ovt p 1, p 2, p 3,..., p n N. Voidnko vk sd tspinoon niin, että yhteen sen vkkuppiin litetn os niistä j toiseen loput. Lskentongelmn se tunnetn nimellä Ositus (Prtition): Syötteenä nnetn luvut p 1, p 2, p 3,..., p n N. Onko olemss jokin indeksijoukko I {1, 2, 3,..., n} siten, että p i = p j? (17) i I j {1,2,3,...,n}\I 157
160 Deterministist peruslgoritmi 1 for ech I {1, 2, 3,..., n} 2 do if yhtälö (17) on tott 3 then return kyllä on 4 return ei ole ei voine pitää kovinkn nokkeln, sehän vin kokeilee läpi kikki 2 n eri vihtoehto. Epädeterministinen lgoritmi vin 1. ensin tuott jonkin osjoukon I {1, 2, 3,..., n} epädeterministisesti 2. sitten hyväksyy jos yhtälö (17) on tott j hylkää muuten. 6.5 Ongelmien vikeusluokitukset j plutukset Vikeusluokki j -luokituksi on pljon (ktso esim. edu/wiki/complexity Zoo) kosk lskentongelmi voidn vertill toisiins monin eri tvoin. Tärkeimmät tunte: P j NP. Puoli-formlisti: lskennllinen (päätös)ongelm A kuuluu luokkn NP (nondeterministic polynomil time), jos se voidn tunnist epädeterministisellä Turingin koneell polynomisell määrällä lskent-skeleit. Tästä seur suorn, että jos ongelm A NP, niin se voidn tunnist deterministisellä Turingin koneell (.k.. tietokoneell) eksponentilisess jss (simuloimll epädeterminististä lskent, jok käy kikki lskentpuun hrt läpi). Siis: tämä simuloinnin eksponentilisuus on ylärj; luokkn NP kuuluu myös helppoj ongelmi (esim. hierrkin pohjll säännölliset kielet), jotk voidn rtkist nopemmin. Luokn NP vikeimmt ongelmt sttvt kuitenkin vti eksponentilisen jn, mutt tämä on voin ongelm. Ns. NP-täydellisille ongelmille ei tunnet tehokkmpi lgoritmej, mutt ei ole myöskään voitu todist etteikö sellisi voisi oll. Tämä on tärkeä kysymys, kosk erilisi (tärkeitä) NP-täydellisiä ongelmi on pljon, j niitä hluttisiin ost rtkist tehokksti ( polynomisess jss). Vstvsti luokk P, epäformlisti: päätösongelmt, jotk voidn rtkist deterministisellä Turingin koneell polynomisess jss. Siis, jos P = NP, niin kikki luokn NP ongelmt voitisiin rtkist polynomisess jss. Vltos tietojenkäsittelytieteilijöistä uskoo, että P NP. Mutt sitä ei siis ole vielä(kään) onnistuttu todistmn. Intuitiivisesti todistuksen vikeus on osoitt, ettei mikään ohjelmointitp, -kikk ti -temppu voi korvt epädeterminististä polynomist lskent deterministisellä hidstumtt smll eksponentilisesti. 158
161 Plutukset lskentongelmien välillä Ongelmi voidn plutt toisiin ongelmiin. Trivili esimerkki: kertolsku voidn plutt toistetuksi yhteenlskuksi, j päinvstoin. Lskentongelmn A pluttminen lskentongelmn B trkoitt sellist muunnosfunktiot f, että kysymykseen Päteekö x A? voidn vstt kysymällä sen sijn Päteekö f(x) B?. Tällöin ongelm A löytyy ongelmn B sisältä. Tällöin jttelemme että Eihän tämä A ollutkn inkn vikempi ongelm kuin tuo B!. Ti kääntäen Ongelm B ei ole inkn helpompi kuin tämä ongelm A!. Sllitut plutukset f vlitn siten, etteivät ne hämärrä sitä rj, jot hlutn nyt tutki. Esimerkiksi jos rjn on rtkevuus/rtkemttomuus, niin silloin plutuksen f sllitn mikä thns lgoritmisesti lskettv funktio. Silloin otetn ongelmksi A jokin rtkemttomksi jo tiedetty ongelm. Erityisesti pysähtymisongelm on todistettu rtkemttomksi suorn, vetomtt muihin ongelmiin. Siten se onkin usein luontev A. Silloin plutusfunktion f olemssolo osoitt myös ongelmn B rtkemttomksi ongelm A työntää ongelmn B rjn yli plutuksell f. Toisin snoen, ongelm B voidn osoitt rtkemttomksi seurvsti: 1. Oletetn, että ongelmll B olisi jokin rtkisulgoritmi. 2. Osoitetn, että sen vull stisiin rtkisulgoritmi myös jollekin rtkemttomksi tiedetylle ongelmlle A esimerkiksi pysähtymisongelmlle. 3. Tämä on ristiriit, eli myöskään B ei voi oll rtkev. Kun tutkitn rj P/NP, niin sllituiksi plutusfunktioiksi f vlitn (deterministisillä Turingin koneill) polynomisess jss lskettvt funktiot. Puhutn polynomisist (moni-yksi) plutuksist ( polynomil (mny-one) reductions ). Jos on siis nnettu formlit kielet A Σ A j B Σ B, voidn merkitä A p B jos x A f(x) B kikill x Σ A j plutusfunktio f : Σ A Σ B voidn lske polynomisess jss. Tämä A p B formlisoi intuitiomme ongelm A ei ole vikempi kuin ongelm B eli ongelm B ei ole helpompi kuin ongelm A. Lskentongelm on NP-vike (ti NP-kov ) (engl. NP-hrd), jos kikki luokn NP ongelmt voidn plutt siihen polynomisesti. 159
162 Lskentongelm on NP-täydellinen ( complete ), jos se on NP-vike j itsekin luokss NP. Toisin snoen, silloin se on luokn NP ktoll eli yksi sen vikeimmist ongelmist. Näillä määritelmillä P? = NP-ongelm rtke P = NP jos yhdellekin NP-täydelliselle (ti -vikelle) ongelmlle keksitään polynomisess jss toimiv deterministinen lgoritmi. Tämä on siis se vähemmän uskottv vihtoehto. P NP jos yhdellekin NP-täydelliselle ongelmlle pystytään osoittmn, ettei sellist lgoritmi voi oll olemss. Tämä on siis se vihtoehto, johon uskotn, mutt jonk todistus yhä puuttuu. Siis, ongelm B voidn osoitt NP-täydelliseksi (jos se on sellinen!) seurvsti: 1. Etsitään ensin kirjllisuudest tunnettu NP-täydellinen ongelm A (joit on tuhnsi), jok muistutt ongelm B josskin mielessä. 2. Osoitetn että A p B. Mikäli lähtöongelm A on riittävän smnkltinen kuin B, vdittu plutus f voi oll yksinkertinen. Toislt polynomisess jss voi trvittess suoritt kohtlisen monimutkisikin muunnoksi. 3. Osoitetn vielä että B NP, mikä on yleensä helppo: riittää esittää sille epädeterministinen polynomiikinen lgoritmi. Jos ongelm B on näin osoitettu NP-täydelliseksi, mutt sille pitää silti nt edes jonkinlinen rtkisu, niin sille voidn ryhtyä kehittämään esimerkiksi jotkin seurvist: Approksimointilgoritmi, jok lskeekin jonkin likimääräisen rtkisun. Stunnislgoritmi, jok löytää rtkisun todennäköisesti, muttei vrmsti. Heuristiikkoj, jotk toimivt nopesti moniss sen erikoistpuksiss, mutteivät kikiss. NP-täydellisiä ongelmi NP-täydellisiä ongelmi on löytynyt tuhnsi sekä tietojenkäsittelytieteen sisältä että monilt muilt sellisilt tieteenloilt, joiss myös pitää rtko informtionkäsittelytehtäviä. Esimerkiksi seurvilt loilt, jotk on poimittu ln perusteoksest (Grey nd Johnson, 1979): Verkkoteori. Esimerkiksi Hmiltonin kehä (Hmiltonin Circuit): Voidnko syötteenä nnetun suuntmttomn verkon kri pitkin kulke niin, että käydään tsn kerrn jokisess sen solmuss, j lopuksi pltn tkisin lähtösolmuun? Ti Verkon väritys (Chromtic Numer): Voidnko nnetun suuntmttomn verkon solmut värittää k eri värillä siten, että verkon jokinen kri yhdistää erivärisiä solmuj? 160
163 Verkkojen suunnittelu. Esimerkiksi Kuppmtkustjn ongelm (Trvelling Slesmn Prolem, TSP): Edellinen Hmiltonin kehä joss on mukn myös krten pinot (eli teiden pituudet ) j ylärj kierroksen pituudelle. Joukot j niiden ositukset. Esimerkiksi edellä kuvttu Ositus. Tllennus j hku. Esimerkiksi Lyhyin yhteinen ylijono (Shortest Common Superstring): Annetn mont merkkijono s 1, s 2, s 3,..., s n sekä ylärj m. Onko olemss korkeintn m merkin mittinen merkkijono s, jok sisältää kikki nämä nnetut merkkijonot? Kiinnostv esimerkiksi molekyyliiologiss: Annetut merkkijonot ovt lortoriokokeill eristettyjä pätkiä tuntemttomn DNA-juosteen eri kohdist. Millinen se koko juoste voisi oll? Aiktulujen ldint. Esimerkiksi Lukujärjestys (Timetle) koko koululle, ti työjärjestys tehtn koneille j sen henkilökunnlle,... Mtemttinen ohjelmointi. Esimerkiksi Repunpkkus (Knpsck): On nnettu tvroit, joill on rvo j pino. Mitkä niistä murtovrkn knntt poimi reppuuns, jott niiden yhteinen rvo olisi mhdollisimmn suuri, mutt pino silti niin pieni, että hän vielä jks knt ne? Alger j lukuteori. Esimerkiksi Neliölliset Diofntoksen yhtälöt (Qudrtic Diophntine Equtions): Annetn,, c N. Onko olemss rtkisut x, y N yhtälölle x 2 + y = c? Pelit j pulmt. Esimerkiksi sellinen Ristisntehtävä (Crossword Puzzle Construction) joss nnetn ruudukko, joss os ruuduist on vlkeit j muut musti sekä list snoj jotk pitää kirjoitt näihin vlkeisiin ruutuihin. Logiikk. Esimerkiksi klssisen luselogiikn Toteutuvuusongelm (Stisfiility, SAT): Annetn klssisen luselogiikn kv. Voidnko siinä oleville muuttujille nt sopivt totuusrvot siten, että koko kvn totuusrvoksi tulee true? Tämä oli siinä mielessä ensimmäinen NP-täydellinen ongelm, että se todistettiin suorn NP-täydelliseksi lähtien polynomiikisist epädeterministisistä Turingin koneist. Pysähtymisongelm oli vstvss rooliss rtkemttomuudess. Tämä on ns. (Stephen) Cookin luse. Sen jälkeen nämä muut ongelmt voitiin todist NP-täydellisiksi helpommin sopivill plutuksill siitä j toisistn. Huom: Muillkin logiikoill on om toteutuvuusongelmns, j sen vtivuus vihtelee logiikst riippuen. Automtit j formlikielet. Monet tämän kurssin sioist johtvt vähintään NPkoviin ongelmiin, esimerkiksi Pienin esimerkeistä päätelty utomtti (Minimum Inferred Finite Stte Automton): Annetn kksi äärellistä merkkijonojoukko S, K Σ eli sllitut j kielletyt snt sekä kokorj m N. Onko olemss sellist m-tilist determinististä utomtti, jok hyväksyy kikki sllitut snt mutt ei yhtään kielletyistä snoist? Eli kuink vike tietokoneen on keksiä itse nnettuihin positiivisiin j negtiivisiin esimerkkeihin sopiv äärellinen utomtti? 161
164 Ohjelmien optimointi. Monet kääntäjän loppuviheen eli koodin generoinnin ongelmt kuten esimerkiksi Rekistereiden riittävyys (Register Sufficiency): Voidnko nnettu ohjelmkoodi kääntää selliseksi konekoodiksi, joss trvitn kerrlln vin korkeintn r eri rekisteriä? Jos voidn, niin hyvä; jos ei, niin sitten täytyy käyttää rekistereiden lisäksi keskusmuisti, j se on hitmp. Onneksi on sittemmin ilmennyt, että jos ohjelm onkin kirjoitettu rkenteisesti eli siinä ei hypitäkään goto-käskyillä mielivltisesti sinne tänne, niin myös sen rekisterien käyttö pysyy kuriss. Tässä on esimerkki tilnteest, joss yleinen ongelm on vike, mutt sen käytännössä esiintyvät tpukset helppoj. Huom: Nämä ovt päätösongelmi, eli kyllä/ei-kysymyksiä ( kuuluuko kieleen? ). Trkkn otten, inostn päätösongelmversiot s sno NP-täydelliseksi. Usein olln kuitenkin kiinnostuneit etsintä- ti optimointi ongelmist, tyyliin Mikä on pienin määrä r rekistereitä, jonk tämä nnettu ohjelmkoodi trvitsee? Mikä on nnetun suuntmttomn pinotetun verkon lyhyin Hmiltonin kehä / kuppmtkustjn reitti? Tvllisesti (mutt ei välttämättä!) NP-täydellisen päätösongelmn j sitä vstvn optimointiongelmn vtivuus on oleellisesti sm, eli ne erovt vin jonkin polynomin verrn. Siksi usein puhutnkin myös optimointiongelmn NP-täydellisyydestä. 7 Summ summrum Kurssin sisältöä voidn trkstell (inkin) khdest näkökulmst: Perustiedot formleist kielistä j niiden tunnistmisest; esim. kielen määritteleminen äärellisenä utomtin, säännöllisen lusekkeen ti kontekstittomn kieliopin vull, näiden formlismien väliset yhteydet, (Turingin kone yleisenä lgoritmin mllin j) (rtkemttomuuden lkeet, kuten pysähtymisongelm). Johdtus tietojenkäsittelyteorin j sen metodiikkn; erityisesti Säännölliset kielet mtemtiikn soveltminen lskennn mllintmiseen j miten väitteet perustelln täsmällisesti. Käytännössä tärkeä tietää: tilsiirtymäkone lskennn mllin säännölliset lusekkeet j äärelliset utomtit Teoreettisi jtusmllej: epädeterministinen lskent (joitin käytännön sovelluksikin on) 162
165 mllien väliset konversiot (NFA DFA) lskulitteen j kuvusformlismin ekvivlenssi (DFA vs. säännöllinen luseke) luokn sulkeumominisuudet mhdottomuustodistukset (pumppuslemm) Kontekstittomt kielet Käytännössä tärkeä tietää: kielen kuvminen kieliopill jäsentämisen peruskäsitteet, erityisesti jäsennyspuu Teoreettisi jtusmllej: smt kuviot kuin säännöllisillä kielillä, teknisesti hstvmmss tilnteess Algoritmisi tekniikoit: itertiiviset lgoritmit (nollutuvt muuttujt jne.) CYK-lgoritmi j tulukointi (dynminen ohjelmointi) rekursion käyttö yksinkertisen kieliopin jäsentämiseksi Jtkoiheit: sovellukset ohjelmointikielissä j luonnollisess kielessä Turingin koneet j lskettvuus Käytännössä tärkeä tietää: Churchin-Turingin teesi rtkemttomuuden käsite Teoreettisi jtusmllej: vikk mitä (intross minittu inkin: numeroituvuus vs. ylinumeroituvuus; digonlisointi) Jtkoiheit: lskennn teori, lskennn vtivuus; (mtemttinen) logiikk (ei se kurssi... ) Teori j käytäntö Kurssi oli teoreettinen, mutt sit pitää ymmärtää syvällisesti, jott opittu voi tehokksti sovelt. THE BEST THEORY IS INSPIRED BY PRACTICE nd THE BEST PRACTICE IS INSPIRED BY THEORY. Donld Knuth. In theory prctice nd theory re the sme. In prctice they re not. Anonyymi (?) 163
166 Tentti Jotin tämän tpist: 1. Vst / selitä lyhyesti mitä trkoitt Determinisoi j minimoi oheiset utomtit: Muodost () oheist säännöllistä lusekett vstv epädeterministinen äärellinen utomtti () oheisest utomtist vstv säännöllinen luseke luennoll esitetyllä menetelmällä. 4. Olkoon nnettu kontekstiton kielioppi G. () Ldi kieliopin kuvmn kielen tunnistv äärellinen utomtti (jos kielioppi on oikelle linerinen) ti pinoutomtti (jos ei). () Onko kielioppi Chomskyn normlimuodoss? Jos ei, niin muut se selliseksi. (c) Selvitä CYK-lgoritmill, kuuluuko merkkijono w =... kieliopin kuvmn kieleen. Yleisesti: kuten hrjoitustehtävät, luentojen esimerkit j tehtävät. Siis kysymyksiä seurvien kertustehtävien tyyliin: Tehtävä 48. Esitä kullekin seurvist kkoston Σ = {,, c} kielistä kielen tunnistv deterministinen utomtti j vstv säännöllinen luseke: 1. merkkijonot, joiss -merkkien lukumäärä on korkeintn kolme 2. merkkijonot, jotk loppuvt c 3. merkkijonot, jotk eivät sisällä osmerkkijono c 4. merkkijonot, joiss ei ole kht sm merkkiä peräkkäin. 5. merkkijonot, jotk sisältävät kolmell jollisen lukumäärän merkkiä c. Tehtävä 49. Muodost epädeterministinen äärellinen utomtti kielelle (0 11). Muodost tästä edelleen deterministinen (minimoitu) äärellinen utomtti. Käytä luentomteriliss esitettyä täsmällistä menetelmää, j esitä myös väliviheet. Tehtävä 50. Minimoi ll olev deterministinen äärellinen utomtti kurssill opeteltu minimointimenetelmää käyttäen. 164
167 Tehtävä 51. Trkstelln oheist äärellistä utomtti: 1 2 0, Determinisioi utomtti kurssill opeteltu menetelmää käyttäen. 2. Minimoi deterministinen utomtti kurssill opeteltu minimointimenetelmää käyttäen. 3. Millisen kielen utomtti tunnist? Muodost (minimoidust) utomtist vstv säännöllinen luseke. Tehtävä 52. Trkstelln oheist äärellistä utomtti: Minimoi deterministinen utomtti kurssill opeteltu minimointimenetelmää käyttäen. 165
168 2. Millisen kielen utomtti tunnist? Muodost (minimoidust) utomtist vstv säännöllinen luseke. Tehtävä 53. Trkstelln oheist äärellistä utomtti: 1 1. Determinisoi utomtti kurssill opeteltu menetelmää käyttäen Minimoi deterministinen utomtti kurssill opeteltu minimointimenetelmää käyttäen. 3. Millisen kielen utomtti tunnist? Muodost (minimoidust) utomtist vstv säännöllinen luseke. Tehtävä 54. Erään ohjelmointikielen funktiomäärittelyt ovt seurvnlisi: ensin nnetn pluurvo, jok voi oll int, flot ti void. Sitä seur funktion nimi. Suluiss ennetn prmetrit, ensin tyyppi (joko int ti flot) j sitten prmetrin nimi. Prmetrit erotetn pilkull. Prmetrien puuttuminen ilmistn vrtull snll void. Funktioiden j muuttujien nimet koostuvt kirjimist,,c,...,z sekä numeromerkeistä 0,1,2,...,9, j lkvt in kirjimell. Lillisi määrittelyjä ovt esimerkiksi: int clc2(int x, int y), void print(flot menvlue), flot generte(void). 1. Ann kielen kuvv säännöllinen luseke. 2. Muodost kielen tunnistv deterministinen äärellinen utomtti lusekkeest. 3. Ann kielen kuvv kontekstiton kielioppi. Tehtävä 55. Olkoon kkosto Σ = {, }. Trkstelln kieltä L = {x x ei sisällä merkkijono }. 1. Ldi äärellinen utomtti, jok tunnist kyseisen kielen. (Vihje: Ldi ensin utomtti sen komplementille.) 2. Lue utomtist vstv säännöllinen luseke. Ann kikki väliviheet! 3. Ann kontekstiton kielioppi, jok tuott kyseisen kielen. Tehtävä 56. Mitä trkoitt Äärellisen utomtin determinisointi? 2. Äärellisen utomtin minimointi?
169 3. Äärellisen utomtin muodostus säännöllisestä lusekkeest? 4. Todistus Pumppuslemmll? Tehtävä 57. Ovtko seurvt väittämät oikein vi väärin? Perustele lyhyesti. 1. Jos kieli ei ole säännöllinen, on se kontekstiton. 2. Jos kieli on kontekstiton, on se myös säännöllinen. 3. Jos kieli on säännöllinen, on se myös kontekstiton. 4. On olemss kieliä jotk ovt säännöllisiä mutt eivät kontekstittomi. 5. On olemss kieliä jotk voidn tunnist epädeterministisellä äärellisellä utomtill mutt joit ei void kuvt säännöllisellä lusekkeell. 6. Jos nnettun kielioppi G j merkkijono w {, }, niin w L(G) on lgoritmisesti rtkev ongelm. Tehtävä 58. Trkstelln seurv kielioppi G: S A B ε A B B A Ovtko seurvt väitteet tosi vi epätosi? 1. Merkkijonot j kuuluvt kieliopin kuvmn kieleen L(G). 2. G on Chomskyn normlimuodoss. 3. G kuv smn kielen kuin säännöllinen luseke () () () (). 4. G kuv smn kielen kuin säännöllinen luseke () (). 5. G on vsemmlle linerinen. 6. G kuv smn kielen kuin kielioppi G : S A B ε A A A B ε B B B A ε Tehtävä 59. Trkstelln seurvi formlej kieliä. Ovtko ne säännöllisiä? Jos joku niistä ei ole säännöllinen, osoit että se on kontekstiton. 1. { i j : i = , j = } 2. {w : w on :st j :stä koostuv merkkijono, jonk pituus on 3:ll jollinen} 3. {ww : w {, } } 4. { n n : n 0} 167
170 5. {w {, } : w sisältää prillisen määrän :t sekä vähintään yhden :n}. 6. { i j : j i 0} 7. {w {, } : w sisältää prillisen määrän :tä} 8. {w {, } : w sisältää prillisen määrän :tä} {w {, } : w sisältää kolmell jollisen määrän :t}. 9. {w {, } : w sisältää prillisen määrän :tä sekä vähintään yhden :n}. 10. { i j {, } : 2 i = j 4} 11. { i j : i = 2j} 12. { i j : i on prillinen j j on priton} 13. {w w : w {, } } 14. {w {, } : w sisältää merkkijonon sekä prittomn määrän :t}. 15. { m n : 0 m n 2m} Tehtävä 60. Olkoon nnettu säännölliset kielet L, L 1 j L 2. Osoit että myös seurvt kielet ovt säännöllisiä: 1. L 1 L 2 (kielten ktentio) 2. L 1 L 2 3. L 1 L 2 4. L Tehtävä 61. Mihin Chomskyn normlimuoto trvitn? Mitkä kielet voidn esittää Chomskyn normlimuodoss? Tehtävä 62. Olkoon nnettu kielioppi S A B A S A B B ε 1. Ldi kieliopin kuvmn kielen tunnistv äärellinen utomtti. 2. Ann vstv säännöllinen luseke. 3. Onko kielioppi Chomskyn normlimuodoss? 4. Jos ei, niin muut se selliseksi. 5. Kuuluuko merkkijono kieleen? Jos kuuluu, niin nn merkkijonon jäsennyspuu. 168
171 Tehtävä 63. Simuloi Cocke Younger Ksmi (CYK) -lgoritmi sen rtkistess kuuluvtko merkkijonot, j kieliopin S AS A SA muodostmn kieleen. ( Simuloi = täytä lgoritmin ylläpitämä dynmisen ohjelmoinnin tulukko.) Jos kuuluu, niin nn vstvt jäsennyspuut. Tehtävä 64. Mitkä seurvt kkoston Σ = {, } kielistä ovt säännöllisiä, mitkä eivät: 1. L = { n n : n N} 2. L = { n n : n N} 3. L = {wuw R : w, u Σ + } Perustele vstuksesi. Tehtävä 65. Trkstelln kkoston {, } prillisen mittisten plindromien muodostm kieltä PAL = {ww R : w {, } }. 1. Ldi kielen tuottv kontekstiton kielioppi. 2. Muodost kielen tunnistv pinoutomtti. Tehtävä 66. Miten voit rtkist seurvt ongelmt? 1. Annettun säännölliset lusekkeet r 1 j r 2, onko L(r 1 ) = L(r 2 )? 2. Annettun säännöllinen luseke r j oikelle linerinen kielioppi G, onko L(r) = L(G)? 3. Annettun kontekstittomt kieliopit G 1 j G 2, onko L(G 1 ) = L(G 2 )? Tehtävä 67. Trkstelln ritmeettisi lusekkeit tuottv kontekstitont kielioppi G: E E + E E E (E). 1. Muodost luseelle ( + ) vsen johto. 2. Osoit että kielioppi on moniselitteinen (Vihje: + ). 3. Muunn kielioppi G Chomskyn normlimuotoon. 4. Tutki CYK-goritmill, kuuluvtko merkkijonot ( + ) j () + kieleen L(G). Tehtävä 68. Selitä lyhyesti seurvien käsitteiden merkitys. 1. Oikelle ti vsemmlle linerinen kielioppi. 2. Jäsennyspuu (prse tree). 3. Säännöllinen luseke (regulr expression). 4. Moniselitteinen kielioppi. 5. ε-utomtti. 6. Chomskyn normlimuoto. 7. Churchin-Turingin teesi. Loppu Muist kurssiplute! 169
LAP: Laskennan perusmallit
LAP: Lskennn perusmllit Mtti Nykänen Tietojenkäsittelytieteen litos, Itä-Suomen yliopisto sähköposti: [email protected] Lukuvuoden 2011-12 III periodi Sisältö 1 Kurssin sem opetuksess 1 2 Kurssin sem
Laskennan perusmallit (LAP)
Lskennn perusmllit (LAP) Kimmo Fredrikssonin j Mtti Nykäsen luentomonisteest krsien muoknnut Pekk Kilpeläinen Tietojenkäsittelytieteen litos, Itä-Suomen yliopisto sähköposti: [email protected] Lukuvuoden
ICS-C2000 Tietojenkäsittelyteoria Kevät 2016
ICS-C2 Tietojenkäsittelyteori Kevät 2 Kierros,. 5. helmikuut Demonstrtiotehtävien rtkisut D: Sievennä seurvi säännöllisiä lusekkeit (so. konstruoi yksinkertisemmt lusekkeet smojen kielten kuvmiseen): ()
T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 5 Demonstraatiotehtävien ratkaisut. ja kaikki a Σ ovat säännöllisiä lausekkeita.
T-79.8 Syksy 22 Tietojenkäsittelyteorin perusteet Hrjoitus 5 Demonstrtiotehtävien rtkisut Säännölliset lusekkeet määritellään induktiivisesti: j kikki Σ ovt säännöllisiä lusekkeit. Mikäli α j β ovt säännöllisiä
2.6 SÄÄNNÖLLISET LAUSEKKEET Automaattimalleista poikkeava tapa kuvata yksinkertaisia kieliä. Olkoot A ja B aakkoston Σ kieliä. Perusoperaatioita:
2.6 SÄÄNNÖLLISET LAUSEKKEET Automttimlleist poikkev tp kuvt yksinkertisi kieliä. Olkoot A j B kkoston Σ kieliä. Perusopertioit: Yhdiste: A B = {x Σ x A ti x B}; Ktentio: AB = {xy Σ x A, y B}; Potenssit:
Laskennan mallit (syksy 2010) 1. kurssikoe, ratkaisuja
582206 Lskennn mllit (syksy 2010) 1. kurssikoe, rtkisuj 1. [2+2+2 pistettä] Säännöllisissä lusekkeiss on käytetty tuttu lyhennysmerkintää Σ = ( ). () merkkijonot, joiden kksi ensimmäistä merkkiä ovt joko
Olkoon. M = (Q, Σ, δ, q 0, F)
T 79.148 Tietojenkäsittelyteorin perusteet 2.4 Äärellisten utomttien minimointi Voidn osoitt, että jokisell äärellisellä utomtill on yksikäsitteinen ekvivlentti (so. smn kielen tunnistv) tilmäärältään
ICS-C2000 Tietojenkäsittelyteoria Kevät 2015
ICS-C2 Tietojenkäsittelyteori Kevät 25 Kierros 3, 26. 3. tmmikuut Demonstrtiotehtävien rtkisut D: Ldi epädeterministinen äärellinen utomtti, jok test onko nnetun inäärijonon kolmnneksi viimeinen merkki,
Automaattimalleista poikkeava tapa kuvata yksinkertaisia kieliä. Olkoot A ja B aakkoston Σ kieliä. Perusoperaatioita:
2.6 SÄÄNNÖLLISET LAUSEKKEET Automttimlleist poikkev tp kuvt yksinkertisi kieliä. Olkoot A j B kkoston Σ kieliä. Perusopertioit: Yhdiste: A B = {x Σ x A ti x B}; Ktentio: AB = {xy Σ x A, y B}; Potenssit:
Automaatin tunnistama kieli on sen hyväksymien merkkijonojen joukko. Täsmällinen muotoilu: δ,q 0,{q 2,q 3,q 6 }), missä
T 79.1001/1002 Tietojenkäsittelyteorin perusteet 2.3 Äärellisen utomtin käsitteen formlisointi eknistinen mlli: syötenuh: nuhpää: ohjusyksikkö: i n p δ u q 1 q 2 Äärellinen utomtti koostuu äärellistilisest
Säännöllisten operaattoreiden täydentäviä muistiinpanoja
Säännöllisten operttoreiden täydentäviä muistiinpnoj Antti-Juhni Kijnho 1. huhtikuut 2011 Vnht määritelmät Määritelmä 1. Äärellinen epätyhjä joukko on merkistö, j sen lkioit kutsutn merkeiksi. Määritelmä
Laskennan perusmallit (LAP)
Lskennn perusmllit (LAP) Kimmo Fredrikssonin j Mtti Nykäsen mterileist muoknnut Pekk Kilpeläinen Tietojenkäsittelytieteen litos, Itä-Suomen yliopisto sähköposti: [email protected] Lukuvuoden 2014
Laskennan mallit Erilliskoe , ratkaisuja (Jyrki Kivinen)
58226 Lskennn mllit Erilliskoe 4.2.2, rtkisuj (Jyrki Kivinen). [6+6+3+3 pistettä] () Kieli A koostuu niistä kkoston {, } merkkijonoist, joiss esiintyy osjono. Esitä kielelle A sekä deterministinen äärellinen
TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2016
lusekkeet, lusekkeet, TIEA241 Automtit j kieliopit, syksy 2016 Antti-Juhni Kijnho lusekkeet j smuus TIETOTEKNIIKAN LAITOS 22. syyskuut 2016 Sisällys lusekkeet, lusekkeet lusekkeet j smuus j smuus lusekkeet
Q on automaatin tilojen äärellinen joukko; Σ on automaatin syöteaakkosto; δ : Q Σ Q on automaatin siirtymäfunktio; q 0 Q on automaatin alkutila;
Q on utomtin tilojen äärellinen joukko; Σ on utomtin syötekkosto; δ : Q Σ Q on utomtin siirtymäfunktio; q Q on utomtin lkutil; F Q on utomtin hyväksyvien tilojen joukko. Siirtymäfunktio δ on määritelmän
Q = {q 1, q 2, q 3, q 4 } Σ = {a, b} F = {q 4 },
T-79.48 Syksy 22 Tietojenkäsittelyteorin perusteet Hrjoitus 4 Demonstrtiotehtävien rtkisut 4. Tehtävä: Ldi epädeterministinen äärellinen utomtti, jok test onko nnetun inäärijonon kolmnneksi viimeinen merkki,
3.3 KIELIOPPIEN JÄSENNYSONGELMA Ratkaistava tehtävä: Annettu yhteydetön kielioppi G ja merkkijono x. Onko
3.3 KILIOPPIN JÄSNNYSONGLMA Rtkistv tehtävä: Annettu yhteydetön kielioppi G j merkkijono x. Onko x L(G)? Rtkisumenetelmä = jäsennyslgoritmi. Useit vihtoehtoisi menetelmiä, erityisesti kun G on jotin rjoitettu
Laskennan mallit (syksy 2007) Harjoitus 5, ratkaisuja
58226 Lskennn mllit (syksy 27) Hrjoitus 5, rtkisuj. Muodostetn NF kielelle : ε ε Muunnetn DF:ksi: {,,} {,} {,} {,} Luennoll (s. 5) stiin kielelle seurv DF: Poistmll tästä svuttmttomt tilt sdn Tulos on
6.2 Algoritmin määritelmä
6.2 Algoritmin määritelmä Mitä lgoritmill yleensä trkoitetn? Peritteess: Yksiselitteisesti kuvttu jono (tietojenkäsittely)opertioit, jotk voidn toteutt meknisesti. Käytännössä: luonnollist kieltä, pseudokoodi
Riemannin integraalista
Lebesguen integrliin sl. 2007 Ari Lehtonen Riemnnin integrlist Johdnto Tämän luentomonisteen trkoituksen on tutustutt lukij Lebesgue n integrliin j sen perusominisuuksiin mhdollisimmn yksinkertisess tpuksess:
Kuvausta f sanotaan tällöin isomorfismiksi.
Määritelmä..12. Oletetn, että 1 =(V 1,E 1 ) j 2 =(V 2,E 2 ) ovt yksinkertisi verkkoj. Verkot 1 j 2 ovt isomorfiset, jos seurvt ehdot toteutuvt: (1) on olemss bijektio f : V 1 V 2 (2) kikill, b V 1 pätee,
Matematiikan tukikurssi
Mtemtiikn tukikurssi Kurssikert 4 Tilvuuden j vipn ln lskeminen Kuten iemmin käsittelimme, määrätyn integrlin vull voi lske pintloj j tilvuuksi. Tyypillisenä sovelluksen tilvuuden lskemisest on tpus, joss
Kertausta: kielet ja automaatit. ICS-C2000 Tietojenkäsittelyteoria. Alue ja aiheet. Äärelliset automaatit
Kertust: kielet j utomtit Lskennllisen ongelmn rtkisevi tietokoneohjelmi j -litteit voidn trkstell utomttein ICS-C2 Tietojenkäsittelyteori Luento 2: Äärelliset utomtit Alto-yliopisto Perustieteiden korkekoulu
M = (Q, Σ, Γ, δ, q 0, q acc, q rej )
6. LASKETTAVUUSTEORIAA Churchin Turingin teesi: Mielivaltainen (riittävän vahva) laskulaite Turingin kone. Laskettavuusteoria: Tarkastellaan mitä Turingin koneilla voi ja erityisesti mitä ei voi laskea.
TAMPEREEN YLIOPISTO Valinnaisten opintojen syventäviin opintoihin kuuluva tutkielma. Lauri Kumpulainen. Büchin automaateista
TAMPEREEN YLIOPISTO Vlinnisten opintojen syventäviin opintoihin kuuluv tutkielm Luri Kumpulinen Büchin utomteist Luonnontieteiden tiedekunt Tietojenkäsittelytieteiden tutkinto-ohjelm Huhtikuu 2017 Tmpereen
II.1. Suppeneminen., kun x > 0. Tavallinen lasku
II. EPÄOLEELLISET INTEGRAALIT nt II.. Suppeneminen Esim. Olkoon f() =, kun >. Tvllinen lsku = / =. Kuitenkn tätä integrli ei ole ikisemmss mielessä määritelty, kosk f ei ole rjoitettu välillä [, ] (eikä
Yhteydettömän kieliopin jäsennysongelma
Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: yhteydetön kielioppi G, merkkijono w Kysymys: päteekö w L(G). Ongelma voidaan periaatteessa
Kognitiivinen mallintaminen I, kevät Harjoitus 1. Joukko-oppia. MMIL, luvut 1-3 Ratkaisuehdotuksia, MP
Kognitiivinen mllintminen I, kevät 007 Hrjoitus. Joukko-oppi. MMIL, luvut -3 Rtkisuehdotuksi, MP. Määritellään joukot: A = {,,, 3, 4, 5} E = {, {}, } B = {, 4} F = C = {, } G = {{, }, {,, 4}} D = {, }
Reaalinen lukualue. Millainen on luku, jossa on päättymätön ja jaksoton desimaalikehitelmä?
Relinen lukulue POLYNOMIFUNKTIOT JA -YHTÄLÖT, MAA Millinen on luku, joss on päättymätön j jksoton desimlikehitelmä? Onko sellisi? Trkstelln Pythgorn luseest stv yksikköneliön lävistäjää, luku + = x x =.
Matematiikan tukikurssi
Mtemtiikn tukikurssi Kurssikert 5 1 Jtkuvuus Trkstelln funktiot fx) josskin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jtkuv ti epäjtkuv. Jtkuvuuden ymmärtää prhiten trkstelemll epäjtkuv
Riemannin integraali
LUKU 5 iemnnin integrli Tässä luvuss funktion f iemnnin integrli merkitään - b f = - b f() d. Vstvsti funktion f Lebesgue in integrli merkitään f = f() dm(). [,b] [,b] Luse 5.1. Olkoon f : [, b] rjoitettu
Ristitulo ja skalaarikolmitulo
Ristitulo j sklrikolmitulo Opetussuunnitelmn 00 mukinen kurssi Vektorit (MAA) sisältää vektoreiden lskutoimituksist keskeisenä ineksen yhteenlskun, vähennyslskun, vektorin kertomisen luvull j vektoreiden
Laskennan teoria
581336-0 Laskennan teoria luennot syyslukukaudella 2003 Jyrki Kivinen tietojenkäsittelytieteen laudatur-kurssi, 3 ov pakollinen tietojenkäsittelytieteen suuntautumisvaihtoehdossa esitiedot käytännössä
Pysähtymisongelman ratkeavuus [Sipser luku 4.2]
Pysähtymisongelman ratkeavuus [Sipser luku 4.2] Osoitamme nyt vihdoin, että jotkin Turing-tunnistettavat kielet ovat ratkeamattomia ja jotkin kielet eivät ole edes Turing-tunnistettavia. Lisäksi toteamme,
MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 8: Integraalifunktio ja epäoleellinen integraali
MS-A1{3,4} (ELEC*) Differentili- j integrlilskent 1 Luento 8: Integrlifunktio j epäoleellinen integrli Pekk Alestlo, Jrmo Mlinen Alto-yliopisto, Mtemtiikn j systeeminlyysin litos 5.1.216 Pekk Alestlo,
Esimerkki 8.1 Määritellään operaattori A = x + d/dx. Laske Af, kun f = asin(bx). Tässä a ja b ovat vakioita.
8. Operttorit, mtriisit j ryhmäteori Mtemttinen operttori määrittelee opertion, jonk mukn sille nnettu funktiot muoktn. Operttorit ovt erityisen tärkeitä kvnttimekniikss, kosk siinä jokist suurett vst
10. MÄÄRÄTYN INTEGRAALIN KÄYTTÖ ERÄIDEN PINTA-ALOJEN LASKEMISESSA
MAA0 0. Määrätyn integrlin käyttö eräiden pint-lojen lskemisess 0. MÄÄRÄTYN INTEGRAALIN KÄYTTÖ ERÄIDEN PINTA-ALOJEN LASKEMISESSA Edellä on todettu, että f (x)dx nt x-kselin j suorien x =, x = sekä funktion
5.3 Ratkeavia ongelmia
153 5.3 Ratkeavia ongelmia Deterministisen äärellisten automaattien (DFA) hyväksymisongelma: hyväksyykö annettu automaatti B merkkijonon w? Ongelmaa vastaava formaali kieli on A DFA = { B, w B on DFA,
OSA 1: POLYNOMILASKENNAN KERTAUSTA, BINOMIN LASKUSÄÄNTÖJÄ JA YHTÄLÖNRATKAISUA
OSA 1: POLYNOMILASKENNAN KERTAUSTA, BINOMIN LASKUSÄÄNTÖJÄ JA YHTÄLÖNRATKAISUA Tekijät: Ari Heimonen, Hellevi Kupil, Ktj Leinonen, Tuomo Tll, Hnn Tuhknen, Pekk Vrniemi Alkupl Tiedekeskus Tietomn torninvrtij
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.
Topologi I Hrjoitus 10, rtkisuj AP TEHTÄVÄ 1. Olkoon (f n ) jono jtkuvi funktioit f n : [, b] R, jok suppenee välillä [, b] tsisesti kohti funktiot f : [, b] R. Osoit, että tällöin f n (x) dx f(x) dx.
1. Universaaleja laskennan malleja
1. Universaaleja laskennan malleja Laskenta datan käsittely annettuja sääntöjä täsmällisesti seuraamalla kahden kokonaisluvun kertolasku tietokoneella, tai kynällä ja paperilla: selvästi laskentaa entä
MS-A010{2,3,4,5} (SCI, ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 8: Integraalifunktio ja epäoleellinen integraali
MS-A1{2,3,4,5} (SC, ELEC*, ENG*) Differentili- j integrlilskent 1 Luento 8: ntegrlifunktio j epäoleellinen integrli Pekk Alestlo, Jrmo Mlinen Alto-yliopisto, Mtemtiikn j systeeminlyysin litos November
Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi
TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 17. kesäkuuta 2013 Sisällys Chomskyn hierarkia (ja vähän muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton kontekstinen
Matematiikan johdantokurssi, syksy 2017 Harjoitus 6, ratkaisuista. 1. Onko jokin demojen 5 tehtävän 3 relaatioista
Mtemtiikn johntokurssi, syksy 07 Hrjoitus 6, rtkisuist. Onko jokin emojen 5 tehtävän reltioist ) R := {(, ), (, ), (, ), (, ), (, ), (, ), (, ), (, )}, ) S := {(, ), (, ), (, ), (, ), (, ), (, ), (, ),
Chomskyn hierarkia ja yhteysherkät kieliopit
Chomskyn hierarkia ja yhteysherkät kieliopit Laskennan teorian opintopiiri Tuomas Hakoniemi 21. helmikuuta 2014 Käsittelen tässä laskennan teorian opintopiirin harjoitustyössäni muodollisten kielioppien
3 Integraali ja derivaatta
3 Integrli j erivtt 3.1 Integrli ylärjns funktion Olkoon funktio f Riemnn-integroituv välin I jokisell suljetull osvälillä j välin I jokin kiinteä luku. Tällöin integrli määrittelee funktion G(): I R,
Pythagoraan lause. Pythagoras Samoslainen. Pythagoraan lause
Pythgorn luse Pythgors Smoslinen Pythgors on legendrinen kreikklinen mtemtiikko j filosofi. Tiedot hänen elämästään ovt epävrmoj j ristiriitisi. Tärkein Pythgorst j pythgorlisi koskev lähde on Lmlihosin
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti
2.1 Vaillinaiset yhtälöt
.1 Villiniset yhtälöt Yhtälö, jok sievenee muotoon x + bx + c = 0 (*) on yleistä normlimuoto olev toisen steen yhtälö. Tämän rtkiseminen ei olekn enää yhtä meknist kuin normlimuotoisen ensisteen yhtälön
SARJAT JA DIFFERENTIAALIYHTÄLÖT Funktiojonot 1
SARJAT JA DIFFERENTIAALIYHTÄLÖT 2003 JOUNI PARKKONEN Sisältö 0. Tästä tekstistä. Funktiojonot 0. Tästä tekstistä Tämä moniste on trkoitettu käytettäväksi kurssin Srjt j differentiliyhtälöt luentomterilin.
Rekursiiviset palautukset [HMU 9.3.1]
Rekursiiviset palautukset [HMU 9.3.1] Yleisesti sanomme, että ongelma P voidaan palauttaa ongelmaan Q, jos mistä tahansa ongelmalle Q annetusta ratkaisualgoritmista voidaan jotenkin muodostaa ongelmalle
Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }
135 4.3 Algoritmeista Churchin ja Turingin formuloinnit laskennalle syntyivät Hilbertin vuonna 1900 esittämän kymmenennen ongelman seurauksena Oleellisesti Hilbert pyysi algoritmia polynomin kokonaislukujuuren
Neliömatriisin A determinantti on luku, jota merkitään det(a) tai A. Se lasketaan seuraavasti: determinantti on
4. DETERINANTTI JA KÄÄNTEISATRIISI 6 4. Neliömtriisi determitti Neliömtriisi A determitti o luku, jot merkitää det(a) ti A. Se lsket seurvsti: -mtriisi A determitti o det(a) () -mtriisi A determitti void
Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.
Lause: Tyhjyysongelma ei ole osittain ratkeava; ts. kieli ei ole rekursiivisesti lueteltava. L e = { w { 0, 1 } L(M w ) = } Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia,
Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria)
1.6 Aakkostot, merkkijonot ja kielet Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria) 1011 Input Automaton Output Automaatin käsite
Numeeriset menetelmät TIEA381. Luento 9. Kirsi Valjus. Jyväskylän yliopisto. Luento 9 () Numeeriset menetelmät / 29
Numeeriset menetelmät TIEA381 Luento 9 Kirsi Vljus Jyväskylän yliopisto Luento 9 () Numeeriset menetelmät 17.4.2013 1 / 29 Luennon 9 sisältö Numeerisest integroinnist Newtonin j Cotesin kvt Luento 9 ()
3 Mallipohjainen testaus ja samoilutestaus
Tietojenkäsittelytiede 24 Joulukuu 2005 sivut 8 21 Toimittj: Jorm Trhio c kirjoittj(t) Historiljennus mllipohjisess testuksess Timo Kellomäki Tmpereen teknillinen yliopisto Ohjelmistotekniikn litos 1 Johdnto
Laskennan teoria
581336-0 Laskennan teoria luennot syyslukukaudella 2004 Jyrki Kivinen tietojenkäsittelytieteen laudatur-kurssi, 3 ov pakollinen tietojenkäsittelytieteen suuntautumisvaihtoehdossa, opettajan suuntautumisvaihtoehdossa
(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3
T-79.48 Tietojenkäsittelyteorian perusteet Tentti 25..23 mallivastaukset. Tehtävä: Kuvaa seuraavat kielet sekä säännölisten lausekkeiden että determinististen äärellisten automaattien avulla: (a) L = {w
Syksyn 2015 Pitkän matematiikan YO-kokeen TI-Nspire CAS -ratkaisut
Sksn 0 Pitkän mtemtiikn YO-kokeen TI-Nspire CAS -rtkisut Tekijät: Olli Krkkulinen Rtkisut on ldittu TI-Nspire CAS -tietokoneohjelmll kättäen Muistiinpnot -sovellust. Kvt j lskut on kirjoitettu Mth -ruutuihin.
vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS
TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 13. lokakuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 13.10.2016 klo 9:42 passed waiting redo submitters
2.4 Pienimmän neliösumman menetelmä
2.4 Pienimmän neliösummn menetelmä Optimointimenetelmiä trvitn usein kokeellisen dtn nlysoinniss. Mittuksiin liittyy virhettä, joten mittus on toistettv useit kertoj. Oletetn, että mittn suurett c j toistetn
5 Epäoleellinen integraali
5 Epäoleellinen integrli 5. Integrlin suppeneminen Olkoon f sellinen välillä [, b[ (ei siis välttämättä pisteessä b) määritelty funktio, että f on Riemnn-integroituv välillä [, ] kikill ], b[ eli on olemss
ICS-C2000 Tietojenkäsittelyteoria Kevät 2016
ICS-C2000 Tietojenkäsittelyteoria Kevät 206 Kierros 0, 2. 24. maaliskuuta Huom! Perjantaina 25. maaliskuuta ei ole laskareita (pitkäperjantai), käykää vapaasti valitsemassanne ryhmässä aiemmin viikolla.
Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä
Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,
Preliminäärikoe Pitkä Matematiikka 5.2.2013
Preliminäärikoe Pitkä Mtemtiikk 5..0 Kokeess s vstt enintään kymmeneen tehtävään. Tähdellä ( * ) merkittyjen tehtävien mksimipistemäärä on 9, muiden tehtävien mksimipistemäärä on 6.. ) Rtkise yhtälö b)
Kertymäfunktio. Kertymäfunktio. Kertymäfunktio: Mitä opimme? 2/2. Kertymäfunktio: Mitä opimme? 1/2. Kertymäfunktio: Esitiedot
TKK (c) Ilkk Mellin (24) 1 Johdtus todennäköisyyslskentn TKK (c) Ilkk Mellin (24) 2 : Mitä opimme? 1/2 Jos stunnisilmiötä hlutn mllint mtemttisesti, on ilmiön tulosvihtoehdot kuvttv numeerisess muodoss.
MS-A010{3,4} (ELEC*) Differentiaali- ja integraalilaskenta 1 Luento 7: Integraali ja analyysin peruslause
MS-A010{3,4} (ELEC*) Differentili- j integrlilskent 1 Luento 7: Integrli j nlyysin perusluse Pekk Alestlo, Jrmo Mlinen Alto-yliopisto, Mtemtiikn j systeeminlyysin litos 3.10.2016 Pekk Alestlo, Jrmo Mlinen
Rajoittamattomat kieliopit (Unrestricted Grammars)
Rajoittamattomat kieliopit (Unrestricted Grammars) Laura Pesola Laskennanteorian opintopiiri 13.2.2013 Formaalit kieliopit Sisältävät aina Säännöt (esim. A -> B C abc) Muuttujat (A, B, C, S) Aloitussymboli
Automaatit. Muodolliset kielet
Automaatit Automaatit ovat teoreettisia koneita, jotka käsittelevät muodollisia sanoja. Automaatti lukee muodollisen sanan kirjain kerrallaan, vasemmalta oikealle, ja joko hyväksyy tai hylkää sanan. Täten
sin θ θ θ r 2 sin 2 θ φ 2 = 0.
Mtemtiikn j tilstotieteen litos Osittisdifferentiliyhtälöt Kevät 21 Hrjoitus 9 Rtkisuj Jussi Mrtin 1. Osoit, että Lplce-yhtälö pllokoordinteiss on 2 u 1 r 2 2 u r r 1 r 2 sin θ u 1 2 u sin θ θ θ r 2 sin
MS-A010{2,3,4,5} (SCI,ELEC*, ENG*) Differentiaali- ja integraalilaskenta 1 Luento 7: Integraali ja analyysin peruslause
MS-A010{2,3,4,5} (SCI,ELEC*, ENG*) Differentili- j integrlilskent 1 Luento 7: Integrli j nlyysin perusluse Pekk Alestlo, Jrmo Mlinen Alto-yliopisto, Mtemtiikn j systeeminlyysin litos November 20, 2017
Output. Input Automaton
16 Aakkostot, merkkijonot ja kielet Automaattiteoria diskreetin signaalinkäsittelyn perusmallit ja -menetelmät ( diskreettien I/O-kuvausten yleinen teoria) 1011 Input Automaton Output Automaatin käsite
2. Laskettavuusteoriaa
2. Laskettavuusteoriaa Käymme läpi ratkeamattomuuteen liittyviä ja perustuloksia ja -tekniikoita [HMU luku 9]. Tämän luvun jälkeen opiskelija tuntee joukon keskeisiä ratkeamattomuustuloksia osaa esittää
2. Laadi regexp, jonka avulla egrep-ohjelma löytää tekstitiedostosta kaikki
Itseopiskelukurssin tehtävät lv. 2013 2014 TIEA241 Automtit j kieliopit Tehtävien tekeminen on suositeltv, j siihen knnustetn mm. trjomll rvosnn korotus kurssisivustoll kerrotull tvll. Kikki tehtäviä ei
x k 1 Riemannin summien käyttö integraalin approksimointiin ei ole erityisen tehokasta; jatkuvasti derivoituvalle funktiolle f virhe b
5 Integrlien lskemisest 51 Riemnnin summt [A2], [4, 61] Rjoitetun funktion f : [, b] R Riemnn-integroituvuudelle ytäpitäväksi on kurssill Anlyysi 2 osoitettu, että Riemnnin summill S P := f(ξ k ) ( ),
