ICS-C2000 Tietojenkäsittelyteoria Luento 8: Turingin koneet Aalto-yliopisto Perustieteiden korkeakoulu Tietotekniikan laitos Kevät 2016
Alue ja aiheet: Orposen prujun luvut 4.1 4.2, 6.1 Turingin koneiden perusteet Moniuraiset Turingin koneet ja niiden simulointi standardimallisilla koneilla Moninauhaiset Turingin koneet ja niiden simulointi standardimallisilla koneilla Epädeterministiset Turingin koneet ja niiden simulointi deterministisillä Rekursiiviset ja rekursiivisesti numeroituvat kielet 2/60
Turingin koneet 3/60
4. TURINGIN KONEET Alan Turing 1935 36. nauha: T U R I N G nauhapää: q1 q2 ohjausyksikkö: q0 δ Turingin kone on kuin äärellinen automaatti, jolla on käytössään nauha. Mutta kone voi siirtää nauhapäätä sekä oikealle että vasemmalle Samoin se voi paitsi lukea myös kirjoittaa nauhapään kohdalla olevan merkin. Lisäksi nauha on oikealle rajaton. Churchin Turingin teesi Mikä tahansa mekaanisesti ratkeava ongelma voidaan ratkaista Turingin koneella. 4/60
Turingin koneen kanssa ekvivalentteja laskentamalleja: Gödelin Kleenen rekursiivisesti määritellyt funktiot (1936), Churchin λ-kalkyyli (1936), Postin (1936) ja Markovin (1951) merkkijonomuunnossysteemit, kaikki nykyiset ohjelmointikielet (kun muistin määrää ei ole rajattu). Turingin koneet ohjelmointikieli. 5/60
Määritelmä 4.1 Turingin kone on seitsikko missä: M = (Q,Σ,Γ,δ,q 0,q acc,q rej ), Q on koneen tilojen äärellinen joukko; Σ on koneen äärellinen syöteaakkosto; Γ Σ on koneen äärellinen nauha-aakkosto (ol. että, / Γ); δ : (Q {q acc,q rej }) (Γ {, }) Q (Γ {, }) {L,R} on koneen siirtymäfunktio; q 0 Q on koneen alkutila (q 0 q acc ja q 0 q rej ); q acc Q on koneen hyväksyvä ja q rej Q sen hylkäävä lopputila (q rej q acc ). 6/60
Siirtymäfunktion arvon tulkinta: δ(q,a) = (q,b, ) Ollessaan tilassa q ja lukiessaan nauhamerkin (tai alku- tai loppumerkin) a, kone siirtyy tilaan q, kirjoittaa lukemaansa paikkaan merkin b, ja siirtää nauhapäätä yhden merkkipaikan verran suuntaan (L left, R right ). 7/60
Lisäksi sallittuja kirjoitettavia merkkejä ja siirtosuuntia on rajoitettu: Siirtymäfunktion arvo on aina määrittelemätön, kun q = q acc tai q = q rej. Joutuessaan jompaan kumpaan näistä tiloista kone pysähtyy heti. Kaikille siirtymille δ(q,a) = (q,b, ) vaaditaan: jos a =, niin b = ja = R Eli nauhan aloitusmerkkiä ei ylikirjoiteta eikä siirrytä sen vasemmalle puolelle jos b =, niin a = Eli ei kirjoiteta uusia nauhan aloitusmerkkejä jos b =, niin a = ja = L Eli ei kirjoiteta uusia nauhan lopetusmerkkejä (vaan ne tulevat automaattiseti siirryttäessä oikealle nauhan kirjoittamattomaan osaan) 8/60
Koneen tilanne on nelikko (q,u,a,v) Q Γ (Γ {ε}) Γ, missä voi olla a = ε, mikäli myös u = ε tai v = ε. Tulkinta: kone on tilassa q, nauhan sisältö sen alusta nauhapään vasemmalle puolelle on u, nauhapään kohdalla on merkki a ja nauhan sisältö nauhapään oikealta puolelta käytetyn osan loppuun on v. Mahdollisesti on a = ε, jos nauhapää sijaitsee aivan nauhan alussa tai sen käytetyn osan lopussa. Ensimmäisessä tapauksessa ajatellaan, että kone havaitsee merkin ja toisessa tapauksessa merkin. Alkutilanne syötteellä x = a 1 a 2...a n on nelikko (q 0,ε,a 1,a 2...a n ). Tilannetta (q, u, a, v) merkitään yleensä yksinkertaisemmin (q,uav), ja alkutilannetta syötteellä x yksinkertaisesti (q 0,x). 9/60
Tilanne (q,w) johtaa suoraan tilanteeseen (q,w ), merkitään (q,w) M (q,w ), jos jokin seuraavista ehdoista täyttyy: jos δ(q,a) = (q,b,r), niin (q,uacv) M (q,ubcv); jos δ(q,a) = (q,b,l), niin (q,ucav) M (q,ucbv); jos δ(q, ) = (q,,r), niin (q,εcv) M (q,cv); jos δ(q, ) = (q,b,r), niin (q,uε) M (q,ubε); jos δ(q, ) = (q,b,l), niin (q,ucε) M (q,ucb); jos δ(q, ) = (q,,l), niin (q,ucε) M (q,uc). missä q,q Q, u,v Γ, a,b Γ ja c Γ {ε} Tilanteet, jotka ovat muotoa (q acc,w) tai (q rej,w) eivät johda mihinkään muuhun tilanteeseen. Näissä tilanteissa kone pysähtyy. 10/60
Tilanne (q,w) johtaa tilanteeseen (q,w ), merkitään (q,w) M (q,w ), jos on olemassa tilannejono (q 0,w 0 ), (q 1,w 1 ),..., (q n,w n ), n 0, siten että (q,w) = (q 0,w 0 ) M (q 1,w 1 ) M M (q n,w n ) = (q,w ). Turingin kone M hyväksyy merkkijonon x Σ, jos muuten M hylkää x:n. (q 0,x) M (q acc,w) jollakin w Γ ; Koneen M tunnistama kieli on: L(M) = {x Σ (q 0,x) M (q acc,w) jollakin w Γ } 11/60
Esimerkki: Kieli {a 2k k 0} voidaan tunnistaa Turingin koneella M = ({q 0,q 1,q acc,q rej },{a},{a},δ,q 0,q acc,q rej ), missä Kaavioesitys: δ(q 0,a) = (q 1,a,R), δ(q 1,a) = (q 0,a,R), δ(q 0, ) = (q acc,,l), /, L q0 a/a, R a/a, R q1 /, L δ(q 1, ) = (q rej,,l). 12/60
Kaavioesityksessä käytetyt merkinnät: q Tila q q 0 Alkutila Hyväksyvä lopputila (qacc) Hylkäävä lopputila (q rej ) a/b, q q Tilasiirtymä δ(q, a) = (q, b, ) 13/60
a/a, R q0 q1 /, L a/a, R /, L Koneen M laskenta esimerkiksi syötteellä aaa etenee seuraavasti: (q 0,aaa) M (q 1,aaa) M (q 0,aaa) (q 1,aaaε) (q rej,aaa). M M Kone pysähtyy tilassa q rej, joten aaa / L(M). (Huom: koska tämä kone vain siirtyy oikealle ja joko hyväksyy tai hylkää syötteen lopussa, kyseessä on käytännöllisesti katsoen äärellinen automaatti.) 14/60
Esimerkki: (Ei-yhteydettömän) kielen {a k b k c k k 0} tunnistava Turingin kone: /, L a/a, R b/b, R B/B, R C/C, R q 0 a/a, R q 1 b/b, R q 2 a/a, R c/c, L q 4 A/A, R q 3 Selkeyden vuoksi ei koneen hylkäävää lopputilaa q rej ole tässä esitetty eksplisiittisesti. Tulkinta on tällöin, että kaikki kaaviosta puuttuvat kaaret johtavat tähän tilaan. /, L q 5 B/B, R B/B, R C/C, R C/C, L b/b, L B/B, L a/a, L 15/60
Koneen laskenta syötteellä aabbcc: (q 0,aabbcc) (q 1,Aabbcc) (q 1,Aabbcc) (q 2,AaBbcc) (q 2,AaBbcc) (q 3,AaBbCc) (q 3,AaBbCc) (q 3,AaBbCc) (q 3,AaBbCc) (q 4,AaBbCc) (q 1,AABbCc) (q 1,AABbCc) (q 2,AABBCc) (q 2,AABBCc) (q 3,AABBCC) (q 3,AABBCC) (q 3,AABBCC) (q 3,AABBCC) (q 4,AABBCC) (q 5,AABBCC) (q 5,AABBCC) (q 5,AABBCC) (q 5,AABBCCε) (q acc,aabbcc). /, L /, L B/B, R C/C, R a/a, R B/B, R a/a, R b/b, R q0 q1 q2 q5 q4 a/a, R B/B, R A/A, R q3 b/b, R C/C, R c/c, L C/C, L b/b, L B/B, L a/a, L 16/60
Koneen laskenta syötteellä aabcbc: (q 0,aabcbc) (q 1,Aabcbc) (q 1,Aabcbc) (q 2,AaBCbc) (q 3,AaBCbc) (q 3,AaBCbc) /, L (q 3,AaBCbc) (q 4,AaBCbc) (q 1,AABCbc) (q 1,AABCbc) (q rej,aabcbc). /, L B/B, R C/C, R a/a, R B/B, R a/a, R b/b, R q0 q1 q2 q5 q4 a/a, R B/B, R A/A, R q3 b/b, R C/C, R c/c, L C/C, L b/b, L B/B, L a/a, L 17/60
Huom! Tunnistamisessa ei vaadita koneen pysähtymistä hylkäävään tilaan syötteillä, jotka eivät kuulu kieleen. Esimerkki: Turingin kone, joka jää ikuiseen silmukkaan joillakin syötteillä: q1 a/b,r b/a,r b/a,l a/b,l q2 c/c,r acc Laskenta syötteellä abc: (q 1,abc) (q 2,bbc) (q 1,bac) (q 2,aac) (q 1,abc) (q 2,bbc) (q 1,bac) (q 2,aac)... Kone tunnistaa aakkoston {a, b, c} kielen, joka voidaan kuvata säännöllisellä lausekkeella (a b)c(a b c). 18/60
Esimerkki: Turingin kone, joka jää ikuiseen silmukkaan ja käyttää määrättömästi nauhaa joillakin syötteillä: s1 a/b,r b/a,r /a,r s2 b/a,l a/b,l /a,l a/b,r b/a,r /a,r s3 c/c,r acc Laskenta syötteellä a: (q 1,a) (q 2,bε) (q 3,baε) (q 1,baa) (q 2,bba) (q 3,bbbε) (q 1,bbba) (q 2,bbaa) (q 3,bbabε) (q 1,bbaba)... 19/60
Turingin koneiden laajennuksia 20/60
4.2 Turingin koneiden laajennuksia Voitaisiinko saada vielä vahvempia laskennan malleja laajentamalla Turingin koneiden määritelmää uusilla ominaisuuksilla? Voisimme esim. sallia useamman luku/kirjoitusnauhan tai epädeterminismin (kuten äärellisillä automaateilla) Seuraavassa tutustutaan joihinkin tälläisiin laajennuksiin ja... näytetään, että kaikki kielet, jotka laajennetuilla automaateilla pystytään tunnistamaan, voidaan tunnistaa myös alkuperäisillä Turingin koneilla Churchin Turingin teesi Mikä tahansa mekaanisesti ratkeava laskennallinen ongelma voidaan ratkaista Turingin koneella. 21/60
1. Moniuraiset koneet Sallitaan, että Turingin koneen nauha koostuu k:sta rinnakkaisesta urasta, jotka kaikki kone lukee ja kirjoittaa yhdessä laskenta-askeleessa A L A N # M A T H I T U R I N nauhapää: # S G # # O N # # Koneen siirtymäfunktion arvot ovat tällöin muotoa: δ(q,(a 1,...,a k )) = (q,(b 1,...,b k ), ), missä a 1,...,a k ovat urilta 1,...,k luetut merkit, b 1,...,b k niiden tilalle kirjoitettavat merkit, ja {L, R} on nauhapään siirtosuunta. Laskennan aluksi tutkittava syöte sijoitetaan ykkösuran vasempaan laitaan; muille urille tulee sen kohdalle erityisiä tyhjämerkkejä #. 22/60
Formaalisti k-urainen Turingin kone on seitsikko M = (Q,Σ,Γ,δ,q 0,q acc,q rej ), missä muut komponentit ovat kuten standardimallissa, paitsi siirtymäfunktio: δ : (Q {q acc,q rej }) (Γ k {, }) Q (Γ k {, }) {L,R}. Seuraajatilannerelaation M, alkutilan jne. määritelmät ovat pieniä muutoksia lukuunottamatta samanlaiset kuin standardimallissa. 23/60
Esimerkki: 2-urainen Turingin kone rewind, joka kelaa nauhapään nauhan alkuun: (x, y)/(x, y), L /, R q 0 q 1 Lyhennysmerkintä (x,y)/(x,y),l tarkoittaa kaikkia siirtymiä, mitkä saadaan korvaamalla muuttujat x ja y jollakin nauha-aakkosella. 24/60
Esimerkki: 2-urainen Turingin kone succ, joka laskee uralla 1 olevan binäärinumeron (pienin bitti ensin) seuraajan uralle 2: (1, x)/(1, 1), R (0, x)/(0, 0), R (0, x)/(0, 1), R (#, x)/(#, #), R q 0 q 1 q 4 (1, x)/(1, 0), R (0, x)/(0, 1), R (x, y)/(x, #), L q 2 q 3 (#, x)/(#, 1), R (1, x)/(1, 0), R 25/60
Koneen ( laskenta numerolla ) 3 10 = 011 2 (nauhalla pienin bitti ensin): 1 1 0 # q 0, # # # # ( ) 1 1 0 # q 2, 0 # # # ( ) 1 1 0 # q 2, 0 0 # # ( ) 1 1 0 # q 1, 0 0 1 # ( ) 1 1 0 # q 4, ε 0 0 1 # 26/60
Esimerkki: 2-uraisten koneiden succ ja rewind peräkkäin kytkentä: succ rewind ja sama laajennettuna: (1, x)/(1, 1), R (0, x)/(0, 0), R (x, y)/(x, y), L (0, x)/(0, 1), R (#, x)/(#, #), R /, R (1, x)/(1, 0), R (0, x)/(0, 1), R (x, y)/(x, #), L (#, x)/(#, 1), R (1, x)/(1, 0), R 27/60
Lause 4.1 Jos formaali kieli L voidaan tunnistaa k-uraisella Turingin koneella, se voidaan tunnistaa myös standardimallisella Turingin koneella. Todistus Olkoon M = (Q,Σ,Γ,δ,q 0,q acc,q rej ) k-urainen Turingin kone, joka tunnistaa kielen L. Vastaava standardimallinen kone M muodostetaan seuraavasti: M = ( Q,Σ, ˆΓ, ˆδ, ˆq 0,q acc,q rej ), missä Q = Q {ˆq 0, ˆq 1, ˆq 2 }, ˆΓ = Σ Γ k ja kaikilla q Q on ] ] [ a1 [ b1 ˆδ(q,. a k kun ) = (q,. b k, ), δ(q,(a 1,...,a k )) = (q,(b 1,...,b k ), ). 28/60
Koneen M laskennan aluksi täytyy syötejono nostaa ykkösuralle, so. korvata nauhalla merkkijono a 1 a 2...a n merkkijonolla a 1 #. # a 2 #. # Tätä operaatiota varten liitetään M:stä kopioidun siirtymäfunktion osan alkuun vielä pieni esiprosessori : x/ x # #, R x # # a n #. # / x # #., L ˆq 0 /, L ˆq 1 /, R q 0 29/60
2. Moninauhaiset koneet 1. A L A N 2. M A T H I S O N 3. T U R I N G q1 q2 q0 δ Sallitaan, että Turingin koneella on k toisistaan riippumatonta nauhaa, joilla on kullakin oma nauhapäänsä. Kone lukee ja kirjoittaa kaikki nauhat yhdessä laskenta-askelessa. Laskennan aluksi syöte sijoitetaan ykkösnauhan vasempaan laitaan ja kaikki nauhapäät nauhojensa alkuun. 30/60
Tällaisen koneen siirtymäfunktion arvot ovat muotoa δ(q,a 1,...,a k ) = (q,(b 1, 1 ),...,(b k, k )), missä a 1,...,a k ovat nauhoilta 1,...,k luetut merkit, b1,...,b k niiden tilalle kirjoitettavat merkit, ja 1,..., k {L,R,S} nauhapäiden siirtosuunnat (S eli stay ei siirrä lukupäätä). Formaalisti k-nauhainen Turingin kone on seitsikko M = (Q,Σ,Γ,δ,q 0,q acc,q rej ), missä muut komponentit ovat kuten standardimallissa, paitsi siirtymäfunktio: δ : (Q {q acc,q rej }) (Γ {, }) k Q ((Γ {, }) {L,R,S}) k. Seuraajatilannerelaatio ym. peruskäsitteet määritellään pienin muutoksin entiseen tapaan. 31/60
Esimerkki: Kolminauhainen Turingin kone Rew2, joka siirtää toisen nauhan lukupään alkuun (ei tee mitään muille nauhoille): x,z,y/(x,s),(z,l),(y,s) when z rew x,,y/(x,s),(,r),(y,s) acc Tässä x, y ja z ovat jälleen lyhennysmerkintäparametreja ja esim. siirtymä x,z,y/(x,s),(z,l),(y,s) when z kuvaa kaikkia mahdollisia siirtymiä, jotka saadaa korvaamalla x, y ja z millä tahansa nauhaaakkosella (pl. tapaus z = ). 32/60
Esimerkki: Kolminauhainen kone 4Succ2, joka laskee nauhalla 2 olevan ;- terminoidun 4-kantaisen, vähiten merkitsevä numero ensin -esitetyn, luvun seuraajan. Kone tulee käynnistää tilanteessa, jossa nauhan 2 lukupää on alussa ja se jättää lukupään johonkin kohtaa nauhaa. x,3,y/(x,s),(0,r),(y,s) x,0,y/(x,s),(1,s),(y,s) x,1,y/(x,s),(2,s),(y,s) x,2,y/(x,s),(3,s),(y,s) s x,;,y/(x,s),(1,r),(y,s) t x,z,y/(x,s),(;,s),(y,s) acc Esim. luvun 33 4 (eli 15 10 ) seuraajan 100 4 laskenta: abba abba abba s, 33; s, 03; s, 00; 111; 111; 111; abba acc, 001; 111; t, abba 001ε 111; 33/60
Esimerkki: Koneiden 4Succ2 ja Rew2 peräkkäin kytkentä, joka laskee nauhalla 2 olevan ;-terminoidun 4-kantaisen, vähiten merkitsevä numero ensin - esitetyn, luvun seuraajan ja siirtää lukupään nauhan 2 alkuun. Kone tulee käynnistää tilanteessa, jossa nauhan 2 lukupää on alussa. x,3,y/(x,s),(0,r),(y,s) x,0,y/(x,s),(1,s),(y,s) x,1,y/(x,s),(2,s),(y,s) x,2,y/(x,s),(3,s),(y,s) x,z,y/(x,s),(z,l),(y,s) when z x,;,y/(x,s),(1,r),(y,s) x,z,y/(x,s),(;,s),(y,s) x,,y/(x,s),(,r),(y,s) acc 34/60
Lause 4.2 Jos formaali kieli L voidaan tunnistaa k-nauhaisella Turingin koneella, se voidaan tunnistaa myös standardimallisella Turingin koneella. Todistus Olkoon M = (Q,Σ,Γ,δ,q 0,q acc,q rej ) k-nauhainen Turingin kone, joka tunnistaa kielen L. Konetta M voidaan simuloida 2k-uraisella koneella M siten, että koneen M parittomat urat 1,3,5,...,2k 1 vastaavat M:n nauhoja 1,2,...,k, ja kutakin paritonta uraa seuraavalla parillisella uralla on merkillä merkitty vastaavan nauhan nauhapään sijainti. 1. 2. 3. 4. 5. 6. A M T L A U q1 A N T H R I q2 q0 δ # I N # S G # O # # N # 35/60
Simuloinnin aluksi syötemerkkijono sijoitetaan normaalisti koneen M ykkösuralle. Ensimmäisessä siirtymässään M merkitsee nauhapääosoittimet parillisten urien ensimmäisiin merkkipaikkoihin. Tämän jälkeen M toimii pyyhkimällä nauhaa edestakaisin sen alkuja loppumerkin välillä. Vasemmalta oikealle pyyhkäisyllä M kerää tiedot kunkin osoittimen kohdalla olevasta M:n nauhamerkistä. Kun kaikki merkit ovat selvillä, M simuloi yhden M:n siirtymän, ja takaisin oikealta vasemmalle suuntautuvalla pyyhkäisyllä kirjoittaa -osoittimien kohdalle asianmukaiset uudet merkit ja siirtää osoittimia. 36/60
3. Epädeterministiset koneet Formaalisti epädeterministinen Turingin kone on seitsikko M = (Q,Σ,Γ,δ,q 0,q acc,q rej ), missä muut komponentit ovat kuten deterministisessä standardimallissa, paitsi siirtymäfunktio: δ : (Q {q acc,q rej }) (Γ {, }) P (Q (Γ {, }) {L,R}). Siirtymäfunktion arvon δ(q,a) = {(q 1,b 1, 1 ),...,(q k,b k, k )} tulkinta on, että ollessaan tilassa q ja lukiessaan merkin a kone voi toimia jonkin kolmikon (q i,b i, i ) mukaisesti. 37/60
Epädeterministisen koneen tilanteet, tilannejohdot jne. määritellään formaalisti samoin kuin deterministisenkin koneen tapauksessa, paitsi että ehdon δ(q,a) = (q,b, ) sijaan kirjoitetaan (q,b, ) δ(q,a). Tämän muutoksen takia seuraajatilannerelaatio M ei ole enää yksiarvoinen: koneen tilanteella (q, w) voi nyt olla useita vaihtoehtoisia seuraajia, so. tilanteita (q,w ), joilla (q,w) M (q,w ). Koneen M tunnistama kieli määritellään: L(M) = {x Σ (q 0,x) M (q acc,w) jollakin w Γ } Epädeterministisen koneen M tapauksessa siis merkkijono x kuuluu M:n tunnistamaan kieleen, jos jokin M:n kelvollinen tilannejono johtaa alkutilanteesta syötteellä x hyväksyvään lopputilanteeseen. 38/60
Esimerkki: Yhdistettyjen lukujen tunnistaminen epädeterministisillä Turingin koneilla. Ei-negatiivinen kokonaisluku n on yhdistetty, jos sillä on kokonaislukutekijät p,q 2, joilla pq = n. Luku, joka ei ole yhdistetty, on alkuluku. Oletetaan, että on jo suunniteltu deterministinen kone CHECK_MULT, joka tunnistaa kielen L(CHECK_MULT) = {n#p#q n, p, q binäärilukuja, n = pq}. Olkoon lisäksi GO_START deterministinen Turingin kone, joka siirtää nauhapään osoittamaan nauhan ensimmäistä merkkiä. 39/60
Olkoon edelleen GEN_INT seuraava mielivaltaisen ykköstä suuremman binääriluvun (eniten merkitsevä bitti ensin) nauhan loppuun tuottava epädeterministinen Turingin kone: 0/0, R 1/1, R /#, R /1, R /0, R /0, R /1, R /1, R 40/60
Koneen GEN_INT laskentoja syötteellä 0 : q 1,0 q 1,0ε q 2,0#ε q 3,0#1ε q 4,0#10ε q 3,0#10ε q 4,0#11ε q 3,0#11ε.... q 4,0#100ε q 3,0#100ε q 4,0#101ε q 3,0#101ε........ 41/60
Epädeterministinen Turingin kone TEST_COMPOSITE, joka tunnistaa kielen L(TEST_COMPOSITE) = {n n on binäärimuotoinen yhdistetty luku} voidaan muodostaa näistä komponenteista yhdistämällä: n n#p n#p#q n#p#q GEN INT GEN INT GO START CHECK MULT Yhdistetty kone hyväksyy syötteenä annetun binääriluvun n, jos ja vain jos on olemassa binääriluvut p,q 2, joilla n = pq siis jos ja vain jos n on yhdistetty luku. 42/60
Huom. Yleinen kaaviomerkintä Turingin koneiden yhdistämiselle: M 1 M 0 M 2 43/60
Lause 4.3 Jos formaali kieli L voidaan tunnistaa epädeterministisellä Turingin koneella, se voidaan tunnistaa myös standardimallisella deterministisellä Turingin koneella. Todistus (idea) Olkoon M = (Q,Σ,Γ,δ,q 0,q acc,q rej ) epädeterministinen Turingin kone, joka tunnistaa kielen L. Konetta M voidaan simuloida kolmenauhaisella deterministisellä koneella M, joka käy systemaattisesti läpi M:n mahdollisia laskentoja (tilannejonoja), kunnes löytää hyväksyvän jos sellainen on olemassa. Kone M voidaan edelleen muuntaa standardimalliseksi edellisten lauseiden konstruktioilla. 44/60
Yksityiskohtaisemmin: Nauhalla 1 M säilyttää kopiota syötejonosta ja nauhalla 2 se simuloi koneen M työnauhaa. Kunkin simuloitavan laskennan aluksi M kopioi syötteen nauhalta 1 nauhalle 2 ja pyyhkii pois nauhalle 2 edellisen laskennan jäljiltä mahdollisesti jääneet merkit. Nauhalla 3 M pitää kirjaa vuorossa olevan laskennan järjestysnumerosta. 1. 2. 3. i i D1 n n p W u O R K D3 D2 D2 D1 D4 q1 q0 δ q2 t D3 45/60
Tarkemmin sanoen, olkoon r suurin M:n siirtymäfunktion arvojoukon koko. Tällöin M:lla on erityiset nauhamerkit D 1,...,D r, joista koostuvia jonoja se generoi nauhalle 3 kanonisessa järjestyksessä: ε, D 1, D 2,..., D r, D 1 D 1, D 1 D 2,..., D 1 D r, D 2 D 1,.... Kutakin generoitua jonoa kohden M simuloi yhden M:n osittaisen 1. 2. 3. i i D1 n n p W u O R K D3 D2 D2 D1 D4 q1 q0 q2 t D3 laskennan, jossa epädeterministiset valinnat tehdään kolmosnauhan koodijonon ilmaisemalla tavalla. δ 46/60
Esimerkiksi jos kolmosnauhalla on jono D 1 D 3 D 2, niin ensimmäisessä siirtymässä valitaan vaihtoehto 1, toisessa vaihtoehto 3, kolmannessa vaihtoehto 2. Ellei tämä laskenta johtanut M:n hyväksyvään lopputilaan, generoidaan seuraava koodijono D 1 D 3 D 3 ja aloitetaan alusta. Jos koodijono on epäkelpo, so. jos siinä jossakin kohden on tilanteeseen liian suuri koodi, simuloitu laskenta keskeytetään ja generoidaan seuraava jono. 1. 2. 3. i i D1 n n p W u O R K D3 D2 D2 D1 D4 q1 q0 δ q2 t D3 47/60
1. i n p u t 2. i n W O R K 3. D1 D3 D2 D2 D1 D4 D3 q1 q2 q0 δ Selvästi tämä systemaattinen koneen M laskentojen läpikäynti johtaa koneen M hyväksymään syötejonon, jos ja vain jos koneella M on syötteen hyväksyvä laskenta. Jos hyväksyvää laskentaa ei ole, kone M ei pysähdy. a a Simuloiva kone voisi hylätä syötteen, jos jollakin laskennan pituudella kaikki laskennat johtavat simuloitavan koneen hylkäävään lopputilaan; luonnollisesti tämä ei takaa pysähtymistä silloin, kun simuloitavalla koneella on päättymättömiä laskentoja. 48/60
Laskettavuusteoriaa 49/60
Churchin Turingin teesi: Mielivaltainen (riittävän vahva) laskulaite Turingin kone. Laskettavuusteoria: Tarkastellaan mitä Turingin koneilla voi ja erityisesti mitä ei voi laskea. Tärkeä erottelu: Pysähtyvät ja ei-pysähtyvät Turingin koneet. Määritelmä 6.1 Turingin kone M = (Q,Σ,Γ,δ,q 0,q acc,q rej ) on totaalinen, jos se pysähtyy kaikilla syötteillä. Formaali kieli A on rekursiivisesti numeroituva, jos se voidaan tunnistaa jollakin Turingin koneella, ja rekursiivinen, jos se voidaan tunnistaa jollakin totaalisella Turingin koneella. 50/60
Vaihtoehtoinen termistö: Palautetaan mieliin päätösongelmien (binäärivasteisten I/O-kuvausten) ja formaalien kielten vastaavuus: päätösongelmaa Π vastaava formaali kieli A Π koostuu niistä syötteistä x, joille ongelman Π vastaus on kyllä (so. toivottu vaste = 1). Päätösongelma Π on ratkeava (engl. decidable), jos sitä vastaava formaali kieli A Π on rekursiivinen, ja osittain ratkeava (engl. semi-decidable), jos A Π on rekursiivisesti numeroituva. Ongelma, joka ei ole ratkeava, on ratkeamaton (engl. undecidable). (Huom.: ratkeamaton ongelma voi siis olla osittain ratkeava.) Toisin sanoen: päätösongelma on ratkeava, jos sillä on totaalinen, kaikilla syötteillä pysähtyvä ratkaisualgoritmi, ja osittain ratkeava, jos sillä on ratkaisualgoritmi joka kyllä -tapauksissa vastaa aina oikein, mutta ei -tapauksissa voi jäädä pysähtymättä. 51/60
Esimerkki: Aakkoston {a, b, c} kieli {a n b n c n n 0} on sanallisesti kuvattuna päätösongelmana Annettuna aakkoston {a, b, c} merkkijono x. Onko x muotoa a n b n c n jollekin n 0? 52/60
Esimerkki: Aakkoston {0, 1,#} kieli {n#p#q n,p,q {0,1} binäärilukuja ja n = pq} on sanallisesti kuvattuna päätösongelmana Annettuna aakkoston {0, 1,#} merkkijono x. Onko x muotoa n#p#q, missä n,p,q {0,1}, ja pätee n = pq kun n,p,q tulkitaan binäärilukuina? tai vielä epämuodollisemmin Annettuna binääriluvut n,p,q. Päteekö n = pq? 53/60
Esimerkki: Aakkoston {0, 1} kieli {n n on binäärikoodattu alkuluku} on sanallisesti kuvattuna päätösongelmana Annettuna binääriluku n. Onko n alkuluku? 54/60
Esimerkki: Aakkoston {0x00, 0x01,..., 0xff} kieli {p p on UTF-8-koodattu merkkijono, joka kuvaa Python-ohjelmaa, jonka suoritus pysähtyy kaikilla syötteillä} on sanallisesti kuvattuna päätösongelmana Annettuna Python-ohjelma p. Pysähtyykö p:n suoritus kaikilla syötteillä? 55/60
Turingin pysähtymisongelma, ensimmäinen kohtaaminen 56/60
1.8 Ekskursio: Turingin pysähtymisongelma Väite Voidaan näyttää (seuraava kierros), että formaaleja kieliä on äärettömästi enemmän kuin Turingin koneita (tai C/Python/...-ohjelmia) Koska kieli laskennallinen päätösongelma, kaikkia päätösongelmia ei voida ratkaista Entä jokin konkreettinen esimerkki tällaisesta? Tunnetuin esimerkki on ns. Turingin pysähtymisongelma (Alan Turing, 1936). C-ohjelmia käyttäen tulos voidaan muotoilla seuraavasti: Ei ole olemassa C-funktiota halt(p,x), joka saa syötteenään mielivaltaisen C-funktion tekstin p ja tälle tarkoitetun syötteen x ja tuottaa tuloksen 1, jos p:n suoritus pysähtyy syötteellä x, ja 0 jos p:n suoritus x:llä jää ikuiseen silmukkaan. Tässä oletetaan, että ohjelmilla on rajaton määrä muistia käytössään. 57/60
Todistus Oletetaan väitteen vastaisesti, että tällainen funktio halt voitaisiin laatia. Muodostetaan tätä käyttäen toinen funktio confuse (ks. alla). Merkitään funktion confuse ohjelmatekstiä C:llä ja tarkastellaan funktion confuse laskentaa tällä omalla kuvauksellaan. void confuse ( char * q ) { i n t h a l t ( char * p, char * x ) {... / * Code f o r the f u n c t i o n * / } i f ( h a l t ( q, q ) == 1) while ( 1 ) ; } Saadaan ristiriita: confuse(c) pysähtyy halt(c,c) == 1 confuse(c) ei pysähdy. Ristiriidasta seuraa, että oletettua pysähtymistestausfunktiota halt ei voi olla olemassa. Samansukuisia ns. ratkeamattomia ongelmia on itse asiassa paljon. Asiaan palataan seuraavilla kierroksilla. 58/60
Sama Pythonilla Tiedosto haltingtester.py, jossa kuvitteellinen pysähtymisentestausfunktio doeshalt: # (C) 2013 H. Ackerfrau def doeshalt ( sourcename, inputname ) : " " " Returns t r u e i f the program i n f i l e sourcename h a l t s when i t i s run on the i n p u t f i l e inputname, f a l s e otherwise. " " " f s = open ( sourcename, " r " ) f i = open ( inputname, " r " )... r e t u r n r e s u l t i f name == main : source = sys. argv [ 1 ] i n p u t = sys. argv [ 2 ] h a l t s = doeshalt ( source, i n p u t ) p r i n t ( source+ " h a l t s on " + i n p u t + " : " + h a l t s ) 59/60
Tiedosto confuse.py: # (C) 2013 H. Ackerfrau def doeshalt ( sourcename, inputname ) : " " " Returns t r u e i f the program i n f i l e sourcename h a l t s when i t i s run on the i n p u t f i l e inputname, f a l s e otherwise. " " " f s = open ( sourcename, " r " ) f i = open ( inputname, " r " )... r e t u r n r e s u l t i f name == main : sourceandinput = sys. argv [ 1 ] h a l t s = doeshalt ( sourceandinput, sourceandinput ) i f h a l t s : while True : pass p r i n t ( " I l l now h a l t : ) " ) Milloin komennon python confuse.py confuse.py suoritus pysähtyy? 60/60