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. Demonstraatiotehtävien ratkaisut D: Todista monisteen Lause 6.5: (i) Kieli A Σ on rekursiivinen, jos ja vain jos sen karakteristinen funktio { χ A : Σ jos x A {0,}, χ A (x) = 0 jos x / A on rekursiivinen funktio. (ii) Kieli A Σ on rekursiivisesti numeroituva jos ja vain jos A = /0 tai on olemassa rekursiivinen funktio g : {0,} Σ, jolla Ratkaisu: A = {g(x) x {0,} }. Määritellään aluksi viisi yksinkertaista apukonetta: kirjoittaa nauhalle merkin, siirtää lukupäätä askeleen oikealle ja pysähtyy. 0 kirjoittaa nauhalle merkin 0, siirtää lukupäätä askeleen oikealle ja pysähtyy ja pysähtyy. C tyhjentää koneen syötenauhan, palauttaa lukupään nauhan alkuun ja pysähtyy. NEXT lukee nauhalla olevan merkkijonon x Σ ja korvaa sen leksikografisesti seuraavalla merkkijonolla. Cmp i, j vertailee moninauhaisen Turingin koneen nauhoja i ja j keskenään ja hyväksyy syötteen mikäli niiden sisältö on sama. Koneet ovat yksinkertaisia, joten niitä ei esitetä tässä. (i) [ ] Olkoon kieli A Σ rekursiivinen. Tällöin on olemassa Turingin kone siten, että: M A = Q,Σ,Γ,δ,q 0,q acc,q rej w Σ : w L (q 0,w) M A (q acc,α) w / L (q 0,w) M A (q rej,α) ja
Muodostetaan Turingin kone M yhdistämällä kone M A koneisiin, 0 ja C seuraavaan tapaan: M A C q 0 C 0 Mikäli w L, niin kone M A päätyy hyväksyvään tilaan, minkä jälkeen M tyhjentää nauhan ja kirjoittaa nauhalle luvun. Muussa tapauksessa nauhalle kirjoitetaan 0. Koska A on rekursiivinen, { M A pysähtyy aina, joten myös M pysähtyy aina, joten M,w A laskee funktion χ(w) =, joka on kielen A karakteristinen funktio. 0,w / A [ ] Seuraavaksi oletetaan, että funktio χ(w) on rekursiivinen. Tällöin on olemassa Turingin kone M χ, joka laskee sen arvon. Määritelmän mukaan M χ pysähtyy aina, ja laskennan tulos kirjoitetaan nauhalle lukupään vasemmalle puolelle. Muodostetaan Turingin kone M seuraavaan tapaan: M χ x, x/l, /R 0, 0/R Nyt kone M hyväksyy merkkijonon w aina, kun χ(w) =, ja hylkää sen, kun χ(w) = 0. Näin ollen M tunnistaa kielen A totaalisesti, joten A on rekursiivinen. (ii) Halutaan todistaa väite: Kieli A Σ on rekursiivisesti numeroituva jos ja vain jos A = /0 tai on olemassa rekursiivinen funktio g : {0,} Σ, jolla A = {g(x) x {0,} } Mikäli A = /0, niin triviaalisti pätee, että A on rekursiivisesti nukmeroituva ja g(x) = 0 on vastaava rekursiivinen funktio. Jos annetut ehdot täyttävä funktio g on olemassa, niin on olemassa totaalinen Turingin kone M g, joka laskee g:n. Tästä voidaan helposti muodostaa kaksinauhainen kone Mg,2, joka laskee g:n mutta tallettaa tuloksen toiselle nauhalle ensimmäisen asemasta. Muodostetaan -nauhainen Turingin kone M A seuraavasti: 2
NEXT 2 Mg 2, Cmp, Kone saa syötteensä ensimmäisellä nauhalla, ja sitä ei enää missään vaiheessa muuteta. Varsinaisessa laskentasilmukassa kone M A korvaa 2. nauhalla olevan bittijonon x leksikografisesti seuraavalla bittijonolla y, minkä jälkeen lasketaan g(y) ja talletetaan tulos. nauhalle. Lopuksi vertaillaan. ja. nauhojen sisältö keskenään. Mikäli nauhojen sisältö on sama, syötemerkkijono hyväksytään, muuten palataan alkuun. [ ] Tarkastellaan merkkijonoa w A. Oletetaan, että annetut ehdot täyttävä rekursiivinen funktio g on olemassa. Tällöin w = g(x) jollain x = x x 2 x n, missä n on äärellinen. Koska millä tahansa äärellisen mittaisella merkkijonolla on vain äärellinen määrä edeltäjiä leksikografisessa järjestyksessä, generoi NEXT lopulta x:n, jolloin Mg 2, laskee kolmannelle nauhalle merkkijonon w, ja kone hyväksyy. Näin ollen M A tunnistaa kielen A, joten A on rekursiivisesti numeroituva. [ ] Seuraavaksi oletetaan, että A on rekursiivisesti numeroituva ja A /0. Tällöin on olemassa Turingin kone M A, joka tunnistaa A:n. Määritellään apukone M A,i, joka simuloi koneen M A toimintaa i:n askeleen ajan. Kone M A,i hyväksyy syötteen x mikäli M A hyväksyy sen käyttäen korkeintaan i askelta, muuten se hylkää sen. Huomataan, että kone M A,i on totaalinen, eli se pysähtyy aina. Funktio g rakennetaan koneen M A,i avulla. Kaikki syötteet x ja rajat i koodataan funktion c(x,i) = 0 x 0 i avulla bittijonoiksi pareittain. Funktiota g määriteltäessä valitaan jokin kiinnitetty merkkijono x 0 A, joka palautetaan aina kun M A,i ei pysähdy tai jos g:n syöte on väärää muotoa. Konstruktion perusajatuksena on käydä läpi kaikki mahdolliset M A :n syötteet lomitettuina: ensin ajetaan M A :ta yhden askeleen verran ensimmäisellä syötteellä, sitten kaksi askelta ensimmäisellä syötteellä, yksi askel toisella syötteellä, jne. Alla olevassa kuvassa on tämä havainnollistettu aakkostolle Σ = {a,b}: Tässä samaistetaan Σ :n merkkijonot luonnollisten lukujen kanssa tavanomaiseen tapaan käyttäen leksikografista järjestystä.
i 4 2 ε a b aa ab... Esitetään vielä lopuksi todistus formaalimmin: Määritellään funktio g : {0,} {0,} seuraavasti: { g x, w = 0 x 0 i ja M A,i (x) pysähtyy (w) = x 0, muulloin, missä x 0 A. Lopuksi määritellään funktio g(x) = d(g (x)), missä d on funktio, joka kuvaa bittijonon 0 x joukon Σ x:nteen alkioon leksikografisessa järjestyksessä. Funktion g (x) arvo voidaan laskea äärellisessä ajassa, koska M A,i (x) ei voi jäädä ikuiseen silmukkaan. Näin ollen g on rekursiivinen, joten myös g:kin on. Tässä vaiheessa on huomattava, että vaikka g on aina olemassa, niin sitä ei ole välttämättä mahdollista löytää, sillä sopivan alkion x 0 A etsiminen on yleisessä tapauksessa ratkeamaton ongelma. D2: (a) Osoita, että mikä tahansa päätösongelma, jolla on vain äärellisen monta mahdollista syötettä, on ratkeava. (b) Osoita, että päätösongelma esiintyykö luvun π desimaalikehitelmässä jossain kohden sata peräkkäistä nollaa on ratkeava. Mitä tulos kertoo (i) π:n desimaalikehitelmästä, (ii) ratkeavuuden ja ratkeamattomuuden käsitteistä? Ratkaisu: (a) Jos päätösongelmalla on vain äärellisen monta mahdollista syötettä, on mahdollista luoda Turingin kone, jonka tiloihin on suoraan koodattu kaikki mahdolliset syötevaihtoehdot, ja jokaisen syötteen kuuluminen/kuulumattomuus kieleen. Siispä tällaiselle kielelle on aina mahdollista luoda totaalinen Turing-kone ja kieli on ratkeava. (b) Päätösongelmalla: Esiintyykö luvun π desimaalikehitelmässä jossain kohden sata peräkkäistä nollaa? on vain yksi syöte, π, joten a-kohdan perusteella ongelma on ratkeava. 4
Ongelmaa hankaloittaa se, että luonnollinen tapa ratkaista se olisi laskea desimaalikehitelmää luku kerrallaan, ja tarkistaa löytyykö sataa peräkkäistä nollaa. Tämä laskenta ei kuitenkaan välttämättä pysähdy! Mikäli vaadittua määrää nollia ei löydy, jatkaa se ikuisesti π:n desimaalien tarkastamista. Niinpä tällä menetelmällä voidaan päätösongelma ratkaista vain osittain. Ongelmalla on kuitenkin vain yksi vastaus: π:ssä joko on sata peräkkäistä nollaa tai sitten siinä ei ole niitä. Näin ollen toinen seuraavista Turingin koneista ratkaisee ongelman: M y Yes M n No Kone M y hyväksyy syötteen ja kone M n hylkää sen. Valitettavasti ei voida sanoa, kumpi koneista on oikea (tosin M y vaikuttaa todennäköisemmältä). Kuten yllä nähdään, ratkeavuuden käsite on hyvin heikko. Ongelma voi olla teoreettisesti ratkeava, vaikka sitä ei käytännössä pystyttäisikään ratkaisemaan. 5