Luku 6 Ratkeavuus ja efektiivinen numeroituvuus Proseduurit Olkoon A aakkosto. Proseduuri aakkoston A sanoille on mikä hyvänsä prosessi (algoritmi) P, jolle annetaan syötteeksi sana w A, ja joka etenee askelittain mekaanisesti annettuja ohjeita noudattaen. Näitä toimintaohjeita voi olla vain äärellinen määrä. Prosessi voi pysähtyä äärellisen monen askeleen jälkeen tai se voi jatkua koskaan pysähtymättä. Proseduuri voi myös tulostaa suorituksen aikana yhden tai useampia sanoja u A. Jos suoritus ei pysähdy, tulostetuista sanoista voi muodostua ääretön jono u 0,u 1,u 2,... Määritelmä 6.1Olkoon A aakkosto, W A joukko sanoja ja P proseduuri joukossa A. (a) P on joukon W ratkaisuproseduuri, jos P pysähtyy jokaisella syötteellä w A, ja tulostaa sanan u A, jolla pätee u = ε (tyhjä sana) jos ja vain jos w W. (b) W on ratkeava, jos on olemassa proseduuri P, joka on sen ratkaisuproseduuri. Sanomme, että proseduuri P hyväksyy sanan w A,jossesyötteellä w tulostaa tasan yhden sanan, joka on ε,japysähtyy sen jälkeen. Vastaavasti P hylkää sanan w, jos se tulostaa tasan yhden sanan, joka ei ole ε,japysähtyy sen jälkeen. Joukon W A ratkaisuproseduuri on siis proseduuri, joka hyväksyy kaikki joukon W sanat, ja hylkää kaikki joukon A \ W sanat. Esimerkki 6.1 (a) Olkoon A = {0,...,9} ja W = {w A n(w) on alkuluku}, missä n(w) N on luonnolinen luku, jonka desimaaliesitys w on. (Tässä sovitaan, että n(ε) =0jan(0w) = 0 jokaisella w A.) On helppo todeta, että seuraava proseduuri P ratkaisee joukon W : Olkoon syötteenä w A. Jos w = ε, w =1,taiw =0w jollain w A, tulostetaan 0, ja lopetetaan. Jos w = 2, tulostetaan ε, ja lopetetaan. 50
Jos mikään edellisistä ei päde, jaetaan luku n(w) vuoronperään luvuilla 2, 3,...,n(w) 1; jos jakolasku n(w)/m menee tasan jollain m {2,...,n(w) 1}, tulostetaan 0, ja lopetetaan. muussa tapauksessa tulostetaan ε, ja lopetetaan. Voidaan siis sanoa, että alkulukujen joukko on ratkeava. (b) Olkoon A S predikaattilogiikan aakkosto {v i i N} {,,,, (, )} S, missä S on symbolijoukko {f,c}, jaar(f) =2.Tällöin S-termien joukolla T S on seuraavanlainen ratkaisuproseduuri P : Olkoon syötteenä w A S. Jos w = ε tai sanan w ensimmäinen symboli ei ole c, f tai v i jollain i N, tulostetaan, ja lopetetaan. Jos w = c tai w = v i jollain i N, tulostetaan ε, ja lopetetaan. Jos w = cw tai w = v i w jollain w A S \{ε} ja i N, tulostetaan, ja lopetetaan. Jos w = fw jollain w A S, niin sovelletaan proseduuria P vuoronperään kaikilla syötteillä u A S ja v A S, joilla w = uv; jos proseduuri P tulostaa sanan ε ja pysähtyy molemmilla syötteillä u ja v, tulostetaan ε, ja lopetetaan. jos näin ei tapahdu millään parilla (u, v), jolla w = uv, niin tulostetaan, ja lopetetaan. Huomaa, että Esimerkin 6.1(b) proseduuria P on helppo muokata niin, että se toimii millä hyvänsä kiinnitetyllä symbolijoukolla S. Lisäksi samantapaista proseduuria P käyttäen nähdään, että kaikkien S-kaavojen joukko L S on ratkeava. Proseduuria P voidaan edelleen täydentää niin, että kaavojen vapaista muuttujista pidetään samalla kirjaa. Siis myös kaavajoukot L n S, n N, ovat kaikki ratkeavia. Joukkojen T S, L S ja L n S ratkaisuproseduureissa on kuitenkin vielä yksi asia, joka kaipaa tarkentamista: aakkosto A S on ääretön, joten proseduurin toimiminen näyttäisi edellyttävän kykyä erottaa toisistaan äärettömän monta eri symbolia. (Periaatteessa näiden proseduurien toimitaohjeiden joukkokin on ääretön.) Tämä ongelma ratkaistaan seuraavasti: korvataan aakkosto A S aakkostolla A L := {v,,,,, (, ),R,f,c,0, 1,...,9} ja koodataan kukin muuttujasymboli v n sanalla vn, missä n {0,...,9} on luvun n N desimaaliesitys. Vastaavasti kukin relaatio-, funktio- ja vakiosymboli R n, f n ja c n koodataan sanoilla Rn, fn ja cn. Esimerkiksi termi f 1 c 4 f 1 v 12 f 2 v 23 ja kaava v 0 (R 3 c 1 v 0 c 1 f 2 v 0 c 1 ) koodataan aakkoston A L sanoiksi f1c4f1v12f2v23 ja v0(r3c1v0 c1 f 2v0c1). Kun jatkossa puhumme proseduureista (ja rekisterikoneista), oletamme, että aakkosto on aina äärellinen. Erityisesti, kun tarkastelemme proseduureja termeille ja kaavoille, käytämme edellämainittua aakkoston A S koodausta äärellisen aakkoston A L sanoiksi. 51
Määritelmä 6.2Olkoon A aakkosto, W A joukko sanoja ja P proseduuri joukossa A. (a) P on joukon W efektiivinen numerointiproseduuri, jos P syötteellä ε tulostaa jonon u 0,u 1,u 2,... sanoja s.e. W = {u 0,u 1,u 2,...}. Tässä jono u 0,u 1,u 2,... voi olla äärellinen, ja siinä voi olla toistoja. Jos W =, jono u 0,u 1,u 2,... on tyhjä, eli P ei tulosta yhtään sanaa. (b) W on efektiivisesti numeroituva, jos on olemassa proseduuri P, joka on sen efektiivinen numerointiproseduuri. Jos joukko W A on äärellinen, niin sen efektiivinen numerointiproseduuri P voi olla pysähtymätön, tai vaihtoehtoisesti se voi pysähtyä sen jälkeen, kun se on tulostanut kaikki joukon W alkiot. Sen sijaan äärettömän joukon W efektiivinen numerointiproseduuri ei luonnollisesti voi koskaan pysähtyä. Esimerkki 6.2 Jos A on äärellinen aakkosto, niin A on efektiivisesti numeroituva. On nimittäin olemassa proseduuri P, joka tulostaa kaikki sanat w A leksikograafisessa järjestyksessä. Leksikograafinen järjestys määritellään seuraavasti: a 0...a n b 0...b m n<m n = m i n(a i < A b i j<i(a j = b j )), missä < A on joukon A valmiiksi kiinnitetty järjestys. Esimerkki 6.3 Olkoon S symbolijoukko. Kaikkien validien S-lauseiden joukko VAL S = {ϕ L 0 S = ϕ} on efektiivisesti numeroituva. Seuraava proseduuri antaa tarvittavan efektiivisen numeroinnin tälle joukolle: Käydään läpi kaikki aakkoston A L {,} sanat leksikograafisessa järjestyksessä: w 0 w 1 w 2... Jos w i on muotoa Γ 1 ϕ 1...Γ n ϕ n ϕ, missä kukin Γ j ϕ j sekä ϕ on sekventti, ja lisäksi sekventit Γ 1 ϕ 1,...,Γ n ϕ n muodostavat sekventin ϕ johdon tyhjästä oletusjoukosta ja ϕ L 0 S, niin tulostetaan ϕ, ja siirrytään järjestyksessä seuraavaan sanaan w i+1. Jos edellisen kohdan ehdot eivät päde sanalle w i, niin siirrytään suoraan järjestyksessä seuraavaan sanaan w i+1. Huomaa, että ylläoleva on mahdollista toteuttaa, koska sekventtisääntöjen korrekti soveltaminen voidaan tarkistaa mekaanisesti. Selvästi tämä proseduuri tulostaa kaikki joukon {ϕ L 0 S ϕ} lauseet. Adekvaattisuuslauseen 4.21 perusteella tämä joukko on VAL S. Lause 6.1 Jokainen ratkeava joukko on efektiivisesti numeroituva. Todistus. Olkoon W A ratkeava joukko, ja olkoon P sen ratkaisuproseduuri. Joukolla W on tällöin seuraava efektiivinen numerointiproseduuri P : Käydään aakkoston A sanat läpi leksikograafisessa järjestyksessä w 0 w 1 w 2... 52
Sovelletaan sanaan w i proseduuria P ; jos P hyväksyy sanan w i, tulostetaan w i, ja siirrytään seuraavaan sanaan w i+1. jos P hylkää sanan w i, siirrytään seuraavaan sanaan w i+1. Selvästi proseduuri P tulostaa täsmälleen joukon W sanat (leksikograafisessa järjestyksessä). Lause 6.2 Joukko W A on ratkeava jos ja vain jos sekä W että sen komplementti A \ W ovat efektiivisesti numeroituvia. Todistus. Oletetaan ensin, että W on ratkeava. Lauseen 6.1 nojalla W on tällöin efektiivisesti numeroituva. Toisaalta joukon W ratkaisuproseduurista saadaan joukon A \ W ratkaisuproseduuri yksinkertaisesti vaihtamalla sanan hyväksyminen ja hylkääminen keskenään. Siis myös A \ W on ratkeava, ja siten myös efektiivisesti numeroituva. Oletetaan sitten, että W ja A \ W ovat molemmat efektiivisesti numeroituvia. Olkoot P 1 ja P 2 vastaavat numerointiproseduurit. Kiinnitetään sana u A, u = ε. Joukolla W on tällöin seuraava ratkaisuproseduuri P : Olkoon syöte w A. Käynnistetään proseduurit P 1 ja P 2 (molemmilla syötteenä tyhjä sana ε); kumpaakin proseduuria tehdään vuoronperään askel kerrallaan. Jos proseduuri P 1 tulostaa jossain vaiheessa sanan w, tulostetaan ε, ja lopetetaan. Jos proseduuri P 2 tulostaa jossain vaiheessa sanan w, tulostetaan u, ja lopetetaan. Koska P 1 tulostaa sanan w äärellisen monen askeleen jälkeen jos ja vain jos P 2 ei tulosta sitä koskaan, nähdään että P hyväksyy kaikki joukon W sanat, ja hylkää kaikki muut sanat. Määritelmä 6.3Olkoot A ja B aakkostoja. Funktio f : A B on laskettava, jos on olemassa proseduuri P,jokapysähtyy jokaisella syötteellä w A,ja tulostaa sanan f(w). 53
Rekisterikoneet Kiinnitetään äärellinen aakkosto A = {a 0,...,a r }. Rekisterikone muodostuu äärellisestä jonosta rekistereitä R 0,...,R m, joihin voidaan tallentaa ohjelman suorituksen aikana aakkoston A sanoja. Rekisterikoneen ohjelma muodostuu puolestaan äärellisestä jonosta käskyjä. Käskyjä on seuraavat viisi tyyppiä: (1) LET R i = R i + a j Tässä i m ja j r. Käskyn suoritus: lisätään symboli a j rekisterissä R i olevan sanan perään. (2) LET R i = R i a j Tässä i m ja j r. Käskyn suoritus: jos rekisterissä R i olevan sanan viimeinen symboli on a j, poistetaan se; muuten ei tehdä mitään. (3) IF R i = ε THEN l ELSE l 0 OR... OR l r Tässä i m. Käskyn suoritus: jos rekisterissä R i on tyhjä sana, siirrytään käskyyn, jonka numero on l; muuten siirrytään käskyyn, jonka numero on l j, missä a j on rekisterissä R i olevan sanan viimeinen symboli. (4) PRINT Käskyn suoritus: tulostetaan rekisterin R 0 sisältö. (5) HALT Käskyn suoritus: pysäytetään ohjelman suoritus. Määritelmä 6.4Rekisterikoneen ohjelma P on jono α 0,...,α k numeroituja käskyjä siten, että jokaisella n k pätee (i) käskyn α n numero on n; (ii) jos α n, on muotoa (3), niin l, l 0,...,l r k; (iii) α n on muotoa n HALT jos ja vain jos n = k. Jokaiseen ohjelmaan P liittyy luonnollisella tavalla vastaava proseduuri, eli ohjelman suoritus: suoritus aloitetaan tilanteesta, jossa rekisteri R 0 sisältää ohjelman syötteen w A, ja kaikki muut rekisterit R 1,...,R m sisältävät tyhjän sanan ε. (Viimeisen tarvittavan rekisterin indeksi m nähdään ohjelmasta.) Suoritus aloitetaan käskystä α 0, ja kunkin käskyn α l suorituksen jälkeen siirrytään käskyyn α l+1, paitsi jos α l on tyyppiä (3), ja sen suoritus määrää muun seuraavan käskyn. Jos suorituksessa päädytään käskyyn α k (eli käskyyn k HALT), ohjelman suoritus pysäytetään. Ohjelmissa on usein tarkoituksenmukaista käyttää hyppykäskyä (3 ) GOTO l : siirry käskyyn, jonka numero on l. Tämä on itse asiassa vain haarautumiskäskyn (3) erikoistapaus, jossa l = l = l 0 = = l r. Määritelmä 6.5Merkitsemme P : w, jos ohjelman P suoritus syötteellä w pysähtyy. Vastaavasti merkitsemme P : w, jos ohjelman P suoritus syötteellä w 54
ei pysähdy. Edelleen merkitsemme P : w u, jos ohjelman P suoritus syötteellä w pysähtyy, ja ennen pysähtymistään ohjelma P tulostaa tasan kerran, ja tulostettu sana on u. Sanomme taas, että ohjelma P hyväksyy syötteen w A,josP:w ε, ja ohjelma P hylkää syötteen w A,josP:w u jollain u = ε. Esimerkki 6.4 Olkoon A = {a} ja olkoon P seuraava ohjelma, jonka aakkosto on A: 0 IF R 0 = ε THEN 5 ELSE 1 1 LET R 0 = R 0 a 2 IF R 0 = ε THEN 6 ELSE 3 3 LET R 0 = R 0 a 4 GOTO 0 5 LET R 0 = R 0 + a 6 PRINT 7 HALT Kun ohjelman P suoritus aloitetaan syötteellä a n+2, missä n N, niin käskyn 0 suoritus johtaa käskyyn 1, jonka suoritus muuttaa rekisterin R 0 sisällöksi a n+1. Tämän jälkeen käskyn 2 suoritus johtaa käskyyn 3, jonka suoritus muuttaa R 0 :n sisällöksi a n.tämän jälkeen käsky 4 palauttaa ohjelman taas käskyyn 0. Syötteellä a 1 = a ohjelma puolestaan suorittaa ensin käskyt 0, 1, jonka jälkeen rekisterissä R 0 on ε, jakäsky 2 ohjaa suorituksen käskyyn 6. Käsky 6 tulostaa sanan ε, jakäsky 7 lopettaa ohjelman suorituksen. Siis P : a 1 ε. Toisaalta syötteellä a 0 = ε ohjelman suoritus hyppää käskystä 0 suoraan käskyyn 5, jonka jälkeen rekisterissä R 0 on a. Käsky 6 tulostaa sen jälkeen sanan a, ja käsky 7 pysäyttää ohjelman. Siis P : a 0 a. Nyt on helppo todistaa induktiolla, että P:a n ε kaikilla parittomilla n N ja P:a n a kaikilla parillisilla n N. Toisin sanoen P hyväksyy kaikki parittoman pituiset sanat w A ja hylkää kaikki parillisen pituiset sanat. Määritelmä 6.6Olkoon W A. (a) Ohjelma P ratkaisee joukon W, jos kaikilla w A pätee: P:w ε, josw W ; P:w u jollain u = ε, josw W. (b) Joukko W on R-ratkeava, jos on olemassa rekisteriohjelma, joka ratkaisee sen. Siis ohjelma P ratkaisee joukon W jos ja vain jos P hyväksyy kaikki sanat w W, ja hylkää kaikki sanat w W. Esimerkistä 6.4 seuraa, että joukko {a n n on pariton} {a} on R-ratkeava. Muuttamalla hieman tämän esimerkin ohjelmaa nähdään, että myös sen komplementtijoukko {a n n on parillinen} on R-ratkeava. 55
Määritelmä 6.7Olkoon W A. (a) Ohjelma P numeroi joukon W,josW = {u 0,u 1,u 2,...}, missä u 0,u 1,u 2,... ovat ne sanat, jotka ohjelma P tulostaa suorituksensa aikana syötteellä ε. (b) Joukko W on R-numeroituva, jos on olemassa ohjelma, joka numeroi sen. Esimerkki 6.5 Olkoon A = {a, b}, ja olkoon P seuraava aakkoston A ohjelma: 0 PRINT 1 LET R 0 = R 0 + a 2 LET R 0 = R 0 + b 4 GOTO 0 5 HALT On helppo nähdä, että syötteellä ε, ohjelma P ei koskaan pysähdy, ja se tulostaa vuoronperään sanat ε =(ab) 0, ab =(ab) 1, abab =(ab) 2,... Toisin sanoen P numeroi joukon W = {(ab) n n N}. Määritelmä 6.8Olkoot A ja B aakkostoja, ja F : A B funktio. (a) Ohjelma P, jonka aakkosto on A B, laskee funktion F, jos kaikilla w A pätee P : w F (w). (b) Funktio F on R-laskettava, jos on olemassa rekisteriohjelma, joka laskee sen. Esimerkki 6.6 Olkoon A = {a, b}, ja olkoon F : A A funktio, jolla F (w) = a n b m, missä n on symbolin a esiintymien määrä sanassa w, jam vastaavasti symbolin b esiintymien määrä. Osoitetaan, että F on R-laskettava. Määritellään ohjelma P, joka laskee funktion F seuraavasti: 0 IF R 0 = ε THEN 7 ELSE 1 OR 4 1 LET R 0 = R 0 a 2 LET R 1 = R 1 + a 3 GOTO 0 4 LET R 0 = R 0 b 5 LET R 2 = R 2 + b 6 GOTO 0 7 IF R 1 = ε THEN 11 ELSE 8 OR 8 8 LET R 1 = R 1 a 9 LET R 0 = R 0 + a 10 GOTO 7 11 IF R 2 = ε THEN 15 ELSE 12 OR 12 12 LET R 2 = R 2 b 13 LET R 0 = R 0 + b 14 GOTO 11 15 PRINT 16 HALT 56
Ohjelman käskyt 0-6 muodostavat luupin, jonka suorituksen aikana syötteenä olevan sanan w symbolit a siirretään rekisteriin R 1 ja symbolit b rekisteriin R 2. Käskyt 7-10 muodostavat toisen luupin, joka siirtää rekisterissä R 1 olevan sanan a n takaisin rekisteriin R 0. Samaan tapaan käskyt 11-14 muodostavat luupin, joka siirtää tämän jälkeen sanan b m rekisteristä R 2 sanan a n jatkeeksi rekisteriin R 0. Lopuksi käsky 15 tulostaa sanan a n b m,jakäsky 16 pysäyttää ohjelman. Churchin teesi. On selvää, että jos joukko W A on R-ratkeava, se on myös ratkeava Määritelmän 6.1 mielessä, sillä rekisteriohjelman suoritus on selvästi mekaaninen proseduuri. Samoin nähdään, että jos joukko W on R-numeroituva, se on myös efektiivisesti numeroituva, ja jos funktio F : A B on R-laskettava, se on myös laskettava. Churchin teesi (rekisterikoneille) on väite, että myös käänteinen on voimassa: jos joukko W on ratkeava (efektiivisesti numeroituva), niin se on myös R-ratkeava (R-numeroituva), ja jos funktio F on laskettava, niin se on myös R-laskettava. Churchin teesiä ei voi todistaa oikeaksi, sillä mekaanisen proseduurin käsitteellä ei ole täsmällistä määritelmää. Toisaalta Churchin teesillä on vahva evidenssi: 1930-luvulta alkaen on esitetty lukuisia - hyvinkin erilaisia - matemaattisia määritelmiä mekaaniselle laskettavuudelle, mutta kaikki nämä määritelmät on todistettu keskenään yhtäpitäviksi. Rekisterikoneen ohella tunnetuimpia määritelmiä ovat rekursiiviset funktiot ja Turingin koneet. (Myös Alan Turing esitti vastaavan väitteen Turingin koneisiin liittyen; siksi usein käytetään myös termiä Churchin ja Turingin teesi.) Churchin teesi onkin yleisesti hyväksytty, ja sitä käytetään usein hyväksi seuraavaan tapaan: Kun pitää osoittaa, että annettu joukko W on R-ratkeava (tai funktio F on R-laskettava), kuvaillaan proseduuri, joka ratkaisee sen (laskee sen); sitten päätellään, että Churchin teesin nojalla W on R-ratkeava (F on R-laskettava). Esimerkki 6.7 Esimerkin 6.3 perusteella validien S-lauseiden joukko VAL S = {ϕ L 0 S = ϕ} on efektiivisesti numeroituva. Siis Churchin teesin nojalla VAL S on R-numeroituva. Pysähtymisongelma Kiinnitetään taas aakkosto A = {a 0,...,a r }. Esitämme tässä luvussa joukon Π halt A, joka ei ole R-ratkeava. Tämä joukko muodostuu rekisterikoneen ohjelmista, jotka on koodattu aakkoston A sanoiksi. Liitämme tätä varten jokaiseen ohjelmaan P, jonka aakkosto on A, sanan z P A. Ensin laajennetaan aakkosto A lisäämällä symbolit, joita tarvitaan ohjelmien kirjoittamiseen: B = A {A, B, C,..., X, Y, Z} {0, 1,...,8, 9} {=, +,,ε,}. 57
Järjestetään B leksikograafisesti käyttäen ylläolevan esityksen järjestystä joukossa B. Ohjelma P, joka käskyt ovat α 0,...,α k esitetään nyt aakkoston B sanana x P := v 0 v 1...v k, missä v l on sana, joka saadaan kirjoittamalla käskyn α l numero l ja sen perään käskyn muut symbolit peräkkäin (ilman välilyöntejä); alaindeksit kirjoitaan tavallisina numeroina. Esimerkiksi ohjelmaa P 0 PRINT 1 LET R 12 = R 12 + a 7 2 HALT vastaa sana x P = 0PRINT1LETR12=R12+a72HALT. Olkoon x P joukon B leksikograafisen järjestyksen mukaan n:s sana. Merkitsemme tällöin n P = n. Sana z P määritellään nyt seuraavasti: z P = a n P 0. Lukua n P sanotaan ohjelman P Gödel-luvuksi, ja sanaa z P sanotaan ohjelman koodiksi. Olkoon Π kaikkien ohjelmien koodien joukko: Π:={z P PonaakkostonA ohjelma}. Apulause 6.3 Joukko Π on R-ratkeava. Todistus. Osoitetaan, että on olemassa proseduuri P, joka ratkaisee joukon Π. Väite seuraa tällöin Churchin teesistä. Proseduuri P toimii seuraavasti: Olkoon syötteenä sana w A. Luetaan ensin sana w symboli kerrallaan; jos siitä löytyy symboli a i, jolla i 1, tulostetaan a i ja lopetetaan; muuten lasketaan sanan w = a n 0 pituus n. Määritetään aakkoston B leksikograafisessa järjestyksessä n:s sana x. Hajotetaan sana x jonoksi v 0,...,v k aakkoston B\{} sanoja, joilla pätee x = v 0 v 1...v k ;käydään vuoronperään läpi sanat v n, n k; jos v n ei ole jotain seuraavista tyypeistä, tulostetaan a 0, ja lopetetaan: (1) nletrs=rs+a i, missä s N ja i r (2) nletrs=rs a i, missä s N ja i r (3) nifrs=εthenlelsel 0 OR...ORl r, missä s N ja l, l 0...,l r k (4) nprint (5) nhalt; jos n<kja v n = nhalt, tai n = k ja v n = nhalt, tulostetaan a 0, ja lopetetaan; muuten tulostetaan ε, ja lopetetaan. Selvästi tämä proseduuri hylkää kaikki sanat w, jotka eivät ole joukossa Π ja hyväksyy kaikki sanat w Π. Pysähtymisongelma (aakkostolla A) on seuraava joukko: Π halt := {z P PonaakkostonA ohjelma ja P : ε }. Tavoitteenamme on osoittaa, että pysähtymisongelma on R-ratkeamaton. Intuitiivisesti tämä tarkoittaa sitä, että ei ole olemassa mekaanista menetelmää selvittää, pysähtyykö annettu (aakkoston A) ohjelma P syötteellä ε, vai ei. 58
Ennen varsinaista pysähtymisongelmaa tarkastelemme kuitenkin sen muunnelmaa, jossa tyhjän sanan ε paikalla on ohjelman P koodi z P : Π halt := {z P PonaakkostonA ohjelma ja P : z P }. Apulause 6.4 Joukko Π halt ei ole R-ratkeava. Todistus. Tehdään vastaoletus, että on olemassa ohjelma P 0, joka ratkaisee joukon Π halt.tällöin kaikilla ohjelmilla P pätee P 0 : z P ε, jos P : z P (1) P 0 : z P u jollain u = ε, jos P : z P. Muokkaamalla ohjelmaa P 0 sopivasti voidaan muodostaa ohjelma P 1, jolla pätee P 1 : z P, jos P : z P (2) P 1 : z P, jos P : z P. Nimittäin jos ohjelman P 0 käskyt ovat α 0,...,α k, niin ohjelma P 1 saadaan siitä korvaamalla jokainen 1 tulostuskäsky α l = l PRINT hyppykäskyllä α l : l IF R 0 = ε THEN l ELSE k OR... OR k. Nyt voidaan päätellä seuraavasti: Jos ohjelma P 0 hyväksyy syötteen w A, niin sen suoritus tulee täsmälleen yhden kerran johonkin tulostuskäskyyn α l,jatässä vaiheessa rekisterissä R 0 on tyhjä sana ε. Ohjelman P 1 suoritus syötteellä w etenee tähän asti täsmälleen samoin kuin ohjelman P 0 suoritus, mutta käskyn α l suorittaminen saa sen juuttumaan ikuiseen luuppiin (se toistaa käskyn α l suorittamista loputtomiin). Toisaalta jos ohjelma P 0 hylkää syötteen w, jokin sen tulostuskäskyistä α l tulostaa jossain vaiheessa epätyhjän sanan u A.Tällöin ohjelman P 1 käskyn α l suoritus johtaa pysähtymiskäskyyn α k. Siispä ohjelman P 1 suoritus syötteellä w pysähtyy jos ja vain jos ohjelma P 0 hylkää syötteen w. Ehdosta (1) seuraa nyt, että P 1 pysähtyy syötteellä z P jos ja vain jos P ei pysähdy syötteellä z P : kaikilla ohjelmilla P pätee (3) P 1 : z P P:z P. Erityisesti, kun P = P 1 saadaan (4) P 1 : z P1 P 1 : z P1, mikä on ristiriita. Siispä vastaoletus on väärä, eli joukko Π halt ei ole R-ratkeava. Pysähtymisongelman Π halt ratkeamattomuus todistetaan palauttamalla ongelma Π halt siihen. 1. ohjelmassa P 0 voi periaatteessa olla useitakin tulostuskäskyjä, vaikka intuitiivisesti on selvää, että yksiriittää. 59
Määritelmä 6.9Joukon U A palautus joukkoon V A on R-laskettava funktio F : A A, jolla pätee w U F (w) V kaikilla w A. Merkitsemme U V, jos on olemassa joukon U palautus joukkoon V. Apulause 6.5 Olkoot U, V A joukkoja, joilla U V. Jos V on R-ratkeava, niin myös U on R-ratkeava. Todistus. Olkoon F : A A joukon U palautus joukkoon V, ja olkoon P F ohjelma, joka laskee sen. Oletetaan edelleen, että P V on ohjelma, joka ratkaisee joukon V. Suorittamalla ensin ohjelma P F syötteellä w A, saadaan rekisteriin R 0 sana F (w). Kun tämän jälkeen suoritetaan ohjelma P V, sen laskenta pysähtyy, ja tulostaa sanan u A, missä u = ε joss F (w) V joss w U. Selvästi tämä on mekaaninen proseduuri, joka ratkaisee joukon U, joten Churchin teesin nojalla U on R-ratkeava. (Itse asiassa on suoraviivaista konstruoida ohjelmien P F ja P V yhdistetty ohjelma P F P V, joka toteuttaa tämän proseduurin.) Apulausetta 6.5 käytetään yleensä seuraavasti: Tavoitteena on todistaa, että annettu joukko V A ei ole R-ratkeava. Tällöin riittää osoittaa, että U V jollain tunnetulla joukolla U A, joka ei ole R-ratkeava. Lause 6.6 (Pysähtymisongelman ratkeamattomuus) Joukko Π halt ei ole R-ratkeava. Todistus. Riittää osoittaa, että Π halt Π halt. Palautus F : A A näiden joukkojen välillä määritellään seuraavasti: Jos w Π, asetetaan F (w) = w. Jos w Π eli w = z P jollain ohjelmalla P, niin muodostetaan ohjelma P +, jolla pätee ( ) P : z P P + : ε, ja asetetaan F (w) =z P +.Tällöin palautuksen määritelmän ehto w Π halt F (w) Π halt on selvästi voimassa. Ohjelma P + saadaan yksinkertaisesti lisäämällä ohjelman P alkuun käskyt l LET R 0 = R 0 + a 0, l<n P, ja muuttamalla ohjelman P käskyjen numerot ja hyppykäskyjen osoitteet vastaavasti lisäämällä niihin n P. Ohjelman P + ensimmäiset n P käskyä tuottavat rekisteriin R 0 syötteen ε paikalle syötteen z P. Sen jälkeen ohjelma P + simuloi täsmälleen ohjelman P toimintaa, joten ehto ( ) pätee. Lopuksi todetaan vielä, että F (w) voidaan laskea mekaanisella proseduurilla, sillä ehto w Π voidaan tarkistaa mekaanisesti Apulauseen 6.3 perusteella, ja ohjelma P + saadaan ohjelmasta P yksinkertaisella muunnoksella. Siispä F on R-laskettava Churchin teesin nojalla. 60
Pysähtymisongelma on siis R-ratkeamaton. Churchin teesin nojalla tämä voidaan tulkita niin, että ei ole olemassa mekaanista menetelmää tutkia, pysähtyykö annetun ohjelman P laskenta syötteellä ε. Toisaalta pysähtymisongelma on kuitenkin efektiivisesti numeroituva: Lause 6.7 Joukko Π halt on R-numeroituva. Todistus. Luennolla. (Churchin teesin avulla.) Seuraus 6.8 Joukko A \ Π halt ei ole R-numeroituva. Todistus. Väite seuraa siitä, että jos joukko W A ja sen komplementti A \W ovat molemmat R-numeroituvia, niin W on R-ratkeava (HT). 61