Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

2. Yhteydettömät kielet

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

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

Yhteydettömät kieliopit [Sipser luku 2.1]

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

Yhteydettömän kieliopin jäsennysongelma

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

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

S BAB ABA A aas bba B bbs c

Rajoittamattomat kieliopit

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

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Chomskyn hierarkia ja yhteysherkät kieliopit

Säännöllisten kielten sulkeumaominaisuudet

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

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

11.4. Context-free kielet 1 / 17

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

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

Pinoautomaatit. Pois kontekstittomuudesta

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

ICS-C2000 Tietojenkäsittelyteoria

Rajoittamattomat kieliopit (Unrestricted Grammars)

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

Muodolliset kieliopit

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

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

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

Algoritmit 2. Demot Timo Männikkö

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

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

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

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

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

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

Täydentäviä muistiinpanoja jäsennysalgoritmeista

1 Lukujen jaollisuudesta

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

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

6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli. H = {c M w M pysähtyy syötteellä w}

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

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

Täydentäviä muistiinpanoja kontekstittomien kielioppien jäsentämisestä

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

Algoritmin määritelmä [Sipser luku 3.3]

Algebra I, harjoitus 5,

HY / Matematiikan ja tilastotieteen laitos Johdatus logiikkaan I, syksy 2018 Harjoitus 4 Ratkaisuehdotukset

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

ICS-C2000 Tietojenkäsittelyteoria

8. Kieliopit ja kielet

Matriisipotenssi. Koska matriisikertolasku on liitännäinen (sulkuja ei tarvita; ks. lause 2), voidaan asettaa seuraava määritelmä: ja A 0 = I n.

Formalisoimme nyt edellä kuvatun laskennan.

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

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

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja

JOHDATUS TEKOÄLYYN TEEMU ROOS

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

9 Matriisit. 9.1 Matriisien laskutoimituksia

8. Kieliopit ja kielet 1 / 22

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

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

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

Kontekstittomien kielten jäsentäminen Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

1. Universaaleja laskennan malleja

5.3 Ratkeavia ongelmia

Lisää pysähtymisaiheisia ongelmia

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

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

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

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

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

Esimerkki 47. Kieli {a i b j c k : i = j tai j = k} on luonnostaan moniselitteinen.

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

Laskennan mallit (syksy 2010) 2. kurssikoe, ratkaisuja

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

Vaihtoehtoinen tapa määritellä funktioita f : N R on

follow(a) first(α j ) x

Lineaarialgebra ja matriisilaskenta I

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

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

Toinen muotoilu. {A 1,A 2,...,A n,b } 0, Edellinen sääntö toisin: Lause 2.5.{A 1,A 2,...,A n } B täsmälleen silloin kun 1 / 13

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

T Kevät 2005 Logiikka tietotekniikassa: erityiskysymyksiä I Kertausta Ratkaisut

Ortogonaalinen ja ortonormaali kanta

Tehtävä 2. Osoita, että seuraavat luvut ovat algebrallisia etsimällä jokin kokonaislukukertoiminen yhtälö jonka ne toteuttavat.

Output. Input Automaton

Luonnolliset vs. muodolliset kielet

Transkriptio:

582206 Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja 1. Tarkastellaan yhteydetöntä kielioppia S SAB ε A aa a B bb ε Esitä merkkijonolle aa kaksi erilaista jäsennyspuuta ja kummallekin siitä vastaava vasen johto. Ratkaisu: S S A B ε a A ε S S A B S A B a ε a ε a ε 2. Muunna kielioppi S SAB AB aab aab aa S SAB SABAB ABAB abab aab aab aa. S ASB B C cc ε A CaAC a B abc A. Chomskyn normaalimuotoon luennolla esitetyllä menetelmällä: ensimmäiset kahdet vaiheet (a) ε- sääntöjen poisto ja (b) yksikkösääntöjen poisto. Ratkaisu: (a) Selvästi C on ainoa nollautuva muuttuja eli NULL = { C }. Erityisesti S ε. Poistamalla ε-säännöt saamme kieliopin S 0 S S ASB B C cc c A CaAC CaA aac aa a B abc A. (b) Yksikkösääntöjen poistamiseksi todetaan UNIT(S 0 ) = { S 0, S, B, A } UNIT(S) = { S, B, A } UNIT(A) = { A } UNIT(B) = { B, A } UNIT(C) = { C }.

Siis yksikkösääntöjen poistaminen antaa S 0 ASB abc CaAC CaA aac aa a S ASB abc CaAC CaA aac aa a C cc c A CaAC CaA aac aa a B abc CaAC CaA aac aa a. Annettu tehtävä loppui tähän. Jos kuitenkin jatketaan muuntamista Chomskyn normaalimuotoon vielä pilkkomalla liian pitkät säännöt saadaan S 0 AV 1 X a V 2 CV 3 CV 5 X a V 6 X a A a V 1 SB V 2 X b X c V 3 X a V 4 V 4 AC V 5 X a A V 6 AC S AW 1 X a W 2 CW 3 CW 5 X a W 6 X a A a W 1 SB W 2 X b X c W 3 X a W 4 W 4 AC W 5 X a A W 6 AC C X c C c A CU 1 CU 3 X a U 4 X a A a U 1 X a U 2 U 2 AC U 3 X a A U 4 AC B X a U 9 CU 5 CU 7 X a U 8 X a A a U 5 X a U 6 U 6 AC U 7 X a A U 8 AC U 9 X b X c X a a X b b X c c 2

3. [Sipser Exercise 2.9] Anna yhteydetön kielioppi kielelle { a i b j c k i = j tai j = k }. Onko kielioppisi yksiselitteinen? Perustele. Ratkaisu: S XC AY A aa ε C cc ε X axb ε Y by c ε. Kielioppi on moniselitteinen, sillä esim. merkkijonolla abc on kaksi vasenta johtoa 4. Osoita seuraava kielioppi moniselitteiseksi: S XC axbc abc abcc abc S AY aay ay aby c abc. lause if-then-else if-then p if-then-else if b then lause else lause Laadi yksiselitteinen kielioppi samalle kielelle. if-then if b then lause. Ratkaisu: Kielioppi on moniselitteinen, sillä merkkijono if b then if b then p else p voidaan tuottaa vasemmalla johdolla niin, että else liittyy joko ensimmäiseen tai toiseen päätesymboliin if. lause if-then if b then lause if b then if-then-else if b then if b then lause else lause if b then if b then p else lause if b then if b then p else p lause if-then-else if b then lause else lause if b then if-then else lause if b then if b then lause else lause if b then if b then p else lause if b then if b then p else p 3

Yksiselitteinen kieliopista saadaan muuttamalla sitä niin, että kukin else yhdistetään sisimpään vapaaseen symboliin if: <lause> <tasapainoton> <tasapainoinen> <tasapainoton> if b then <lause> if b then <tasapainoinen> else <tasapainoton> <tasapainoinen> if b then <tasapainoinen> else <tasapainoinen> p 5. Sanotaan, että yhteydettömän kieliopin muuttuja A on saavuttamaton, jos kieliopissa ei lähtösymbolista voi johtaa mitään muuttujan A sisältävää merkkijonoa ja tuottamaton, jos kieliopissa ei muuttujasta A voi johtaa yhtään päätemerkkijonoa. (a) algoritmi, joka etsii yhteydettömästä kieliopista kaikki saavuttamattomat muuttujat: SAAVUTTAMATTOMAT(V, Σ, R, S) VanhatSaavutetut Saavutetut { S } while VanhatSaavutetut Saavutetut do VanhatSaavutetut Saavutetut for kaikilla säännöillä A w do if A Saavutetut then lisää joukkoon Saavutetut kaikki muuttujat merkkijonosta w return V Saavutetut (b) algoritmi, joka etsii yhteydettömästä kieliopista kaikki tuottamattomat muuttujat: TUOTTAMATTOMAT(V, Σ, R, S) VanhatTuottavat Tuottavat for kaikilla säännöillä A w do if w on päätemerkkijono then lisää A joukkoon Tuottavat while VanhatTuottavat Tuottavat do VanhatTuottavat Tuottavat for kaikilla säännöillä A w do if kaikki merkkijonon w muuttujat ovat joukossa Tuottavat then lisää A joukkoon Tuottavat return V Tuottavat (c) Yritetään poistaa kieliopista kaikki turhat muuttujat siten, että ensin poistetaan kaikki tuottamattomat muuttujat ja niihin liittyvät säännöt, ja sitten saadusta kieliopista poistetaan kaikki saavuttamattomat muuttujat ja niihin liittyvät säännöt. Johtaako tämä haluttuun lopputulokseen? Entä jos poistetaan ensin saavuttamattomat ja sitten tuottamattomat? Perustele. Perustele. Ratkaisu: Aloitetaan toisesta tapauksesta: ensin poistetaan saavuttamattomat ja sitten tuottamattomat. Sovelletaan menettelyä tehtävänannossa olleeseen esimerkkiin. Ensimmäisessä vaiheessa havaitaan saavuttamattomiksi muuttujat D ja E. Poistamalla ne sääntöineen saadaan kielioppi S A BC A aa ε B bb ε. 4

Toisessa vaiheessa havaitaan tuottamattomaksi C. Poistamalla muuttujaan C liittyvät säännöt saadaan lopputulokseksi S A A aa ε B bb ε. Tässä kuitenkin on jäljellä turha muuttuja B. Esitetty menettely siis ei sellaisenaan toimi. Sen sijaan jos ensin poistetaan tuottamattomat muuttujat ja sitten saavuttamattomat, jäljelle ei jää mitään turhaa. Tarkastellaan nimittäin jotain kieliopin muuttujaa X. Jos X on mukana vielä tuottamattomien poiston jälkeen, niin X w jollain päätemerkkijonolla w. Jos X on mukana vielä saavuttamattomien poiston jälkeen, niin S uxv, missä u ja v voivat sisältää päätemerkkejä ja tuottavia muuttujia. Siis u w ja v w joillain päätemerkkijonoilla w ja w, joten S uxv w ww. Koska nyt X on osana johtoa lähtösymbolista päätemerkkijonoksi, se ei ole (ainakaan tässä tehtävässä tarkastellussa mielessä) turha. 6. [Sipser Problem 2.25] Määritellään aakkoston Σ kieleen A kuuluvien merkkijonojen loppuosien joukko SUFFIX(A) = { v Σ uv A jollakin u Σ }. Lause: Jos A on yhteydetön, niin myös SUFFIX(A) on. Todistus: Olkoon W yhteydetön kieli. Valitaan jokin sen tuottava yhteydetön kielioppi, muunnetaan Chomskyn normaalimuotoon ja poistetaan turhat muuttujat (ks. tehtävä 5); tämä yksinkertaistaa merkintöjä jatkossa. Olkoon saatu kielioppi G = (V, Σ, R, S). Määritellään kielioppi G = (V, Σ, R, S ), jolle L(G ) = SUFFIX(W ). Määritellään jokaista alkuperäistä muuttujaa A V kohti kaksi uutta muuttujaa A ja A. Uudeksi muuttujien joukoksi tulee V = V { A A V } { A A V }. Ideana on määritellä säännöt siten, että jos jollekin päätemerkkijonolle w pätee alkuperäisessä kieliopissa A w, niin uudessa kieliopissa pätee A w kaikille merkkijonon w loppuosille w. Muuttujat A ovat apumuuttujia, jotka eivät tuota muuta kuin tyhjän merkkijonon. Tätä varten jos alkuperäisessä kieliopissa on sääntö A a, niin uuteen tulee säännöt A a, A ε ja A ε. Jos alkuperäisessä kieliopissa on sääntö A BC, niin uuteen tulee säännöt A B C ja A B C sekä A B C. Lisäksi uuteen kielioppiin tulee sellaisenaan kaikki alkuperäisen kieliopin säännöt. Perustellaan vielä, miksi konstruktio toimii oikein. Käytetään jatkossa uuden kieliopin muuttujille merkintää à korostamaan, että se voi olla jotain tyypeistä A, A tai A, missä A on alkuperäisen kieliopin muuttuja. Tarkastellaan nyt jotain merkkijonoa w = w 1... w n W. Koska alkuperäinen kielioppi on Chomskyn normaalimuodossa, w voidaan johtaa 2n 1 askelella erityisesti siten, että ensimmäisissä n 1 askelessa tuotetaan n muuttujan jono A 1... A n ja viimeisissä n askelessa muuttujat A i korvataan yksi kerrallaan päätemerkeillä w i. Uudessa kieliopissa voidaan vastaavasti n 1 askelessa uudesta lähtösymbolista S johtaa erilaisia muuttujajonoja Ã1... Ãn, missä Ãi on joko A, A tai A. Tarkastelemalla uuden kieliopin sääntöjä nähdään, että johdetuissa muuttujajonoissa on aina tasan yksi tyyppiä A oleva muuttuja. Kaikki sen vasemmalla puolella olevat muuttujat ovat tyyppiä A ja oikealla puolella olevat tyyppiä A. Pilkullisen muuttujan A sijainti voidaan valita vapaasti. (Siis jos alkuperäinen muuttujajono oli ABC, uudessa kieliopissa saadaan jonot A BC, A B C ja A B C.) Näistä uuden kieliopin muuttujajonoista saadaan puolestaan n askelella johdetuksi kaikki merkkijonon w loppuosat tuottamalla sopivasti alkupään muuttujista tyhjää. Siis uusi kielioppi tuottaa kaikki alkuperäisen kielen loppuosat. Oletetaan toisaalta, että w kuuluu uuden kieliopin tuottamaan kieleen. Muodostetaan merkkijonolle w uuden kieliopin mukainen johto, jossa tehdään ensin kaikkien muotoa à B C olevien sääntöjen soveltamiset ja vasta sitten aletaan soveltaa muotoa à a ja à ε olevia sääntöjä. Ensimmäisen vaiheen 5

lopuksi saadaan jokin muuttujajono Ã1... Ãn, jossa taas on tasan yksi muuttuja tyyppiä A, sen vasemmalla puolella vain tyyppiä A ja oikealla puolella vain tyyppiä A. Lisäksi alkuperäisessä kieliopissa voidaan johtaa vastaava pilkuton muuttujajono A 1... A n. Kaikki uuden kieliopin muuttujajonosta Ã1... Ãn johdettavat merkkijonot, erityisesti w, ovat vanhassa kieliopissa muuttujajonosta A 1... A n johdettavan päätemerkkijonon loppuosia. Siis uusi kielioppi ei tuota mitään muuta kuin alkuperäisen kielen loppuosia. Esimerkki: Kielioppi S AB A a B AB b tuottaa kielen L = {a i b i 1}. Selvästi SUFFIX(L) = {a i b i 0} {ε}. Yllä olevan konstruktion mukaan kieltä SUFFIX(L) tuottava kielioppi sisältää alkuperäisten sääntöjen lisäksi säännöt S A B A B A B A a ε A ε B A B A B A B b ε B ε ja S on lähtösymboli. Esimerkiksi alkuperäisen merkkijonon aab johtoa S AB ab aab aab aab vastaa loppuosan ab johto S A B εb εa B εab εab. 6