Post by an OnyymiMielenkiintoni heräsi. Mitä muita tapoja on olemassa? Löytyykö esim. netistä
jotain (oikeellisia) sivustoja, joissa muita tapoja olisi valoitettu?
Sivustoja voit guuglata itse, mutta tässä muutaman ajatuskulun
pikaesittely.
Johtaminen Gödelin lauseesta:
-----------------------------
Jokainen tosi muotoa "tämä ohjelma pysähtyy tällä syötteellä ja antaa
tämän vastauksen" oleva väite voidaan koodata lukuteorian kaavana
(vrt. Gödel-numerointi), ja voidaan todistaa kirjoittamalla ohjelman
laskenta auki ja tarkastamalla askel askeleelta, että kirjoitettu
merkkijono todella on ko. ohjelman laskenta ko. syötteellä ja tuottaa
ko. vastauksen.
Toisaalta voidaan laatia tietokoneohjelma "todistin", joka löytää
syötteeksi annetulle lukuteorian todistuvalle väitteelle
todistuksen muodostamalla järjestelmällisesti kaikki merkkijonot
lyhimmästä alkaen ja tarkastamalla, josko tutkittava merkkijono on
väitteen todistus.
Jos on annettu mikä tahansa lukuteorian väite "v", niin väite "v'" =
"v:llä ei ole todistusta lukuteoriassa" voidaan esittää lukuteorian
kaavana. Jos pysähtymistesteri olisi olemassa ja jos v' on tosi,
niin v' voitaisiin todistaa todistamalla, että pysähtymistesteri
vastaa "false", kun se pannaan tutkimaan ohjelmaa "todistin" syötteenään
"v". Näin ollen jokainen lukuteorian väite voitaisiin todistaa joko
oikeaksi tai todistumattomaksi, vastoin Gödelin tuloksia.
Epätakuu: en käyttänyt kovin paljoa aikaa tämän päättelyn
muodostamiseen, joten en mene sen pätevyydestä takuuseen. Ehkä on
olemassa helpompikin tapa johtaa tulos Gödelin tuloksista.
"Ahkera majava" eli "busy beaver":
----------------------------------
Syötteetön pysähtyvä Turingin kone tulostaa jokaisella ajokerralla
saman merkkijonon. Jos kone laaditaan sopivasti, ko. merkkijono koostuu
pelkästään numeromerkeistä ja on siis luku. Jos rajoitutaan enintään
n-tilaisiin Turingin koneisiin, niin tällä tavalla tulostettavissa
olevia lukuja on rajoitettu määrä. On siis olemassa pienin luku,
jota mikään syötteetön pysähtyvä enintään n-tilainen Turingin kone ei
tulosta. Merkitään sitä f(n).
(Sellaisen annetun kokoisen pysähtyvän Turingin koneen laatiminen,
joka tulostaa mahdollisimman suuren luvun tunnetaan "busy beaver"
-ongelmana.)
Oletetaan hetkeksi, että f(n) voitaisiin laskea syötteellisellä
Turingin koneella T(n). Kirjoittamalla syöte osaksi T:n rakennetta
(mihin tarvitaan Theta( log n ) bittiä lisätilaa) saataisiin
syötteettömien Turingin koneiden perhe T_1, T_2, ... siten, että T_n
tulostaa luvun f(n) ja T_n:n tilojen määrä on Theta(log n). Tarpeeksi
isolla n tästä seuraa, että n > T_n:n tilojen määrä. Mutta silloin
T_n on enintään n-tilainen syötteetön Turingin kone, joka tulostaa
pienimmän luvun, jota mikään syötteetön enintään n-tilainen Turingin
kone ei tulosta. Ristiriita ==> f(n) ei voida laskea Turingin koneella.
Jos pysähtymistesteri olisi olemassa, niin f(n) voitaisiin laskea
Turingin koneella, joka muodostaa kaikki enintään n-tilaiset
syötteettömät Turingin koneet, ajaa niistä ne jotka pysähtyvät, kirjaa
vastaukset sekä etsii ja tulostaa ensimmäisen luvun, joka ei ole
vastausten joukossa.
Takuu: busy beaver -funktion laskemattomuus on yleisessä tiedossa,
ja tämän päättelyn olen joskus tarkastanut perusteellisesti. Tämä
todistus on siitä mukava, että tässä ei laiteta ohjelmaa (eikä
lukuteorian kaavaa) tutkimaan itseään. Näin vältetään vaihe, joka
on nyrjäyttänyt monet aivot.
Reaalilukujen joukon ylinumeroituvuustodistuksen muunnos:
---------------------------------------------------------
On olemassa algoritmi, joka saatuaan syötteeksi Turingin koneen T
ja luvun n tuottaa Turingin koneen T', joka toimii samoin kuin T
niin kauan, kunnes se on tulostanut n merkkiä, minkä jälkeen T'
pysähtyy. Jos T ei tulosta n merkkiä, niin T' käyttäytyy täysin
samoin kuin T.
Jos pysähtymistesteri olisi olemassa, niin sen avulla voitaisiin
testata tulostaako annettu Turingin kone T vähintään n merkkiä.
Nimittäin, jos T pysähtyy, se voidaan ajaa ja katsoa miten käy.
Jos T ei pysähdy, vastaus saadaan muodostamalla T' ja selvittämällä,
pysähtyykö se.
On helppoa muodostaa Turingin kone, joka saadessaan syötteen n
tulostaa n:nnen Turingin koneen T_n. Jos pysähtymistesteri olisi
olemassa, voitaisiin laatia Turingin kone D, joka toimii seuraavasti.
Se muodostaa ja tutkii Turingin koneet T_1, T_2, ... yhden kerrallaan.
Kun kone T_i on vuorossa, se testaa, tulostaako T_i vähintään n merkkiä.
Jos vastaus on "ei", D tulostaa "1". Muussa tapauksessa se ajaa
T_i:tä kunnes T_i on tulostanut n merkkiä. Jos n:s T_i:n tulostama
merkki on 0, niin D tulostaa 1, muutoin D tulostaa 0.
D tulostaa loputtomasti merkkejä. D:n tulostus poikkeaa T_i:n
tulostuksesta ainakin merkin i osalta. D ei siis voi olla mikään
T_i, vaikka jono T_1, T_2, ... sisältää kaikki Turingin koneet.
Tämäkin ajatuskulku on minusta helpompi ymmärtää kuin
"standarditodistus".
--- Antti Valmari ---