TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut Pisteytys on ilmoitettu välikoevaihtoehdon mukaan (joko tehtävät 1, 2 ja 3 välikokeen 1 uusintana tai tehtävät 4, 5 ja 6 välikokeen 2 uusintana). Kurssikoevaihtoehdossa (tehtävät 1, 3, 4 ja 6 koko kurssialueen suorituksena) pisteet kerrotaan kertoimella 1,5. Jyrki Kivinen tarkasti tehtävät 5 ja 6, Hannu Kärnä tehtävät 1 ja 3 ja Tapio Saarinen tehtävä 2 ja 4. 1. (4 + 4 pistettä) Aakkoston { a, b, c } kieli A koostuu niistä merkkijonoista, joissa ei esiinny osamerkkijonoa ab. (a) Esitä (kuvana) deterministinen äärellinen automaatti, joka tunnistaa kielen A. b, c a a, b, c c b a 4 pistettä: oikean kielen tunnistava automaatti. 3 pistettä: yksittäinen virhe, useimmiten väärä tilasiirtymä silloin, kun luetaan a:n jälkeen a. 2 pistettä: isompi virhe. 1 piste: oikean suuntaista yritystä. (b) Anna säännöllinen lauseke, joka esittää kieltä A. (b c) (a( c(b c) )) 4 pistettä: oikea säännöllinen lauseke 3 pistettä: pienehkö virhe, kuten merkkijono ei voinut loppua a:han, mutta muuten kaikki oikeat merkkijonot oli mahdollista muodostaa, eikä lauseke missään tilanteessa hyväksynyt merkkijonoa, joka sisältää osamerkkijonon ab 2 pistettä: runsaasti oikean suuntaista yritystä. Joko osajono ab syntyi jotenkin, tai tämä oli estetty rajoittamalla oleellisesti tehtävänannon mukaista kieltä 1 piste: oikean suuntaista yritystä.
2. (8 pistettä) Muunna säännöllinen lauseke (01 0 0) epädeterministiseksi äärelliseksi automaatiksi soveltaen kurssilla esitettyä menetelmää. 0 0 1 0 8 pistettä: täysin oikein 7 pistettä: 1 virhe (puuttuva tila), muuten oikein 6 pistettä: 2 3 virhettä, oikea rakenne 4 pistettä: oikean suuntainen rakenne 2 pistettä: oikean suuntaista yritystä 2
3. (4 + 4 pistettä) Merkitään N + = { 1, 2, 3,... }. (a) Olkoon B = { 0 a 1 b 0 c 1 d a, b, c, d N +, a = c tai b = d }. Osoita, että kieli B ei ole säännöllinen. Tehdään vastaoletus, että kieli B on säännöllinen. Siis sillä on jokin pumppauspituus p N. Tarkastellaan merkkijonoa s = 0 p+1 10 p+1 11. Nyt s p ja s B. Siis pumppauspituuden perusteella s voidaan kirjoittaa muodossa s = xyz, missä i. xy i z B kaikilla i N ii. y > 0 ja iii. xy p. Ehtojen (ii) ja (iii) perusteella x = 0 a, y = 0 b ja z = 0 p+1 a b 10 p+1 11, missä a + b p ja b > 0. Siis xyyz = 0 b+p+1 10 p+1 11, joten xyyz B vastoin ehtoa (i); ristiriita. 4 pistettä: korrekti todistus 3 pistettä: pieni virhe, kuten oli valittu pumpattava merkkijono niin, että ehto a = c saatiin rikki, mutta b = d jäi voimaan, ja silti väitettiin, että tällainen merkkijono ei kuulu kieleen B 2 pistettä: isompi virhe pumppauslemman soveltamisessa 1 pistettä: oikean suuntaista yritystä. (b) Olkoon C = { 0 a 1 b 0 c 1 d a, b, c, d N +, a c ja b d }. Osoita, että kieli C ei ole säännöllinen. Olkoon D = { 0 a 1 b 0 c 1 d a, b, c, d N + }. Kieli D on säännöllinen, koska sillä on säännöllinen lauseke 0 + 1 + 0 + 1 +. Lisäksi D = B C. Koska B C =, voidaan kirjoittaa B = D C. Tehdään nyt vastaoletus, että C on säännöllinen. Koska säännöllisten kielten luokka on suljettu komplementin ja leikkauksen suhteen, myös kieli D C on säännöllinen. Mutta D C = B, ja kieli B todettiin edellä ei-säännölliseksi; ristiriita.. 4 pistettä: korrekti todistus, yleensä säännöllisten kielten sulkeumaominaisuuksien avulla (yksi opiskelija oli esittänyt oikean todistuksen käyttäen pumppauslemmaa) 3 pistettä: pieni virhe 2 pistettä: runsaasti oikean suuntaista yritystä 1 pistettä: oikean suuntaista yritystä. Useimmiten oli väitetty, että kieli C on B:n komplementti ja perusteltu asia säännöllisten kielten sulkeumaominaisuuksien avulla. Väite ei kuitenkaan pidä paikkaansa, ja oikea todistus on oleellisesti vaativampi. 3
4. (2 + 2 + 2 pistettä) Esitä yhteydetön kielioppi kullekin seuraavista aakkoston { a, b } kielistä: (a) { a i b j a k i, j, k N, j = i + k } S XY X axb Y by a (b) merkkijonot, joilla on osamerkkijonona sekä ab että ba Vaihtoehtoinen ratkaisu: S XabXbaX XbaXabX XbabX XabaX X ax bx S axbxax bxaxbx X ax bx (c) merkkijonot, joiden pituus on pariton ja joissa on tasan kaksi b-merkkiä. S XbY by Y bxby Y by bx XbXbX X aax a Y aay Vaihtoehtoinen ratkaisu: kohdissa (a) (c) kaikissa 2 pistettä: oikein 1 pistettä: oikean suuntaista yritystä. S abb BaB BBa B aab aba Baa b Tyypillinen yhden pisteen virhe oli esim. (b)-kohdassa, että aba ja bab jäivät puuttumaan, ja (c)-kohdassa, että että tuotettavissa merkkijonoissa on 2 b:tä ja pituutta on jotenkin yritetty rajoittaa. 4
5. (4 + 4 pistettä) Toteutuvuusongelma SAT on tunnettu NP-täydellinen ongelma. (a) Oletetaan, että joku löytää polynomisessa ajassa toimivan ratkaisualgoritmin toteutuvuusongelmalle. Mitä tästä seuraa P vs. NP -ongelmalle? Jos SAT-ongelmalle on olemassa polynomisessa ajassa toimiva ratkaisualgoritmi, niin P = NP. Tämän todistamiseksi oletetaan, että jokin polynomisessa ajassa toimiva algoritmi M ratkaisee ongelman SAT. Osoitetaan, että NP P. Koska selvästi P NP, väite seuraa tästä. Olkoon A NP. Koska SAT on tunnetusti NP-täydellinen, on olemassa polynominen palautus f kielestä A kieleen SAT. Siis x A, jos ja vain jos f(x) SAT, ja funktio f on laskettavissa polynomisessa ajassa. Kieli A voidaan nyt tunnistaa polynomisessa ajassa algoritmilla, joka syötteellä x toimii seuraavasti: i. Laske y = f(x). ii. Ratkaise algoritmilla M, päteekö y SAT. Jos pätee, niin hyväksy; muuten hylkää. Siis A P. (b) Entä jos joku todistaa, että toteutuvuusongelmaa ei ole mahdollista ratkaista polynomisessa ajassa? Mitä tästä seuraa P vs. NP -ongelmalle? Jos toteutuvuusongelmalla ei ole polynomisessa ajassa toimivaa ratkaisualgoritmia, niin SAT P. Toisaalta tunnetusti SAT on NP-täydellinen, mistä määritelmän mukaan seuraa SAT NP. Siis SAT NP P, mistä seuraa P NP. Kumpikin kohta pisteytetty erikseen seuraavasti: 4 pistettä: Oikea ratkaisu, jossa tehtävänannon mukaisesti on lähdetty liikkeelle perusmääritelmistä. Kohdassa (a) on vähennetty 0,5 pistettä, jos ratkaisussa on esitetty ajatus palautuksesta mutta yksityiskohdat ovat puutteelliset. 3 pistettä: Sinänsä oikea ja täsmällisesti esitetty todistus, jossa kuitenkin on tehtävänannon vastaisesti käytetty apuna kurssilla todistettuja lauseita. 2 pistettä: Järkevä ja perusajatukseltaan oikea perustelu, jossa kuitenkaan ei ole tuotu selkeästi esiin, mitä tunnettuja tuloksia tms. käytetään. 1 pistettä: Oikea vastaus esitettyyn kysymykseen ja jonkinlainen ajatus perusteluista. 5
6. (4 + 6 pistettä) (a) Mitä tarkoitetaan Churchin-Turingin teesillä? Mitä perusteluja sen puolesta voidaan esittää? Churchin-Turingin teesi on väittämä, että ongelmalla on ratkaisualgoritmi, jos ja vain jos jokin Turingin kone ratkaisee sen. Toisin sanoen Turingin kone on oikea matemaattinen malli sille, mitä tarkoitamme algoritmilla. Turingin koneessa yhden laskenta-askelen aikana voi käsitellä vain äärellisen määrän informaatiota. Toisaalta laskennan välitulosten ym. tallentamiseen on rajoittamattomasti muistitilaa. Tämä vastaa sitä, millainen intuitio meillä on algoritmin toiminnasta. Ehdotetut vaihtoehtoiset tavat formuloida algoritmin käsite täsmällisesti, kuten λ-kalkyyli ja rekursiiviset funktiot, tuottavat matemaattisesti yhtäpitävän tuloksen. Myös kaikissa tarkastelluissa esimerkkitapauksissa teesi näyttää pätevän: kaikki millekään ongelmalle esitetyt ratkaisualgoritmit on ainakin periaatteessa mahdollista esittää Turingin koneella. Pelkästä Churchin-Turingin teesin esittämisestä ilman perusteluja on saanut 2 pistettä, jos se sinänsä on esitetty oikein ja täsmällisesti. Perusteluksi ei ole laskettu selityksiä pysähtymisongelman ratkeamattomuudesta tms. seikoista, jotka ovat vain Turingin koneeseen liittyviä matemaattisia tuloksia. Yksi piste on vähennetty, jos teesin muodostavasta jos ja vain jos -väitteestä on esitetty vain toinen suunta. Yksi piste on vähennetty, jos on vain todettu Turingin koneen vastaavan nykyaikaista tietokonetta; teesissä puhutaan yleisemmin esim. sellaisistakin laskentalaitteista, joita ei vielä ole keksitty. 6
(b) Tehtävänä on ratkaista, tulostaako annettu Java-ohjelma annetulla syötteellä näytölle mitään. Jos ohjelmasta ja sen syötteestä ei tehdä mitään lisäoletuksia, niin mitä voidaan sanoa ratkaisualgoritmeista tähän ongelmaan? Perustele täsmällisesti käyttäen kurssilla esitettyjä tuloksia. Tällaista algoritmia ei ole mahdollista laatia. Tämän näkemiseksi tehdään vastaoletus, että jokin algoritmi A ratkaisee ongelman. Nyt Java-ohjelmien pysähtymisongelma voitaisiin ratkaista seuraavalla algoritmilla: i. Lue syötteenä Java-ohjelma P ja sille tarkoitettu syöte x. ii. Poista ohjelmasta kaikki näytölle tapahtuva tulostaminen. Käytetään näin saadusta ohjelmasta merkintää P. (Jos tulostuslauseissa on esim. sivuvaikutuksellisia funktiokutsuja, ne voidaan korvata tulostuksella johonkin ylimääräiseen tiedostoon.) iii. Lisää ohjelmaan P jokin näytölle kohdistuva tulostuslause juuri ennen jokaista kohtaa, joissa ohjelman P suoritus päättyisi. Käytetään muunnetusta ohjelmasta merkintää P. iv. Tarkista algoritmilla A, tulostaako ohjelma P syötteellä x koskaan mitään näytölle. Jos tulostaa, vastaa kyllä, muuten vastaa ei. Muunnokset P P ja P P voidaan suorittaa sellaisilla algoritmisilla tekniikoilla, joilla Java-ohjelmia muutenkin käsitellään esim. kääntämisen yhteydessä. Tämä algoritmi siis on mahdollista toteuttaa ja pysähtyy kaikilla syötteillä, kun algoritmi A oletetaan annetuksi. Ohjelma P toimii kaikilla syötteillä muuten samoin kuin P, paitsi että se ei koskaan tulosta näytölle. Erityisesti P pysähtyy, jos ja vain jos P pysähtyy. Ohjelma P toimii muuten samoin kuin kuin P, paitsi että se tulostaa näytölle juuri ennen pysähtymistään. Siis erityisesti P pysähtyy, jos ja vain jos P pysähtyy, mikä on sama kuin että P pysähtyy. Koska P ei tulosta, niin P tulostaa, jos ja vain jos P pysähtyy eli jos ja vain jos P pysähtyy. Siis algoritmi antaa aina oikean ratkaisun. Siis annettu algoritmi ratkaisee oikein Java-ohjelmien pysähtymisongelman. Tämä on ristiriita, sillä ongelma on ratkeamaton. Siten oletettua algoritmia A ei voi olla olemassa. Vaihtoehtoinen ratkaisu: Tehtävää ei ole mahdollista ratkaista. Tehdään vastaoletus, että jokin algoritmi A ratkaisee ongelman. Nyt Turingin koneen pysähtymisongelma HALT TM voidaan ratkaista seuraavalla algoritmilla: i. Jos syöte ei ole muotoa M, w, missä M on Turingin kone ja w sen mahdollinen syöte, niin hylkää. ii. Käyttäen Turingin koneen M kuvausta ja merkkijonoa w muodosta (mutta älä suorita!) Java-ohjelma P, joka ensin simuloi koneen M laskentaa syötteellä w, ja jos laskenta pysähtyy niin lisäksi tulostaa näytölle Pysähtyi!. Ohjelmaan P ei tule muita tulostuslauseita. iii. Tarkasta algoritmilla A, tulostaako edellä muodostettu P näytölle mitään. Jos tulostaa, niin hyväksy; muuten hylkää. Pysähtymisongelma on kuitenkin ratkeamaton, joten algoritmia A ei voi olla olemassa. Kuusi pistettä on saanut täsmällisestä todistuksesta malliratkaisun tyyliin. Neljä pistettä on saanut todistusyrityksestä, jossa on hyvää yritystä myös teknisen toteutuksen osalta, mutta logiikassa jokin selvä virhe (esim. tehty palautus väärään suuntaan). Kaksi pistettä on saanut hyvästä intuitiivisesta selityksestä sille, miksi ongelman ratkaiseminen näyttäisi vaativan pysähtymisongelman ratkaisemista. Pienestä epätarkkuudesta on vähennetty yksi piste. Hyvin sekavasta esityksestä, epätosista väitteistä jne. on voitu vähentää enemmänkin pisteitä. 7