Laskennan teoriasta Antti-Juhani Kaijanaho 11. helmikuuta 2016 Tarina alkaa vuodesta 1687, jolloin Isaac Newton (1642 1727) julkaisi kirjan Philosophiae Naturalis Principa Mathematica (suomeksi Luonnonfilosofian matemaattiset perusteet). Kirja loi fysiikalle matemaattisen pohjan, jota nykyäänkin käytetään valtaosassa sovelluksista. ISS-avaruusasemalle tulevien ja sieltä lähtevien astronauttien matkan suunnittelu perustuu näiden lakien soveltamiseen; samoin moni tietokonepeli perustuu fysiikan lakien mallittamiseen. 1 Laskijat Edmond Halley (1656 1742), kuten moni muukin, teki vuonna 1682 joukon havaintomittauksia tuona vuonna näkyneestä komeetasta. Seuraavien vuosikymmenten aikana hän yritti soveltaa Newtonin teoriaa tekemiinsä havaintoiin. Lopulta hän laskelmiensa perusteella ennusti, että tämä nimenomainen komeetta palaisi taivaalle vuoden 1758 paikkeilla. Kun tuo Halleyn ennustama komeetan paluu lähestyi, Alexis-Claude Clairaut (1713 1765) yhdessä Joseph-Jérôme Le Français de Lalanden (1732 1807) ja Nicole-Reine Étable de la Brière Lepauten (1723 1788) kanssa pyrki laskemaan tarkemman ennusteen komeetan paluupäivälle. Ideana oli ottaa huomioon planeettojen vaikutus komeetan kiertorataan, mikä vaati tarkkoja ja työläitä laskutoimituksia. Laskenta kesti kolmen hengen yhteistyönä puolisen vuotta ja tuotti varsin lähelle osuneen arvauksen. Useiden ihmisten yhteistyönä tehty laskenta yleistyi ja laskentatehtävät laajenivat seuraavien kahdensadan vuoden aikana. Nämä laskijat, englanniksi computers, laativat mm. merenkävijöiden navigoinnissa käyttämiä almanakkoja sekä kasvi- ja eläintieteellisiä tilastoja. 1900-luvun alkuvuosikymmeninä laskijoiden tehtävät olivat sotilasväritteisiä, esimerkiksi lentokoneiden suun- Luento 10.2.2016 kurssilla TIEP115 Johdatus tietotekniikkaan 1
nitteluun vaadittujen laskelmien ja tykkien tähtäämisessä käytettyjen ballististen taulukoiden laatiminen. 2 Matematiikan haurastuminen Newtonin Principia perustui aivan uuteen matematiikan alaan, jota nykyään kutsutaan reaalianalyysiksi. Liikettä kuvattiin ajan funktiona, ja tämän funktion käyttäytymistä yksittäisen pisteen ympärillä tutkittiin infinitesimaaleilla. Näin funktiosta voitiin laskea esimerkiksi derivaattoja ja integraaleja. Menetelmällisesti tämä oli kuitenkin aika huteralla pohjalla, kunnes vasta 1800-luvulla moderni ɛδ-metodologia keksittiin. Menetelmällinen huteruus alkoi 1800-luvulla vaivata matematiikkaa yleisemminkin. Georg Cantor (1845 1918) kohahdutti matemaatikkoja todistamalla, että varsin luonnollisella joukon koon määritelmällä on olemassa erikokoisia äärettömyyksiä. Määritellään, että kaksi joukkoa A ja B ovat yhtä mahtavat, jos on olemassa injektiot f : A B ja g : B A. Se, että ne ovat injektioita, tarkoittaa että jos f(x) = f(y) tai jos g(x) = g(y), niin täytyy olla x = y. Tarkastellaan nyt merkeistä 0 ja 1 muodostettujen äärettömän pitkien jonojen joukkoa B = {0, 1} ja koetetaan laatia kuvaus f : N B. Esimerkiksi näin: 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 2 0 1 0 0 0 0 0 3 1 1 0 0 0 0 0 4 0 0 1 0 0 0 0 5 1 0 1 0 0 0 0 6 0 1 1 0 0 0 0........... Tässä jokainen luonnollinen luku yhdistetään sen omaan binääriesitykseen (vähiten merkitsevä bitti alussa). Huomaa, että näin diagonaalilla on jono 0000000. Jos olisin yhdistänyt luvut jotenkin muuten jonoihin, olisi diagonaalilla ehkä jotain muuta; merkitään yleisesti diagonaalia d 1 d 2 d 3 d 4, missä d i {0, 1} kaikilla i N. Muodostetaan nyt uusi jono vaihtamalla diagonaalilla oleva merkki päinvastaiseksi (merkitään tätä d i kullakin d i ); ylläolevassa tapauksessa uusi jono on siten 111111 ja yleisesti d 1 d2 d3 d4. Onko tämä jono luettelossa? Ei voi olla, sillä jos se olisi esimerkiksi luvun k kohdalla, tulisi diagonaalilla olla d k mutta siinä onkin d k. Niinpä {0, 1} on mahtavampi joukko kuin N! Tämä Cantorin diagonaaliargumentti oli hyvin hämmentävä. 2
Varsin pian joukko-opin kehittyessä törmätään paradokseihin. Luonnollista olisi ajatella, että jokaiselle joukkojen ominaisuudelle P ( ) olisi olemassa vastaava joukko { x P (x) }. Esimerkiksi voisi olla olemassa kaikkien punahiuksisia ihmisiä sisältävien joukkojen joukko. No, a S, eli se, että a kuuluu joukkoon S, on varmaankin joukon S ominaisuus. Niinpä myös S S, eli se, että S ei kuulu itseensä, on varmaankin joukon S ominaisuus. Siispä täytynee olla myös joukko A = { x x x } kaikkien niiden joukkojen joukko A, jotka eivät kuulu itseensä. Kuuluuko A itseensä? Jos kuuluu, niin tällöin määritelmän mukaan pätee A A. Siispä A ei voi kuulua itseensä. Mutta tällöin määritelmän mukaan A A ei päde, eli A kuuluukin itseensä! Tämä Russellin paradoksi on yksi helpoimmin selitettävissä olevista naivin joukko-opin paradokseista. Tämän ja muiden vastaavien ongelmien johdosta 1800-luvun lopulla ja 1900-luvun alkuvuosikymmeninä ryhdyttiin rakentamaan matematiikalle perusteoriaa, jonka virheettömyys voidaan osoittaa ja jonka päälle kaikki muu matematiikka voidaan rakentaa. Gottlob Fregen (1848 1925) yritys kaatui Russellin paradoksiin. Bertrand Russell (1872 1970) itse rakensi uuden yrityksen yhdessä Alfred North Whiteheadin (1861 1947) kanssa. Russellin ja Whiteheadin massiivinen teos Principia mathematica löytyy Mattilanniemen kirjastosta. 3 Gödel Voiko matematiikan perusteoria todistaa oman oikeellisuutensa? Kurt Gödel (1906 1978) vastasi vuonna 1931 tähän kysymykseen ei. Hän otti pohjateoriaksi Russellin ja Whiteheadin Principian, joskin mikä tahansa muu tarpeeksi vahva teoria kelpaa. Hän kehitti tekniikan, jolla tuon perusteorian kaavat voidaan tuoda teorian itsensä tutkittavaksi; tätä kutsutaan nykyään gödelnumeroinniksi. 1 Hän löysi tästä järjestelmästä kaavan, joka sanoo, että se itse ei ole todistettavissa. Tästä hän sitten johti, että joko teoria ei ole tarpeeksi vahva matematiikan pohjateoriaksi tai se on sisäisesti ristiriitainen. Tätä tulosta kutsutaan Gödelin epätäydellisyyslauseeksi. 1 Idea on yksinkertainen: annetaan kullekin kaavoissa käytetylle merkille c oma gödelnumeronsa c {0,..., b 1}. Tämän jälkeen jokaiselle äärellisen pitkälle merkkijonolle c 1 c n voidaan antaa gödelnumeroksi esimerkiksi c 1 c n = (Käytin luennolla väärää kaavaa, pahoittelut.) n c i b i. i=1 3
Tämän tuloksen todistamisessa tarvitaan jonkinlainen kuvaus sille, mitä tarkoittaa jonkin asian todistaminen. Sitä varten puolestaan tarvitaan jonkinlainen kuvaus sille, mitä ihminen laskiessaan kykenee tekemään. Gödel käytti alkuperäisessä todistuksessaan teoriaa, jota nykyään kutsutaan primitiivirekursion teoriaksi. Idea on yksinkertainen: Määritelmä 1. Perusfunktioita ovat kaikki vakiofunktiot c n k : Nn N, c n k (x 1..., x n ) = k seuraajafunktio s : N N, s(x) = x + 1 kaikki projektiofunktiot p n i : N n N, p n i (x 1..., x i,..., x n ) = x i Määritelmä 2. Olkoot g 1,..., g m : N n N ja h : N m N osittaisfunktioita. Niiden yhdiste h (g 1,..., g m ) : N n N, määritellään seuraavasti: 2 (h (g 1,..., g m ))(x 1,..., x n ) = h(g 1 (x 1,..., x n ),..., g m (x 1,..., x n )) Määritelmä 3. Olkoot g : N n+1 N ja h : N n 1 N osittaisfunktioita. N määritellään paloittain rekursii- Niiden primitiivirekursio ϱ(h, g) : N n visesti seuraavasti: ϱ(h, g)(0, y 2,..., y n ) = h(y 2,..., y n ) ϱ(h, g)(x + 1, y 2,..., y n ) = g(x, ϱ(h, g)(x, y 2,..., y n ), y 2,..., y n ) Määritelmä 4. Osittaisfunktio on primitiivirekursiivinen, jos se voidaan muodostaa perusfunktioista yhdistettä ja primitiivirekursiota tarpeellisen monta kertaa soveltaen. Lause 5. Yhteenlasku on primitiivirekursiivinen Todistus. On osoitettava, että funktio f : N 2 N, f(x, y) = x + y, on primitiivirekursiivinen. Todetaan ensiksi, että f:lle pätee seuraavat väitteet: f(0, y) = y f(x + 1, y) = f(x, y) + 1 Väitteet on helppo todeta tosiksi korvaamalla f määritelmällään. Tästä voidaan havaita, että f on funktioiden g(x, y, z) = y + 1 h(y) = y primitiivirekursio ϱ(h, g). Funktio h voidaan tulkita projektiofunktioksi h = p 1 1. Funktio g on puolestaan yhdiste projektiosta ja seuraajafunktiosta: g = s p 3 2. Niinpä f = ϱ(p 1 1, s p 3 2) ja f on primitiivirekursiivinen. 2 Tässä a = b on tosi silloin, kun sekä a että b ovat määriteltyjä ja samanarvoisia, sekä silloin, kun sekä a että b ovat määrittelemättömiä. 4
4 Church David Hilbert (1862 1943) ja Wilhelm Ackermann (1896 1962) esittivät 1920- luvun lopulla Entscheidungsproblem (ratkeavuusongelma) -nimellä tunnetun ongelman: esitä laskijoiden käyttöön soveltuva menetelmä, jolla mikä tahansa matemaattinen väite voidaan todistaa oikeaksi tai vääräksi. Herää kysymys, mitä kaikkea laskija voi oikeasti tehdä. Alonzo Church (1903 1995) puolusti aluksi ajatusta, että Gödelin käyttämä rekursioteoria, laajennettuna jonkinlaisella yleisellä rekursioskeemalla, olisi sopiva malli. Primitiivirekursio laajennetaan yleiseksi rekursioksi esimerkiksi näin: Määritelmä 6. Olkoon f : N n+1 µf : N n N määritellään seuraavasti: N osittaisfunktio. Sen minimisaatio (µf)(x 1,..., x n ) = min{ k N f(k, x 1,..., x n ) = 0 } Näin saatava kieli on µ-rekursion laskennon kieli. Osittaisfunktio f : N N on µ-rekursiivinen, jos se voidaan rakentaa perusfunktioista yhdistettä, primitiivirekursiota ja minimisaatiota tarpeellisen monta kertaa soveltaen. Sittemmin hän keksi mielestään paremman idean: lambdalaskento. Ideana tässä on kuvata (osittais)funktio lausekkeena λxt, missä x on jokin muuttuja ja t on jokin lauseke. Tällaisen abstraktion lisäksi kielen lausekkeissa sallitaan funktiokutsut eli applikaatiot sekä viittaukset muuttujiin. Church todisti, että µ-rekursiiviset osittaisfunktiot on kuvattavissa lambdalaskennolla ja päin vastoin. Church uskoi ratkaisseensa ongelman siitä, mitä laskija voi tehdä. Kukaan muu ei oikein siihen uskaltanut luottaa. Ohimennen hän todisti, että näin ymmärrettynä Entscheidungsproblem on mahdoton ratkaista: tällöin tarvittava menetelmä voitaisiin kuvata lambdakielellä ja tästä puolestaan voidaan johtaa ristiriita. 5 Turing Samoihin aikoihin myös Alan Turing (1912 1954) pohti kysymystä, miten voisi matemaattisesti tarkastella laskijan toimintaa. Hän päätyi muokkaamaan laskijaa yhä abstraktimpaan suuntaan kunnes sai aikaiseksi matemaattisen mallin, joka nykyään tunnetaan Turingin koneina. Hän myös, Churchista riippumatta, osoitti, ettei Entscheidungsproblem ole ratkaistavissa. Hän lisäksi osoitti, että lambdakieli (ja siten rekursioteoria) on yhtä vahva kuin Turingin koneet. 5
6 Lopuksi Nykyään kanoninen ratkeamattomuustulos on Turingin koneiden pysähtymisongelma (halting problem): onko olemassa Turingin konetta, joka saatuaan syötteenä jonkin toisen Turingin koneen kuvauksen sekä sille annettavan syötteen, selvittää, pysähtyykö tuo kuvattu kone annetulla syötteellä. Ratkeamattomuustuloksia on paljon. Niiden tärkeys tulee siitä, että voidaan osoittaa että kaikki tietokoneohjelmat, jotka lukevat syötteen merkkijonona ja tulostavat lopuksi KYLLÄ tai EI, voidaan tulkita Turingin koneiksi. Niinpä jokainen Turingin koneita koskeva ratkeamattomuustulos koskee myös ei-interaktiivisia tietokoneohjelmia. Esimerkiksi: ei ole mahdollista tehdä kääntäjää, joka tuottaa pienimmän mahdollisen (tai nopeimman mahdollisen) version sille annetusta tietokoneohjelmasta (ns. kääntäjänkehittäjien täystyöllisyys -lause) Lambdakielellä on lisäksi nykyään merkittävä rooli ohjelmointikielten teoriassa. Kirjallisuutta ja lisätietoa Ihmistyönä tehdystä laskennasta ks. David Alan Grier: When Computers Were Human. Princeton University Press, 2007. Lambdakieltä käsitellään kurssilla TIES542 Ohjelmointikielten periaatteet. Sen keskeisiä ideoita käytetään ohjelmointiin kursseilla TIEA341 Funktioohjelmointi 1 ja TIES341 Funktio-ohjelmointi 2. Turingin koneita ja ratkeamattomuustuloksia käsitellään kurssilla TIEA241 Automaatit ja kieliopit. Gödelin epätäydellisyyslause todistetaan matematiikan epäsäännöllisesti järjestettävällä kurssilla MATS150 Logiikan jatkokurssi. 6