Laskennan teoria

Samankaltaiset tiedostot
Turingin koneen laajennuksia

Laskennan teoria

Laskennan teoria

1. Universaaleja laskennan malleja

2. Laskettavuusteoriaa

Laskennan teoria

Rekursiiviset palautukset [HMU 9.3.1]

Laskennan teoria

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

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

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

5.3 Ratkeavia ongelmia

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

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

Chomskyn hierarkia ja yhteysherkät kieliopit

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja

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

TKT20005 Laskennan mallit (syksy 2018) Kurssikoe, malliratkaisut

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Yhteydettömän kieliopin jäsennysongelma

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

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

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

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

Muita vaativuusluokkia

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

3. Laskennan vaativuusteoriaa

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

Pinoautomaatit. Pois kontekstittomuudesta

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

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

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

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Automaatit. Muodolliset kielet

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

Laskennan mallit

Output. Input Automaton

Ratkeavuus ja efektiivinen numeroituvuus

Kertausta 1. kurssikokeeseen

Johdatus matematiikkaan

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

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

Säännöllisten kielten sulkeumaominaisuudet

ICS-C2000 Tietojenkäsittelyteoria

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

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

Algoritmit 2. Luento 13 Ti Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Vastaus 1. Lasketaan joukkojen alkiot, ja todetaan, että niitä on 3 molemmissa.

Miten perustella, että joukossa A = {a, b, c} on yhtä monta alkiota kuin joukossa B = {d, e, f }?

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

8. Kieliopit ja kielet

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

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

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

kaikki kielet tunnistettavat A TM HALT TM { a n } { a n b n } { a n b n c n } TOTAL TM EQ TM

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

S BAB ABA A aas bba B bbs c

Transkriptio:

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

Lause 2.2: Olkoot A; B rekursiivisia. Nyt myos A = A \ B ovat rekursiivisia. Todistus: Olkoon A = L(M A ) ja B = L(M B ) missa M A ja M B ovat totaalisia. Esitetaan Turingin koneet kaavamaisesti: A, A [ B ja alkutila M hyvaksyva hylkaava 95

Kielen A hyvaksyva kone saadaan vaihtamalla koneen M A hyvaksyva ja hylkaava lopputila keskenaan Kielen A [ B hyvaksymiseksi simuloidaan ensin konetta M A. { jos M A hyvaksyy, niin hyvaksytaan { jos M A hylkaa, niin simuloidaan konetta M B, jonka ratkaisu jaa voimaan (kuva seuraavalla sivulla) Tapaus A \ B seuraa koska A \ B = A [ B 96

M A M B Kielen A [ B tunnistaminen koneiden M A ja M B avulla 97

Lause 2.3: Olkoot A; B rekursiivisesti lueteltavia. Nyt myos A [ B ja A \ B ovat rekursiivisesti lueteltavia. Todistus: Harjoitustehtava. Sen sijaan yleisesti ei pade etta rekursiivisesti lueteltavan kielen A komplementti A olisi rekursiivisesti lueteltava. Sen sijaan patee Lause 2.4: Kieli A on rekursiivinen jos ja vain jos seka A etta A ovat rekursiivisesti lueteltavia. 98

Todistus: Jos A rekursiivinen, niin A on rekursiivinen, joten suunta vasemmalta oikealle on selva. Olkoot toisaalta M A ja M A koneet jotka tunnistavat kielet A ja A. Muodostetaan kaksinauhainen kone M, joka on totaalinen ja tunnistaa kielen A. Kone M simuloi konetta M A kayttaen ykkosnauhaansa ja konetta M A kayttaen kakkosnauhaansa. Simulaatiot suoritetaan lomittain, aina yksi askel kerrallaan kumpaakin. Jos simuloitava M A hyvaksyy, M hyvaksyy. Jos simuloitava M A hyvaksyy, M hylkaa. Koska jokaisella x joko x 2 L(M A ) tai x 2 L(M A ), aina tasan yksi simulaatioista hyvaksyy. (kuva seuraavalla sivulla) 99

M A M A Kielen A tunnistaminen totaalisella koneella jos A ja A ovat rekursiivisesti lueteltavia 100

Formalistisemmin tulos voidaan esittaa seuraavasti: Olkoon RE rekursiivisesti lueteltavien kielten joukko: RE = f L(M) j M mielivaltainen Turingin koneg : Olkoon co-re rekursiivisesti lueteltavien kielten komplemettien joukko: co-re = A j A 2 RE : Olkoon REC rekursiivisten kielten joukko: REC = f L(M) j M totaalinen g : Edella esitetyn mukaan REC = RE \ co-re: 101

Huomaa yhteys "rekursiivisen luettelemisen" ajatukseen: Oletetaan, etta jokin "algoritmi" M A osaa luetella kielen A; samoin M A kielelle A. Kun halutaan tietaa pateeko x 2 A, listataan rinnakkain joukkoja A ja A. Koska joko x 2 A tai x 2 A, niin jonkin aarellisen ajan kuluttua x esiintyy jommassa kummassa listassa ja vastaus tiedetaan. Myos A-lista tarvitaan, jotta voidaan taata pysahtyminen myos kielteisessa tapauksessa. 102

Universaalikieli [HMU 9.2.3-9.2.4] Seuraava askel kohti pysahtymisongelman ratkeamattomuutta on universaalikieli L u joka on muutenkin hyvin tarkea: Huom. L u = f w111x 2 f 0; 1 g j x 2 L(M w ) g : mikaan Turingin koneen koodi ei sisalla merkkijonoa 111 siis merkkijono z 2 f 0; 1 g voidaan esittaa korkeintaan yhdella tavalla muodossa z = w111x siten, etta w on validi Turingin koneen koodi jos w ei ole validi koodi, edella sovitun mukaan x 62 L(M w ) kaikilla x Osoitamme nyt etta universaalikieli on rekursiivisesti lueteltava, mutta ei rekursiivinen. Kielen L u tunnistavaa Turingin konetta U sanotaan universaaliksi Turingin koneeksi. (Universaalikone ei tietenkaan ole yksikasitteinen.) 103

Lause 2.5: [HMU Thm. 9.6(a)] Universaalikieli L u on rekursiivisesti lueteltava. Todistus: Muodostetaan nelinauhainen U jolle L u = L(U). Nauhojen kaytto syotteella z = w111x missa w on koneen M koodi: Nauha 1 sisaltaa syotteen z ja siis erityisesti koneen M siirtymafunktion koodin w Nauha 2 simuloi koneen M nauhan sisaltoa kayttaen samaa koodausta kuin siirtymafunktiossa; siis esim. patkaa : : : X 3 X 1 X 4 : : : esittaisi : : : 100010100001 : : : Nauha 3 simuloi koneen M tilaa; tila q i koodataan 0 i Nauha 4 on tyotilaa 104

Koneen U laskenta: Aluksi tarkista, onko syote muotoa w111x jollain validilla koodilla w. Jos ei ole, niin hylkaa. Muuten rupea simuloimaan konetta M = M w syotteella x. Kussakin askelessa 1. Olkoon nauhalla 3 jono : : : #0 i # : : : ja nauhalla 2 nauhapaasta alkaen jono 0 j 1. 2. Etsi koneen M kuvauksesta nauhalla 1 kohta : : : 110 i 10 j 1 : : :; jos ei loydy, niin hylkaa. 3. Olkoon nauhalta 1 loytynyt jono : : : 110 i 10 j 10 k 10 l 10 m 11 : : :. 4. Vaihda nauhan 3 sisalloksi 0 k ja nauhalle 2 nauhapaasta alkaen 0 l ; siirra nauhan 2 loppuosuutta tarpeen mukaan. 5. Siirra nauhan 2 nauhapaa seuraavaan ykkoseen vasemmalla (jos m = 1) tai oikealla (jos m = 2). 6. Jos q k on hyvaksyva tila (siis k = 2), hyvaksy. 105

Lause 2.6: [HMU Thm. 9.6(b)] Universaalikieli L u ei ole rekursiivinen. Seuraavalla kalvolla on varsinainen todistus, jossa kaytetaan tasmallisemmin Turingin kone -formalismia. Todistuksen idea on seuraava: Tehdaan vastaoletus, etta kieli L u = f w111x j x 2 L(M w ) g voidaan tunnistaa totaalisella Turingin koneella. Tama tarkoittaa, etta on olemassa kaikilla syotteilla x ja w pysahtyva proseduuri p(w; x), joka palauttaa tosi joss x 2 L(M w ). Nyt seuraava proseduuri q(w) palauttaa tosi joss w 2 L d (eli w 62 L(M w )): q(w): jos p(w; w) niin palauta epatosi muuten palauta tosi Tama on ristiriita, koska L d ei ole rekursiivinen (eika edes rekursiivisesti lueteltava). 106

Todistus: Tehdaan vastaoletus etta L u = L(M) jollain totaalisella M. Muodostetaan totaalinen M 0 jolle L(M 0 ) = L d, missa L d on aiemmin ei-rekursiiviseksi osoitettu diagonaalikieli; ristiriita. Kone M 0 toimii syotteella w seuraavasti: 1. Jos w ei ole validi koodi, hyvaksy. 2. Muuten muunna nauhan sisalloksi w111w. 3. Simuloi koneen M laskentaa; oletuksen mukaan tama johtaa joko hylkaavaan tai hyvaksyvaan lopputilaan. 4. Jos M hyvaksyy, niin hylkaa; jos M hylkaa, niin hyvaksy. Nyt w 2 L(M 0 ), (w ei validi koodi tai w111w 62 L u ), w 62 L(M w ), w 2 L d : 107

Pysahtymisongelma Voimme nyt formuloida pysahtymisongelman kieleksi H = f w111x 2 f 0; 1 g j w validi koodi ja M w pysahtyy syotteella x g : Lause 2.7: Kieli H on rekursiivisesti lueteltava. Todistus: Universaalikoneen U konstruktiota on helppo muuttaa siten etta se hyvaksyy jos ja vain jos simuloitavan koneen laskenta pysahtyy. Lause 2.8: Kieli H ei ole rekursiivinen. Todistus: Tehdaan vastaoletus etta H = L(M) jollain totaalilla M. Tasta saadaan helposti sellainen totaali M 0, etta L(M 0 ) = H ja hyvaksyessaan syotteen x kone M 0 jattaa laskennan lopuksi nauhalle alkuperaisen syotteen tyhjamerkkien ymparoimana. 108

Tasta saadaan totaalinen kone M 00 joka tunnistaa universaalikielen L u seuraavasti: 1. Tarkista etta syote on muotoa w111x missa w on validi koodi; jos ei ole, niin hylkaa. 2. Simuloi sitten konetta M 0 ; jos hylkasi niin hylkaa. 3. Jos M 0 hyvaksyi, kasittele sama syote universaalikoneella U, jonka hyvaksyminen tai hylkaaminen jaa voimaan. Universaalikoneen konstruktiosta nahdaan, etta U pysahtyy syotteella w111x jos ja vain jos M w pysahtyy syotteella x. Siis M 00 on totaali ja tunnistaa saman kielen kuin U; ristiriita 109

Seuraava ongelma on oleellisesti pysahtymisongelman komplementti eika siis edes osittain ratkeava. Lause 2.9: "Pysahtymattomyysongelma" e H missa eh = f w111x j w validi koodi, M w ei pysahdy syotteella x g ei ole rekursiivisesti lueteltava. Todistus: Pysahtymisongelman komplementti H voidaan esittaa muodossa H = e H [ E missa E = f z 2 f 0; 1 g n j z ei ole w111x millaan validilla koodilla w g : Selvasti E on rekursiivinen Siis jos e H olisi rekursiivisesti lueteltava, myos H = e H [ E olisi (Lause 2.3). Kieli H on rekursiivisesti lueteltava, joten jos H myos olisi, niin H olisi rekursiivinen (Lause 2.4); ristiriita. Siis e H ei voi olle rekursiivisesti lueteltava 110

Ohjelmointikielen pysahtymisongelma Turingin koneet ovat analogisia jollain ohjelmointikielella kirjoitettujen ohjelmien kanssa: Turingin kone -formalismi jonkin ohjelmointikieli Turingin kone talla kielella kirjoitettu ohjelma Turingin koneen koodi ohjelma kaannettyna konekielelle universaali Turingin kone konekielen tulkki joitain ohjelmointikielten ratkeamattomuustuloksia voidaan katevasti osoittaa suoraan (kuten johdannossa C-kielen pysahtymisongelma) voidaan myos kayttaa hyvaksi Turingin koneiden ja minka tahansa yleisohjelmointikielen samaa ilmaisuvoimaa ja siirtaa tulokset Turingin koneista ohjelmointikieliin "sama ilmaisuvoima" tarkoittaa tassa, etta mika tahansa ongelma voida ratkaista Turingin koneella jos ja vain jos se voidaan ratkaista kyseisella ohjelmointikielella 111

Esimerkki 2.10: C-kielen pysahtymisongelma Rajoitutaan tarkastelemaan C-kielen funktioita jotka saavat parametrina yhden merkkijonon ja palauttavat 0 tai 1 tai jaavat silmukkaan. Sanotaan etta tallainen funktio f hyvaksyy merkkijonon x jos f(x) palauttaa 1, ja on totaalinen jos f(x) pysahtyy kaikilla x. Ollaan valmiit uskomaan, etta kieli A voidaan tunnistaa (totaalisella) Turingin koneella jos ja vain jos se voidaan tunnistaa tallaisella (totaalisella) C-funktiolla. Taman uskomuksen tarkka perusteleminen vaatisi tietysti C-kielen semantiikan tarkkaa lapikaymista, mutta intuitiivisesti se on "selvasti" totta (vrt. RAM-malli). Halutaan osoittaa Turingin koneiden pysahtymisongelmalle analoginen tulos: mikaan totaalinen C-funktio ei tunnista kielta H C = f w x j w on C-funktio joka syotteella x pysahtyy g 112

Argumentti menee paapiirtessaan seuraavasti: koska C on yhta ilmaisuvoimainen kuin Turingin koneet, voidaan Turingin koneiden universaalikieli L u tunnistaa jollain (ei-totaalisella) C-funktiolla univt siis kysymykset Turingin koneen M w toiminnasta syotteella x palautuvat kysymyksiksi C-funktion univt toiminnasta syotteella w111x. erityisesti jos jokin C-funktio halts ratkaisisi C-funktioiden pysahtymisongelman, niin tata kautta se ratkaisisi myos Turingin koneiden pysahtymisongelman koska toisaalta Turingin koneet ovat yhta ilmaisuvoimaisia kuin C-funktiot, funktiota halts voitaisiin simuloida Turingin koneella nain saataisiin ratkaistuksi Turingin koneiden pysahtymisongelma; ristiriita 113

Esitetaan sama hieman yksityiskohtaisemmin. Vastaoletus siis on, etta jokin totaalinen C-funktio haltsc ratkaisee C-kielen pysahtymisongelman. "Tunnetusti" on olemassa C-funktio f u joka simuloi universaalia Turingin konetta U. Siis erityisesti f u syotteella w111x pysahtyy, jos ja vain jos M w syotteella x pysahtyy. Olkoon haltst C-funktio, joka syotteella z tekee kutsun haltsc(p*z) missa p on funktion f u teksti (joka siis on jokin merkkijonovakio). Tama on helppo konstruoida, kun haltsc oletetaan annetuksi. Siis haltst on totaalinen, ja funktiota haltsc koskevan oletuksen mukaan haltst(w111x) = 1, haltsc(p w111x) = 1, f u (w111x) pysahtyy, w111x 2 H: Toisaalta on selvasti olemassa totaalinen Turingin kone M H joka simuloi C-funktiota haltst. Siis M H ratkaisee Turingin koneiden pysahtymisongelman; ristiriita. 114

Rekursiiviset palautukset [HMU 9.3.1] Yleisesti sanomme, etta ongelma P voidaan palauttaa ongelmaan Q, jos mista tahansa ongelmalle Q annetusta ratkaisualgoritmista voidaan jotenkin muodostaa ongelmalle P ratkaisualgoritmi. Palauttaminen, epaformaalisti ymmarrettyna, on keskeinen valine normaalissa ohjelmoinnissa jne: 1. Halutaan ratkaista ongelma P. 2. Kirjoitetaan ongelman P ratkaiseva ohjelma p, joka kutsuu aliohjelmaa q (esim. sort). Aliohjelmasta q oletetaan, etta se ratkaisee tunnetun ongelman Q (esim. jarjestaa taulukon), mutta sen toteutuksesta ei sanota viela mitaan. 3. Aliohjelma p on nyt ongelman P palautus ongelmaan Q. 4. Jos jostain kirjastosta loydetaan ongelmalle Q ratkaisualgoritmi (esim. quicksort), saadaan ratkaisu myos ongelmalle P. 115

Talla kurssilla palautuksia kaytetaan lahinna "vaaraan" suuntaan osoittamaan ongelmia ratkeamattomiksi: 1. Halutaan osoittaa, etta ongelma Q on ratkeamaton. 2. Palautetaan jokin tunnetusti ratkeamaton ongelma P (esim. L d ) ongelmaan Q, ts. osoitetaan miten mista tahansa ongelman Q ratkaisualgoritmista saataisiin ongelman P ratkaisualgoritmi. 3. Koska oletuksen mukaan kuitenkin P on ratkeamaton, myoskaan ongelmalle Q ei voi olla ratkaisualgoritmia. Seuraavaksi maaritellaan palautuksen kasite tasmallisesti, tarkastellaan esimerkkeja edella esitetyn tyyppisista todistuksista ja samalla laajennetaan tunnettujen ratkeamattomien ongelmien "kirjastoa", josta saadaan kandidaatteja ongelmaksi P. 116

Ruvetaan nyt maarittelemaan palautuksen kasitetta tasmallisemmin. Idea: Maaritellaan laskennallisten ongelmien relaatio A B, "ongelma A voidaan palauttaa ongelmaan B" Intuitiivinen tulkinta: Kun A B niin B on ainakin yhta vaikea kuin A, eli ongelma A voidaan ratkaista ongelman B avulla. Tyypillinen kayttotapa: Halutaan osoittaa ongelma B "vaikeaksi". Valitaan jokin "vaikeaksi" tunnettu A, ja osoitetaan A B. Huomaa palautuksen suunta! Huom. kurssikirja ei maarittele palautukselle merkintaa A B, mutta kaytamme sita tassa koska se on vakiintunut ja helpottaa asioiden esittamista. 117

Palautus voidaan formalisoida monella tavalla. Maarittelemme seuraavaksi yksinkertaisen ns. many-one-palautuksen, jota merkitaan m. Johdatteleva esimerkki: Tunnetusti kaikilla x; y 2 R patee joten e x e y = e x+y ; a b = exp(ln a + ln b): Olkoon siis r: R 2! R, r(a; b) = ab. Nyt r = s ; missa (a; b) = (ln a; ln b), s(x; y) = x + y ja (z) = e z. Yleisemmin kun nain patee, sanomme etta (; ) palauttaa funktion r funktioon s. (Nykyaan taman esimerkkipalautuksen merkitys on vahentynyt, mutta aikanaan se oli tarkea koska eksponentti- ja logaritmifunktiot saatiin taulukosta ja yhteenlasku kynalla ja paperilla on helpompaa kuin kertolasku.) 118

... V U s r Y X. Funktion r: U! X palautus funktioon s: V! Y kayttaen funktioita : U! V ja : Y! X: Esimerkissa siis U = V = R 2, X = Y = R, r(a; b) = ab, s(x; y) = x + y, (a; b) = (ln a; ln b) ja (z) = exp(z). 119

Olkoot nyt A ja B paatosongelmia. Funktio f:! on rekursiivinen palautus kielesta A kieleen B (eli kielen A rekursiivinen palautus kieleen B) jos f on rekursiivinen ja kaikilla x 2 patee x 2 A jos ja vain jos f(x) 2 B. Talloin merkitaan f: A m B. Olkoon id joukon f 0; 1 g identiteettikuvaus. Edella esitettyja kasitteita kayttaen f: A m B siis tarkoittaa, etta pari (f; id) palauttaa ongelman A karakteristisen funktion A ongelman B karakteristiseen funktioon B, eli A (x) = B (f(x)) kaikilla x 2 ; ja lisaksi f on rekursiivinen. 120

B A fa A fa B Periaatekuva palautuksesta f: A m B (Tassa A = A.) 121

Kieli A palautuu rekursiivisesti kieleen B jos on olemassa rekursiivinen palautus kielesta A kieleen B. Talloin merkitaan A m B. Lause 2.11: [HMU Thm 9.7] Olkoon A m B ja B rekursiivinen (rekursiivisesti lueteltava). Talloin A on rekursiivinen (vast. rekursiivisesti lueteltava). Todistus: Helppo. Huomaa, etta m -palautus on vain eras erikoistapaus palautuksesta. On olemassa tilanteita, joissa ongelma A kylla intuitiivisesti voidaan ratkaista ongelman B avulla, mutta ei pade A m B. Esimerkki: yleensa ei pade A m A, missa A = A. Tallaisten tilanteiden tarkastelemiseen tarvitaan jotain voimakkaampaa (ja hankalammin maariteltavaa) palautuksen kasitetta, kuten Turing-palautus T. Talla kurssilla sivuutamme ongelman. 122

Epatyhjyysongelma [HMU 9.3.2] Esimerkkina palautustekniikasta, ja johdatuksena yleisempaan Ricen lauseeseen, tarkastellaan kielta L ne = f w 2 f 0; 1 g j L(M w ) 6= ; g : Ongelmana on siis paattaa annetusta Turingin koneesta, hyvaksyyko se ylipaansa mitaan merkkijonoja. Lause 2.12: [HMU Thm. 9.8, 9.9] Kieli L ne on rekursiivisesti lueteltava mutta ei rekursiivinen. Todistus Kiinnostavampi puoli vaitteesta on ei-rekursiivisuus, mutta tarkastetaan kuitenkin ensin rekursiivinen lueteltavuus. Tama kay helpoimmin konstruoimalla epadeterministinen Turingin kone M jolle L ne = L(M). 123

Koneen M laskenta etenee seuraavasti: 1. Kirjoita nauhalle syotteen w jatkoksi 111 ja epadeterministisesti generoitu mielivaltainen x 2 f 0; 1 g. 2. Palaa nauhan alkuun ja simuloi universaalikonetta U syotteella w111x. Nyt w 2 L ne, x 2 L(M w ) jollain x 2 f 0; 1 g, w111x 2 L(U) jollain x 2 f 0; 1 g, w 2 L(M): /2 124

Ei-rekursiivisuus osoitetaan palautuksella universaalikielesta L u. Siis muodostetaan funktio f jolle f(z) 2 L ne jos ja vain jos z 2 L u, ja lisaksi funktio f on rekursiivinen. Talloin f: L u m L ne, joten jos L ne olisi rekursiivinen niin myos L u olisi; ristiriita. Funktion f pitaa siis annetulla syotteella z = w111x muodostaa Turingin kone M (tai oikeastaan sen koodi) siten, etta jos x 62 L(M w ) niin M ei hyvaksy yhtaan merkkijonoa jos x 2 L(M w ) niin M hyvaksyy ainakin jonkin merkkijonon Konstruktiossa itse asiassa kay jopa niin, etta jos x 2 L(M w ) niin M hyvaksyy kaikki merkkijonot 125

Tarkastellaan jotain kiinteaa z = w111x. Syotteella y kone M toimii seuraavasti: 1. Pyyhi syote y pois nauhalta; nauha on nyt tyhja. 2. Kopioi nauhalle merkkijono x; palauta nauhapaa alkuun. 3. Simuloi konetta M w. Konstruktion perusteella on ilmeista etta jos w111x 2 L u niin L(M) = jos w111x 62 L u niin L(M) = ; Siis jos on olemassa rekursiivinen funktio joka syotteella z tuottaa koodin v siten, etta kone M v toimii kuten M ylla, todistus on valmis. 126

Tarkastellaan nyt tarkemmin, millaisia tiloja ja siirtymia yllakuvatussa koneessa M = M v pitaisi olla. Olkoon z = w111x missa x = x 1 : : : x n. pohjana toimii kone M w lisataan alkutilaksi uusi tila ^q 0, jossa kone kirjoittaa nauhalle tyhjaa niin kauan kuin ei-tyhjamerkkeja riittaa. Kun tulee vastaan tyhja, siirrytaan uuteen tilaan ^q 1. lisataan tilat ^q i, i = 1; : : : ; n, missa tilassa ^q i, 1 i n 1, kone kirjoittaa merkin x i, siirtyy tilaan ^q i+1 ja siirtaa nauhapaata oikealla. tilasta ^q n siirrytaan uuteen tilaan ^q n+1 jossa kone siirtaa nauhapaata takaisin vasemmalle kunnes taas loytyy tyhjamerkki tilasta ^q n+1 siirrytaan alkuperaisen koneen M w alkutilaan siirtymat koneen M w alkuperaisten tilojen valilla sailyvat ennallaan, samoin lopputilat 127

Selvasti ylla kuvattu M = M v toimii kuten vaitetaan: jos x 2 L(M w ) niin se hyvaksyy kaikki syotteet y, muuten ei hyvaksy mitaan. Kuvaus f, missa f(w111x) = v edella kuvattuun tapaan, on selvasti rekursiivinen. Siis f on rekursiivinen palautus L u m L ne. Koska L u ei ole rekursiivinen, niin kieli L ne ei sekaan ole rekursiivinen. 128

Lause 2.13: [HMU Thm. 9.10] Tyhjyysongelma ei ole osittain ratkeava; ts. kieli L e = f w 2 f 0; 1 g j L(M w ) = ; g ei ole rekursiivisesti lueteltava. Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen. Koska L e = L ne ja L ne juuri todistettiin ei-rekursiiviseksi mutta rekursiivisesti lueteltavaksi, L e ei voi olla rekursiivisesti lueteltava. Esimerkkina yksinkertaisesta palautuksesta tarkastellaan kysymysta, onko kahden rekursiivisesti lueteltavan kielen leikkaus tyhja. Lause 2.14: Kieli L ep = f v111w j v; w 2 f 0; 1 g ; L(M v ) \ L(M w ) = ; g ei ole rekursiivisesti lueteltava. 129

Tekninen huomio: "syntaksintarkistus" Kielen L ep kiinnostavia tapauksia ovat tietysti sellaiset merkkijonot z = v111w, missa seka v etta w ovat valideja koodeja (eli M v 6= M triv ja M w 6= M triv ). Koska validi koodi alkaa ja loppuu nollalla eika sisalla merkkijonoa 111, niin merkkijonolla z tallaisessa tapauksessa ei voi olla mitaan vaihtoehtoista tulkintaa z = v 0 111w 0, missa v 0 6= v tai w 0 6= w. Jos merkkijono z on "syntaktisesti virheellinen" eli ei muotoa v111w tallaisilla v; w, kysymys pateeko z 2 L ep ei vaikuta edes hyvin maaritellylta. Voi nimittain olla z = v111w = v 0 111w 0, missa v 6= v 0 ja w 6= w 0. Talloin kuitenkin seka parista (v; w) etta parista (v 0 ; w 0 ) ainakin toinen osapuoli sisaltaa merkkijonon 111, tai alku- tai loppuykkosen, eika siis ole validi koodi. Sopimuksen mukaan ei-validille koodille x patee L(M x ) = ;, joten tassa tapauksessa L(M v ) \ L(M w ) = L(M v 0) \ L(M w 0) = ; ja z 2 L ep patee tulkinnasta riippumatta. Siis "syntaksivirheelliset" syotteet tulevat tassa mukaan kieleen L ep (kunhan niissa on ainakin yksi 111). 130

Lauseen 2.14 todistus: Palautus kielesta L e. Siis muodostetaan rekursiivinen funktio f: f 0; 1 g! f 0; 1 g, jolle patee f(v) 2 L ep, v 2 L e : Olkoon w all jokin sellainen koodi, etta L(M wall) = f 0; 1 g. Palautusfunktio f maaritellaan f(v) = v111w all : Nyt jos v on validi koodi, patee L(M v ) = L(M v ) \ f 0; 1 g = L(M v ) \ L(M wall) ja siis v 2 L e, L(M v ) = ;, L(M v ) \ L(M wall) = ;, f(v) 2 L ep : Jos taas v ei ole validi koodi, niin edella esitetyn huomautuksen mukaan v 2 L e ja f(v) 2 L ep. 131

Siis joka tapauksessa v 2 L e jos ja vain jos f(v) 2 L ep. Funktio f voidaan helposti laskea Turingin koneella: 1. Siirra nauhapaa syotemerkkijonon loppuun. 2. Kirjoita nauhalle merkkijono 111w all. Siis on muodostettu rekursiivinen palautus f: L e m L ep. Jos L ep olisi rekursiivisesti lueteltava, myos L e olisi; ristiriita. 132

Semanttisten ongelmien ratkeamattomuus [HMU 9.3.3] Intuitiivisesti semanttinen ongelma on Turingin konetta koskeva kysymys, jonka vastaus riippuu vain koneen hyvaksymasta kielesta. Siis jos L(M) = L(M 0 ), vastauksen on oltava sama koneille M ja M 0. Muodollisemmin semanttinen ominaisuus S on kokoelma rekursiivisesti lueteltavia aakkoston f 0; 1 g kielia. Toisin sanoen S RE, missa siis RE = f L(M) f 0; 1 g j M Turingin kone syoteaakkostolla f 0; 1 g g Ominaisuus S on ratkeava jos joukko on rekursiivinen. L S = f w 2 f 0; 1 g n j L(M w ) 2 S g Esimerkki 2.15: Valitaan S = f ; g, siis pelkan tyhjan kielen sisaltava luokka. Nyt L S = L e, edella esitetty tyhjyysongelma, joten S ei ole ratkeava. 133

Semanttinen ominaisuus S on triviaali jos joko S = ; tai S = RE. Siis ominaisuus on ei-triviaali jos on olemassa kaksi kielta L; L 0 2 RE joille L 2 S ja L 0 62 S. Lause 2.16 (Rice): [HMU Thm. 9.11] Kaikki ei-triviaalit semanttiset ominaisuudet ovat ratkeamattomia. Siis esim. seuraavat ongelmat ovat ratkeamattomia: hyvaksyyko M tasan k merkkijonoa (milla tahansa k) hyvaksyyko M aarettoman monta merkkijonoa onko koneen M hyvaksyma kieli saannollinen onko koneen M hyvaksyma kieli kontekstiton (kaikissa ongelmissa siis syotteena koneen M koodi) 134

Ricen lauseen todistus: Olkoon S ei-triviaali. Jatkossa esitetaan todistus tapaukselle ; 62 S. Jos ; 2 S, voidaan samaa todistusta soveltaa ominaisuuteen S = RE S joka on ei-triviaali eika sisalla kielta ;. Todistus perustuu palautukseen universaalikielesta L u. Siis muodostetaan rekursiivinen f: f 0; 1 g! f 0; 1 g, jolle f(v) 2 L S jos ja vain jos v 2 L u. Toisin sanoen on oltava L(M f(v) ) 2 S jos ja vain jos v = w111x missa x 2 L(M w ). Kun v ei ole muotoa v = w111x millekaan koodille w, maaritellaan f(v) = w 0 missa w 0 on jokin kiintea koodi jolle L(M w0) 62 S. Tarkastellaan nyt miten f(v) maaritellaan, kun v = w111x, missa w on validi koodi jollekin koneelle M. 135

Nyt on siis annettuna M = M w ja x, ja pitaa konstruoida M 0 = M v jolle L(M 0 ) 2 S jos ja vain jos x 2 L(M). (Ja sitten asetetaan f(w111x) = v.) Olkoon M L jokin kiintea kone jolle L(M L ) 2 S. Kone M 0 konstruoidaan parin (M; x) perusteella siten, etta jos x 2 L(M) niin L(M 0 ) = L(M L ) jos x 62 L(M) niin L(M 0 ) = ; mika toteuttaa vaatimukset. 136

Kone M 0 on kaksinauhainen ja toimii syotteella z seuraavasti: 1. Kopio merkkijono x kakkosnauhalle. 2. Kakkosnauhaa kayttaen simuloi koneen M laskenta syotteella x 3. Jos simulointi johti hylkaamiseen, hylkaa z. (Tassa vaiheessa syotetta z ei ole vilkaistukaan!) 4. Jos simulointi johti hyvaksymiseen, simuloi koneen M L laskentaa varsinaisella syotteella z; hyvaksy jos M L hyvaksyy. Nyt L(M 0 ) = L(M L ) jos x 2 L(M); muuten L(M 0 ) = ;. Selvasti merkkijonosta v = w111x, missa w on koneen M indeksi, voidaan laskea f(v) joka on kuvatun koneen M 0 indeksi. Huomaa, etta x tulee koodatuksi koneen M 0 sisaan eika ole sen syote. 137

z M L x M Koneen M 0 konstruktio Ricen lauseessa 138

Muita ratkeamattomuustuloksia ( )/[HMU 9.5] Ricen lause voidaan ilmeisella tavalla siirtaa Turingin koneista koskemaan esim. C-kielisia ohjelmia. Turingin koneiden semanttiset ominaisuudet vastaavat C-ohjelmien syote-tuloste-relaation ominaisuuksia. On siis esim. ratkeamatonta pysahtyyko ohjelma millaan syotteella pysahtyyko ohjelma kaikilla syotteilla tulostaako ohjelma "1" millaan syotteella jne. Turingin koneille on ratkeamatonta, kayko kone annetussa tilassa q 2 Q millaan syotteella. Vastaavasti on ohjelmille on ratkeamatonta suoritetaanko ohjelman rivia numero k millaan syotteella 139

Matematiikan ratkeamattomuustuloksia Klassinen tulos (Church, Godel 1930-luvulla) sanoo, etta seuraava ongelma on ratkeamaton: Annettu: luonnollisten lukujen aritmetiikkaa koskeva ensimmaisen kertaluvun logiikan kaava Kysymys: onko tosi Tassa ei menna tarkemmin siihen, miten kaavat ja niiden totuus muodollisesti maaritellaan. Huomataan kuitenkin, etta jos rajoitutaan kaavoihin ilman kertolaskua, ongelma on ratkeava. 140

Yllattaen Matijasevitsh 1970 osoitti paljon vahvemmin, etta jo seuraava paljon rajoitetumpi ongelma on ratkeamaton: Annettu: kokonaislukukertoiminen n muuttujan polynomi p(x 1 ; : : : ; x n ) Kysymys: onko olemassa (y 1 ; : : : ; y n ) 2 Z n joilla p(y 1 ; : : : ; y n ) = 0 Itse asiassa Matijasevitsh osoitti viela vahvemmin, etta mille tahansa osittain ratkeavalle luonnollisten lukujen ongelmalle on olemassa kokonaislukukertoiminen polynomi p jolle (x) = 1 jos ja vain jos 9y 1 ; : : : ; y n : p (x; y 1 ; : : : ; y n ) = 0: 141

Formaalien kielten ratkeamattomia ongelmia Olkoot G 1 ja G 2 kontekstittomia kielioppeja ja R saannollinen lauseke. Talloin esim. seuraavat ongelmat ovat ratkeamattomia: onko G 1 moniselitteinen onko L(G 1 ) \ L(G 2 ) = ; onko L(G 1 ) = L(G 2 ) onko L(G 1 ) = L(R) onko L(G 1 ) = T jollain aakkostolla T Naiden ratkeamattomuustulosten todistukset sivuutetaan tassa. (Mutta palaamme asiaan lyhyesti myohemmin.) Todetaan kuitenkin, etta ne kaikki voidaan tehda palutuksella Postin vastaavuusongelmasta joka seuraavaksi kaydaan lapi tarkemmin. 142

Postin vastaavuusongelma [HMU 9.4] (Post Correspondence Problem, E. Post 1946) Edella on todistettu ratkeamattomuustuloksia vain melko suoraan Turingin koneisiin liittyville ongelmille. Tarkastellaan nyt seuraavaa merkkijonojen jarjestelemiseen liittyvaa ongelmaa: Annettu: Jono merkkijonopareja ((w 1 ; x 1 ); : : : ; (w k ; x k )) missa k 2 N on mielivaltainen ja w i ; x i 2 Kysymys: onko olemassa indeksijono (i 1 ; : : : ; i m ) jolle w i1 w i2 : : : w im = x i1 x i2 : : : x im Esimerkki 2.17: Tapauksella ((w 1 ; x 1 ); (w 2 ; x 2 ); (w 3 ; x 3 ); (w 4 ; x 4 ) = ((b; ca); (a; ab); (ca; a); (abc; c)) vastaus on kylla, mika nahdaan indeksijonolla (2; 1; 3; 2; 4). Nimittain w 2 w 1 w 3 w 2 w 4 = abcaaabc = x 2 x 1 x 3 x 2 x 4 : 143

Edellisen kalvon esimerkkivastaavuus kuvallisesti: w 2 1 3 2 4. a b c a a a b c a b c a a a b c x 2 1 3 2 4 144

Tekninen huomio: Jotta voisimme esittaa taman ongelman formaalina kielena, meidan pitaa sopia miten merkkijonopari, ja sellaisten muodostama jono, koodataan yhdeksi merkkijonoksi. Eras ilmeinen ratkaisu on laajentaa aakkostoa merkeilla "(", "," ja ")". Monissa yhteyksissa on kuitenkin katevaa, jos pareja ja jonoja voidaan koodata aakkostoa laajentamatta. Kun w = x 1 x 2 : : : x n missa x i 2, maaritellaan ^w = x 1 x 1 x 2 x 2 : : : x n x n ; siis kaikki merkit tuplataan. Kun j j 2, maaritellaan jononmuodostusfunktio h i seuraavasti: h w 1 ; w 2 ; w 3 ; : : : ; w n 1 ; w n i = ^w 1 ab ^w 2 ab ^w 3 ab : : : ^w n 1 ab ^w n missa a ja b ovat mitka tahansa kaksi aakkoston merkkia. Esim. h 101; 01; 10 i = 110011010011011100 missa on valittu a = 0; b = 1. Nyt h i on helppo laskea ja kuvaa kaikki aakkoston merkkijonojen aarelliset jonot aakkoston merkkijonoiksi. Kaantan jos v = h w 1 ; : : : ; w k i on annettu, niin komponentit w i ovat yksikasitteiset ja helppo loytaa. 145

Olkoon nyt j j 2. Maaritellaan formaali kieli PCP seuraavasti: PCP koostuu merkkijonoista h w 1 ; x 1 ; : : : ; w k ; x k i joille on olemassa indeksijono i 1 ; : : : ; i m missa w i1 : : : w im = x i1 : : : x im : Seuraavassa tarvitaan myos modioitua PCP-kielta, jossa vaaditaan, etta sovituksen pitaa alkaa parilla (w 1 ; x 1 ): MPCP koostuu merkkijonoista h w 1 ; x 1 ; : : : ; w k ; x k i joille on olemassa indeksijono i 2 ; : : : ; i m missa w 1 w i2 : : : w im = x 1 x i2 : : : x im : 146

Seuraavassa todistetaan Lause 2.18: Kieli MPCP ei ole rekursiivinen. Tasta paastaan alkuperaiseen ongelmaan PCP seuraavan aputuloksen nojalla: Lemma 2.19: MPCP m PCP. Todistus: Harjoitustehtava [HMU Thm. 9.17]. Tuttujen periaatteiden mukaisesti nyt seuraa Korollaari 2.20: [HMU Thm. 9.19] Kieli PCP ei ole rekursiivinen. Todistus: Jos PCP olisi rekursiivinen, niin edellisen lemman seurauksena myos MPCP olisi, vastoin edellista lausetta. 147

Kielen MPCP ratkeamattomuus osoitetaan konstruoimalla rekursiivinen palautus f: L u m MPCP universaalikielesta L u. Kaydaan lapi palautuksen konstruktio paapiirteissaan. Pitaa siis maaritella f siten, etta f(v) 2 MPCP jos ja vain jos v 2 L u. Mielenkiintoinen tapaus on se, jossa v = w111x missa w on koodi jollekin Turingin koneelle M. Seuraavassa esitellaan ne parit (w i ; x i ) joille f(v) = h w 1 ; x 1 ; : : : ; w n ; x n i. MPCP-tapauksen kieleksi tulee [ Q [ f # g missa on koneen M nauha-aakkosto, Q sen tilojen joukko ja # symboli joka ei kuulu kumpaankaan. 148

MPCP-tapauksen osaratkaisu on indeksijono (i 2 ; : : : ; i n ) missa joko merkkijono w 1 w i2 : : : w in on merkkijonon x 1 x i2 : : : x in alkuosa, tai paivastoin. Siis osaratkaisuja ovat erityisesti ne indeksijonot jotka voidaan taydentaa varsinaisiksi ratkaisuiksi. Osaratkaisulta ei kuitenkaan edellyteta, etta tallainen taydennys olisi olemassa. Esimerkki 2.21: tyhja indeksijono (n = 1) on aina osaratkaisu (edellyttaen etta w 1 on merkkijonon x 1 alkuosa tai kaantaen). Esimerkki 2.22: Tapauksella ((w 1 ; x 1 ); (w 2 ; x 2 ); (w 3 ; x 3 ); (w 4 ; x 4 ) = ((a; ab); (b; ca); (ca; a); (abc; c)) indeksijono (2; 3; 1) on osaratkaisu, silla w 1 w 2 w 3 w 1 = abcaa x 1 x 2 x 3 x 1 = abcaaab Seuraavaksi ruvetaan konstruoimaan itse palautusta L u m MPCP. 149

Koneelle M ja syotteelle x konstruoidaan nyt MPCP-tapaus jonka osaratkaisut vastaavat koneen M laskentoja syotteella x. Olkoon tama laskenta q 0 x `M y 1 q 0 1 z 1 `M : : : `M y p q 0 p z p missa q 0 on koneen M alkutila. Esitetaan laskenta kielen [ Q [ f # g merkkijonoina #q 0 x#y 1 q 0 1 z 1#y 2 q 0 2 z 2# : : : #y p q 0 p z p# Nyt MPCP-tapaukselle on kaikilla t = 0; 1; : : : ; p 1 osaratkaisu (i 2 ; : : : ; i n ) missa w 1 w i2 x 1 x i2 w in = #q 0 x#y 1 q1 0 z 1#y 2 q2 0 z 2# : : : #y t qt 0 z t# x in = #q 0 x#y 1 q1 0 z 1#y 2 q2 0 z 2# : : : #y t qt 0 z t#y t+1 qt+1 0 z t+1# 150

MPCP-tapaukseen tulee kaikki seuraavanlaiset parit (w; x), missa q on mielivaltainen tila, q F hyvaksyva tila, X ja Y mielivaltaisia nauha-aakkosia ja B tyhjamerkki (siis B 6= #) (A) (#; #q 0 x#) tulee alkupariksi (w 1 ; x 1 ) (B) (a; a) kaikilla a 2 [ f # g (C) (qx; Y p) jos (q; X) = (p; Y; R) (C) (ZqX; pzy ) kaikilla Z 2 jos (q; X) = (p; Y; L) (D) (q#; Y p#) jos (q; B) = (p; Y; R) (D) (Zq#; pzy #) kaikilla Z 2 jos (q; B) = (p; Y; L) (E) (Xq F ; q F ) ja (q F X; q F ) kaikilla q F 2 F, X 2 (F) (q F ##; #) kaikilla q F 2 F Idea on etta (A)-pari esittaa laskennan alun ja (E)- ja (F)-tyyppiset parit lopun. (C)-parit esittavat laskennan siirtymia normaalitilanteessa ja (D)-parit nauhan "reunoilla". (B)-parit kopioivat ne nauhan osat joita siirtyma ei muuta. 151

Tarkastellaan esimerkkina Turingin konetta M = (f q 0 ; q 1 ; q 2 ; q 3 g ; f 0; 1 g ; f 0; 1; B g ; ; q 0 ; B; f q 1 g) missa (q 0 ; 0) = (q 2 ; 1; R), (q 2 ; 0) = (q 1 ; 0; R), (q 2 ; 1) = (q 3 ; 0; R) ja (q 3 ; B) = (q 2 ; 1; L); muita siirtymia ei ole. Kone M hyvaksyy syotteen 01 seuraavasti: q 0 01 ` 1q 2 1 ` 10q 3 ` 1q 2 01 ` 10q 1 1: MPCP-tapaukseen tulee esitetyn laisia pareja seuraavasti: (A): (#; #q 0 01#) (B): (0; 0), (1; 1), (B; B), (#; #) (C): (q 0 0; 1q 2 ), (q 2 0; 0q 1 ), (q 2 1; 0q 3 ), (0q 3 B; q 2 01), (1q 3 B; q 2 11), (Bq 3 B; q 2 B1) (D): (0q 3 #; q 2 01#), (1q 3 #; q 2 11#), (Bq 3 #; q 2 B1#) (E): (0q 1 ; q 1 ), (1q 1 ; q 1 ), (Bq 1 ; q 1 ), (q 1 0; q 1 ), (q 1 1; q 1 ), (q 1 B; q 1 ) (F): (q 1 ##; #) Katsotaan nyt miten MPCP-ratkaisu syntyy yllaolevaa laskentaa simuloiden. 152

Merkitaan W = w 1 w i2 : : : w ik ja X = x 1 x i2 : : : x ik missa (i 2 ; : : : ; i k ) on tahan mennessa kasattu osaratkaisu. Aluksi pitaa siis ottaa pari (#; #q 0 01#): W: # X: #q 0 01# Nyt W-merkkijonon peraan pitaa saada liitetyksi q 0 01#, joten on valittava parit (q 0 0; 1q 2 ), (1; 1) ja (#; #): W: #q 0 01# X: #q 0 01#1q 2 1# X-merkkijonon loppuun siis ilmestyi 1q 2 1#, mika pitaa saada W-merkkijonoon; pitaa valita parit (1; 1), (q 2 1; 0q 3 ) ja (#; #): W: #q 0 01#1q 2 1# X: #q 0 01#1q 2 1#10q 3 # 153

Nyt ollaan syotteen lopussa, ja parin (1; 1) kanssa pari (0q 3 #; q 2 01#) sopii jonon jatkoksi: W: #q 0 01#1q 2 1#10q 3 # X: #q 0 01#1q 2 1#10q 3 #1q 2 01# Seuraavaksi pitaa ottaa parit (1; 1), (q 2 0; 0q 1 ), (1; 1) ja (#; #): W: #q 0 01#1q 2 1#10q 3 #1q 2 01# X: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1# On paasty lopputilaan q 1, ja voidaan "syoda" yksi merkki valitsemalla esim. parit (1; 1), (0q 1 ; q 1 ), (1; 1) ja (#; #): W: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1# X: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1# 154

Jatketaan pareilla (1q 1 ; q 1 ), (1; 1) ja (#; #) W: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1# X: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1#q 1 1# ja sitten (q 1 1; q 1 ) ja (#; #): W: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1#q 1 1# X: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1#q 1 1#q 1 # Nyt ratkaisu tulee valmiiksi lisaamalla pari (q 1 ##; #): W: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1#q 1 1#q 1 ## X: #q 0 01#1q 2 1#10q 3 #1q 2 01#10q 1 1#1q 1 1#q 1 1#q 1 ## 155

Yleisemmin jos M hyvaksyy syotteen x, niin hyvaksyvaa laskentaa vastaa MPCP-tapauksen ratkaisu edellaesitettyyn tapaan. On myos selvaa, etta ainoa mahdollisuus saada osittainen MPCP-ratkaisu on laskennan simuloiminen, ja ainoa tapa saada ratkaisu valmiiksi on paatya laskennassa hyvaksyvaan tilaan. Siis M hyvaksyy merkkijonon x jos ja vain jos parista (M; x) konstruoidulla MPCP-tapauksella on ratkaisu. Koska MPCP-tapauksen konstruoiva funktio ilmeisesti on rekursiivinen, olemme osoittaneet L u m MPCP. Siis MPCP ei ole rekursiivinen. 156

Esimerkkina kieliteoreettisista ongelmista todistetaan seuraava: Lause 2.23: [HMU Thm. 9.22(a)] Seuraava ongelma on ratkeamaton: Annettu: kontekstittomat kieliopit G 1 ja G 2 Kysymys: onko L(G 1 ) \ L(G 2 ) 6= ; Todistus: Osoitetaan, etta mista tahansa PCP-tapauksesta (w 1 ; x 1 ); : : : ; (w k ; x k ) voidaan muodostaa sellaiset kontekstittomat kieliopit G 1 ja G 2, etta L(G 1 ) \ L(G 2 ) 6= ; jos ja vain jos kyseisella PCP-tapauksella on ratkaisu. Koska PCP on ratkeamaton, tama todistaa vaitteen. Kielioppien G 1 ja G 2 paateaakkostoksi tulee [ f a 1 ; : : : ; a k g, missa on PCP-tapauksen aakkosto (w i ; x i 2 ), ja a i missa i = 1; : : : ; k on uusi symboli ("nimi" parille (w i ; x i )). 157

Maaritellaan kielet L A ja L B seuraavasti: L A = f w i1 w i2 : : : w in a in : : : a i2 a i1 j i j 2 f 1; : : : ; k g g L B = f x i1 x i2 : : : x in a in : : : a i2 a i1 j i j 2 f 1; : : : ; k g g Jos (i 1 ; : : : ; i n ) on ratkaisu PCP-tapaukselle, niin w i1 w i2 : : : w in = x i1 x i2 : : : x in, joten w i1 w i2 : : : w in a in : : : a i2 a i1 2 L A \ L B. Jos z 2 L A \ L B, niin z on muotoa va in : : : a i2 a i1 missa v 2. Lisaksi z 2 L A ) v = w i1 w i2 : : : w in z 2 L B ) v = x i1 x i2 : : : x in joten w i1 w i2 : : : w in = v = x i1 x i2 : : : x in ja (i 1 ; : : : ; i n ) on ratkaisu PCP-tapaukselle. Siis PCP-tapauksella on ratkaisu jos ja vain jos L A \ L B 6= ;. 158

Pitaa viela osoittaa, miten annetun PCP-tapauksen perusteella konstruoidaan kontekstittomat kieliopit G 1 ja G 2, joilla L A = L(G 1 ) ja L B = L(G 2 ). Kielioppiin G 1 ainoaksi valikkeeksi tulee A. Produktioita tulee 2k kappaletta, nimittain A! w i Aa i ja A! w i a i kaikilla i = 1; : : : ; k. Vastaavasti kieliopissa G 2 ainoa valike on B, ja produktioina ovat B! x i Ba i ja B! x i a i kaikilla i = 1; : : : ; k. Selvasti nama kieliopit tayttavat halutut ehdot. 159

Luokan RE rakenne ( ) Seuraavan lauseen intuitiivinen tulkinta on, etta universaalikieli L u on "ainakin yhta vaikea" kuin mika tahansa rekursiivisesti lueteltava kieli. Lause 2.24: Jos A 2 RE niin A m L u. Todistus: Olkoon A 2 RE; siis A = L(M) jollain M. Olkoon w koneen M koodi. Maaritellaan f(x) = w111x kaikilla x. Selvasti f on rekursiivinen. Koska x 2 A jos ja vain jos f(x) 2 L u, funktio f on haluttu palautus A m L u. Koska lisaksi L u itse on rekursiivisesti lueteltava, sanomme etta L u on "maksimaalisen vaikea" rekursiivisesti lueteltavien kielten joukossa. Seuraavaksi formalisoimme taman kayttaen RE-taydellisyyden kasitetta. 160

Maaritelma Jos C on kokoelma aakkoston kielia, sanomme etta kieli A on C-taydellinen rekursiivisten palautusten suhteen jos 1. A 2 C ja 2. B m A kaikilla B 2 C. Yleensa on selvaa millaisista palautuksista puhutaan, jolloin sanotaan yksinkertaisesti, etta A on C-taydellinen. Siis C-taydelliset ongelmat ovat luokan C maksimaalisen vaikeita ongelmia. Esimerkki 2.25: L u on RE-taydellinen. 161

Palautuksilla on transitiivisuusominaisuus: Lause 2.26: Jos A m B ja B m C niin A m C. Todistus: HT. Korollaari 2.27: Jos A 2 C ja B m A jollain C-taydellisella B, niin A on C-taydellinen. Todistus: Jos C 2 C, niin C m B (koska B on C-taydellinen) joten C m A (transitiivisuus). Esimerkki 2.28: Kun todistimme, etta epatyhjyysongelma L ne ei ole rekursiivinen, teimme sen muodostamalla palautuksen L u m L ne. Koska lisaksi L ne 2 RE, niin L ne on RE-taydellinen. 162

Lisaa esimerkkeja: Ricen lauseen todistuksessa osoitettiin, etta L u m L S milla tahansa ei-triviaalilla semanttisella ongelmalla S. Siis jos ei-triviaali L S ylipaansa on rekursiivisesti lueteltava, se on RE-taydellinen. Toisaalta jos A on rekursiivinen, niin A m B mille tahansa B kunhan B 6= ; ja B 6=. Siis rekursiiviset kielet ovat "maksimaalisen helppoja". Yleisesti kaikista "luonnollisista" rekursiivisesti lueteltavista kielista osoittautuu, etta ne ovat joko rekursiivisia tai RE-taydellisia. On kuitenkin mahdollista konstruoida esimerkkeja RE-kielista, joiden vaikeus on naiden kahden aaripaan valilla: Lause 2.29: Luokassa RE REC on kielia jotka eivat ole RE-taydellisia. 163

Vastaavasti voidaan puhua luokan co-re = A j A 2 RE taydellisista kielista. Lause 2.30: Kieli A on RE-taydellinen jos ja vain jos A on co-re-taydellinen. Todistus: Maaritelman mukaan A 2 RE jos ja vain jos A 2 co-re. Jos f on palautus B m A, niin se on samalla palautus B m A. 164

Kielet A ja B ovat rekursiivisesti isomorset jos f: A m B jollain bijektiolla f:!. Lause 2.31: Kaikki RE-taydelliset kielet ovat keskenaan rekursiivisesti isomorsia. Siis RE-taydelliset kielet ovat kaikki "samoja" modulo merkkijonojen rekursiivinen uudelleenjarjestaminen. Laskennallisten ongelmien vaativuusluokat jatkuvat (pitkalle) RE- ja co-re-taydellisten kielten ulkopuolelle. Esim. totaalisuusongelma L tot = f w 2 f 0; 1 g n j M w pysahtyy kaikilla syotteillag jaa luokan RE [ co-re ulkopuolelle. 165

kaikki funktiot RE-tayd. co-re-tayd. RE co-re REC Funktioiden laskettavuusluokkia kuvannollisesti 166

Yhteenveto laskettavuudesta monet tarkeat ongelmat ovat ratkeamattomia kieli REC? RE? co-re? universaalikieli L u ei on ei pysahtymisongelma H ei on ei epatyhjyysongelma L ne ei on ei tyhjyysongelma L e ei ei on totaalisuusongelma L tot ei ei ei ratkeamattomat ongelmat matematiikassa ja formaaleissa kielissa universaalien laskennan mallien ekvivalessin perusteella tulokset siirtyvat koskemaan RAM-mallia, ohjelmointikielia,... jos hyvaksymme Churchin-Turingin teesin, tama kertoo siita mita missaan realistisessa mallissa on mahdollista laskea Perustekniikka: Osoitetaan A 62 REC todistamalla B m A jollain tunnetulla B 62 REC; vastaavasti A 62 RE 167

3. Laskennan vaativuusteoriaa Siirrymme tarkastelemaan, mita laskennallisia ongelmia voidaan ratkaista tehokkaalla algoritmilla [HMU luku 10]. Taman luvun jalkeen opiskelija tuntee laskennallisen vaativuuden peruskasitteet ja osaa soveltaa niita tuttuihin algoritmeihin tuntee NP-taydellisyyden teknisen maaritelman ja kaytannon merkityksen tunnistaa tyypilliset NP-taydelliset ongelmat osaa laatia yksinkertaisia NP-taydellisyystodistuksia 168

Tahan asti on puhuttu siita, mita on mahdollista laskea "aarellisessa ajassa". Nyt siirrymme tarkastelemaan laskemista "kohtuullisessa ajassa". Maarittelemme pian peruskasitteet tasmallisesti. Sovellettaessa teoreettisia tuloksia kaytannon tilanteisiin on syyta miettia tarkasti, onko tama teoreettinen maaritelma hyva formalisointi sille, mita sovelluksessa oikeasti voidaan pitaa "kohtuullisena". Kaikki tassa luvussa kasiteltavat ongelmat (kuten kursseilla Tietorakenteet jne. kohdatutkin) ovat selvasti ratkeavia. Ne ovat siis laskettavuuden teorian kannalta ekvivalentteja (ja "helppoja"). Laskennan vaativuusteoriassa pyrimme tavallaan loytamaan luokan REC ("helpot" ongelmat) sisalla "hienorakennetta": jotkin ratkeavat ongelmat ovat kuitenkin jossain mielessa helpompia, jotkin vaikeampia. Laskennan vaativuusteoria on tutkimuksen kannalta jossain mielessa vaikeampaa kuin laskettavuuden teoria: monet perustavanlaatuiset kysymykset ovat viela avoinna. 169

Keskeinen kysymyksenasettelu Laskennan vaativuusteorian peruskysymykset ovat intuitiivisesti seuraavan tyyppisia (ajan sijaan voidaan puhua muistista tms.): Annettu laskennallinen ongelma A ja aikaraja T. Voiko ongelman A ratkaista ajassa T (tai alle)? (ylaraja aikavaativuudelle) Annettu laskennallinen ongelma A ja aikaraja T. Vieko ongelman A ratkaiseminen valttamatta vahintaan ajan T? (alaraja aikavaativuudelle) Ylarajoja todistetaan tyypillisesti laatimalla tehokas algoritmi ja analysoimalla sen aikavaativuus. Tietojenkasittelytieteilijat ovat hyvia tassa. Alarajojen todistaminen on vaikeaa. Tyypillisesti se onnistuu vain jos ongelma A on sopiva keinotekoinen ongelma (esim. diagonalisoimalla saatu) tai tehdaan lisarajoituksia sille, millaiset algoritmit ovat sallittuja (esim. O(n log n)-alaraja jarjestamiselle). Ideaalitapauksessa yla- ja alaraja yhtyvat, jolloin on loydetty optimaalinen algoritmi. 170

Deterministinen aikavaativuus Sovellamme Tietorakenteista yms. tuttua algoritmin aikavaativuuskasitetta Turingin koneisiin [HMU 10.1.1, 10.1.2]. Olkoon M deterministinen (mutta mahdollisesti moninauhainen) Turingin kone. Jos syotteella x 2 kone M tekee tasan k laskenta-askelta ja pysahtyy, merkitsemme steps M (x) = k: Jos laskenta ei pysahdy, niin steps M (x) = 1. Koneen M aikavaativuus on funktio time M : N! N [ f 1 g, jolla time M (n) = max f steps M (x) j jxj = n g : Siis koneen aikavaativuus on T, jos millaan pituutta n olevalla syotteella kone kone ei laske yli T(n) askelta, ja T on pienin mahdollinen jolle tama patee. Koneen M aikavaativuus on polynominen, jos jollakin polynomilla p patee time M (n) p(n) kaikilla n. 171

Huomioita aikavaativuuden maaritelmasta Aikavaativuuden polynomisuus voitaisiin yhtapitavasti ilmaista vaatimalla, etta jollakin k 2 N patee time M (n) n k + k kaikilla n tai etta jollakin l patee time M (n) = O(n l ): Yleensa ei tarkastellakaan tarkkaa aikavaativuutta time M, vaan jotain ylarajaa T jolla time M (n) = O(T(n)). [O-notaatio: ks. Tietorakenteet] Kaytamme tassa pahimman tapauksen aikavaativuutta eli kullakin n tarkastelemme vaikeinta syotetta, jonka pituus on n. On mahdollista tarkastella myos keskimaaraisen tapauksen aikavaativuutta, mutta tama on teknisesti vaikeaa ja edellyttaa usein eparealistisia oletuksia syotteen jakaumasta. Voimme vastaavasti maaritella koneen M tilavaativuuden space M (n), joka on suurin koneen kayttama nauhapaikkojen lukumaara kun syotteen pituus on n. 172

Tarkeita deterministisia vaativuusluokkia Ryhmittelemme paatosongelmia niiden vaatimien laskentaresurssien mukaan. Paatosongelma A kuuluu luokkaan P, jos se voidaan tunnistaa polynomisessa ajassa, eli A = L(M) jollain deterministisella M jonka aikavaativuus on polynominen. Formaalisti P = L(M) j M deterministinen, time M (n) = O(n k ) jollain k : Paatosongelma A kuuluu luokkaan E, jos A = L(M) jollain M jonka aikavaativuus on korkeintaan eksponenttifunktio. Formaalisti E = L(M) j M deterministinen, time M (n) = O(2 nk ) jollain k : Paatosongelma A kuuluu luokkaan PSPACE, jos se voidaan tunnistaa polynomisessa tilassa, eli A = L(M) jollain M jonka tilavaativuus on polynominen. Formaalisti PSPACE = L(M) j M deterministinen, space M (n) = O(n k ) jollain k : 173

Huomautuksia vaativuusluokista Kaikki vaativuusluokat ovat triviaalisti rekursiivisten kielten luokan REC aitoja osajoukkoja. Selvasti P E. On mahdollista osoittaa, etta P 6= E, mutta tama ei ole mitenkaan ilmeista. On melko helppo osoittaa, etta P PSPACE ja PSPACE E. Ei tiedeta, pateeko P = PSPACE tai PSPACE = E. (Arvellaan, etta kumpikaan ei pade.) Kun sanotaan, etta ongelman aikavaativuus on "eksponentiaalinen", tarkoitetaan yleensa, etta aikavaativuus on vahintaan 2 cn jollain c > 0, eika kuulumista luokkaan E. Maarittelemme jatkossa myos epadeterministisiin Turingin koneisiin perustuvat vaativuusluokat NP jne. jotka ovat myos tarkeita. Kirjallisuudesta loytyy runsaasti muitakin vaativuusluokkia ("structural complexity theory"). 174

Tila- ja aikavaativuus eri laskennan malleissa Jos A = L(M) moninauhaisella Turingin koneella M, niin A = L(N) missa N on yksinauhainen, time N (n) = O(time M (n) 2 ) ja space N (n) = O(space M (n)) (s. 37-38). Jos kieli voidaan tunnistaa RAM-mallissa (tai jossain muussa "nykyaikaisen tietokoneen" abstraktissa mallissa) ajassa t ja tilassa s, niin se voidaan tunnistaa Turingin koneella ajassa O(t(n) 2 ) ja tilassa O(s(n)). Yleisemmin aiemmin esitetyissa universaaleissa laskennan malleissa aika- ja tilavaativuudet (kun ne maaritellaan jarkevasti) ovat polynomisesssa suhteessa: ts. jos jokin ongelma ratkeaa jossain mallissa ajassa t(n) niin missa tahansa toisessa mallissa se ratkeaa ajassa O(t(n) k ) jollain vakiolla k (joka riippuu kaytetyista malleista, mutta ei ongelmasta). Johtopaatos: luokat P, E ja PSPACE eivat ole kovin herkkia sille, mita laskennan mallia kaytetaan. 175

Usein ajatellaan, etta polynomisessa ajassa ratkeavat ongelmat ovat "kaytannossa ratkeavia". Mahdollista kritiikkia: Jos vaativuus on esim. luokkaa n 100 niin ongelma ei varmaan ole kaytannossa ratkeava. Kommentti: harvoja poikkeuksia lukuunottamatta ei tunneta kaytannon esimerkkeja joissa aikavaativuus olisi polynominen mutta korkeaa astetta Kaytannossa syotteen koolla on jokin aarellinen ylaraja, joten ei-polynomisuus ei ole ongelma Kommentti: nain voi olla jos ylaraja on riittavan pieni; tyypilliset ei-polynomiset aikavaativuusfunktiot kuitenkin kasvat nopeasti jo melko pienilla n. Pahin tapaus ei kerro koko totuutta. Kommentti: voi hyvin pitaa paikkansa, mutta esim. keskimaaraisen tapauksen analyysi vaikeaa ja usein edellyttaa kyseenalaisia oletuksia. Johtopaatos: yleensa "polynomisuus = tehokkuus" mutta mallin rajoituksia pitaa harkita tapauskohtaisesti 176

Esimerkkeja polynomisista ja ei-polynomisista ongelmista Ennen yleisempia teoriatarkasteluja katsotaan joitain tyypillisia esimerkkeja ongelmista ja niiden vaativuudesta kaikki nama ongelmat ratkeavia (nahdaan helposti) paakysymys: mitka niista ratkeavat polynomisessa ajassa osoittautuu, etta tama on yllattavan vaikea kysymys Kuten ratkeavuustarkasteluissa, meidan pitaa tehda joitain teknisia esitysmuoto-oletuksia. luokat P, PSPACE ja E maaritelty luokkina formaaleja kielia ts. formaalisti ongelmien syotteet ovat merkkijonoja kaytannon ongelmissa syotteet ovat verkkoja, loogisia kaavoja, joukkoja jne. ) taytyy sopia syotteiden esittamisesta merkkijonoina 177

Esimerkki: suunnattu verkko Kurssilla Tietorakenteet opittuun tapaan suunnattu verkko G = (V; E) voidaan esittaa esim. vierusmatriisina tai vieruslistana. a b c Vierusmatriisi A 1 2 3 1 0 1 1 2 0 0 0 3 1 0 0 a = v 1, b = v 2, c = v 3 A(i; j) = 1 joss (v i ; v j ) 2 E Vieruslista ((2; 3); (); (1)) Alilista i sisataa ne j joilla (v i ; v j ) 2 E V = f a; b; c g E = f (a; b); (a; c); (c; a) g Vierusmatriisi tai vieruslista voidaan esittaa merkkijonona silla tavalla kuin tallaisia rakenteita koodataan esim. ASCII-jonoiksi normaalisssa ohjelmoinnissa. 178

Kun sanomme etta jokin esim. verkkoja koskeva paatosongelma ratkeaa polynomisessa ajassa, tarkoitamme etta vastaava merkkijonoesityksista koostuva formaali kieli kuuluu luokkaan P. Jatkossa ei kiinniteta huomiota esitystavan yksityiskohtiin, vaan oletetaan se tehdyksi jollain "jarkevalla" tavalla. Lopputulos on, etta muodollinen maaritelma on sama kuin esim. kurssilta Tietorakenteet tuttu polynominen aikavaativuus Pitaa kuitenkin muistaa, etta aikavaativuus maaritellaan syotteen pituuden suhteen. Siis "jarkeva" pitaa sisallaan sen, etta syotteen koko ei kasva liikaa Huom. tarkea erikoistapaus: luonnollisen luvun n koodin pituus on O(log n) (esim. binaariesitys blog 2 nc + 1 bittia) 179

Esimerkkeja verkko-ongelmista vierusmatriisiesityksen koko on O(n 2 ), vieruslistaesityksen koko O(n + m) = O(n 2 ) missa n = jv j ja m = jej (huom. m = O(n 2 )) ) verkon tapauksessa oletetaan, etta syotteen pituus on polynominen verkon solmujen lukumaaran n suhteen siis ongelmaa vastaavan formaalin kielen kuuluminen luokkaan P tarkoittaa samaa kuin etta ongelma ratkeaa solmujen lukumaaran n suhteen polynomisessa ajassa Kurssilla Tietorakenteet opitun perustella esim. seuraavat ongelmat ratkeavat polynomisessa ajassa: onko suunnatussa (tai suuntaamattomassa) verkossa G polku solmusta u solmuun v (syvyyssuuntainen etsinta O(n + m)) onko painotetussa verkossa G solmusta u solmuun v polku, jonka kustannus on korkeintaan c (Dijkstran algoritmi O(n log n + m)) Huom. nama on tassa muotoiltu paatosongelmina; palaamme pian kysymykseen etsinta- ja optimointiongelmista 180

Eulerin keha (Euler tour) Verkko Eras Eulerin keha Eulerin keha on polku, joka kayttaa verkon jokaista kaarta tasan kerran ja palaa lahtopisteeseensa Kysymys "Onko annetussa suuntaamattomassa verkossa Eulerin keha?" ratkeaa polynomisessa ajassa Ratkaisu perustuu havaintoon, etta Eulerin keha on olemassa, jos ja vain jos verkko on yhtenainen ja jokaisen solmun aste on parillinen (Euler 1736). 181

Hamiltonin keha (Hamiltonian Circuit, HC) Verkko Eras Hamiltonin keha Hamiltonin keha on polku, joka kay jokaisessa solmussa tasan kerran ja palaa lahtopisteeseensa. Ongelmalle "Onko annetussa suuntaamattomassa verkossa Hamiltonin keha?" ei tunneta polynomisessa ajassa toimivaa algoritmia. Pidetaan luultavana, ettei tallaista algoritmia ole olemassa, eli etta HC 62 P. 182

Hamiltonin keha -ongelmalle on seuraava (erittain) naiivi ratkaisualgoritmi: Olkoon G = (V; E) missa V = f v 1 ; : : : ; v n g. Toista kaikilla jonon (v 1 ; v 2 ; v 3 ; : : : ; v n ) permutaatioilla (u 1 ; u 2 ; u 3 ; : : : ; u n ): Jos (u j ; u j+1 ) 2 E kun j = 1; : : : ; n 1 ja (u n ; u 1 ) 2 E niin palauta "kylla" Palauta "ei". Algoritmi toimii selvasti polynomisessa tilassa; siis HC 2 PSPACE Tarkistettavia permutaatioita on n! kappaletta, yhden tarkistus sujuu selvasti polynomisessa ajassa. Koska (n=2) n=2 n! n n ; niin HC 2 E, mutta taman algoritmin aikavaativuus ei ole polynominen. Itse asiassa HC on NP-taydellinen ongelma, mista lisaa pian. 183

Paatosongelmaan HC liittyy myos ilmeinen etsintaongelma: Syote: suuntaamaton verkko G = (V; E) Tuloste: jokin verkon G Hamiltonin keha H E jos olemassa; "ei ole" muuten Oletetaan nyt, etta funktio DecideHC(G) ratkaisee paatosongelman HC, ts. palauttaa tosi joss verkossa G on Hamiltonin keha. Talloin seuraava algoritmi FindHC ratkaisee yo. etsintaongelman: FindHC(V; E): /* Olkoon E = f e 1 ; : : : ; e m g. */ H := E; for i := 1 to m do if DecideHC(V; H f e i g) then H := H f e i g; return polku joka koostuu joukon H kaarista; Erityisesti jos olisi HC 2 P, niin myos etsintaongelma ratkeaisi polynomisessa ajassa. Toisaalta jos HC 62 P kuten luullaan, niin etsintaongelma ei tietenkaan ratkea polynomisessa ajassa. 184

Alkulukutestaus Luonnollinen luku n 2 on alkuluku jos luvun n ainoat tekijat ovat 1 ja n. Maaritellaan paatosongelma PRIMES = f n 2 N j n alkuluku g : Ongelmalle PRIMES on askettain loydetty polynomisessa ajassa toimiva ratkaisualgoritmi ("PRIMES is in P", M. Agrawal, N. Kayal ja N. Saxena, 2002). Aikavaativuuspolynomi on korkeaa astetta, kaytannossa aiemmat satunnaisuuteen perustuvat algoritmit saattavat olla parempia. Huom. Ongelma on testata luku n sen pituuden O(log n) suhteen polynomisessa ajassa. Itse luvun n suhteen polynominen aika saavutetaan triviaalisti. Tama ei kuitenkaan auta jos n on esim. 1000-bittinen, siis n 2 1000 10 301. Tassa tapauksessa etsintaongelma nayttaisi olevan vaikeampi kuin paatosongelma. Edelleenkaan ei osata tehokkaasti jakaa lukua alkutekijoihin. Tehokas algoritmi tekijoihin jaolle murtaisi monet salausmenetelmat. 185

Yleistettyja lautapeleja Yleistetty tammi: Annettu: mielivaltainen pelitilanne n n tammilaudalla Kysymys: voiko musta pelaaja pakottaa voiton itselleen Yleistetty go: Annettu: mielivaltainen pelitilanne n n go-laudalla Kysymys: voiko musta pelaaja pakottaa voiton itselleen Kumpikin ongelma ratkeaa eksponentiaalisessa mutta ei polynomisessa ajassa; ratkeavuus polynomisessa tilassa avoin. (Kumpaankin tapaukseen liittyy epatriviaaleja oletuksia saantojen yksityiskohdista.) 186

Epadeterministiset vaativuusluokat [HMU 10.1.3, 10.1.4] Maarittelemme nyt epadeterministisen Turingin koneen aika- ja tilavaativuuden. Tama on hyodyllinen kasite ongelmien analysoimisessa; ei realistinen mitta ongelman ratkaisuajalle "oikeilla" tietokoneilla. Annetun yksittaisen laskennan aika- ja tilavaativuus voidaan maaritella kuten deterministisessa tapauksessa. Epadeterministisella koneella N voi syotteella x olla useita mahdollisia laskentoja, joten maaritellaan steps N (x) = koneen N pisimman laskennan pituus syotteella x: Aikavaativuusfunktio on kuten ennenkin time N (n) = max f steps N (x) j jxj = n g : Vastaavasti space N (n) on suurin tila, joka voidaan kayttaa pituutta n olevalla syotteella. 187

Epadeterministisen Turingin koneen N laskentaa syotteella x on usein hyodyllista ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtina tilanteet joista ei siirtymaa, erityisesti hyvaksyvat tilanteet : : : qyes : : : : : : qyes : : : solmun vqw jalkelaisia ne v 0 q 0 w 0 joilla vqw `N v 0 q 0 w 0 : : : qyes : : : N hyvaksyy syotteen x joss puussa ainakin yksi hyvaksyva lehti. 188

Jos time N (x) = t, laskentapuussa kork. d t solmua missa d suurin maara seuraajia millaan yksittaisella tilanteella. Haarautumisasteelle d saadaan triviaali ylaraja d 2j jjqj, joka riippuu koneen N rakenteesta mutta ei syotteesta x. Maaritelman mukaan aikavaativuus maaraytyy puun pisimman haaran mukaan. Tama voi tuntua ei-intuitiiviselta, mutta itse asiassa ei ole oleellista. Seuraava lause naet osoittaa, etta jos lyhimman hyvaksyvan polun pituudelle tunnetaan ylaraja, laskennasta voidaan karsia kaikki tata pitemmat haarat. Tunnistettu kieli pysyy samana, ja karsinnan toteuttamisesta tulee korkeintaan neliollinen lisaaikarasite. 189

Lause 3.1: Jos A = L(N) missa N on yksinauhainen epadeterministinen Turingin kone ja jokaisella x 2 A koneen N lyhimman hyvaksyvan laskennan pituus on O(jxj k ), niin A = L(N 0 ) missa N 0 on yksinauhainen epadeterministinen Turingin kone ja time N (x) = O(jxj 2k ). Todistushahmotelma Muodostetaan ensin kaksinauhainen N 00, joka aluksi kirjoittaa kakkosnauhalle O(jxj k ) nollaa ja sen jalkeen simuloi konetta N kayttaen kakkosnauhaa kaskylaskurina (vrt. harj. 4, teht. 4). Tama kaksinauhainen kone toimii ajassa O(n k ), joten sita voidaan simuloida yksinauhaisella ajassa O(n 2k ). 190

Tarkeita epadeterministisia vaativuusluokkia Paatosongelma A kuuluu luokkaan NP (nondeterministic polynomial time), jos se voidaan tunnistaa epadeterministisella Turingin koneella. jonka aikavaativuus on polynominen. Formaalisti NP = L(N) j N epadeterministinen, time N (n) = O(n k ) jollain k : Kuten deterministisessa tapauksessa, voidaan maaritella myos NE = L(N) j N epadeterministinen, time N (n) = O(2 nk ) jollain k NPSPACE = L(N) j N epadeterministinen, space N (n) = O(n k ) jollain k : Koska deterministiset koneet ovat epadeterminististen erikoistapaus, on triviaalisti P NP jne. Itse asiassa voidaan osoittaa PSPACE = NPSPACE, joten epadeterministinen tilavaativuus ei yleensa ole kiinnostavaa. Sen sijaan kysymys, pateeko P 6= NP, on avoin. 191

Sivulla 49 esitetysta laskelmasta seuraa, etta jos A 2 NP, niin A voidaan tunnistaa deterministisella Turingin koneella ajassa O(2 p(n) ) jollakin polynomilla p. Tama laskelma perustuu oleellisesti edellaesitetyn laskentapuun lapikaymiseen leveyssuuntaisesti. Periaatteessa on mahdollista, etta on jokin tehokkaampikin tapa simuloida epadeterministisia laskentoja. Oleellisesti tehokkaampaa tapaa ei kuitenkaan tunneta, eika sellaisen loytymista pideta todennakoisena. Toisin sanoen arvellaan, etta luokan NP "vaikeimmat" ongelmat todella vaativat eksponentiaalisen laskenta-ajan (realistisissa laskennan malleissa). Ennen taman ajatuksen tarkempaa tutkimista tarkastellaan, millaisia ongelmia luokassa NP on. 192

Esimerkki: Hamiltonin keha Osoitetaan, etta HC 2 NP. Tehdaan ensin pseudokoodiesitys "epadeterministiselle algoritmille", joka toimii polynomisessa ajassa ja ratkaisee ongelman HC. Maaritellaan ensin normaali deterministinen apuproseduuri CheckHC(V; E; Q), joka tarkistaa onko annettu solmujono Q Hamiltonin keha verkossa (V; E): CheckHC(V; E; Q): /* Olkoon Q = (u 1 ; : : : ; u m ). */ if m 6= jv j or f u 1 ; : : : ; u m g 6= V then return false; if (u m ; u 1 ) 62 E then return false; for i := 1 to m 1 do if (u i ; u i+1 ) 62 E then return false; return true Selvasti CheckHC toimii polynomisessa ajassa. 193

Hamiltonin keha -ongelmalle saadaan nyt seuraava epadeterministinen algoritmi: HC(G): 1. Olkoon G = (V; E) ja jv j = n. 2. Arvaa epadeterministisesti solmujono Q = (u 1 ; : : : ; u n ) 2 V n. 3. Jos CheckHC(V; E; Q) = true niin hyvaksy, muuten hylkaa. Tama toimii polynomisessa ajassa, ja on epadeterministinen algoritmi ongelmalle HC koska 1. jos G 2 HC niin jokin arvaus Q johtaa hyvaksymiseen ja 2. jos G 62 HC niin kaikki arvaukset Q johtavat hylkaamiseen. 194

Maaritelmien konkretisoimiseksi kaannetaan viela tama pseudokoodi Turingin koneeksi. Koodataan syote G = (V; E), missa V = f v 1 ; : : : ; v n g ja E = f (v i1 ; v j1); : : : ; (v im ; v jm ) g, aakkoston f 0; 1; g merkkijonona ^n ^i1 ^j1 ^i2 ^j2 : : : ^ im missa ^i on luvun i binaariesitys. Tama esitys on helppo muodostaa vieruslistasta tai -matriisista. Esim. jos V = f a; b; c; d g ja E = f (a; b); (a; c); (b; c); (c; d) g niin koodataan a 7! 1, b 7! 10, c 7! 11 ja d 7! 100 ja esitykseksi tulee ^ jm 100 1 10 1 11 10 11 11 100 195

Kielen HC tunnistava kone N on kaksinauhainen ja toimii seuraavasti: 1. Kirjoita kakkosnauhalle epadeterministisesti jokin merkkijono v 2 f 0; 1; g, jonka pituus on korkeintaan n 2 + n + 1. 2. Olkoon v = w 1 w 2 : : : w n missa w i 2 f 0; 1 g ja n = jv j; jos v ei ole tata muotoa niin hylkaa. 3. Jos jollain i = 1; : : : ; n koodi ^i esiintyy merkkijonossa v kaksi kertaa tai ei esiinny lainkaan, hylkaa. 4. Jos syote ei sisalla merkkijonoa w 1 w n eika w n w 1, niin hylkaa. 5. Jos jollain i = 1; : : : ; n 1 syote ei sisalla merkkijonoa w i w i+1 eika w i+1 w i niin hylkaa (huom. suuntaamaton verkko, jompi kumpi suunta riittaa) 6. Muuten hyvaksy. 196

Askelten 2.-5. perusteella kone N hyvaksyy syotteen, jos ja vain jos nauhalle 2 generoitu merkkijono v esittaa jotain Hamiltonin polkua verkossa G. Triviaalisti tallainen merkkijono v on olemassa, jos ja vain jos G 2 HC. Toisin sanoen koneella N on hyvaksyvia laskentoja, jos ja vain jos G 2 HC. Kone N toimii selvasti polynomisessa ajassa: Askel 1 vie ajan O(n 2 ). Askelet 2 ja 3 menevat samoin ajassa O(n 2 ). Askelissa 4 ja 5 pitaa oleellisesti kayda lapi syotteeseen koodattu verkon G vieruslista n kertaa, mika vie karkeasti ajan O(n 3 ). Siis N on polynomisessa ajassa toimiva epadeterministinen Turingin kone, joka ratkaisee Hamiltonin keha -ongelman, joten HC 2 NP. Kaytannossa ongelman kuuluminen luokkaan NP voidaan tehda korkean tason pseudokoodilla, kunhan ymmarretaan mita "epadeterministinen arvaaminen" tarkoittaa. 197

Propositiologiikan toteutuvuusongelma (Satisability, SAT) Otetaan viela esimerkkina yksi tarkea luokan NP ongelma. [HMU 10.2.1, 10.2.2] Propositiologiikan kaava muodostuu loogisista konnektiiveista _, ^ ja :, sulkumerkeista ( ja ), vakiosymboleista 0 ja 1 seka muuttujasymboleista x i, i = 1; 2; 3; : : :, tuttuun tapaan; esim. x 4 _ :(x 7 ^ x 1 ). Kaavat voidaan ilmeisella tavalla esittaa aakkoston f _; ^; :; (; ); 0; 1; x g merkkijonoina; esim. x100 _ :(x111 ^ x1). Kaavan totuus maaritellaan tuttuun tapaan; 0 = epatosi ja 1 = tosi. Jos (x 1 ; : : : ; x n ) on muuttujia x 1 ; : : : ; x n sisaltava kaava ja (v 1 ; : : : ; v n ) 2 f 0; 1 g n, niin (v 1 ; : : : ; v n ) on kaavan arvo kun muuttujille sijoitetaaan arvot x i := v i ; esim. kun (x 1 ; x 2 ; x 3 ) = (x 3 ^ :x 1 ) _ :x 2 niin (0; 1; 0) = (0 ^ :0) _ :1 = 0. Kaava (x 1 ; : : : ; x n ) on toteutuva jos (v 1 ; : : : ; v n ) = 1 jollain (v 1 ; : : : ; v n ) 2 f 0; 1 g n. 198

Maaritellaan nyt propositiologiikan toteutuvuusongelma SAT = f j on toteutuva g : Toteutuvuusongelma voidaan helposti ratkaista epadeterministisesti polynomisessa ajassa: 1. Lue (x 1 ; : : : ; x n ). 2. Arvaa epadeterministisesti (v 1 ; : : : ; v n ) 2 f 0; 1 g n. 3. Jos (v 1 ; : : : ; v n ) = 1 niin hyvaksy; muuten hylkaa. Siis SAT 2 NP. 199

Luokan NP ongelmien yleinen luonne ( ) Edellisia esimerkkeja yleistaen voidaan osoittaa, etta mika tahansa luokan NP ongelma A voidaan ratkaista seuraavan tyyppisella proseduurilla: A(x): 1. Olkoon n = jxj. 2. Arvaa epadeterminisesti y, missa jyj = p(n) jollain polynomilla p. 3. Jos CheckA(x; y) = true niin hyvaksy, muuten hylkaa. Tassa CheckA(x; y) on jokin deterministinen, polynomisessa ajassa toimiva proseduuri. Emme tassa todista, miksi kaikki epadeterminismi voidaan talla tavoin rajoittaa alussa tapahtuvaan arvausvaiheeseen, mutta tarkastelemme hieman asian tulkintaa. 200

Jos x ja y ovat sellaisia, etta edellisen sivun merkinnoilla CheckA(x; y) = true, niin sanomme etta y on todiste sille, etta x 2 A. Esim. SAT-ongelman tapauksessa jos (x 1 ; : : : ; x n ) 2 SAT, niin taman seikan todisteita ovat sellaiset (v 1 ; : : : ; v n ) 2 f 0; 1 g n joilla (v 1 ; : : : ; v n ) = 1. Jotta edellisen sivun konstruktio todella osoittaisi A 2 NP, seuraavien ehtojen on oltava voimassa: 1. jos x 2 A, niin talle on jokin polynomisen kokoinen todiste, 2. jos x 62 A, niin mikaan y ei todista x 2 A ja 3. kysymys "todistaako y, etta x 2 A" voidaan annetuilla x ja y ratkaista deterministisesti polynomisessa ajassa. Intuitiivisesti luokan NP ongelmat siis ovat sellaisia, etta niiden "kylla"-tapauksille on suhteellisen pienet todisteet, ja annettu todiste on helppo tarkastaa. Ongelma on siina, etta potentiaalisia todisteita on 2 p(n) kappaletta. 201

Epadeterminismi vs. satunnaislaskenta ( ) Miten sivulla 196 esitetyn tyyppinen algoritmi voidaan suorittaa "oikealla" tietokoneella? Oletetaan y 2 f 0; 1 g. Ilmeisimmat vaihtoehdot: Vaihtoehto 1: Kaydaan lapi kaikki y 2 f 0; 1 g p(n). saadaan varmasti oikea vastaus pitaa kayda lapi 2 p(n) mahdollisuutta (paljon!) Vaihtoehto 2: Valitaan y 2 f 0; 1 g p(n) satunnaisesti tasaisesta jakaumasta aikavaativuus sama kuin epadeterministisen algoritmin aikavaativuus jos x 62 A, vastaa aina oikein jos x 2 A, vastaa oikein ainakin todennakoisyydella 1=2 p(n) (pieni!) jos halutaan aina oikea vastaus ainakin todennakoisyydella 1=2, pitaa suorittaa 2 p(n) 1 riippumatonta toistoa (monta!) 202

P = NP -ongelma Paasemme nyt vihdoin kysymykseen, mita (jos mitaan) tieto A 2 NP kertoo ongelman A deterministisesta aikavaativuudesta. laskettavuusteoria: mika voidaan tunnistaa epadeterministisella Turingin koneella, voidaan tunnistaa myos deterministisella Turingin koneella vaativuusteoria: koskeeko sama tunnistamista polynomisessa ajassa; ts. pateeko P = NP? kysymys ollut kiivaan tutkimuksen kohteena vuodesta 1971 (Stephen Cook, "The complexity of theorem-proving procedures"), yha avoin intuitiivisesti P = NP olisi hyvin yllattava tulos, koska em. tulkinnan mukaan se tarkoittaisi, etta todiste voidaan loytaa eksponentiaalisesta etsintaavaruudesta polynomisessa ajassa P = NP patee jos ja vain jos jokin NP-taydellinen ongelma (esim. HC, SAT) ratkeaa polynomisessa ajassa; siirrytaan tarkastelemaan naita. 203

Polynomiset palautukset ja NP-taydellisyys [HMU 10.1.5, 10.1.6] Polynomisen palautuksen idea on sama kuin rekursiivisen palautuksen, paitsi etta liikutaan polynomisen aikavaativuuden maailmassa. Funktio f voidaan laskea polynomisessa ajassa, jos jokin Turingin kone M laskee sen ja time M (n) = O(n k ) jollain k. Funktio f:! palauttaa polynomisesti kielen A kieleen B, merkitaan f: A p m B, jos f on laskettavissa polynomisessa ajassa ja x 2 A, f(x) 2 B kaikilla x 2 : Jos tallainen f on olemassa, sanotaan etta kieli A palautuu polynomisesti kieleen B ja merkitaan A p m B. Lemma 3.2: Olkoon S jokin vaativuusluokista P; NP; PSPACE; E; NE. Jos A p m B ja B 2 S, niin A 2 S. Todistus: Helppo. 204

B A fa A fa B Periaatekuva polynomisesta palautuksesta f: A p m B (kuva sama kuin sivulla 117, mutta nyt f laskettavissa polynomisessa ajassa) 205

Olkoon C P( ) luokka aakkoston kielia. Jatkossa yleensa C = NP, mutta myos tapaukset C = PSPACE ja C = E (jne.) ovat kiinnostavia. Kieli A on C-taydellinen polynomisten palautusten suhteen jos 1. A 2 C ja 2. B p m A kaikilla B 2 C Kieli A on C-kova polynomisten palautusten suhteen jos B p m A kaikilla B 2 C. Siis C-kova ongelma on ainakin yhta vaikea kuin mika tahansa luokan C ongelma. Luokan C maksimaalisen vaikeat ongelmat ovat C-taydellisia. Yleensa puhutaan vain "NP-taydellisyydesta" jne. ja yhteydesta selviaa etta puhutaan polynomisista palautuksista (mutta muunkinlaisia palautuksia esiintyy vaativuusteoriassa). 206

Taydellisten joukkojen perusominaisuuksia Lemma 3.3: Jos A p m B ja B p m C niin A p m C. Todistus: HT. Korollaari 3.4: [HMU Thm 10.4] Jos A p m B ja A on C-kova niin B on C-kova. Erityisesti B osoitetaan NP-kovaksi palauttamalla jokin tunnettu NP-kova A siihen. Jos lisaksi B 2 NP, niin B on talloin NP-taydellinen. Korollaari 3.5: [HMU Thm 10.5] Jos A on C-kova ja A 2 P, niin C P. Erityisesti jos jollakin NP-taydellisella ongelmalla on polynomisessa ajassa toimiva ratkaisu, niin P = NP (mita siis ei pideta luultavana). 207

Huomautuksia NP-taydellisyydesta ym. Jos A ei ole paatosongelma (vaan esim. etsintaongelma), sanotaan etta A on NP-kova, jos polynomisen algoritmin olemassaolosta ongelmalle A seuraisi P = NP. Sen sijaan muita kuin paatosongelmia ei pida sanoa NP-taydellisiksi. Kaikilla vaativuusluokilla C ei ole taydellisia ongelmia. Voi esim. olla olemassa paattymaton jono yha vaikeampia ongelmia A 0 p m A 1 p m A 2 p m : : : ; missa A i 2 C ja A i+1 6 p m A i kaikilla i. Kaikilla tahan mennessa esitellyilla luokilla kuitenkin on taydellisia ongelmia. Seuraavana tavoitteena on osoittaa, etta edella mainittu toteutuvuusongelma SAT on NP-taydellinen. Tata ennen luodaan alustava katsaus siihen, millaisia NP-taydellisia ongelmia tunnetaan. 208

Esimerkkeja NP-taydellisista ongelmista Toteutuvuus (Satisability, SAT) Annettu: propositiologiikan kaava Kysymys: onko toteutuva Hamiltonin keha (Hamiltonian Circuit, HC) Annettu: suuntaamaton verkko G Kysymys: onko verkossa G Hamiltonin keha Kauppamatkustajan ongelma (Travelling Salesman Problem, TSP) Annettu: suuntaamaton verkko G, painot c(u; v) 2 N kaikille kaarille (u; v) 2 E, luonnollinen luku k (Siis tarkemmin syote on sopivasti koodattu kolmikko h G; c; k i.) Kysymys: onko verkossa G Hamiltonin keha, jonka kokonaispaino on korkeintaan k 209

Lisaa NP-taydellisia ongelmia Solmupeite (Vertex Cover, VC) [HMU Node Cover (NC)] Annettu: suuntaamaton verkko G = (V; E), luonnollinen luku k Kysymys: onko verkossa G kork. k solmua sisaltava solmupeite, ts. joukko U V joka kaikista kaarista (u; v) 2 E sisaltaa ainakin toisen paatepisteen u tai v. Riippumaton joukko (Independent Set, IS) Annettu: suuntaamaton verkko G = (V; E), luonnollinen luku k Kysymys: onko verkossa G riippumaton joukko jossa vah. k solmua, ts. sellainen U V etta (u; v) 62 E kaikilla u; v 2 U Klikki (Clique, CLIQUE) Annettu: suuntaamaton verkko G = (V; E), luonnollinen luku k Kysymys: onko verkossa G klikki jossa vah. k solmua, ts. sellainen U V etta (u; v) 2 E kaikilla u; v 2 U 210

Viela lisaa NP-taydellisia ongelmia Verkonvaritys (Graph Coloring, GC) Annettu: suuntaamaton verkko G, luonnollinen luku k Kysymys: voidaanko verkon G solmut varittaa k varilla niin etta minkaan kaaren paatepisteet eivat ole saman variset Ositus (Partition, PARTITION) Annettu: jono (a 1 ; : : : ; a n ) luonnollisia lukuja Kysymys: onko olemassa A f 1; : : : ; n g jolla P i2a a i = P i62a a i Repunpakkaus (Knapsack, KNAPSACK) Annettu: aarellinen joukko U ("esineet") ja jokaiselle u 2 U "arvo" v(u) 2 N ja "paino" w(u) 2 N; kokonaisluvut V ja W Kysymys: voidaanko valita sellainen joukko X U esineita, etta P x2x w(x) W ja P x2x v(x) V 211

Toiminta kun kohdataan NP-taydellinen ongelma 1. Havaitaan etta kasilla oleva ongelma A "nayttaa NP-taydelliselta" 2. Etsitaan kirjallisuudesta "samantyyppinen" NP-taydelliseksi tunnettu ongelma B; peruslahde Garey & Johnson: Computers and Intractability (1979) 3. Osoitetaan B p m A 4. Mietitaan mita sitten tehdaan Huom. yleensa tallaisissa tilanteissa ollaan viime kadessa kiinnostuneita muusta kuin paatosongelmasta, esim. etsintaongelmasta (vrt. HC) tai optimointiongelmasta kuten TSP-ongelmaan liittyva opt-tsp: annettu painotettu verkko, maarattava pienin Hamiltonin kehan paino 212

Miten kaytannossa ratkaistaan NP-kova ongelma Luultavasti ei kannata etsia algoritmia joka aina toimii polynomisessa ajassa ja antaa tarkalleen oikean ratkaisun. Ehka voidaan tehda helpottavia lisaoletuksia siita, millaisia syotteita todella esiintyy. Jos tapaukset ovat riittavan pienia, ehka huolellisesti viritetty ei-polynominen algoritmi on riittavan nopea (branch-and-bound). Ehka on olemassa tehokas approksimointialgoritmi joka todistettavasti loytaa melkein optimaalisen ratkaisun. Ehka joku heuristinen algoritmi, mahdollisesti yhdistettyna satunnaisuuteen, antaa riittavan hyvia ratkaisuja (lokaali haku, simuloitu jaahdytys). 213

Esimerkkeja NP-taydellisyystodistuksista Oletetaan tunnetuksi etta IS on NP-taydellinen (tama tullaan osoittamaan jatkossa) Lause 3.6: [HMU Thm 10.20] VC on NP-taydellinen. Todistus: Helposti nahdaan VC 2 NP (harj.teht.). Osoitetaan IS p m VC. Olkoon G = (V; E) missa jv j = n, ja U V. Nyt U on riippumaton joukko, millaan (u; v) 2 E ei pade u 2 U ja v 2 U, kaikilla (u; v) 2 E patee u 2 V U tai v 2 V U, V U on solmupeite. Siis verkossa G on kokoa k oleva riippumaton joukko jos ja vain jos siina on kokoa n k oleva solmupeite. Olkoon f funktio joka kuvaa parin h G; k i pariksi f(h G; k i) = h G; n k i. Siis h G; k i 2 IS joss f(h G; k i) 2 VC. Selvasti f on laskettavissa pol. ajassa, joten f: IS p m VC. 214

Toinen esimerkki: Oletetaan tunnetuksi, etta HC on NP-taydellinen (kuten jatkossa todistetaan). Lause 3.7: [HMU Thm 10.24] TSP on NP-taydellinen. Todistus: Helposti nahdaan etta TSP 2 NP. Osoitetaan HC p m TSP. Olkoon G = (V; E) HC-tapaus. Merkitaan n = jv j. Maaritellaan kustannus c: V V! N siten, etta c(u; v) = 1 jos (u; v) 2 E ja c(u; v) = n + 1 muuten. Tasta saadaan TSP-tapaus f(g) = h G; c; n i. Selvasti verkossa G on Hamiltonin keha, jos ja vain jos painotetussa verkossa h G; c i on Hamiltonin keha jonka paino on korkeintaan n. Siis G 2 HC, jos ja vain jos f(g) 2 TSP. Koska f: G 7! h G; c; n i voidaan laskea polynomisessa ajassa, HC p m TSP. Mutta etta tama todella olisi kiinnostavaa, meidan pitaa ensin osoittaa IS ja HC NP-taydellisiksi jollain muulla tavalla! 215

Toteutuvuusongelman NP-taydellisyys [HMU 10.2.3] Etta paastaan osoittamaan ongelmia NP-taydellisiksi palautuksilla, pitaa ensin osoittaa jokin ongelma NP-taydelliseksi suoraan maaritelmasta. Valitaan taksi perusongelmaksi toteutuvuusongelma SAT. Lause 3.8: [HMU Thm 10.9] Toteutuvuusongelma SAT on NP-taydellinen. Todistus Tiedetaan jo, etta SAT 2 NP. Pitaa viela osoittaa A p m SAT kaikilla A 2 NP. Olkoon A = L(M) missa time M (n) p(n), p polynomi ja M yksinauhainen. Voidaan olettaa p(n) n kaikilla n. Muodostetaan palautus f M : A p m SAT; siis f M laskettavissa polynomisessa ajassa ja w 2 A jos ja vain jos f M (w) 2 SAT 216

f M (w) on propositiologiikan kaava joka kuvaa mahdollisia koneen M laskentoja syotteella w muuttujien intuitiiviset merkitykset ovat muotoa "hetkella t kone on tilassa q ja nauhapaan paikka on j" tai "hetkella t nauhapositiossa j on merkki c" kaava f M (w) kuvaa, mitka ajanhetkea t + 1 vastaavat muuttujien arvot ovat sallittuja, kun ajanhetken t arvot tunnetaan Muuttujien indeksoimiseksi numeroidaan ensin nauhapositiot: aluksi nauhapaa positiossa 1 nauhapaa voi enimmillaan liikkua p(n) kertaa vasemmalle tai p(n) kertaa oikealle; siis nauhapaa pysyy positioiden p(n) ja p(n) + 1 valilla aluksi syote positioissa 1; : : : ; n 217

Maaritellaan nyt muuttujat X t;j, arvojoukkona Q [, indekseina j = (p(n) + 1); : : : ; p(n) + 1, kuvaamaan laskentaa hetkella t: ol. koneen tilanne aqb, nauhapaan sijainti m siis kone tilassa q, nauhapaan vas. puolella a = a 1 : : : a k 2 ja nauhapaasta oikealle b = b 1 : : : b l 2 koodataan tila ja nauhapaan sijainti: X t;m 1 = q koodataan nauhan vasen osa: X t;m k 2+j = a j, j = 1; : : : ; k koodataan nauhan oikea osa: X t;m+j 1 = b j, j = 1; : : : ; l 218

Esimerkki 3.9: Oletetaan q 1 alkutila, q 2 hyvaksyva tila, = f a; b; c g, = [ f # g missa # on tyhjamerkki, w = aab ja siis n = 3, p(3) = 4. Olkoon koneessa (ainakin) siirtymat (q 1 ; a) = (q 3 ; b; L), (q 3 ; #) = (q 3 ; c; R), (q 3 ; b) = (q 3 ; b; R) ja (q 3 ; a) = (q 2 ; c; R). Syotteella aab on siis olemassa hyvaksyva laskenta q 1 aab `M q 3 #bab `M cq 3 bab `M cbq 3 ab `M cbcq 2 b Vastaavat muuttujien X t;j arvot, t = 0; : : : ; 4, j = 5; : : : ; 5: X t;j 5 4 3 2 1 0 1 2 3 4 5 0 # # # # # q 1 a a b # # 1 # # # # q 3 # b a b # # 2 # # # # c q 3 b a b # # 3 # # # # c b q 3 a b # # 4 # # # # c b c q 2 b # # Oleellinen havainto: arvo X t;j maaraytyy arvoista X t 1;j 1, X t 1;j ja X t 1;j+1. 219

Varsinaisiksi totuusarvomuuttujiksi muodostettavaan propositiologiikan kaavaan f M (w) tulee nyt y tjz ; t = 0; : : : ; p(n); j = p(n) 1; : : : ; p(n) + 1; z 2 Q [ ; siis kaikkiaan (p(n) + 1)(2p(n) + 3)(jQj + j j) muuttujaa, joiden intuitiivinen tulkinta on y tjz = 1 joss X tj = z: Nyt f M (w) tulee olemaan muuttujia y tjz sisaltava kaava, joka saa arvon 1 tasan sellaisilla muuttujien y tjz arvoilla jotka esittavat koneen M hyvaksyvaa laskentaa syotteella w. Korkealla tasolla kaava tulee olemaan muotoa S ^ N ^ F ^ U missa osakaavoilla S, N, F ja U on seuraavat tulkinnat: S: rivi X 0; esittaa laskennan alkutilannetta N: kukin rivi X t 1; seuraa rivia X t; koneen M siirtymafunktion mukaisesti F: jollain j patee X p(n);j = q missa q on hyvaksyva tila. U: jokaisella ajanhetkella koneen tila, nauhapaan paikka ja jokaisen nauhaposition sisalto on yksikasitteisesti maaritelty; 220

Kaava U: tilanteen yksikasitteisyys Merkitaan indeksijoukkoja J = f p(n) ja Z = Q [. 1; : : : ; p(n) + 1 g, T = f 0; : : : ; p(n) g Kaava U t;j;z, t 2 T, j 2 J, z 2 Z, on jqj + j j osan konjunktio, joka sanoo etta X t;j saa arvon z eika mitaan muuta arvoa: 0 @ ^ 1 :y t;j;r A : U t;j;z = y t;j;z ^ r2z;r6=z Kaava Ut 0 sanoo, etta X t;j saa kaikilla j jonkin yksikasitteisen arvon: Ut 0 = ^ _ U t;j;z : j2j z2z Kaavan U 0 t koko on (2p(n) + 3)(jQj + j j) 2, kun yksinkertaisuuden vuoksi lasketaan muuttujasymbolin kooksi 1 eika lasketa loogisia konnektiiveja. 221

Kaava U t;j;q sanoo etta X t;j on tilasymboli: U t;j;q = _ z2q U t;j;z : Kaavan U t;j;q koko on siis jqj(jqj + j j). Kaava Ut 00 tilasymboli tasan yhdella j: Ut 00 = _ 0 @ ^ Ut;j;Q ^ j2j Kaavan U 00 t j 0 2J;j 0 6=j :U t;j 0;Q sanoo, etta X t;j on koko on (2p(n) + 3) 2 jqj(jqj + j j). Lopullinen kaava U on U = ^ : t2t U 0 t ^ U 00 t Koko on (p(n) + 1)((2p(n) + 3)(jQj + j j) 2 + (2p(n) + 3) 2 jqj(jqj + j j)) = O(p(n) 3 ). 1 A : 222

Kaava S: alkutilanne Oikeaa alkutilannetta vastaava rivi X 0; koodataan kaavaksi 0 1 0 ^ @ y 0;j;# A ^ y0;0;q1 @ ^ 1 0 y 0;j;wj A ^ @ S = j= p(n) 1;:::; 1 ^ j=1;:::;n ^ j=n+1;:::;p(n)+1 y 0;j;# 1 A missa # on tyhjamerkki ja syote on w = w 1 : : : w n. Kaavan koko O(p(n)). Kaava F : hyvaksyminen Oletetaan kone M muunnetuksi siten, etta jokaisesta hyvaksyvasta tilasta on siirtyma itseensa kaikilla merkeilla. Tama selvasti ei muuta sita, onko annetulla syotteella kork. p(n) askelen mittaisia hyvaksyvia laskentoja. Riittaa siis tarkastaa, etta hetkella p(n) ollaan hyvaksyvassa tilassa: F = 1ik j2j y p(n);j;ai missa hyvaksyvien tilojen joukkoa on merkitty f a 1 ; : : : ; a k g. Kaavan koko on O(p(n)) 223

Kaava N: laskennan oikea eteneminen; todistuksen ydin on tassa Huomataan, etta koko laskennan, eli (p(n) + 1) (2p(n) + 3)-taulukon (X t;j ), oikeellisuuden tarkastamiseksi riittaa tarkastaa kaikki (vakiokokoiset!) 2 3 -laatikot X t 1;j 1 X t 1;j X t 1;j+1 X t;j 1 X t;j X t;j+1 jos X t 1;j 1, X t 1;j ja X t 1;j+1 ovat kaikki nauhasymboleita, on oltava X t;j = X t 1;j (nauhan sisalto voi muuttua vain nauhapaan kohdalla jos X t 1;j on tilasymboli, niin nauhapaan alla on merkki X t 1;j+1 ja siirtymafunktion arvo (X t 1;j ; X t 1;j+1 ) antaa uudet arvot X t;j 1, X t;j ja X t;j+1 224

Esitetaan ensin eri mahdollisuudet kaavioina. Seuraavassa A; B; C jne. esittavat nauhasymboleja ja q; q 0 tilasymboleja. Nauhapaa muualla: laatikon keskikohta ei muutu; reunoista ei voi sanoa koska nauhapaa saattaa olla juuri laatikon vieressa A B C X t;j 1 B X t;j+1 Nauhapaa liikkuu oikealle: tassa (q; B) = (q 0 ; C; R) A q B A C q 0 Nauhapaa liikkuu vasemmalle: tassa (q; B) = (q 0 ; C; L) A q B q 0 A C Reunat on helpoin kasitella erikoistapauksina: X t; p(n) 1 ja X t;p(n)+1 ovat aina tyhjamerkkeja, koska nauhapaa ei voi ehtia niin kauas. 225

Reunat hetkella t kasitellaan kaavalla ^N t = y t; p(n) 1;# ^ y t;p(n)+1;# : Esitetaan nyt em. kolme paatapausta kaavoina N t;j, N 0 t;j ja N 00 t;j. Nauhapaa muualla: Tama on helpoin tapaus. Kaava N t;j sanoo, etta X t 1;j 1 ja X t 1;j+1 ovat nauhasymboleja ja X t 1;j ja X t;j ovat sama nauhasymboli:! N t;j = _ z2 y t 1;j 1;z! ^ z2 y t 1;j+1;z! ^ z2 (y t 1;j;z ^ y t;j;z ) 226

Nauhapaa siirtyy oikealle: Kaava Nt;j 0 sanoo, etta hetkella t nauhapaan sijainti nauhalla on j + 1. Lisaksi, kun q = X t 1;j on koneen tila ja B = X t 1;j+1 nauhapaan alla oleva merkki, on valittu jokin sallittu siirtyma (q 0 ; C; R) 2 (q; B). Merkki A nauhapaan vasemmalla puolella pysyy ennallaan: Nt;j 0 = y t 1;j 1;A ^ y t;j 1;A ^ y t 1;j;q ^ y t 1;j+1;B q2q A;B2 0 11 _ ^ @ (y t;j;c ^ y t;j+1;q 0) AA (q 0 ;C;R)2(q;B) Nauhapaa siirtyy vasemmalle: Kaava N 00 t;j muodostetaan kuten N 0 t;j. Kaava H t;j sanoo, etta lahettyvilla oleva nauhapaa maaraa symbolin X t;j : H t;j = N 0 t;j 1 _ N 00 t;j 1 _ N 0 t;j _ N 00 t;j _ N 0 t;j+1 _ N 00 t;j+1 : 227

Laskennan oikean etenemisen esittaa nyt kaava ^ 0 0 ^ @ N = t=1;:::;p(n) @ ^Nt ^ j= p(n);:::;p(n) 11 (N t;j _ H t;j ) AA : Koska kukin N 0 t;j jne. on jotain (koneesta M riippuvaa) vakiokokoa, kaavan N koko on O(p(n) 2 ). Edella esitetysta seuraa, etta konstruoitu kaava f M (w) = S ^ N ^ F ^ U toteutuu joillain muuttujien y t;j;z arvoilla jos ja vain jos koneella M on syotteella w hyvaksyva laskenta jonka pituus on kork. p(jwj). Lisaksi f M voidaan selvasti laskea polynomisessa ajassa. (Huomaa, etta M on kiintea; laskettaessa f M (w) ainoat syotteesta w riippuvat asiat ovat kaava A eli alkutilanne ja p(n) eli kaavojen pituus.) Siis f M : A p m SAT. 228

SAT-ongelman rajoitetut muodot tahan mennessa: todistettu etta SAT on NP-taydellinen tavoite: todistetaan "A on NP-taydellinen", kun A = IS; VC; HC; TSP; : : : tekniikka: osoitetaan SAT p m A tekninen ongelma: hankalaa kasitella mielivaltaisia propositiologiikan kaavoja ratkaisu: maaritellaan luokka syntaktisesti "yksinkertaisia" kaavoja, jotka kuitenkin ovat riittavan "vaikeita" etta SAT on NP-taydellinen myos naihin "yksinkertaisiin" kaavoihin rajoitettuna tarkemmin: maaritellaan SAT-ongelman erikoistapaus CSAT, ja edelleen taman erikoistapaus 3SAT, jotka ovat kumpikin NP-taydellisia. 229

Propositiologiikan kaavojen luokittelua (Jatkossa "kaava" tarkoittaa propositiologiikan kaavaa.) literaali on muuttuja tai muuttujan negaatio; esim. x 7 tai :x 3 klausuuli (engl. clause) on literaalien disjunktio; esim. x 3 _ :x 2 _ x 4 tai x 1 kaava on konjunktiivisessa normaalimuodossa (conjunctive normal form, CNF) jos se on klausuulien konjunktio; esim. (x 3 _ :x 2 _ x 4 ) ^ (x 7 _ :x 3 ) ^ x 1 CNF-kaava on k-konjunktiivisessa normaalimuodossa (k-cnf) jos jokaisessa klausuulissa on tasan k literaalia; esim. (x 3 _ :x 2 ) ^ (x 7 _ :x 3 ) ^ (x 1 _ x 4 ) on 2-CNF-kaava Maaritellaan nyt SAT-ongelman erikoistapaukset CSAT ja ksat, k = 1; 2; 3; : : :: CSAT = f j on toteutuva CNF-kaavag ksat = f j on toteutuva k-cnf-kaava g 230

Kurssikirjassa on osoitettu [HMU 10.3.2{10.3.3], miten mielivaltaiselle kaavalle (x 1 ; : : : ; x n ) voidaan polynomisessa ajassa konstruoida CNF-kaava (x 1 ; : : : ; x n ; y 1 ; : : : ; y m ), jolle on toteutuva joss on toteutuva; tassa y 1 ; : : : ; y m ovat muuttujasymboleita jotka eivat esiinny kaavassa. Kaymme tassa lapi yksinkertaisemman konstruktion, jossa lauseen 3.8 todistuksessa tarvittaville kaavoille etsitaan CNF-vastine. Tama riittaa osoittamaan, etta CSAT on NP-taydellinen. Osoitamme siis, miten todistuksessa (s. 220) muodostetulle kaavalle f M (w) = S ^ N ^ F ^ U muodostetaan polynomisessa ajassa CNF-kaava ~f M (w), joka on toteutuva joss f M (w) on. Jaamme taman kahteen osaongelmaan: 1. miten CNF-kaavojen disjunktio muunnetaan yhdeksi CNF-kaavaksi ja 2. miten kaavat S, N, F ja U muunnetaan CNF-kaavojen disjunktioiksi. 231

Periaatteessa CNF-kaavojen disjunktiolle voidaan suoraan muodostaa ekvivalentti CNF-kaava osittelulakien avulla: A _ (B ^ C), (A _ B) ^ (A _ C) A ^ (B _ C), (A ^ B) _ (A ^ C) Esimerkki Olkoot c 1 ; : : : ; c 6 klausuuleja. CNF-kaavojen disjunktion (c 1 ^ c 2 ) _ (c 3 ^ c 4 ) _ (c 5 ^ c 6 ) kanssa ekvivalentti CNF-kaava on (c 1 _ c 3 _ c 5 ) ^ (c 1 _ c 3 _ c 6 ) ^ (c 1 _ c 4 _ c 5 ) ^ (c 1 _ c 4 _ c 6 ) ^ (c 2 _ c 3 _ c 5 ) ^ (c 2 _ c 3 _ c 6 ) ^ (c 2 _ c 4 _ c 5 ) ^ (c 2 _ c 4 _ c 6 ): Ongelma: saatavan kaavan pituus riippuu eksponentiaalisesti alkuperaisten kaavojen klausuulien lukumaarasta. Ratkaisemme ongelman lisaamalla kaavoihin uusia muuttujia. 232

Tarkastellaan ensin kahden CNF-kaavan disjunktiota: = _, missa = a 1 ^ : : : ^ a n = b 1 ^ : : : ^ b m ja a i ja b j ovat klausuuleja. Olkoon y muuttuja, joka ei esiinny kaavassa. Muodostetaan CNF-kaava ~ = (y _ a 1 ) ^ : : : ^ (y _ a n ) ^ (:y _ b 1 ) ^ : : : ^ (:y _ b m ): Vaitamme, etta ~ on toteutuva, joss on. Jos jollain muuttujien arvojen sijoituksella ~ on tosi, niin talloin joko y saa arvon 0 ja a 1 ; : : : ; a n ovat kaikki tosia, tai y saa arvon 1 ja b 1 ; : : : ; b m ovat kaikki tosia. Kummassakin tapauksessa = _ on tosi. Oletetaan kaantaen, etta jokin muuttujien arvon sijoitus tekee kaavan = _ todeksi. Jos sijoitus tekee kaavan todeksi, niin valitsemalla y = 0 saadaan kaikki klausuulit (y _ a i ) ja (:y _ b j ) tosiksi. Jos taas kaava on tosi, niin valitaan y = 1. Vaite siis patee. 233

Yleisemmin jos = 1 _ 2 _ 3 _ : : : _ k on CNF-kaavojen i disjunktio, otetaan kayttoon uudet muuttujat y 1 ; : : : ; y k 1. Ensin yhdistetaan kaavat 1 ja 2 edellisella sivulla kuvatulla menettelylla lisaamalla niiden klausuuleihin muuttuja y 1 ; merkitaan syntyvaa kaavaa 1 Saadaan k 1 CNF-kaavan disjunktio = 1 _ 3 _ : : : _ k : Sovelletaan nyt menettelya uudelleen kaavoihin 1 ja 3, lisaten muuttuja y 2, jne. Lopulta saadaan yksi iso CNF-kaava, jossa kaavojen 1 ja 2 klausuuleihin on lisatty muuttujat y 1 ; : : : ; y k 1, kaavan 3 klausuuleihin muuttujat y 2 ; : : : ; y k 1 jne. Yksittainen klausuuli joutuu kasittelyn alle korkeintaan k kertaa, ja yksittainen kasittelykerta lisaa siihen korkeintaan k uutta muuttujaa. Proseduurin aikavaativuus on siis oleellisesti O(mk 2 ), missa m on alkuperaisten klausuulien kokonaislukumaara. 234

Esimerkki 3.10: Muodostetaan kaava ~, kun on muuttujien x1 ; : : : ; x 6 kaava = (x 1 ^ x 2 ) _ (x 3 ^ x 4 ) _ (x 5 ^ x 6 ): Tassa siis alkuperaiset klausuulit ovat vain yksittaisia muuttujia. Ensin saadaan kaavalle (x 1 ^ x 2 ) _ (x 3 ^ x 4 ) vastine (y 1 _ x 1 ) ^ (y 1 _ x 2 ) ^ (:y 1 _ x 3 ) ^ (:y 1 _ x 4 ): Ottamalla kayttoon toinen uusi muuttuja y 2 saadaan lopulta (y 2 _ y 1 _ x 1 ) ^ (y 2 _ y 1 _ x 2 ) ^ (y 2 _ :y 1 _ x 3 ) ^ (y 2 _ :y 1 _ x 4 ) ^ (:y 2 _ x 5 ) ^ (:y 2 _ x 6 ): 235

Osaamme siis polynomisessa ajassa muodostaa annettua CNF-kaavojen disjunktiota vastaavan yhden CNF-kaavan ~, joka on toteutuva joss on. Katsomme seuraavaksi, miten tata proseduuria kayttamalla todistuksessa (s. 220) muodostettu kaava f M (w) = S ^ N ^ F ^ U voidaan pienella vaivalla muuntaa CNF-kaavaksi ~ fm (w), joka on toteutuva joss f M (w) on. Teemme taman muuntamalla osat S, N, F ja U kunkin CNF-kaavaksi ja muodostamalla niiden klausuuleista yhden ison konjunktion. Kaava S sisaltaa jo valmiiksi pelkkia konjunktioita ja F pelkkia disjunktioita, joten niille ei tarvitse tehda mitaan. 236

Kaava U (s. 222) on muotoa U = ^t2t (Ut 0 ^ Ut 00 ), missa Ut 0 on CNF-kaava ja Ut 00 = _ 0 @ ^ 1 Ut;j;Q ^ :U t;j 0;QA ; j2j j 0 2J;j 0 6=j tassa U t;j;q = W z2q U t;j;z. De Morganin lain nojalla :U t;j;q = ^ :U t;j;z ; joten Ut 00 muuntuu helposti DNF-kaavaksi (konjunktioiden disjunktioksi). Tama DNF-kaava puolestaan voidaan muuntaa CNF-kaavaksi edella esitetylla proseduurilla. Talloin koko U tulee CNF-kaavaksi. z2q 237

Kaava N on oleellisesti konjunktio muotoa N t;j _ H t;j olevista kaavoista (s. 228). Tassa N t;j valmiiksi CNF-kaava, ja H t;j on disjunktio muotoa Nt;j 0 olevista kaavoista, missa Nt;j 0 = y t 1;j 1;A ^ y t;j 1;A ^ y t 1;j;q ^ y t 1;j+1;B q2q A;B2 0 11 _ ^ @ (y t;j;c ^ y t;j+1;q 0) AA (q 0 ;C;R)2(q;B) Koska j (q; B) j 2 j Q j j j, disjunktio _ (y t;j;c ^ y t;j+1;q 0) (q 0 ;C;R)2(q;B) voidaan osittelulakia kayttamalla muuntaa CNF-kaavaksi, jossa on korkeintaan vakiomaara 2 2j Q jj j klausuuleja. Siis kukin N 0 t;j saadaan helposti esitetyksi disjunktiona CNF-kaavoista. Siis kukin N t;j _ H t;j on disjunktio CNF-kaavoista, ja saadaan CNF-kaavaksi edella esitetylla proseduurilla. 238

Vetamalla edelliset konstruktiot yhteen saamme nyt halutun tuloksen. Lause 3.11: [HMU Thm 10.13] CSAT on NP-taydellinen. Todistus: Selvasti CSAT 2 NP. Olkoon A 2 NP ja M polynomisessa ajassa toimiva epadeterministinen Turingin kone, jolla A = L(M). Lauseen 3.8 todistuksen mukaisesti voimme annetulla w konstruoida polynomisessa ajassa kaavan f M (w), joka on toteutuva joss w 2 A. Naimme juuri, miten kaavasta f M (w) saadaan polynomisessa ajassa CNF-kaava ~ fm (w), joka on toteutuva joss f M (w) on. Siis kuvaus w 7! ~ fm (w) on polynominen palautus A p m CSAT. 239

3SAT-ongelman NP-taydellisyys [HMU 10.3.4] erotukseksi yleisesta CNF-esityksesta, kaikilla kaavoilla ei ole 3-CNF-esitysta; esim. x 1 _ x 2 _ x 3 _ x 4 esitamme muunnoksen, jolla polynomisessa ajassa mielivaltaisesta CNF-kaavasta tuotetaan 3-CNF-kaava joka on toteutuva joss on Taman muunnoksen olemassaolosta seuraa siis Lause 3.12: CSAT p m 3SAT. Koska CSAT on NP-taydellinen ja 3SAT 2 NP, saadaan Korollaari 3.13: [HMU Thm 10.15] 3SAT on NP-taydellinen. Huom. SAT-ongelma rajoitettuna 2-CNF-kaavoihin ratkeaa polynomisessa ajassa. 240

Todistus sille etta CSAT p m 3SAT Olkoon F(x 1 ; : : : ; x n ) klausuuli (siis literaalien disjunktio). Muodostamme 3-CNF-kaavan ~ F(x1 ; : : : ; x n ; y 1 ; : : : ; y m ) missa y i :t ovat uusia muuttujia ja F(v 1 ; : : : ; v n ) = 1 jos ja vain jos ~ F(v1 ; : : : ; v n ; v 0 1 ; : : : ; v0 m) = 1 joillain (v 0 1 ; : : : ; v0 m) 2 f 0; 1 g m. Tasta seuraa yleisemmin, etta kun on CNF-kaava k^ = niin voidaan muodostaa 3-CNF-kaavojen konjunktio, eli edelleen 3-CNF-kaava, k^ = missa (v 1 ; : : : ; v n ) = 1 joss (v 1 ; : : : ; v n ; v 0 1 ; : : : ; v0 l ) = 1 jollain (v 0 1 ; : : : ; v0 l ) 2 f 0; 1 gl, joten erityisesti on toteutuva joss on toteutuva. Huom. eri kaavoihin ~ Fj lisattavien muuttujien pitaa olla erillisia. j=1 j=1 F j ~F j 241

Olkoon F klausuuli. Nelja tapausta sen mukaan, kuinka monta literaalia z i klausuuli F sisaltaa: 1. F = z 1 missa z 1 = x i tai z 1 = :x i jollain i. Uudet muuttujat u ja v; ~F = (z _ u _ v) ^ (z _ u _ :v) ^ (z _ :u _ v) ^ (z _ :u _ :v): Koska uudet muuttujat u ja v on otettu kaikilla merkkikombinaatioilla, ainoa tapa saada ~ F = 1 on valita z1 = 1 jolloin F = 1. 2. F = z 1 _ z 2. Uusi muuttuja w; ~F = (z 1 _ z 2 _ w) ^ (z 1 _ z 2 _ :w): Kuten edellisessa kohdassa ~ F voidaan toteuttaa vain tekemalla F todeksi. 3. F = z 1 _ z 2 _ z 3 : valmiiksi 3-CNF; ~ F = F. 242

4. F = z 1 _ z 2 _ : : : _ z m missa m 4. Uudet muuttujat y 1 ; : : : ; y m 3 ; ~F = (z 1 _ z 2 _ y 1 ) ^ (z 3 _ :y 1 _ y 2 ) ^ (z 4 _ :y 2 _ y 3 ) ^ : : : ^ (z m 2 _ :y m 4 _ y m 3 ) ^ (z m 1 _ z m _ :y m 3 ): Jos F = 1, niin z i = 1 jollain 1, joten ~ F = 1 kun valitaan yj = 1 kun j < i 1 ja y j = 0 muuten. Jos F = 0 ja siis z i = 0 kaikilla i, niin ~ F = 0 miten tahansa yj :t valitaankin. Jos nimittain yritetaan saada ~ F = 1, pitaa 1. klausuulin ja ehdon z 1 = z 2 = 0 takia valita y 1 = 1. Kun y 1 = 1 ja z 3 = 0, toisen klausuulin takia pitaa ottaa y 2 = 1. Nain paadytaan lopulta valitsemaan y m 3 = 1, mutta talloin viimeinen klausuuli jaa toteutumatta. Siis 2 CSAT jos ja vain jos 2 3SAT. Selvasti muunnos 7! voidaan laskea polynomisessa ajassa. 243

NP-taydellisyys tahan mennessa: jos jollakin NP-taydellisella ongelmalla on polynominen ratkaisualgoritmi, niin P = NP tata ei pideta luultavana, koska se tarkoittaisi etta eksponentiaalisen suuria hakuavaruuksia voitaisiin etsia polynomisessa ajassa suoraan maaritelmasta todistettiin, etta SAT on NP-taydellinen suoraviivaisilla palautuksilla osoitettiin, etta jo SAT-ongelman rajoitetut erikoistapaukset CSAT ja 3SAT ovat NP-taydellisia Jatko: [HMU 10.4] osoitetaan 3SAT p m IS ja 3SAT p m HC siis IS ja HC NP-taydellisia aiemmin osoitettu IS p m VC ja HC p m TSP, joten myos VC ja TSP NP-taydellisia 244

Lause 3.14: [HMU Thm 10.18] Riippumaton joukko -ongelma on NP-taydellinen Todistus: Tarkastellaan siis joukkoa IS = f h G; k i j G sisaltaa k-solmuisen riippumattoman joukong : Harjoitustehtavana on osoitettu, etta IS 2 NP. Muodostetaan palautus f: 3SAT p m IS. Koska 3SAT on NP-taydellinen, vaite seuraa. Siis muodostetaan f() = h G; k i, missa h G; k i 2 IS jos ja vain jos on toteutuva 3-CNF-kaava. Erityisesti jos x ylipaansa ei ole 3-CNF-kaava, pitaa olla f(x) 62 IS. Tallaisissa tapauksissa valitaan esim. f(x) = h (V; E); n + 1 i missa jv j = n. Keskitytaan jatkossa tapaukseen, jossa x todella on 3-CNF-kaava. 245

Olkoon siis 3-CNF-kaava, jossa m klausuulia: m^ = i=1 missa kukin z i;r on muotoa x j tai :x j. Nyt f() = h (V; E); k i missa k = m (z i;1 _ z i;2 _ z i;3 ) jv j = 3m ja V = f v i;r j i 2 f 1; : : : ; m g ; r 2 f 1; 2; 3 g g (v i;r ; v i;s ) 2 E kaikilla i 2 f 1; : : : ; m g, r; s 2 f 1; 2; 3 g, r 6= s kun i 6= j, niin (v i;r ; v j;s ) 2 E jos z i;r = :z j;s tai :z i;r = z j;s Selvasti f laskettavissa polynomisessa ajassa. 246

Esimerkki 3.15: Muodostetaan h G; k i = f() kun = (x 1 _ x 3 _ :x 4 ) ^ (:x 2 _ x 4 _ :x 5 ) ^ (:x 1 _ x 5 _ :x 6 ) ^ (x 1 _ :x 6 _ :x 5 ): Siis k = m = 4. Rengastetuista solmuista muodostuu kokoa 4 oleva riippumaton joukko. Tama vastaa kaavan toteuttavia arvoja x 1 = 1, x 5 = 0, x 6 = 0, muut muuttujat mielivaltaisia x 1 :x 2 :x 1 x 1 x 3 x 4 x 5 :x 6 :x 4 :x 5 :x 6 :x 5 247

Nyt nahdaan, etta on toteutuva, verkossa G on m solmun riippumaton joukko U. ): Ol. toteutuva. Valitaan muuttujien x i arvot siten, etta jokaisessa kaavan klausuulissa i ainakin yksi literaali z i;r saa arvon 1. Valitaan joukkoon U vastaavat v i;r. Nyt U sisaltaa tasan yhden solmun jokaisesta "kolmiosta". Lisaksi valitut solmut vastaavat "tosia" literaaleja, joten minkaan kahden eri "kolmiosta" valitun solmun valilla ei ole kaarta. Siis U on riippumaton ja juj = m. (: Ol. m solmun joukko U riippumaton. Nyt U sisaltaa tasan yhden solmun joka "kolmiosta". Koska minkaan eri "kolmioista" valittujen solmujen valilla ei ole kaarta, voidaan ilman ristiriitaa asettaa "todeksi" valittuja solmuja vastaavat literaalit. Jokaiseen klausuuliin tulee ainakin yksi "tosi" literaali; toteutuva. 248

Tarkastellaan seuraavaksi suunnattu Hamiltonin keha -ongelmaa (Directed Hamiltonian Circuit, DHC): Annettu: suunnattu verkko G Kysymys: onko verkossa G suunnattu polku, joka kay jokaisessa solmussa tasan kerran ja palaa lahtosolmuunsa Siis eroksi alkuperaiseen Hamiltonin keha -ongelmaan (HC) verkon kaarilla on suunta, ja kehan pitaa naita suuntia noudattaa. Lause 3.16: [HMU Thm 10.21] DHC on NP-taydellinen. Koska HC 2 NP ja harjoitustehtavana osoitetaan DHC p m HC, patee Korollaari 3.17: [HMU Thm 10.23] HC on NP-taydellinen. 249

Todistus: Kuten suuntaamattomassa tapauksessa, nahdaan helposti, etta DHC 2 NP. Muodostetaan palautus f: 3SAT p m DHC, mista vaite nyt seuraa. Olkoon annettu n-muutujainen 3-CNF-kaava jossa m klausuulia m^ = j=1 (z j;1 _ z j;2 _ z j;3 ) : Suunnattu verkko f() = G = (V; E) muodostuu kahdenlaisista osaverkoista eli laitteista (gadget): jokaista muuttujaa x i kohti laite A i, i = 1; : : : ; n laite A i voidaan kayda lapi kahdella eri tavalla, jotka koodaavat valintaa x i = 0 tai x i = 1 jokaista klausuulia j = z j;1 _ z j;2 _ z j;3 kohti laite B j, j = 1; : : : ; m laitteen B j lapikaynti voidaan lomittaa laitteen A i lapikayntiin joss muuttuja x i "tekee todeksi" klausuulin j 250

Laite A i : laitteessa on 2m + 4 solmua a i, d i seka b i;j ja c i;j, j = 0; : : : ; m. Laitteen sisaiset kaaret: solmusta a i kaari solmuihin b i;0 ja c i;0 solmuista b i;m ja c i;m kaari solmuun d i solmusta b i;j kaari solmuun c i;j ja solmusta c i;j kaari solmuun b i;j, j = 0; : : : ; m solmusta b i;j 1 kaari solmuun c i;j ja solmusta c i;j 1 kaari solmuun b i;j, j = 1; : : : ; m Havaitaan etta laitteen A i solmut voidaan kayda lapi kahdessa jarjestyksessa: jarjestys a i c i;0 b i;0 c i;1 b i;1 : : : c i;m b i;m d i vastaa valintaa x i = 0 jarjestys a i b i;0 c i;0 b i;1 c i;1 : : : b i;m c i;m d i vastaa valintaa x i = 1 Eri laitteita yhdistavat kaaret esitellaan pian. 251

b i;0 b i;1 b i;2... b i;m A i 1 a i d i A i+1 c i;0 c i;1 c i;2... c i;m A i Laite A i. Kuvasta puuttuu kaaret laitteisiin B j. 252

Laite B j : laitteessa 6 solmua r j;1, r j;2, r j;3, s j;1, s j;2, s j;3. Laitteen sisaiset kaaret: solmut r j;k sisaltava sykli: kaaret (r j;1 ; r j;2 ), (r j;2 ; r j;3 ) ja (r j;3 ; r j;1 ) solmut s j;k sisaltava sykli: kaaret (s j;1 ; s j;3 ), (s j;3 ; s j;2 ) ja (s j;2 ; s j;1 ) (huom. suunta) sykleja kytkevat kaaret (r j;1 ; s j;1 ), (r j;2 ; s j;2 ) ja (r j;3 ; s j;3 ) Havaitaan etta jos Hamiltonin keha tulee laitteeseen B j solmun r j;k kautta niin sen pitaa vastaavasti poistua solmun s j;k kautta. (Keha voi vierailla laitteessa B j useita kertoja, mutta jokaisen vierailun on noudatettava tata saantoa.) Muuten osa solmuista jaisi eristyksiin eika enaa paasisi mukaan kehaan. 253

A i 00 r j;3 s j;3 A i 0 r j;2 s j;2 A i r j;1 s j;1 Laite B j. Tassa literaalin j muuttujat ovat x i, x i 0 ja x i 00. 254

Laitteet A i yhdistetaan yhdeksi isoksi sykliksi: solmusta d i kaari solmuun a i+1, i = 1; : : : ; n 1 solmusta d n kaari solmuun a 1 Laite A i yhdistetaan niihin laitteisiin B j, joilla klausuuli j sisaltaa literaalin x i tai :x i : jos z j;k = x i niin lisataan kaaret (c i;j 1 ; r j;k ) ja (s j;k ; b i;j ) jos z j;k = :x i niin lisataan kaaret (b i;j 1 ; r j;k ) ja (s j;k ; c i;j ) Havainto: Jos klausuuli j sisaltaa literaalin x i (vast. :x i ) ja laitteen A i lapikayntijarjestys vastaa valintaa x i = 1 (vast. x i = 0) niin laitteen B j lapikaynti voidaan sijoittaa laitteen A i lapikaynnin lomaan. 255

Verkkoon G = f() ei tule muita kaaria kuin edella luetellut. Selvasti f voidaan laskea polynomisessa ajassa. Seuraavasta vaitteesta seuraa etta f: 3SAT p m DHC. Vaite: on toteutuva, verkossa G on Hamiltonin keha ): Olkoon = 1 kun (x 1 ; : : : ; x n ) = (v i ; : : : ; v n ) 2 f 0; 1 g n. Siis jokaisella klausuulilla j = z j;1 _ z j;2 _ z j;3 ainakin yksi literaali z j;k on tosi kun (x 1 ; : : : ; x n ) = (v i ; : : : ; v n ). Valitaan jokin indeksi k(j) 2 f 1; 2; 3 g s.e. jollain i joko z j;k(j) = x i ja v i = 1, tai z j;k(j) = :x i ja v i = 0. Siis klausuulin numero j toteutuminen on siina olevan literaalin numero k(j) vastuulla. 256

Verkkoon G voidaan muodostaa Hamiltonin keha seuraavasti: 1. kay laite A i lapi jarjestyksessa a i c i;0 b i;0 : : : c i;m b i;m d i jos v i = 0 a i b i;0 c i;0 : : : b i;m c i;m d i jos v i = 1 2. yhdista laitteiden A i lapikaynnit jarjestyksessa A 1 A 2 : : : A n A 1 3. kaikilla j = 1; : : : ; m: jos z j;k(j) = :x i (jolloin v i = 0), korvaa laitteen A i lapikaynnin kaari (b i;j 1 ; c i;j ) polulla (b i;j 1 ; r j;k(j) ; : : : ; s j;k(j) ; c i;j ) missa r j;k(j) ; : : : ; s j;k(j) on laitteen B j lapikaynti jos z j;k(j) = x i (jolloin v i = 1), korvaa laitteen A i lapikaynnin kaari (c i;j 1 ; b i;j ) polulla (c i;j 1 ; r j;k(j) ; : : : ; s j;k(j) ; b i;j ) missa r j;k(j) ; : : : ; s j;k(j) on laitteen B j lapikaynti 257

(: Olkoon verkossa G Hamiltonin keha. Jos keha sisaltaa kaaren (a i ; b i;0 ), valitaanv i = 1. Jos keha sisaltaa kaaren (a i ; c i;0 ), valitaan v i = 0. Selvasti tasan yksi naista patee. Vaitetaan, etta = 1 jos x i = v i kaikilla i. Jos keha tulee laitteeseen B j solmun r j;k kautta, se poistuu solmun s j;k kautta; muuten osa laitteen solmuista leikkautuisi pois kehalta. Siis laitteen B j kautta voidaan siirtya solmusta c i;j 1 solmuun b i;j jos j sisaltaa literaalin x i ja solmusta b i;j 1 solmuun c i;j jos j sisaltaa literaalin :x i. 258

Siis jos v i = 1, laite A i kaydaan lapi jarjestyksessa a i b i;0 c i;0 b i;1 c i;1 : : : b i;m c i;m d i missa c i;j 1 b i;j tarkoittaa siirtymista solmusta c i;j 1 solmuun b i;j joko suoraan tai laitteen B j kautta. Jos v i = 0, saadaan vastaavasti a i c i;0 b i;0 c i;1 b i;1 : : : c i;m b i;m d i : Jos laitteessa B j kaydaan laitteen A i lapikaynnin valissa ja v i = 1, niin laitteeseen B j mennaan kaarta (c i;j 1 ; r j;k ) jolloin z j;k = x i. Vastaavasti jos v i = 0 niin z j;k = :x i. Siis z j;k = 1 kun valitaan x i = v i. Jokaisessa laitteessa B j kaydaan ainakin kerran, joten jokaisessa klausuulissa j on ainakin yksi literaali z j;k joka saa arvon 1 kun x i = v i kaikilla i. 259

TSP HC DHC VC IS Yhteenveto todistetuista polynomisista palautuksista 3SAT CSAT SAT NP-tayd. Nuoli A! B tarkoittaa A p m B Huom. kaikki NP-ongelmat on palautettu ongelmaan SAT (Lause 3.7). NP 260

Muita vaativuusluokkia ( ) Kaydaan lyhyesti lapi tarkeimpia vaativuusluokkiin liittyvia tuloksia. Monet tunnetuista tuloksista ovat vaikeita todistaa, ja monet kysymykset ovat viela auki. Lause 3.18 [Ladner 1975]: Jos P 6= NP niin luokassa NP P on muitakin kuin NP-taydellisia kielia. Siis ei ole mahdollista, etta luokka NP jakaantuisi toisaalta polynomisesti ratkeaviin ja toisaalta NP-taydellisiin ongelmiin: joko nama ongelmaluokat yhtyvat tai niiden valissakin on jotain. Eras ehdokas "valissa olevaksi" ongelmaksi on verkkoisomora: Annettu: verkot G 1 = (V 1 ; E 1 ) ja G 2 = (V 2 ; E 2 ) Kysymys: onko olemassa bijektio f: V 1! V 2 jolla (u; v) 2 E 1 joss ((f(u); f(v)) 2 E 2 Huom. osaverkkoisomora tiedetaan NP-taydelliseksi ongelmaksi (harj. 8.3). 261

Luokan NP ongelmien komplementit [HMU 11.1] muodostavat luokan co-np = A j A 2 NP : Luokalla co-np on omat taydelliset ongelmansa. Lause 3.19: A on co-np-taydellinen, jos ja vain jos A on NP-taydellinen. Todistus: Jos f on palautus B p m A, se on samalla palautus B p m A. Jos P = NP niin tietysti myos P = co-np. Joka tapauksessa selvasti P NP \ co-np. Nykytietamyksen mukaan seuraavat vaihtoehdot ovat kaikki mahdollisia: P = NP = co-np P 6= NP mutta NP = co-np P = NP \ co-np mutta P 6= NP ja P 6= co-np P 6= NP \ co-np ja NP 6= co-np Naista viimeista pidetaan ehka luultavimpana. 262

Toisistaan poikkeavia aika- ja tilavaativuusluokkia on aareton maara. Maaritelma Funktio t on aikakonstruoituva, jos syotteella 1 n luvun t(n) binaariesitys voidaan laskea ajassa O(t(n)). Kaikki "jarkevat" vahintaan n log n olevat funktiot ovat aikakonstruoituvia, esim. n log n, bn 3=2 c, n 5, 2 n. Lause 3.20: Jos t on aikakonstruoituva, niin on olemassa ongelma A joka voidaan ratkaista ajassa O(t(n)) mutta ei ajassa O(t(n) 1 ) millaan > 0.. Maaritelma Funktio s on tilakonstruoituva, jos syotteella 1 n luvun s(n) binaariesitys voidaan laskea tilassa O(s(n)). Kaikki "jarkevat" vahintaan logn olevat funktiot ovat tilakonstruoituvia, esim. log n, bn 3=2 c, n 5, 2 n. Lause 3.21: Jos s on tilakonstruoituva, niin on olemassa ongelma A joka voidaan ratkaista tilassa O(s(n)) mutta ei tilassa O(s(n) 1 ) millaan > 0. 263

Koska "P = NP?" ja NP = co-np?" ovat klassisia avoimia ongelmia, on hieman yllattavaa etta vastaavat tilavaativuusluokkia koskevat kysymykset "helppoja": Lause 3.22 [Savitch 1970]: Olkoon s(n) n kaikilla n. Kaikki ongelmat, jotka voidaan ratkaista epadeterministisesti tilassa s(n), voidaan ratkaista deterministisesti tilassa O(s(n) 2 ). Korollaari 3.23: PSPACE = NPSPACE = co-npspace Tassa on siis merkitty co-c = A j A 2 C kuten aiemminkin. Komplementoinnin suhteen on saatu viela tarkempikin tulos: Lause 3.24 [Immerman 1988, Szelepcsenyi 1987]: Olkoon s(n) log n kaikilla n. Jos ongelma A voidaan tunnistaa epadeterministisesti tilassa s(n), niin A voidaan tunnistaa epadeterministisesti tilassa O(s(n)). (Tulos on mielekas myos tapauksessa s(n) < n, kun tarkastellaan tyotilaa eli syotteen sailyttamisesta ei makseta.) 264

Seuraava lause suhteuttaa karkeasti deterministiset aika- ja tilavaativuusluokat. Lause 3.25: Jos ongelman aikavaativuus on T(n), niin sen tilavaativuus on O(T(n)). Jos ongelman tilavaativuus on S(n), niin sen aikavaativuus on O(2 cs(n) ) jollain c > 0. Todistushahmotelma: Ajassa T(n) ei ehdi kuluttaa yli T(n) paikkaa muistia. Jos koneen M tilavaativuus on S(n) ja laskenta on kestanyt yli jqjj j S(n) askelta, jokin tilanne on toistunut, joten kone on ikuisessa silmukassa. Maaritellaan viela eksponentiaalinen tilavaativuusluokka ESPACE = L(M) j M deterministinen, space M (n) = O(2 nk ) jollain k : Korollaari 3.26: P NP PSPACE E ESPACE. Yllaolevien sisaltyvyyksien aitoudesta ei tiedeta kuin seuraava Lause 3.27: P 6= E ja PSPACE 6= ESPACE. 265

4. Yhteenveto Laskennan mallit Turingin kone on universaali laskennan malli: sen on tarkoitus kuvata kaikkia periaatteessa mahdollisia "mekaanisia" laskentoja alkuperainen motivaatio logiikasta, ei tietokoneista laskettavuus Turingin koneella ei riipu mallin yksityiskohdista (erityisesti deterministisyydesta) vastaavia malleja on muitakin: rekursiiviset funktiot, yleiset kieliopit, Random Access Machine; ohjelmointikielet kaikki nama maarittelevat saman kasitteen "laskettavuus" ) Churchin-Turingin teesi: Turingin koneet ovat oikea malli mekaaniselle laskennalle 266

Laskettavuusteoria peruskysymys: mita voidaan laskea aarellisessa ajassa rekursiivisuus (ratkeavuus) ja rekursiivinen lueteltavuus (osittainratkeavuus) tarkea tekninen yksityiskohta: Turingin koneen esitys merkkijonona, universaali Turingin kone universaalikieli L u : rekursiivisesti lueteltava, ei rekursiivinen muita ei-ratkeavia ongelmia: pysahtymisongelma, epatyhjyysongelma, tyhjyysongelma; Postin vastaavuusongelma Ricen lause: semanttiset ominaisuudet ratkeamattomia 267

rekursiivinen palautus A m B: ongelma A ainakin "yhta ratkeava" kuin B tarkea tekniikka: A todistetaan ratkeamattomaksi osoittamalla B m A, missa B on jokin tunnettu ratkeamaton ongelma ongelma A on RE-taydellinen, jos A on rekursiivisesti lueteltava ja B m A kaikilla rekursiivisesti lueteltavilla B RE-taydelliset ongelmat ovat "maksimaalisen vaikeita" osittain ratkeavia ongelmia esim. universaalikieli, pysahtymisongelma, epatyhjyysongelma 268

Vaativuusteoria peruskysymys: mita voidaan laskea polynomisessa ajassa kertaluokat, aika- ja tilavaativuudet; vaativuusluokat, erityisesti P epadeterministiset vaativuusluokat, erityisesti NP avoin ongelma: onko P = NP, ts. vaikuttaako epadeterminismi siihen mika on laskettavissa polynomisessa ajassa yleinen uskomus: P 6= NP 269

polynominen palautus A p m B: ongelma A ainakin yhta helppo kuin ongelma B A on NP-taydellinen, jos A 2 NP ja B p m A kaikilla B 2 NP jos A on NP-taydellinen ja A ratkeaa deterministisesti polynomisessa ajassa, niin P = NP jos A on NP-taydellinen, on siis aihetta uskoa, etta A ei ratkea deterministisesti polynomisessa ajassa, tai ainakin polynomisen algoritmin loytaminen olisi aarimmaisen vaikeaa tarkeita NP-taydellisia ongelmia: SAT, 3SAT, HC, TSP, VC, IS,... ongelman A osoittaminen NP-taydelliseksi: 1. osoita A 2 NP (yleensa helppoa) 2. osoita B p m A jollain NP-taydelliseksi tunnetulla B Loppu 270