581336-0 Laskennan teoria luennot kevatlukukaudella 2006 Jyrki Kivinen tietojenkasittelytieteen laudatur-kurssi, 3 ov pakollinen tietojenkasittelytieteen suuntautumisvaihtoehdossa, opettajan suuntautumisvaihtoehdossa ja bioinformatiikan ja laskennallisen biologian suuntautumisvaihtoehdossa esitiedot kaytannossa Tietorakenteet, Ohjelmoinnin ja laskennan perusmallit, joitain matematiikan opintoja 1
Opetusmuodot luennot 18.1.-21.4. (11 3 tuntia) harjoitukset 23.1.-28.4. (ks. opetusohjelma) 11 harjoituskertaa, 4 tehtavaa per kerta ) 44 tehtavaa kurssikoe to 4.5. (tarkista aikanaan) harjoitukset pakollisia: ratkaistava vah. 25% tehtavista luennoijan vast.otot ke 15.00-15.30, pe 13.15-13.45 seuraava erilliskoe 7.2.2006 2
Kurssin suorittaminen maksimi 60 pistetta: koe 54 p., harjoitukset 6 p. hyvaksymisraja noin 30 p., arvosanan 3/3 raja noin 50 p. harjoituspisteet tehty 0{11 12{15 16{19 20{23 24{27 28{31 32{35 36{44 pisteet hyl. 0 1 2 3 4 5 6 Hyvaksymisrajaan suhtaudutaan vakavasti. Jos laskarien kertymisessa on ongelmia, selvita ajoissa luennoijan kanssa. 3
Oppimateriaali Kurssikirja Hopcroft, Motwani, Ullman: Introduction to Automata Theory, Languages, and Computation (luvut 8{10; kurssikirjahyllyssa) Oheislukemisto Orponen: Laskennan teoria (luvut 4{7 kattavat kurssin asiat) Muitakin kirjoja on paljon, esim. Sipser: Introduction to the Theory of Computation on suositeltava Luentomateriaali ilmestyy kurssin kotisivulle mutta ei ole taydellinen esitys kurssin asioista (eras) suositeltava materiaali itseopiskeluun: kalvokopiot + kurssikirja merkinnalla ( ) varustetut luentojen kohdat eivat valttamatta loydy kurssikirjasta eivatka kuulu koealueeseen 4
Vihjeita (?) opiskeluun Karkea kaavamainen tyomaaraarvio (esim. kurssipalautteen yhteydessa olisi mukava kuulla, paljonko aikaa kurssi todella vei): luennot 11 3 = 33 tuntia laskuharjoitustilaisuudet 11 1,5 = 16,5 tuntia harjoitustehtavien itsenainen ratkaiseminen 11 5 = 55 tuntia kertaaminen ja tentti 12,5 + 3 = 15,5 tuntia yhteensa 120 tuntia Asioiden omaksuminen edellyttaa riittavan maaran itsenaista pohdiskelua, esim. harjoitustehtavien ratkaisemista oppikirjaa apuna kayttaen. Pelkka luentojen seuraaminen ei tyypillisesti riita. Kurssin pakollisuus kannattaa ottaa vakavasti. Suorituksen lykkaaminen johtaa ongelmiin. 5
Motto Computational problems are not only things that have to be solved, they are also objects that can be worth studying. Christos H. Papadimitriou 6
Tavoitteet tutustua universaaleihin laskennan malleihin hallita Turingin koneiden peruskonstruktiot ymmartaa etta laskennalliset ongelmat voivat olla ratkeamattomia tai tyolaita ymmartaa NP-taydellisyyden merkitys (myos matemaattinen merkitys) tunnistaa tyypilliset ratkeamattomat ja NP-taydelliset ongelmat osata yksinkertaiset ratkeamattomuus- ja NP-taydellisyystodistukset 7
Miksi? (tehokkaan) laskennan perusolemuksen selvittamista ratkeamattomia ongelmia esiintyy logiikassa ja siihen liittyen tekoalyssa, formaalissa verioinnissa jne. tyolaita ongelmia esiintyy kaikenlaisissa sovelluksissa (pakkaus, verkot,... ) nama asiat ovat niin keskeisia etta ne pitaa tuntea pintaa syvemmalta { mista tarkalleen on kysymys { mihin vaitteet perustuvat johdatusta teoreettisen tietojenkasittelytieteen ajatteluun (ja esitystapaan) (Lyhyt vastaus: hauskaa ja hyodyllista) 8
Sisalto 0. Johdanto: laskennalliset ongelmat, pysahtymisongelman ratkeamattomuus 1. Universaaleja laskennan malleja: Turingin koneet, rajoittamattomat kieliopit, Churchin-Turingin teesi 2. Laskettavuusteoriaa: rekursiiviset ja rekursiivisesti lueteltavat kielet, rekursiiviset funktiot ja palautukset, universaalit Turingin koneet, ratkeamattomuustuloksia 3. Vaativuusteoriaa: aika- ja tilavaativuus, epadeterministiset vaativuusluokat, polynomiset palautukset, NP-taydellisyys 9
0. Johdanto Merkintoja ja konventioita [HMU luku 1.5]:, : aarellisia aakkostoja; esim. = f 0; 1 g, = f a; b; c; d g. j j: aakkoston koko; esim. j j = 4. pienet kirjaimet a; b; c; : : :: aakkosmerkkeja pienet kirjaimet x; y; z; u; v; w; : : :: merkkijonoja; esim. x = ab, y = bac. jxj: merkkijonon pituus; esim. jxj = 2. xy: merkkijonojen katenaatio; esim. xy = abbac. 10
: aakkoston (aarellisten) merkkijonojen joukko ": tyhja merkkijono (merkitaan usein myos ); siis j"j = 0 esim. jos = f 0; 1 g niin = f "; 0; 1; 00; 01; 10; 11; 000; 001; : : : g milla tahansa aarellisella joukko on numeroituvasti aareton; ts. on olemassa bijektio f: N! (intuitiivisesti aakkoston merkkijonoja on "yhta paljon" kuin luonnollisia lukuja) esim. f(0) = ", f(1) = 0, f(2) = 1, f(3) = 00 jne.; leksikogranen jarjestys kieli on mika tahansa joukko merkkijonoja; esim. Primes = f x 2 f 0; 1 g j x on alkuluvun binaariesitysg siis Primes = f 10; 11; 101; 111; 1011; : : : g 4 = f 2; 3; 5; 7; 11; : : : g (merkinta " 4 =" tarkoittaa etta joukot jossain mielessa esittavat samaa asiaa) 11
laskennallinen ongelma on mika tahansa kuvaus :! milla tahansa ; paatosongelma on laskennallinen ongelma jonka arvojoukko on f 0; 1 g ( 4 = f ei; kylla g); paatosongelma samastetaan usein kielen f x j (x) = 1 g kanssa intuitiivisesti algoritmi ratkaisee ongelman, jos milla tahansa syotteella x 2 se tulostaa funktion arvon (x) 2 (maaritellaan pian tasmallisemmin) olkoon P(X) joukon X osajoukkojen joukko; siis esim. P(f a; b g) = f ;; f a g ; f b g ; f a; b g g siis yllamainittu samaistus huomioonottaen P( ) on aakkoston paatosongelmien joukko yksinkertainen argumentti osoittaa, etta paatosongelmia on "enemman" kuin algoritmeja ) kaikilla (paatos)ongelmilla ei mitenkaan voi olla ratkaisualgoritmia 12
Lukumaaraargumentti hieman tarkemmin ( ): Java-ohjelmat ovat merkkijonoja, joten mahdollisia Java-ohjelmia on numeroituva maara (eli "korkeintaan yhta paljon" kuin luonnollisia lukuja) Tunnetuista joukko-opin tuloksista seuraa, etta jos X on numeroituvasti aareton niin P(X) on ylinumeroituva (eli ei ole surjektiota N! P(X)) Intuitiivisesti, jos joukon X alkioita on "yhta paljon" kuin luonnollisia lukuja, niin joukon X osajoukkoja on "enemman" kuin luonnollisia lukuja Tama perustuu oleellisesti samaan Cantorin kuuluisaan diagonalisointiargumenttiin kuin tulos, etta reaalilukuja on "enemman" kuin luonnollisia lukuja. Erityisesti jos valitaan = ASCII merkit niin nahdaan, etta aakkoston paatosongelmia on "enemman" kuin Java-ohjelmia. Koska maaritelman mukaan mikaan ohjelma ei voi ratkaista kuin yhden paatosongelman, niin on olemassa ASCII-aakkoston paatosongelmia joille ei "riita" ne ratkaisevaa Java-ohjelmaa 13
Onko em. lukumaaraargumentti relevantti: kenties kaikki ratkeamattomat ongelmat ovat keinotekoisia ja mielenkiinnottomia, tai kenties jokainen ongelma voidaan ratkaista jollain ohjelmointikielella? Osoittautuu kuitenkin, etta monet luonnostaan esiintyvat ongelmat ovat ratkeamattomia, ja ratkeamattomuuden kasite on suunnilleen sama kaikilla riittavan voimakkailla laskentaformalismeilla (ohjelmointikielilla) Johtopaatoksella on siis vakavasti otettavia seuraamuksia. 14
Pysahtymisongelman ratkeamattomuus (( )/ [HMU 8.1]) (Epamuodollinen johdatteleva esimerkki; yksityiskohtiin palataan.) Vaite: ei ole olemassa C-funktiota halts(p, x) joka saa syotteena mielivaltaisen C-funktion tekstin p ja talle sopivan syotteen x, palauttaa 1 jos laskenta p(x) pysahtyy ja palauttaa 0 muuten. Huom. 1: halts ei siis saa millaan parametreilla joutua ikuiseen silmukkaan. Huom. 2: syntaksivirheet p:n tekstissa jne. kohtaan "muuten". 15
"Todistus" (hieman C:n syntaksia muokaten): Tehdaan vastaoletus etta tallainen halts on olemassa. Olkoon c seuraavan ohjelman confuse tekstiesitys: void confuse(char *p); int halts(char *p, char *x){... /* funktion "halts" runko */ } if (halts(p, p)==1) while (1); } Nyt sovelletaan funktion halts spesikaatiota: confuse(c) pysahtyy, halts(c, c)==1, confuse(c) jaa silmukkaan; ristiriita. " " 16
Johtopaatos: hyvinkin perustavanlaatuiset ohjelmointiin liittyvat kysymykset ovat ratkeamattomia. Seuraavaksi tarkastellaan tamantyyppisia ilmioita ohjelmointikielten sijaan formaaleilla laskennan malleilla, erityisesti Turingin koneilla. Formaalien mallien etuja: semantiikka helppo maaritella formaalisti valtetaan ohjelmointikielten hankalat erikoispiirteet valtetaan tulosten riippuvuus ohjelmointikielesta saadaan yleinen matemaattinen teoria joka on taysin riippumaton kaytettavissa olevista laskentalaitteista 17
1. Universaaleja laskennan malleja Esimerkkina universaalista laskennan mallista tarkastellaan Turingin konetta muunnelmineen. Lyhyesti esitellaan myos muita malleja. Taman luvun jalkeen opiskelija tuntee Turingin koneen ja sen muunnelmien peruskasitteet, osaa laatia yksinkertaisia Turingin koneita, tuntee periaatetasolla tarkeimmat Turingin koneisiin liittyvat yleiset konstruktiot ja niiden merkityksen, ymmartaa Turingin koneen suhteen muihin (teoreettisiin ja kaytannollisiin) laskennan malleihin ja tuntee Churchin-Turingin teesin ja osaa arvioida laskennan malleja sen valossa. 18
Universaalilla laskennan mallilla tarkoitetaan tassa epamuodollisesti sellaista mallia, jonka avulla on tarkoitus pystya formalisoimaan kaikki mahdolliset algoritmiset prosessi. Tarkoitus on siis vastata tasmallisesti kysymykseen "Mika on algoritmi?" Kaytannon tietojenkasittelijalle tyypillisesti riittaa vastaus "Tunnen kylla algoritmin, kun naen sellaisen." Tasmallista maaritelmaa tarvitaan kuitenkin, jos halutaan tarkastella kysymyksia tyyppia "Onko ongelmalle X olemassa ratkaisualgoritmi?" Ilman tasmallista maaritelmaa ei voitaisi erottaa tapauksia 1. algoritmi on olemassa, sita vain ei viela ole keksitty ja 2. algoritmia ei periaatteellisista syista voi olla olemassakaan. Kaytannossa ensin asetetaan algoritmille matemaattinen maaritelma (oikeastaan useita vaihtoehtoisia), katsotaan sitten mita seuraa, ja keskustellaan lopuksi lososista ja kaytannon seuraamuksista. 19
Historiallista taustaa 1900-luvun alkupuolella matemaatikot tarkastelivat kysymysta, voiko annetulle vaitteelle loytaa todistuksen annetuista aksioomista jollain "mekaanisella" menettelylla. Turingin kone on alkujaan eras tapa formalisoida "mekaaninen" tassa yhteydessa. Myos muita, lopulta Turingin koneen kanssa yhtapitaviksi osoittautuneita, malleja esitettiin. Kun sittemmin keksittiin yleiskayttoiset elektroniset tietokoneet, Turingin kone osoittautui myos hyvaksi malliksi sille, mita niilla periaatteessa voidaan laskea (olettaen rajoittamaton muistikapasiteetti). Erityisesti universaali Turingin kone [luvussa 2] vastaa kasitteellisella tasolla ohjelmoitavaa yleiskayttoista tietokonetta: ohjelma voidaan tulkita osaksi syotetta, ja ohjelmaa vaihtamalla sama laite saadaan ratkaisemaan mika tahansa ratkaistavissa oleva ongelma. (Yksinkertaistettu vastaus alkuperaiseen kysymykseen: todistamista ei voida mekanisoida.) 20
Turingin kone (Alan Turing, 1936) [HMU 8.2] q 3 q 3 q 0 q 2 q 1 Ohjausyksikko: kone tilassa q 1 Nauhapaa osoittaa merkkia B Tyonauha sis. merkkijonon ABAAB Koneen siirtymafunktio maaraa mika merkki kirjoitetaan nauhapaan kohdalle, mihin suuntaan nauhapaa liikkuu ja mika on seuraava tila kun on annettu nykyinen tila ja nauhapaan alla oleva merkki. 21
Motivaatio: yritetaan tehda abstrakti malli siita, millaista laskentaa matemaatikko (tms.) voi tehda "mekaanisesti": kaytettavissa kyna, kumi ja rajattomasti paperia kerralla nahdaan vain vakiokokoinen osa muistiinpanoista matemaatikon oma muisti on aarellinen Vaikuttaa vahan erilaiselta kuin tietokoneet, mutta vuonna 1936 ei ollut tietokoneita malli osoittautuu yhta voimakkaaksi kuin suoremmin moderneja tietokoneita esittavat mallit (lisaa tuonnempana) 22
Muodollisemmin Turingin kone (Turing machine, TM) on seitsikko M = (Q; ; ; ; q 0 ; B; F) missa Q on tilajoukko jonka on oltava aarellinen on nauha-aakkosto ja syoteaakkosto (kumpikin aarellinen) on siirtymafunktio q 0 2 Q on alkutila B 2 on tyhjamerkki (blank) F Q on hyvaksyvien tilojen joukko 23
on osittainen funktio joukolta Q joukkoon Q f L; R g. Siirtymafunktion arvo (q; X) = (q 0 ; Y; D) tarkoittaa etta jos M on tilassa q ja nauhapaan alla on merkki X niin seuraavalla laskenta-askelella M siirtyy tilaan q 0, kirjoittaa nauhalle merkin Y (merkin X tilalle) ja siirtaa nauhapaata yhden askelen suuntaan D (L: vasen, R: oikea). Jos (q; X) on maarittelematon niin M pysahtyy. 24
Intuitiivisesti jos M pysahtyy hyvaksyvaan tilaan se hyvaksyy syotemerkkijonon jos M pysahtyy muunlaiseen tilaan se hylkaa syotemerkkijonon. On myos mahdollista, etta M ei lainkaan pysahdy. Turingin koneen M hyvaksyma (tai tunnistama) kieli L(M) on niiden merkkijonojen joukko jotka M hyvaksyy. Huom. kieleen L M eivat kuulu ne syotteet joilla M ei pysahdy. Huom. erityisesti siis vaihtamalla koneen M hyvaksyvat ja ei-hyvaksyvat tilat keskenaan ei saada konetta joka hyvaksyy kielen L(M) = L(M) paitsi jos kone M on sellainen etta se pysahtyy kaikilla syotteilla. 25
Kielta L sanotaan rekursiivisesti lueteltavaksi (recursively enumerable, RE) jos L = L(M) jollain Turingin koneella M, ja rekursiiviseksi (recursive, REC) jos lisaksi M pysahtyy kaikilla syotteilla. Termilla (osittain) rekursiivinen ei ole suoranaista yhteytta ohjelmointikielten rekursioon. Sen taustalla on Kleenen 30-luvulla esittamat -rekursiiviset funktiot, jotka ovat vaihtoehtoinen formalisointi algoritmin kasitteelle. Palaamme tahan myohemmin. Kuten muistetaan, paatosongelma on kuvaus :! f 0; 1 g, ja paatosongelma samaistetaan usein kielen f x 2 j (x) = 1 g kanssa. Paatosongelmaa sanotaan ratkeavaksi (decidable), jos vastaava kieli on rekursiivinen, ja osittain ratkeavaksi (semi-decidable), jos vastaava kieli on rekursiivisesti lueteltava. Jatkamme nyt Turingin koneen teknisten yksityiskohtien kasittelya. Intuitiona on, etta kaikilla syotteilla pysahtyva Turingin kone on matemaattinen formulaatio sille, mika on algoritmi. 26
Turingin koneen tilannetta (conguration) merkitaan merkkijonolla vqw missa q 2 Q on koneen tila, v 2 on nauhan sisalto vasemmanpuolimmaisesta ei-tyhjasta merkista nauhapaan vasemmalla puolella olevaan merkkiin ja w 2 on nauhan sisalto nauhapaan kohdalla olevasta merkista oikeanpuolimmaiseen tyhjaan merkkiin. Siis alussa ollut esimerkkitilanne merkitaan Aq 1 BAAB. Jos nauhapaan vasemmalla puolella on vain tyhjaa, niin v = " ja merkkijonon w alussa voi olla tyhjaa; vastaavasti oikealla. Koneen alkutilanne syotteella w 2 on q 0 w. Siis aluksi kone on alkutilassa, syote on nauhalla tyhjien ymparoimana ja nauhapaa syotteen alussa. 27
Jos siirtymafunktion mukaan tilannetta vqw seuraa tilanne v 0 q 0 w 0, merkitaan Siis vqw `M v 0 q 0 w 0 : jos (q; a) = (q 0 ; b; R) niin vqaw ` vbq 0 w kaikilla v; w 2 jos (q; a) = (q 0 ; b; L) niin vcqaw ` vq 0 cbw kaikilla c 2, v; w 2 Jos on olemassa tilannejono v 1 q 1 w 1 = vqw, v 2 q 2 w 2, v 3 q 3 w 3,..., v n q n w n = v 0 q 0 w 0 missa v i q i w i ` v i+1 q i+1 w i+1, merkitaan vqw ` M v0 q 0 w 0 : Siis jos hyvaksyvista tiloista ei ole siirtymia (kuten yleensa ei ole), patee L(M) = x 2 j q 0 x ` M vqw joillain q 2 F, v; w 2 : 28
Esimerkki Konstruoidaan Turingin kone joka hyvaksyy kielen A = f 0 n 1 n j n 1 g. Perusidea: Apumerkkeina X ja Y. Toistetaan seuraavaa: vaihdetaan 0:n tilalle X siirrytaan nauhalla oikealle kunnes tulee 1 vaihdetaan 1:n tilalle Y palataan vasemmalle kunnes loytyy X aloitetaan seuraava iteraatio taman X:n oikealta puolelta 29
Muodollisemmin A = L(M) missa M = (f q 0 ; q 1 ; q 2 ; q 3 ; q 4 g ; f 0; 1 g ; f 0; 1; X; Y; # g ; ; q 0 ; #; f q 4 g) ja on oheisen taulukon mukainen. merkki tila 0 1 X Y # q 0 (q 1 ; X; R) (q 3 ; Y; R) q 1 (q 1 ; 0; R) (q 2 ; Y; L) (q 1 ; Y; R) q 2 (q 2 ; 0; L) (q 0 ; X; R) (q 2 ; Y; L) q 3 (q 3 ; Y; R) (q 4 ; #; R) q 4 Havainnollisemmin asian voi esittaa siirtymakaaviona. 30
.. Y=Y; R Y=Y; L 0=0; R 0=0; L 0=X; R 1=Y; L q 0 q 1 q 2 Y=Y; R X=X; R #; #; R q 3 q 4 Y=Y; R.. Kielen f 0 n 1 n j n 1 g tunnistaminen; siirtymakaavio 31
Esimerkki 2 Tunnistetaan kieli a k b k c k j k 0 Perusajatus: korvataan yksitellen jotkin a, b ja c merkeilla A, B ja C samalla tulee tarkastetuksi etta a:t on ennen b:ita jne. kun a:t loppuvat, tarkastetaan ettei b- tai c-merkkeja jaanyt yli Huom. kieli ei ole kontekstiton. 32
. a=a; R a=a; R B=B; R b=b; R C=C; R. q 0 q 1 q 2 b=b; R #; #; L a=a; R c=c; L A=A; R q 6 q 4 q 3 #; #; L B=B; R C=C; L b=b; L B=B; L a=a; L q 5 B=B; R C=C; R.. Kielen f a n b n c n j n 0 g tunnistaminen 33
Huom. Turingin koneen laskentavoima (se mitka kielet ovat tunnistettavissa) on sama vaikka mallia muunneltaisiin paljonkin erilliset hylkaava ja hyvaksyva lopputila nauha vain toiseen suuntaan aareton sallitaan nauhapaan pysya paikallaan nauhalla useita uria useita nauhoja... Viela oleellisempaa on, etta Turingin kone on laskentavoimaltaan sama kuin aivan muista lahtokohdista johdetut formalismit (Kleenen rekursiiviset funktiot, yleiset kieliopit, RAM-koneet,... ). 34
monimutkaisia turinginkonekonstruktioita ei tietenkaan voi kaytannossa esittaa siirtymakaavion tarkkuudella myos Turingin koneista puhuttaessa voidaan kayttaa aliohjelmia ja muita vastaavia ajattelumalleja perusteiden ymmartamiseksi kurssilla kaytetaan jonkin verran aikaa yksinkertaisten Turingin koneiden tarkkaan kasittelyyn samalla Turingin koneen varianttien asema selvenee ja nahdaan tarkemmin miten Turingin kone suhtautuu moderniin tietokoneeseen 35
Turingin koneen laajennuksia [HMU 8.3{8.4] Turingin koneen maaritelmaan voidaan tehda erilaisia muutoksia siten etta edelleen voidaan tunnistaa tasan sama luokka kielia. Moniuraiset Turingin koneet: nauha jakautuu k uraan (track) joilla kuitenkin on yhteinen nauhapaa. kontrolliyksikko # K O L M E U R A I N E N # # # # T U R I N G I N # # # # # # # # # K O N E # # # # # # # 36
jokaisella askelella luetaan ja kirjoitetaan kullekin uralle samalle kohdalle mutta muuten toisista urista riippumatta formaalisti nyt siis siirtymafunktio on : Q k! Q k f L; R g alkutilanteessa syote ensimmaisella uralla, muilla urilla tyhjamerkkia helppo simuloida yksiuraisella koneella: vaihdetaan aakkoston tilalle k, tyhjamerkiksi (#; : : : ; #) jne. ) voidaan kayttaa moniuraisia koneita silloin kun se tuntuu helpommalta 37
Moninauhaiset Turingin koneet: nyt meilla on k nauhaa joilla omat nauhapaat (voivat liikkua eri suuntiin, ja yksinkertaisuuden vuoksi myos pysya paikallaan). kontrolliyksikko # K O L M E N A U H A I N E N # # T U R I N G I N # # # # # # # # # K O N E # # # # # # # 38
formaalisti nyt siis siirtymafunktio on : Q k! Q k f L; R; S g k alkutilanteessa syote ensimmaisella nauhalla, muilla nauhoilla tyhjamerkkia Osoitetaan etta k-nauhaista konetta voi simuloida 2k-uraisella yksinauhaisella koneella Idea: merkataan ylimaaraisille urilla nauhapaiden sijainnit # K O L M E N A U H A I N E N # # T U R I N G I N # # # # # # K O L M E N A U H - - X - - - - - - - # # T U R I N G I N - - - - X - - - - - # # # K O N E # # # - - X - - - - - - - # # # # K O N E # # # # # # # 39
Moninauhaisen koneen yhden askelen simuloimiseksi luetaan koko nauha kerran lapi ja muistetaan (aarellistilaisessa kontrollissa) mitka merkit ovat nauhapaiden kohdalla valitaan siirtyma ja kirjoitettavat merkit luetaan koko nauha uudestaan lapi ja tehdaan asiaankuuluvat muutokset Oletetaan etta syotteella x simuloitava kone tekee t(x) siirtymaa ) kasiteltavan nauhanosan pituus myos kork. t(x) merkkia ) simuloiva kone suorittaa O(t(x)) askelta per simuloitava askel ) simuloiva kone tekee kaikkiaan O(t(x) 2 ) askelta 40
Johtopaatos: kieli voidaan tunnistaa standardimallisella Turinginkoneella jos ja vain jos se voidaan tunnistaa moniuraisella Turingin koneella jos ja vain jos se voidaan tunnistaa moninauhaisella Turingin koneella. Muita samantyyppisia variaatioita: syote erillisella read only -nauhalla nauhoilla alkukohta jonka vasemmalle puolelle ei saa menna Naissa tapauksissa on myos selvaa etta tunnistamiseen kaytettavien laskenta-askelien maara ei muutu "liikaa". Epadeterministiset koneet, joita seuraavaksi kasitellaan, ovat ilmaisuvoimaltaan samoja kuin deterministiset mutta laskenta-aikojen suhteen tilanne on ongelmallisempi. 41
Epadeterministiset Turingin koneet analoginen epadeterministisen aarellisen ja pinoautomaatin kanssa yhdesta tilanteesta voi olla useita vaihtoehtoisia siirtymia intuitio: ajatellaan etta kone osaa "arvata" vaihtoehdon joka johtaa lopulta hyvaksyvaan tilaan (jos mahdollista) epadeterminismi on nappara "ohjelmointitekniikka" Erityyppinen variantti kuin moninauhaiset jne. koneet ei (kovin) realistinen laskennan malli ratkeavien ongelmien luokka ei muutu vaikka epadeterminismi sallitaan tilanne muuttuu oleellisesti jos puhutaan nopeasta ratkaisemisesta; tahan palataan kurssin loppupuoliskolla 42
Muodollinen maarittely: Epadeterministinen Turingin kone (Nondeterministic Turing machine, NTM) on seitsikko missa M = (Q; ; ; ; q 0 ; B; F) Q,,, q 0, B ja F kuten deterministisessa tapauksessa siirtymafunktio on funktio missa : Q! P(Q f L; R g) P(A) = joukon A potenssijoukko = f B j B A g (Vrt. epadeterministinen aarellinen automaatti) 43
Epadeterministisen koneen hyvaksyma kieli Intuitiivisesti (q; X) sisaltaa kaikki mahdolliset siirtymat tilasta q merkilla X, ja jokin kaikkitietava agentti saa valita naista sopivat tavoitteena paatya hyvaksyvaan tilaan. Muodollisesti maaritellaan tilanteet vqw kuten deterministisessa tapauksessa samoin seuraajarelaatio `M ja sen sulkeuma ` M, paitsi etta ehdot muotoa (q 0 ; Y; D) = (q; X) korvataan ehdoilla (q 0 ; Y; D) 2 (q; X) ) voi patea vqw `M v 0 q 0 w 0 nollalla, yhdella tai useammalla v 0 q 0 w 0 (kuitenkin kork. 2jQjj j) koneen M hyvaksyma kieli on L(M) = x 2 j q 0 x ` M vqw joillain q 2 F, v; w 2 44
Olkoon M epadeterministinen Turingin kone. Osoitetaan nyt miten kieli L(M) voidaan tunnistaa deterministisella Turingin koneella. Perusidea koneen M simuloimiseksi annetulle syotteella: tutkitaan (mahdollisesti aaretonta) verkkoa, jonka solmuina ovat alkutilanteesta saavutettavissa olevat koneen M tilanteet tilanteiden vqw ja v 0 q 0 w 0 valilla on kaari jos vqw `M v 0 q 0 w 0 M hyvaksyy jos alkutilanteesta on polku hyvaksyvaan tilanteeseen etsitaan tallainen polku leveyssuuntaisesti 45
Tarkemmin: Oletetaan etta M on yksinauhainen. Simuloidaan deterministisella 3-nauhaisella konella M 0. nauha 1 on tyonauha nauha 2 sisaltaa jonon (queue) jolla leveyshakua ohjataan nauhaa 3 kaytetaan tilanteiden "monistamiseen" jonon jatkoksi Jos koneen M nauha-aakkosto on, otetaan uudeksi nauha-aakkostoksi 0 = [ f g [ Q: Jono jossa tilanteet v 1 q 1 w 1,..., v n q n w n voidaan koodata nauhalle 2 muotoon : : : ### v 1 q 1 w 1 v 2 q 2 w 2 : : : v n q n w n ### : : : 46
Simulaatio (eli polunetsinta) etenee vaiheittain. vaiheen 1 aluksi nauhalla 2 on syotetta x vastaava alkutilanne q 0 x jos vaiheen k aluksi nauhalla 2 on (tyhjamerkkien lisaksi) v 1 q 1 w 1 v 2 q 2 w 2 : : : v n q n w n niin vaiheen k lopuksi nauhalla on v 2 q 2 w 2 : : : v n q n w n v 0 1 q0 1 w0 1 v 0 2 q0 2 w0 2 : : : v 0 p q0 p w0 p missa v 0 i q0 i w0 i, i = 1; : : : ; p, ovat ne tilanteet joilla v 1 q 1 w 1 `M v 0 i q0 i w0 i. jos joskus tulee kirjoitettavaksi koneen M hyvaksyvan tilan koodi, niin M 0 hyvaksyy syotteen jos jono tyhjenee, niin M 0 hylkaa syotteen 47
Vaiheen k toteutus suunnilleen: tarkista kuinka monta seuraajaa tilanteella v 1 q 1 w 1 on (huom. talla on vakioylaraja 2j jjqj) tee tilanteesta v 1 q 1 w 1 taman mukainen maara kopioita nauhalle 3 kay kopiot jarjestyksessa lapi ja muuta kukin vastaamaaan "oikeannumeroista" seuraajaa kopioi nauhalta 3 nauhalle 2 48
Oletetaan etta koneella M on jokin hyvaksyva kork. n askelen pituinen laskenta, ja millaan tilanteella ei ole yli m seuraajaa. M 0 vie ensin jonoon tilanteet yhden (koneen M) laskenta-askelen paassa alkutilanteesta, sitten kahden askelen jne. k askelen paassa olevan tilanteen loytamiseksi voidaan joutua kaymaan lapi 1 + m + m 2 + : : : + m k tilannetta siis riittaa tutkia nm n tilannetta yhden koneen M tilanteen kuvaus on O(n) merkkia ) selvasti M 0 hyvaksyy jossain aarellisessa ajassa 49
Johtopaatos: Jos A = L(M) jollain epadeterministisella M, niin A = L(M 0 ) eraalla deterministisella M 0. Kaanteinen suunta tietysti myos patee. Siis kieli A voidaan tunnistaa epadeterministisella Turingin koneella jos ja vain jos se voidaan tunnistaa deterministisella Turingin koneella. Mutta edellaesitetyssa konstruktiossa laskenta-askelia voi tulla eksponentiaalisesti lisaa; tata ongelmapiiria kasitellaan kurssin loppupuoliskolla. Huom. Tassa vaiheessa olisi tarkoitus tuntua suunnilleen uskottavalta, etta Turingin koneella voidaan ratkaista tasan ne ongelmat joille on olemassa algoritmi, siina mielessa kuin sanaa "algoritmi" on kaytetty esim. kurssilla Tietorakenteet. Tata vaittamaa perustellaan pian tarkemmin. 50
Muita universaaleja laskennan malleja Talla kurssilla Turingin kone on valittu algoritmikasitteen formalisoinniksi. Toisin sanoen tulkitsemme, etta laskentaongelmalle on olemassa algoritmi, jos ja vain jos se voidaan ratkaista Turingin koneella. Jotta tama valinta ei tuntuisi aivan mielivaltaiselta, kaymme lyhyesti lapi edustavan kokoelman muita algoritmikasitteelle ehdotettuja formalismeja: Random Access Machine: idealisoitu moderni tietokone Rajoittamattomat kieliopit: mahdollisimman yleinen produktiosaantohin perustuva malli Rekursiiviset funktiot: "algoritmisesti ratkeavien ongelmien joukko" maaritellaan sellaisten sulkeumaominaisuuksien kautta, joita silla tulisi olla ("jos ongelmalla A on ratkaisualgoritmi, niin silloin myos siita muodostetulla ongelmalla B pitaisi olla ratkaisualgoritmi") Osoittautuu, etta kaikki nama lahestymistavat johtavat oleellisesti samaan algoritmin kasitteeseen kuin Turingin koneet. 51
Edella on yksinkertaisuuden vuoksi rajoituttu paatosongelmiin. Seuraavaksi esiteltavista formalismeista Random Access Machine ja rekursiiviset funktiot ovat luontevampia ajatella osittaisten funktioden kautta. Olkoon M deterministinen Turingin kone, jonka syoteaakkosto on. Oletetaan lisaksi, etta M pysahtyy vain muotoa vqw olevissa tilanteissa, missa v; w 2. Koneen M laskema osittainen funktio f:! maaritellaan nyt seuraavasti: jos M syotteella x pysahtyy tilanteeseen vqw, niin f(x) = vw 2 jos M syotteella x ei pysahdy, niin f(x) ei ole maaritelty. (Jos M jollain syotteella pysahtyy siten, etta nauhalla on ylimaaraisia syoteaakkostoon kuulumattomia merkkeja, se ei siis ylipaansa laske mitaan osittaista funktiota. Funktion laskemisessa ei kiinniteta huomiota siihen, pysahtyyko kone hyvaksyvaan vai ei-hyvaksyvaan tilaan.) Yleisessa tapauksessa f ei ole "oikea" funktio, koska se ei ole maaritelty kaikilla argumentin arvoilla x. Niinpa laskettavuuden teoriassa esiintyy paljon osittaisia funktioita. Jos M pysahtyy kaikilla syotteilla, asiaa usein korostetaan sanomalla etta se laskee totaalisen funktion. 52
Random Access Machine (RAM) ( ) (ks. esim. Lewis & Papadimitriou, luku 4.4) abstraktin tietokoneen konekieliohjelma koneessa rajoittamaton maara rekistereita jotka voivat sisaltaa mielivaltaisen suuren kokonaisluvun merkitaan rekisterin j sisaltoa r j, j = 0; 1; 2; : : : rekisteri 0 akku; lisaksi kaskyosoitin syotteena luvut i 1 ; i 2 ; i 3 ; : : : tuloste on rekisterin 0 sisalto laskennan pysahtymishetkella; jos laskenta ei pysahdy, tuloste ei ole maaritelty 53
RAMin kaskykanta kasky merkitys READ j r 0 := i j READ *j r 0 := i rj STORE j r j := r 0 STORE *j r rj := r 0 LOAD x r 0 := val(x) ADD x r 0 := r 0 + val(x) SUB x r 0 := r 0 val(x) kasky merkitys HALF r 0 := br 0 =2c JUMP j := j JPOS j jos r 0 > 0 niin := j JZERO j jos r 0 = 0 niin := j JNEG j jos r 0 < 0 niin := j HALT laskenta pysahtyy r j on rekisterin numero j sisaltama kokonaisluku x voi olla jokin vaihtoehdoista %j, j tai j missa j 2 N. val(%j) = j, val(j) = r j ja val( j) = r rj (epasuora osoitus) 54
Turingin koneiden ja RAMin vertaamiseksi samastetaan luonnolliset luvut ja niiden binaariesitykset. Toisin sanoen olkoon b(n) 2 f 0; 1 g luvun n binaariesitys, kun n 2 N. Sanomme, etta Turingin kone M laskee osittaisen funktion f: N! N, jos M laskee osittaisen funktion ^f: f 0; 1 g! f 0; 1 g, missa jos x = b(n) jollain n ja f(n) = m 2 N, niin ^f(x) = b(m) muuten ^f(x) ei ole maaritelty. Lause: Osittainen funktio f: N! N voidaan laskea Turingin koneella, jos ja vain jos se voidaan laskea RAMilla. Todistushahmotelma: "Vain jos" -suunta on helppo: RAMilla pitaa ensin muuntaa syoteluku binaariesityksekseen ja sen jalkeen simuloida Turingin konetta. Tama on suoraviivainen ohjelmointiharjoitus. "Jos"-suuntaa varten kontruoidaan annetulle RAMille sita simuloiva 7-nauhainen Turingin kone. Seuraavassa esitetaan vain nauhojen sisalto, yksityiskohdat sivuutetaan. 55
Nauha 1: syoteluvut sopivasti koodattuna Nauha 2: rekisterien sisalto koodattuna jonoiksi b(j) : b(r j ) missa siis b( ) tarkoittaa binaariesitysta; naiden jonojen valilla voi olla mielivaltainen maara tyhjamerkkeja Nauha 3: kaskyosoitin Nauha 4: se indeksi j jota vastaavaa r j ollaan etsimassa nauhalta 2 Nauhat 5{7: tyonauhoja aritmetiikkaan jne. " " 56
Turingin kone vs. tietokone [HMU 8.6] Edella esitetyn perusteella Turingin kone on sopiva malli modernille tietokoneelle, jolla on kaytettavissaan rajoittamaton maara muistia. Reaalisissa tietokoneissa on aina jokin kiintea ylaraja kaytettavissa olevan muistin maaralle. Periaatteessa oikea malli tietokoneelle, jossa on B bittia muistia, olisi aarellinen 2 B -tilainen automaatti. Nain monitilaisen systeemin ajatteleminen aarellisena automaattina ei kuitenkaan ole kovin intuitiivista. Kun systeemia ajatellaan Turingin koneena, saavutetaan se etu, etta "kontrolliosa" on pieni, hallittavissa oleva ja sama kaiken kokoisille syotteille. Taman takia siedetaan mallissa se eparealistinen piirre, etta Turingin koneen simulaatio voi joillain syotteilla vaatia enemman muistia kuin fyysisesti on kaytettavissa. Milla tahansa yksittaisella paattyvalla laskennalla tosin tarvitaan vain jokin aarellinen maara muistia, mutta tata maaraa ei voi tietaa ennakolta. 57
Rajoittamattomat kieliopit ( ) Ohjelmoinnin ja laskennan perusmalleista muistetaan, etta kieli voidaan kuvata (esim.) kieliopilla joka tuottaa sen, tai automaatilla joka tunnistaa sen. saannolliset lausekkeet aarelliset automaatit kontekstittomat kieliopit pinoautomaatit Nyt saadaan yksi vastaava pari lisaa: rajoittamattomat kieliopit Turingin koneet 58
Rajoittamaton kielioppi on nelikko G = (V; ; P; S) missa V aakkosto paatemerkit; N = V valikemerkit P (V f " g) V produktiot S 2 N lahtosymboli Produktiota (; ) merkitaan yleensa!. Erona kontekstittomiin kielioppeihin, etta produktion vasemmalla puolella voi olla mika tahansa epatyhja merkkijono. 59
Merkkijono 2 V johtaa suoraan merkkijonon 0 2 V jos voidaan kirjoittaa =! ja 0 =! 0 missa!!! 0 2 P. Talloin merkitaan ) G 0 : Merkkijono 2 V johtaa merkkijonon 0 2 V jos on olemassa 0 =, 1, 2,..., n = 0 joille i 1 ) G i. Talloin merkitaan ) G 0 : Kieliopin G tuottama kieli on L(G) = n o x 2 j S) x G : 60
Esimerkki: muodostetaan G = (V; ; P; S) jolle L(G) = a k b k c k j k 0 : (Huom. kieli a k b k c k j k 0 ei ole kontekstiton.) Siis = f a; b; c g. Valitaan N = f S; X; T; A; B; C g ja otetaan produktiot S! XT S! " T! ABCT T! ABC BA! AB CA! AC CB! BC XA! a aa! aa ab! ab bb! bb bc! bc cc! cc 61
Siis merkkijonon a k b k c k tuottamiseksi tuotetaan X(ABC) k jarjestetaan A-, B- ja C-merkit aakkosjarjestykseen; tuloksena XA k B k C k korvataan isot kirjaimet pienilla vasemmalta alkaen. Tama osoittaa etta rajoittamattomilla kieliopeilla voidaan tuottaa muitakin kuin kontekstisia kielia. Seuraavaksi kaydaan periaatetasolla lapi konstruktiot, jotka osoittavat etta itse asiassa rajoittamattomilla kieliopeilla voidaan tuottaa tasan ne kielet, jotka voidaan tunnistaa Turingin koneella. 62
Lause: Jos kieli voidaan tuottaa rajoittamattomalla kieliopilla, niin se voidaan tunnistaa Turingin koneella. Todistus (periaate): Olkoon G rajoittamaton kielioppi. Aiemmin esitetyn perusteella riittaa muodostaa kaksinauhainen epadeterministinen Turingin kone M jolle L(M) = L(G). Nauha 1 sisaltaa vain kopion syotejonosta. Nauhalle 2 tuotetaan (epadeterministisesti) lahtosymbolista tuotettavissa olevia merkkijonoja. Laskennan aluksi nauhalle 2 kirjoitetaan pelkka lahtosymboli. Jos jossain vaiheessa nauhojen sisallot ovat samat, hyvaksytaan. 63
Laskenta koostuu vaiheista joissa kussakin viedaan epadeterministisesti nauhan 2 nauhapaa mielivaltaiseen paikkaan valitaan epadeterministisesti mielivaltainen kieliopin G produktio jos nauhapaan kohdalta loytyy produktion vasen puoli, kirjoitetaan sen paikalle produktion oikea puoli verrataan nauhojen 1 ja 2 sisaltoja Koska produktioita on aarellinen maara, ne voidaan koodata Turingin koneen tiloihin. Tarkemmat yksityiskohdat sivuutetaan. 64
Lause: Jos kieli voidaan tunnistaa Turingin koneella, niin se voidaan tuottaa rajoittamattomalla kieliopilla. Todistus: Olkoon M = (Q; ; ; ; q 0 ; #; F) annettu. Idea on muodostaa kielioppi G = (V; ; P; S) joka tuottaa koneen M tilanteita. Valikkeiksi otetaan siis ainakin koneen M tilojen symbolit. Produktiot suunnitellaan siten etta [vqw] ) G [v 0 q 0 w 0 ] jos ja vain jos vqw `M v 0 q 0 w 0 missa "[" ja "]" ovat uusia valikesymboleja. Tama on mahdollista koska vqw `M v 0 q 0 w 0 edellyttaa etta vqw ja v 0 q 0 w 0 eroavat toisistaan vain merkin q lahiymparistossa. 65
Merkkijonon x 2 L(M) tuottaminen tapahtuu kolmessa vaiheessa: 1. tuotetaan lahtosymbolista S merkkijono x[q 0 x]. 2. muunnetaan x[q 0 x]) G x[vq f w] missa q f 2 F 3. siistitaan x[vq f w]) G x Varsinainen tyo tapahtuu vaiheessa 2 jossa G "simuloi" konetta M. Jos x 62 L(M), niin G ei pysty tuottamaan muotoa x[vq f w] olevia merkkijonoja. 66
Esitetaan viela konstruktion yksityiskohdat. Aakkostona on (huom. ). V = [ Q [ f S; T; [; ]; X; Y g [ f A a j a 2 g Produktiot jakautuvat edellaesitettyjen vaiheiden mukaisesti kolmeen osakokonaisuuteen: Vaihe 1: alkutilanteen tuottaminen S! T[q 0 ] T! " T! at A a A a [q 0! [q 0 A a A a b! ba a A a ]! a] (kaikilla a; b 2 ) 67
Vaihe 2: siirtymien simulointi (nama niille a; b; c 2 jotka ilmenevat siirtymafunktiosta) Siirtyma (q; a) = (q 0 ; b; R) (q; a) = (q 0 ; b; L) (q; #) = (q 0 ; b; R) (q; #) = (q 0 ; b; L) (q; a) = (q 0 ; b; L) Vastaava produktio qa! bq 0 cqa! q 0 cb q]! bq 0 ] cq]! q 0 cb] [qa! [q 0 #b Vaihe 3: lopputilanteen siistiminen (kaikille a 2, q f 2 F) q f! XY ax! X [X! " Y a! Y Y ]! " 68
Chomskyn hierarkia Noam Chomskyn vuonna 1956 esittama luokittelu kieliopeille niiden ilmaisuvoiman mukaan tyyppi kieli kielioppi tunnistaminen 0 rekurs. lueteltava rajoittamaton Turingin kone 1 kontekstinen kontekstinen lin. rajoitettu TM 2 kontekstiton kontekstiton pinoautomaatti 3 saannollinen oikealle lin. aarellinen autom. tyyppi 0 on juuri esitelty (ja esitellaan kohta lisaa) tyypit 2 ja 3 kurssilla Ohjelmoinnin ja laskennan perusmallit kuvan taydentamiseksi kaydaan tassa lyhyesti lapi taso 1 69
Kontekstinen kielioppi: kuten rajoittamaton kielioppi mutta produktioiden muotoa rajoitetaan sallitaan produktiot! missa jj jj lisaksi sallitaan produktio S! " olettaen etta S ei esiinny minkaan produktion oikealla puolella Nimi "kontekstinen" tulee siita, etta tallaiset kielet voidaan muuntaa muotoon jossa produktiot (pl. mahd. S! ") ovat tyyppia A!! missa A on valike ja! 6= ". Siis intuitiivisesti produktiota A!! saadaan kayttaa vain kontekstissa. 70
Lineaarisesti rajoitettu Turingin kone on epadeterministinen yksinauhainen Turingin kone joka ei koskaan kirjoita mitaan muuta niiden tyhjamerkkien paalle jotka nauhalla on alkutilanteessa. Siis kone kayttaa ainoastaan syotteen pituuden verran nauhatilaa. Lause Kieli voidaan tuottaa kontekstisella kieliopilla jos ja vain jos se voidaan tunnistaa lineaarisesti rajoitetulla Turingin koneella. (Todistus sivuutetaan.) Tama on siis esimerkki laskennan mallista, jossa pelkastaan syotteen koon perusteella saadaan ylaraja sen vaatiman laskennan maaralle. Universaaleilla laskennan malleilla nain ei ole, vaan lyhytkin syote voi johtaa pitkaan laskentaan. 71
Rekursiiviset funktiot (Godel ja Kleene 1936) ( ) Palautetaan mieliin: kieli A on rekursiivisesti lueteltava jos A = L(M) jollain Turingin koneella M A on rekursiivinen jos lisaksi M pysahtyy kaikilla syotteilla Kaytetaan taas luvun n binaariesitykselle merkintaa b(n), ja oletetaan etta A f 0; 1 g n on joukko tallaisia binaariesityksia (jos x 2 A niin x = b(n) jollain n 2 N). Seuraavassa maaritellaan rekursiiviset funktiot f: N! N joille osoittautuu patevan A on rekursiivinen kieli jos ja vain jos A on rekursiivinen funktio, missa A (n) = 1 jos b(n) 2 A ja A (n) = 0 muuten. A on rekursiivisesti lueteltava jos ja vain jos jollain rekursiivisella f patee A = f b(f(x)) j x 2 N g 72
Rekursiivisten funktioiden maaritelman idea on seuraava: tietyt alkeisfunktiot pitaisi ilman muuta osata laskea jos on annettu joitain perusfunktioita jotka osataan laskea, niin niista tietyilla yksinkertaisilla operaatioilla muodostetut funktiot pitaisi myos osata laskea Rekursiivisia funktioita ovat tasan ne jotka taman logiikan mukaan pitaisi osata laskea. Tassa on siis tavallaan deklaratiivinen maaritelma laskettavuudella, itse laskentaprosessista ei puhuta mitaan. Tietysti intuitio laskentaprosesseista on vahvasti taustalla kun valitaan sopivat alkeisfunktiot ja operaatiot. 73
Maaritellaan ensin yleisemmin osittaisrekursiiviset funktiot N k! N. Alkeisfunktiot nollafunktio Z: N! N, Z(x) = 0 kaikilla x seuraajafunktio S: N! N, S(x) = x + 1 kaikilla x kaikilla n 2 N ja 1 i n projektiofunktio U n i : N n! N, U n i (x 1 ; : : : ; x n ) = x i kaikilla x 1 ; : : : ; x n 2 N Nama ovat kaikki totaalisia funktioita eli maaritelty kaikilla argumenttien arvoilla 74
Maaritellaan nyt operaatioita uusien funktioiden muodostamiseksi. Sijoitus: kun on annettu f: N k! N ja g 1 ; : : : ; g k jotka ovat funktioita N m! N, sijoitus tuottaa funktion h: N m! N; h(x) = f(g i (x); : : : ; g k (x)) Rekursio: kun on annettu funktiot f: N k! N ja g: N k+2! N, rekursio tuottaa sen funktion h: N k+1! N jolle h(x; 0) = f(x) h(x; y + 1) = g(x; y; h(x; y)) Jos jollain argumentilla x esim. jokin g i (x) ei ole maaritelty, niin myoskaan sijoittamalla saatu h(x) ei ole maaritelty talla x jne. Jos annetut funktiot ovat totaalisia, myos sijoittamalla ja rekursiolla syntyvat funktiot ovat. 75
Primitiivirekursiivisten funktioiden joukko PR on pienin joukko joka sisaltaa funktiot Z, S ja U n i kaikilla i; n ja on suljettu sijoittamisen ja rekursion suhteen (ts. jos funktiot f ja g i ovat joukossa PR, myos niista sijoituksella tai rekursiolla saadut funktiot ovat) Siis PR koostuu tasan niista funktioista, jotka voidaan muodostaa alkeisfunktioista Z, S ja Ui n sijoitusta ja rekursiota kayttaen. Tasta seuraa etta kaikki primitiivirekursiiviset funktiot ovat totaalisia. 76
Esimerkkeja Identiteettifunktio f(x) = x on sama kuin projektio U 1 1. Muodostetaan g yhdistamalla S ja U 3 3, siis g(x; y; z) = z + 1. Yhteenlaskufunktio p(x; y) = x + y toteuttaa p(x; 0) = x p(x; y + 1) = p(x; y) + 1 joten se saadaan rekursiolla yllaolevista f ja g. Kertolaskufunktio m(x; y) = xy puolestaan toteuttaa m(x; 0) = 0 m(x; y + 1) = m(x; y) + x joten se saadaan edelleen rekursiolla yhteenlaskufunktion avulla. 77
Kaikki tavalliset aritmeettiset perusfunktiot nahdaan helposti primitiivirekursiivisiksi. Yleisemmin primitiivirekursiivisia ovat tasmalleen ne funktiot, jotka voidaan laskea kayttaen vain for-silmukoita joissa iteraatioiden maara pitaa kiinnittaa ennen silmukan suorituksen alkua. On kuitenkin funktioita joiden laskemiseen tarvitaan yleisempaa while-silmukkaa. Esim. voidaan osoittaa etta Ackermannin funktio (0; y) = y + 1 (x + 1; 0) = (x; 1) (x + 1; y + 1) = (x; (x + 1; y)) kasvaa nopeammin kuin mikaan primitiivirekursiivinen funktio Siis universaaliin laskennan malliin tarvitaan jokin primitiivirekursiota voimakkaampi mekanismi 78
Minimointi: kun on annettu funktio f: N k+1! N, minimointi tuottaa funktion g: N! N jolle 1. jos jollain y kaikki arvot f(x; 0),..., f(x; y) ovat maariteltyja ja f(x; y) = 0, niin g(x) on pienin tallainen y 2. muuten g(x) ei ole maaritelty Arvoa y = g(x) voi tietysti etsia laskemalla jarjestyksessa f(x; 0), f(x; 1), f(x; 2), f(x; 3),... ja pysahtymalla kun tulee nolla. Etukateen ei kuitenkaan ole mitaan arviota, kuinka pitkalle joudutaan laskemaan. 79
Osittaisrekursiivisten funktioiden joukko PR on pienin joukko joka sisaltaa funktiot Z, S ja U n i kaikilla i; n ja on suljettu sijoittamisen, rekursion ja minimoinnin suhteen Rekursiivisia ovat ne osittaisrekursiiviset funktiot jotka ovat totaalisia. Esim. Ackermannin funktio ja kaikki primitiivirekursiiviset funktiot ovat rekursiivisia. Kuten alussa todettiin, voidaan osoittaa (kun A on joukko binaarikoodeja) etta A on rekursiivinen kieli jos ja vain jos A on rekursiivinen funktio A on rekursiivisesti lueteltava jos ja vain jos jollain rekursiiviselle f patee A = f b(f(x)) j x 2 N g lisaksi A on rekursiivisesti lueteltava jos ja vain jos 0 A on osittaisrekursiivinen, missa 0 A(x) = 1 jos b(x) 2 A ja 0 A(x) ei ole maaritelty muuten 80
Churchin-Turingin teesi [HMU 8.2.1] Turing esitti oman maaritelmansa matemaattisen logiikan tarpeisiin malliksi siita, mita ihminen voi laskea "saantoja mekaanisesti seuraamalla". Samoihin aikoihin samoihin tarpeisiin esitettiin useita muitakin maaritelmia (Godel & Kleene; Postin produktiojarjestelmat). Nama kaikki osoittautuivat Turingin maaritelman kanssa yhtapitaviksi. Myohemmin Turingin kone osoittautui hyvaksi malliksi myos nykyaikaiselle tietokoneelle. Tasta seuraava askel on Churchin-Turingin teesi: Turingin koneet on oikea malli sille, mita ylipaansa on mahdollista laskea mekaanisesti saantoja seuraamalla. Teesi ei tietenkaan ole matemaattinen vaittama. Sita voidaan pitaa empiirisena vaittamana, koska se on periaatteessa falsioitavissa esittamalla laskulaite, joka laskee ei-rekursiivisia funktioita. Tamakin on tosin hieman ongelmallista, koska kaytannossa voidaan tarkastella vain rajoitetun kokoisia syotteita. Nykyaan teesi on varsin laajasti hyvaksytty, mutta ideoita Turingin konetta voimakkaammista laskulaitteista esitetaan toisinaan. 81
2. Laskettavuusteoriaa Kaymme lapi ratkeamattomuuteen liittyvia ja perustuloksia ja -tekniikoita [HMU luku 9]. Taman luvun jalkeen opiskelija tuntee joukon keskeisia ratkeamattomuustuloksia osaa esittaa tyypillisia Turingin koneisiin liittyvia ongelmia formaalisti ja tarkastella niiden ratkeavuutta tunnettujen tulosten valosssa osaa yhdistaa kaytannon algoritmiongelmia tunnettuihin formaaleihin ratkeamattomuustuloksiin osaa tehda yksinkertaisia ratkeamattomuustodistuksia 82
Palautetaan mieliin terminologiaa: Kieli L on rekursiivisesti lueteltava jos A = L(M) jollain Turingin koneella M. Turingin kone on totaalinen jos se pysahtyy kaikilla syotteilla. (Joissain lahteissa kaytetaan termia "algoritmi" spesisti tallaisista koneista.) Kieli L on rekursiivinen jos A = L(M) jollain totaalisella Turingin koneella M. Vastaavasti Paatosongelma :! f 0; 1 g on osittain ratkeava jos vastaava kieli A = f x 2 j (x) = 1 g on rekursiivisesti lueteltava. Paatosongelma on ratkeava jos A on rekursiivinen. 83
Termien selityksia "rekursiivinen" tulee siita etta tama kieliluokka historiallisesti vakiintui Kleenen ja Godelin rekursiokonstruktion kautta "lueteltava" tulee siita etta A on rekursiivisesti lueteltava jos ja vain jos on olemassa "algoritmi" joka "luettelee" joukon A alkiot (ja vain ne) { jos x 2 A niin x esiintyy luettelossa jonkin aarellisen ajan kuluttua ja asia on selva { jos x 62 A niin x ei tule koskaan esiintymaan luettelossa, mutta tatahan ei voi tietaa pelkastaan katsomalla jotain luettelon aarellista alkuosaa Luetteloimisidea esitetaan myohemmin yksityiskohtaisemmin. Huom. kaikista laskennallisista ongelmista vain haviavan pieni osa on edes osittain ratkeavia, mutta tietojenkasittelytieteessa tietysti yleensa keskitytaan ratkeaviin ongelmiin. 84
Churchin-Turingin teesin mukaan ratkeavuus tarkoittaa samaa, kuin etta ongelma voidaan ratkaista jollain algoritmisella menettelylla. Esitamme jatkossa joukon Turingin koneita koskevia eksakteja matemaattisia tuloksia, mutta jos uskomme C-T:n teesin, nailla on siis yleisempia seurauksia. C-T:n teesi oikeastaan motivoi koko taman tutkimusohjelman, koska muuten Turingin koneet eivat valttamatta olisi kovin kiinnostava tutkimuskohde. (Tosin voidaan kumminkin argumentoida, etta Turingin kone on oikea malli sille mita ihminen voi mekaanisesti laskea, ja mita nykyiset tietokoneet voivat laskea.) Joka tapauksessa on kuitenkin selvaa, etta jos ongelma osataan ratkaista esim. Java-kielella, se voidaan ratkaista myos Turingin koneella (vrt. RAM-malli luvussa 1). Samoin joka tapauksessa jonkin ongelman ratkeamattomuuden osoittaminen on aina ei-triviaalia, koska pitaa osoittaa etta mikaan Turingin kone ei ratkaise sita. 85
Formaalin logiikan todistuvuusongelma (Motivoiva esimerkki yleisella tasolla; yksityiskohdat ks. esim. Matemaattinen logiikka) Annettu: ensimmaisen kertaluvun predikaattilogiikan kaava Kysymys: onko kaavalle olemassa todistus predikaattilogiikan aksioomista Voidaan "helposti" luetella kaikki logiikan aakkoston merkkijonot esim. leksikograsessa jarjestyksessa ja tarkistaa, sattuuko kyseinen merkkijono olemaan todistus jollekin kaavalle. Jos kaavalle ylipaansa on olemassa todistus, se loytyy jossain aarellisessa ajassa talla menettelylla. Siis todistuksen omaavien kaavojen joukko on rekursiivisesti lueteltava, ja todistuvuusongelma osittain ratkeava. Kuitenkin osoittautuu, etta todistuvuusongelma ei ole ratkeava. Emme siis voi taysin kiertaa sita ongelmaa, etta edella hahmoteltu ratkaisu ei pysahdy, jos kaavalla ei ole todistusta. 86
Pysahtymisongelma (johdanto) [HMU 9.1] Intuitiivisesti on kysymys seuraavasta ongelmasta: Annettu: Turingin kone M, merkkijono x Kysymys: pysahtyyko kone M syotteella x Tavoitteena on osoittaa tama ongelma ratkeamattomaksi. Ensimmainen osatavoite, puhtaasti tekninen ja kasitteellisesti yksinkertainen, on esittaa Turingin koneet merkkijonoina. Muutenhan niista ei olisi formaalisti mielekasta edes puhua algoritmin syotteena tms. Esitamme siis seuraavaksi yksinkertaisen koodauksen, joka liittaa jokaiseen Turingin koneeseen M = (Q; : : : ; F) merkkijonon w 2 f 0; 1 g ja kaantaen. 87
Turingin koneiden koodaus Rajoittaudutaan yksinauhaisiin koneisiin ja syoteaakkostoon =f 0; 1 g. Lisaksi oletetaan etta hyvaksyvia tiloja on tasan yksi ja se ei ole alkutila. Numeroidaan aakkoston f 0; 1 g merkkijonot siten, etta merkkijonon w numero on 1w binaariluvuksi tulkittuna. Olkoon w i merkkijono numero i; siis w 1 = ", w 2 = 0, w 3 = 1, w 4 = 00, w 5 = 01 jne. Oletetaan nyt M = (Q; f 0; 1 g ; ; ; q 1 ; #; F) missa jqj = k, Q = f q 1 ; : : : ; q k g ja F = f q 2 g j j = m 3, = f X 1 ; : : : ; X m g, X 1 = 0, X 2 = 1, X 3 = # suunnat on numeroitu L = D 1 ja R = D 2 88
Nyt kaikki muu paitsi on numeroitu. koodataan yksittainen siirtyma (q i ; X j ) = (q k ; X l ; D m ) jonoksi 0 i 10 j 10 k 10 l 10 m huom. i; j; k; l; m 1 joten tassa ei koskaan tule kahta ykkosta perakkain merkkijono C 1 11C 2 11 : : : C n 1 11C n on koodi koneelle jossa on n siirtymaa joiden koodit ovat C 1 ; : : : ; C n Huomaa etta samalla koneella on tyypillisesti useita eri koodeja yksi merkkijono ei kuitenkaan voi koodata useita eri koneita jotkin merkkijonot eivat ole minkaan koneen koodeja 89
Olkoon M triv jokin kiintea Turingin kone joka hylkaa kaikki syotteet. Maaritellaan kaikille w 2 f 0; 1 g Turingin kone M w seuraavasti: jos w on jonkin koneen M koodi, niin M w on tama M muuten M w = M triv Aputuloksena pysahtymisongelman ratkeamattomuustodistuksessa osoitetaan, etta "diagonaalikieli" L d = f w 2 f 0; 1 g j w 62 L(M w ) g ei ole edes rekursiivisesti lueteltava. Kieli L d on hieman keinotekoinen. Sen merkitys on lahinna, etta sen avulla voidaan osoittaa muita kiinnostavampia ongelmia ratkeamattomaksi. 90
Analogia: Koodit ja ohjelmointikielet Eras mahdollinen analogia on seuraava: Tulkitaan, etta ohjelma hyvaksyy syotteen, jos sen suoritus paattyy normaalisti, ja hylkaa jos suoritus paattyy virheeseen. Lisaksi ohjelma voi jaada silmukkaan. Nyt Turingin kone M konekieliohjelma merkkijono w 2 f 0; 1 g ASCII-merkkijono (esim. C-ohjelma) M w ohjelma w kaannettyna M triv konekieliohjelma joka aina jakaa nollalla Lisaksi sovimme, etta M w = M triv jos w ei ole syntaktisesti korrekti C-ohjelma. Nyt C-ohjelma kuuluu joukkoon L d, jos se ei pysahdy normaalisti, kun (se kaannetaan ja) siille annetaan syotteena oma lahdekoodinsa. Huom. C-kieli ja konekieli ovat yhta "laskentavoimaisia", joten analogia voitaisiin ajatella toisinkin pain: konekieliohjelmasta voidaan kaantaa C-ohjelma. 91
Lause 2.1: [HMU Thm. 9.2] Kieli L d = f w 2 f 0; 1 g j w 62 L(M w ) g ei ole rekursiivisesti lueteltava. Todistus: Tehdaan vastaoletus etta L d = L(M) jollain M. Olkoon w jokin koneen M koodi; siis L d = L(M w ). Nyt w 2 L d, w 62 L(M w ), w 62 L d missa on ensin kaytetty kielen L d maaritelmaa ja sitten koodin w valintaperustetta; ristiriita. Nyt olemme saaneet ensimmaisen konkreettisen ratkeamattomuustuloksen. Jatkossa osoitamme suurelle joukolle ongelmia X, etta jos X osattaisiin ratkaista, niin L d voitaisiin tunnistaa. Tasta seuraa ongelman X ratkeamattomuus yo. lauseen nojalla. 92
Huomaa, etta edellisessa todistuksessa ei viela puhuttu mitaan Turingin koneista. Se on vain esimerkki yleisesta diagonalisoinnista: Jos A 1 ; A 2 ; : : : on mika tahansa jono kielia, voidaan muodostaa kieli B, missa w i 2 B jos ja vain jos w i 62 A i : Talloin B 62 f A 1 ; A 2 ; : : : g. Jatkossa tulee tarkeaksi, etta olemme valinneet nimenomaan A i = L(M wi ), jolloin siis B = L d. Karkeasti ottaen tasta valinnasta seuraa, etta jos osaisimme algoritmisesti vastata kysymykseen pateeko x 2 L(M w ) mielivaltaisilla x ja w, osaisimme myos vastata kysymykseen pateeko x 2 L d, joka on (negaatiota vaille) edellisen kysymyksen erikoistapaus x = w. Edellisen lauseen perusteella tama on kuitenkin mahdotonta. 93
Rekursiivisuuden perusominaisuuksia [HMU 9.2.1-9.2.2] Ennen kuin ruvetaan tarkastelemaan varsinaisen pysahtymisongelman ratkeamattomuutta, on hyodyllista tarkastella rekursiivisten kielten luokan joitain perusominaisuuksia. Oletetaan jatkossa etta Turingin koneissa on tasan yksi hyvaksyva tila, ja tasta ei mitaan siirtymia tasan yksi sellainen ei-hyvaksyva tila, josta ei ole mitaan siirtymia (hylkaava lopputila) muuten kaikki siirtymat maariteltyja On helppo muuntaa mika tahansa Turingin kone tallaiseen muotoon. 94