OHJELMOINNIN LUONNONTIEDE

Virkaanastujaisesitelmä 3.12.1999

Antti Valmari

Tiivistelmä (tiedotusta varten)

Ohjelmistotekniikka on uuden tyyppistä tekniikkaa. Siinä ei muokata ainetta, vaan aineettomia ideoita ja symboleita. Aivan kuten aine noudattaa fysiikan lakeja, ohjelmistotekniikan kohteet noudattavat omia lakejaan.

Ensimmäinen tärkeä havainto oli, että kaikki tunnetut laskennan mallit ovat enintään yhtä vahvoja ja useimmat tarkalleen yhtä vahvoja kuin niin sanottu Turingin kone. Niinpä näyttää vahvasti siltä, että laskettavissa olevien asioiden joukko ei ole tietokoneelle valitun rakenteen mielivaltainen seuraus, vaan luonnon vakio. Tämä on periaatteessa merkittävä tulos. Se asettaa laskennalle samankaltaisen lopullisen rajan kuin Einsteinin suhteellisuusteoria asettaa liikkeen nopeudelle.

Toinen, käytännössäkin merkittävä tulos on, että melkein mikä tahansa ohjelman käyttäytymistä koskeva kysymys voi olla mahdoton ratkaista. Tämä tarkoittaa, että satunnaisen ohjelman käyttäytymistä ei voi ymmärtää eikä ennustaa. Ohjelmasta voi saada jotakin tolkkua vain, jos ohjelman laatija on nähnyt vaivaa tehdäkseen siitä tolkullisen. Jos ohjelma on huonosti tehty, voi olla, että kukaan ei koskaan saa selville, mitä kaikkea se voi tehdä. Ratkeamattomuutta on löydetty myös tietokoneohjelmien ulkopuolelta: muualta tietojenkäsittelystä, sieltä täältä matematiikasta sekä peleistä. Ratkeamattomuustuloksilla on syvällinen merkitys tiedon, informaation ja satunnaisuuden käsitteille.

Yllättävän vaikeille tehtäville tunnetaan nopeita ratkaisumenetelmiä. Toisaalta on tehtäviä, jotka ovat sisäiseltä olemukseltaan niin vaativia, että nopeita ratkaisumenetelmiä ei voi olla olemassa. Näiden väliin jää suuri joukko käytännössä tärkeitä tehtäviä, joiden vaativuutta ei tiedetä, mutta joille ei uskota olevan yleispäteviä nopeita ratkaisumenetelmiä. Näiden tehtävien käytännön ratkaiseminen edellyttää hyvää sovellusalueen tuntemusta ja poikkeuksellista ohjelmointiosaamista, mutta silti ratkaisut jäävät aina puutteellisiksi.

Keinotekoisten kielten --- esimerkiksi ohjelmointikielten --- tutkimus on paljastanut yleisiä lainalaisuuksia, jotka näyttävät olevan osittain sovellettavissa luonnollisiinkin kieliin. Niillä voidaan analysoida luonnollisten kielten rakennetta, ja ne tuovat valaistusta myös ilmausten ja niiden merkitysten väliseen suhteeseen.

Eräs tietokoneen tärkeä ominaisuus on sen vuorovaikutus ympäristönsä kanssa. Yleisesti hyväksyttyä tietokoneiden vuorovaikutuksen teoriaa ei vielä ole, mutta sellainen on muotoutumassa. Muun muassa epädeterminismi on siinä tärkeässä asemassa.

Tietokoneen älykkyyttä voi verrata ihmisen älykkyyteen Turingin testillä. Parhaat nykyiset ohjelmat ovat sen mukaan älykkäitä jollakin hyvin kapealla alueella kuten shakkipelissä, mutta missään yleisessä mielessä älykkäitä ohjelmia ei ole vielä tehty. Ihmisaivojen ylivertaiselle älykkyydelle on esitetty useita mahdollisia selityksiä, joista osa on tietojenkäsittelyteorian valossa selvästi vääriä. Kenties uskottavin, mutta silti ehkä vajaaksi jäävä on selitys, jonka mukaan aivoissa on paljon paremmat algoritmit ja ohjelmat kuin ihmisten tekemissä tietokoneissa. Esitelmässä pohditaan myös, mitä sanottavaa tietojenkäsittelyteorialla on tietoisuudesta.

1. Johdanto

Herra Rehtori, hyvät naiset ja herrat.

Ohjelmistotekniikka on uuden tyyppistä tekniikkaa. Suurin osa tuotannonaloista perustuu aineen muokkaamiseen. Ohjelmistotekniikassa ei muokata ainetta, vaan aineettomia ideoita ja symboleita. Muitakin aineettomien kohteiden muokkaukseen keskittyviä tuotannon aloja on olemassa, esimerkiksi viihdeteollisuus, mutta niistä ohjelmistotekniikka eroaa siten, että merkittävä osa ohjelmistotekniikan kohteista on hyvin täsmällisiä. Ohjelmistotekniikalla on selviä yhtäläisyyksiä matematiikan kanssa. Toisin kuin ohjelmat, matemaattiset kaavat eivät ole miljoonia merkkejä pitkiä, eikä niitä tuoteta teollisessa mittakaavassa. Matemaattiset kaavat eivät myöskään ohjaa aineellisen maailman tapahtumia samalla tavalla suoraan kuin esimerkiksi voimalaitoksen prosessinohjausohjelmisto. Ohjelmistotekniikan myötä ihmiskunta on ensimmäistä kertaa tilanteessa, missä merkittävä tuotannonala perustuu täsmällisten aineettomien kohteiden muokkaukseen.

Suhteellisuusteoriaan ja kvanttimekaniikkaan tutustuminen kuuluu insinöörin yleissivistykseen. Koska ohjelmistotekniikan merkitys on rajusti kasvanut, voi ennustaa, että tulevaisuudessa myös täsmällisiä aineettomia kohteita hallitseviin lainalaisuuksiin tutustuminen sisältyy insinöörin yleissivistykseen. Aivan kuten suhteellisuusteoria, nekin kertovat jotakin todellisuudesta, jossa elämme. Nykyisin näiden lainalaisuuksien tuntemus on hyvin heikkoa jopa alan ammattilaisten keskuudessa. Tietojenkäsittelyteorian peruskurssi kuuluu pakollisena tietotekniikan koulutusohjelmakohtaisiin opintoihin muun muassa Otaniemessä ja Lappeenrannassa, mutta ne ovat aika kapea-alaisia, ja esimerkiksi meillä vastaava kurssi on pakollinen vain ohjelmoinnin teoriaan erikoistuville.

Yritän tässä virkaanastujaisesitelmässäni antaa yleiskäsityksen joistakin syvällisistä tuloksista, joita teoreettisen tietojenkäsittelytieteen tutkimus on löytänyt. Yritän myös kertoa, mitä ne vaikuttavat käsitykseemme todellisuudesta ja ihmisestä.

2. Tietokoneen universaalisuus

Yksi tietokoneen perustehtävistä on laskea annetun syötteen pohjalta jokin tulos. Syötteenä voi olla esimerkiksi tiedot henkilön työtunneista, kuukausipalkasta ja muusta sen sellaisesta, ja niitten perusteella tietokoneen tulee laskea kokonaispalkka, ennakonpidätys ja maksettava summa palkkakuittiin tulostettavaksi. Tietokone saadaan laskemaan nämä, kun siihen ladataan sopiva ohjelma. Teknisesti asia ilmaistaan sanomalla, että kyseinen ohjelma laskee erään osittaisen funktion.

Monet hyvinkin vaikeat tehtävät ovat osittaisen funktion laskentatehtäviä. Vaikkapa ihmisen tunnistaminen valokuvasta on sen osittaisen funktion laskemista, joka tuottaa valokuvan digitaalisen esitysmuodon perusteella ihmisen nimen. Niinpä tietokoneen mahdollisuudet selvitä vaativista tehtävistä riippuvat hyvin pitkälle siitä, mitä osittaisia funktioita se pystyy laskemaan.

Erilaisia osittaisia funktioita on äärettömän monta, ja niin on myös tietokoneohjelmia. Siitä huolimatta voidaan osoittaa matemaattisesti, eikä se ole edes vaikeaa, että osittaisia funktioita on enemmän kuin tietokoneohjelmia. Tästä seuraa, että kaikkia osittaisia funktioita ei voi laskea tietokoneella: tietokoneohjelmat loppuvat kesken. Niinpä herää kaksi kysymystä:

  1. Mitä osittaisia funktioita voi ja mitä ei voi laskea nykyaikaisella tietokoneella?
  2. Voitaisiinko jollain aivan uudentyyppisellä tietokonerakenteella laajentaa laskettavissa olevien osittaisten funktioiden joukkoa?

Voi kuulostaa yllättävältä, mutta nämä kysymykset ratkaistiin ennen kuin ensimmäistäkään tietokonetta oli rakennettu. 1930- ja 1940-luvuilla ehdotettiin monenlaisia teoreettisia laskennan malleja, kuten Postin vastaavuussysteemit, rekursiiviset funktiot ja Turingin kone. Osoittautui, että ne kaikki pystyvät simuloimaan toisiaan. Niinpä ne pystyvät laskemaan tarkalleen samat osittaiset funktiot. Myöhemmin, kun oikeita tietokoneita oli jo olemassa todettiin, että Turingin kone kumppaneineen pystyy simuloimaan myös niitä. Turingin kone pystyy simuloimaan myös analogiakoneita.

Kaikki tunnetut laskennan mallit ovat siis enintään yhtä vahvoja ja useimmat tarkalleen yhtä vahvoja kuin Turingin kone. Niinpä näyttää vahvasti siltä, että laskettavissa olevien osittaisten funktioiden joukko ei ole valitun tietokonearkkitehtuurin mielivaltainen seuraus, vaan luonnon vakio. Koska tämä vakio on abstrakti, sitä edustamaan on valittava jokin laskennan malli. Valituksi tuli Turingin kone. Turingin kone on siis itsessään melko mielivaltainen, mutta sen laskema osittaisten funktioiden joukko ei ole. Havainto, että Turingin kone on yleispätevä osittaisten funktioiden laskennan malli tunnetaan nimellä Church-Turingin teesi.

Church-Turingin teesistä seuraa, että tietokoneiden keskusyksiköt voivat erota toisistaan nopeuden ja muistin tarpeen suhteen, mutta muita olennaisia eroja niillä ei sitten olekaan. Tulevaisuus voi tuoda tullessaan nopeampia ja muistiltaan isompia tietokoneita, mutta vaikuttaa siltä, että laadullisia parannuksia tietokoneiden laskentakykyihin ei ole luvassa. Tämä ei tietenkään tarkoita, että tietotekniikka tulisi jäämään nykytasolle. Nopeuden ja muistin kasvu merkitsevät määrällistä kykyjen kasvua. Sitäpaitsi näyttää ilmeiseltä, että olemme ottaneet nykyisten tietokoneiden kyvyistä irti vain pienen osan.

Church-Turingin teesi on merkittävä tulos. Se asettaa laskennalle samankaltaisen lopullisen rajan kuin Einsteinin suhteellisuusteoria asettaa liikkeen nopeudelle. Näin ollen se saattaa koskea myös ihmisaivoja. Tulen palaamaan tähän kysymykseen esitelmäni loppupuolella.

Tieteellisenä tuloksena Church-Turingin teesi on luonteeltaan erikoinen. Se on kokeellinen tulos, koska siihen on päädytty ehdottamalla erilaisia tietokoneen periaatteita ja vertaamalla niiden kykyjä toisiinsa. Se on jollakin tavalla fysiikan ja matematiikan välissä. Se on vahvasti yhteydessä matematiikan käsittämättömään tehokkuuteen luonnontieteissä, asiaan, jota käsittelevästä E. P. Wignerin esseestä on tullut klassikko.

Jotkut tutkijat yrittävät löytää fysiikasta ilmiöitä, joiden avulla Church-Turingin teesi voitaisiin kumota, eli joiden avulla voitaisiin rakentaa nykyisiä aidosti kyvykkäämpi (siis ei pelkästään nopeampi) tietokone. Etsitty ilmiö ei saa olla ennustettavissa nykyisin numeerisin menetelmin, sillä muutoin nykyisen kaltainen tietokone voisi simuloida sitä ja siis myös siihen perustuvaa tietokonetta. Luonnossa on ilmiöitä, joita ei voi ennustaa numeerisesti, mutta tutkijat ovat eri mieltä siitä, voitaisiinko Church-Turingin teesi kenties joskus rikkoa niiden avulla.

3. Laskettavuuden rajat

Totesin edellä, että on olemassa osittaisia fuktioita, joita ei voi laskea tietokoneella. Herää kysymys: onko niiden joukossa sellaisia, jotka olisimme halunneet laskea tietokoneella?

Ennen kuin vastaan tähän, haluan korostaa erästä tärkeää seikkaa. Jos johonkin tehtävään on löydettävissä vastaus matematiikan keinoin, sen voi periaatteessa löytää myös tietokoneella, sillä tietokoneen voi panna käymään matemaattisia päättelyitä systemaattisesti läpi. Siinä voi mennä aivan tolkuttoman kauan, mutta periaatteessa se on mahdollista. Niinpä, jos jotain tehtävää ei edes periaatteessa voi ratkaista tietokoneella, ei sitä voi ratkaista matematiikallakaan. Tällaisia tehtäviä kutsutaan ratkeamattomiksi.

Onko siis olemassa ratkeamattomia hyödyllisiä tehtäviä? Vastaus on ``kyllä, paljon!'' Ensimmäisen sellaisen löysi Alan Turing. Opiskelijoiden tekemiä ohjelmia arvioitaessa olisi kätevää, jos voitaisiin aina etukäteen ennustaa, tuleeko annettu ohjelma jäämään ikuiseen silmukkaan jos se saa tietyn syötteen. Ikävä kyllä Turing todisti, että tietokoneet eivät siihen pysty. Voimme tietysti yrittää ajaa opiskelijan tekemän ohjelman. Jos se sattuu pysähtymään sinä aikana jonka jaksamme odottaa, olemme saaneet vastauksen, joka on silloin tietysti ``kyllä''. Mutta jos se ei pysähdykään kohtuullisessa ajassa, mistä voimme tietää, pysähtyisikö se jos odottaisimme vielä vähän aikaa --- tai paljon aikaa? Joissakin tapauksissa voidaan ohjelman koodista päätellä, että se on jäänyt ikuiseen silmukkaan. Turingin ansiosta kuitenkin tiedämme, että yleisessä tapauksessa asiaa ei voi selvittää.

H. G. Rice yleisti 1950-luvulla Turingin tulosta merkittävästi. Hän osoitti, että melkein mikä tahansa ohjelman käyttäytymistä koskeva kysymys on ratkeamaton. Tämä tarkoittaa, että satunnaisen ohjelman käyttäytymistä ei voi ymmärtää eikä ennustaa. Ohjelmasta voi saada jotakin tolkkua vain, jos ohjelman laatija on nähnyt vaivaa tehdäkseen siitä tolkullisen. Jos ohjelma on huonosti tehty, voi olla, että kukaan ei koskaan saa selville, mitä kaikkea se voi tehdä.

Ohjelmien käyttäytymisen yleinen ennustamattomuus saattaa ensi kuulemalta tuntua aivan uskomattomalta. Siksi otan pienen klassisen esimerkin. Kukaan ei tiedä, pysähtyykö tämä ohjelma kaikilla syötteillä.

    while n <> 1 do
        if n mod 2 = 1 then
            n := 3n+1
        else
            n := n / 2

Ratkeamattomuustuloksia on arvosteltu väittämällä, että niillä ei olisi merkitystä tosimaailmassa, koska Turingin ja Ricen tutkimilla koneilla on käytettävissään rajattomasti muistia ja aikaa. Rajallisella muistilla varustetun tietokoneen käytös on periaatteessa aina ennustettavissa. Tämä kritiikki osuu harhaan, sillä ratkeamattomuustuloksiin johtavaa päättelyä voidaan soveltaa myös rajallisen muistin tilanteessa. Tulokseksi saadaan, että vaikka ohjelman käyttäytyminen on aina ennustettavissa, ei ennustamiseen ole nopeampaa yleispätevää keinoa kuin ajaa ohjelma ja katsoa mitä se tekee. Näin hitaasta ennustusmenetelmästä ei ole hyötyä. Niinpä Turingin ja Ricen tulokset ovat päteviä myös käytännössä.

Ratkeamattomuutta on löydetty myös tietokoneohjelmien ulkopuolelta: muualta tietojenkäsittelystä, matematiikasta sekä peleistä. G. Chaitin todisti, että vaikka melkein kaikissa pitkissä merkkijonoissa on paljon informaatiota, ei mistään, ei ainoastakaan merkkijonosta voi todistaa, että juuri siinä on paljon informaatiota! Tällä tuloksella on syvällinen merkitys informaation ja satunnaisuuden käsitteille.

4. Nopeus käytännössä

Seuraavaksi tarkastelen tietokoneiden ja ohjelmien nopeutta käytännössä. Kun pitää matkustaa Tampereelta Jyväskylään, on oma auto tai juna nopeampi kuin Finnarin reittilennot, mutta Tampereelta Singaporeen matkustettaessa tilanne on päinvastoin. Myös tietojenkäsittelyssä on usein niin, että pienillä tehtävillä nopein algoritmi on toivottoman hidas kun tehtävät kasvavat tarpeeksi suuriksi. Tämän ilmiön käsittelemiseksi on otettu käyttöön käsite asymptoottinen nopeus. Jos menetelmä A:n asymptoottinen nopeus on parempi kuin menetelmä B:n, niin tehtävän kokoa kasvatettaessa B:n mukainen ohjelma jää lopulta vääjäämättä laskenta-ajassa A:n mukaista ohjelmaa ratkaisevasti jälkeen, vaikka B-ohjelma olisi paremmin toteutettu ja sitä ajettaisiin nopeammassa koneessa kuin A-ohjelmaa.

Joskus ajatellaan, että tietokoneiden tehon kasvu vähentää nopeiden algoritmien tarvetta, kun konetehoa on tuhlattavaksi asti. Näin onkin, jos lisääntyvällä koneteholla ei haluta ratkaista isompia tehtäviä kuin ennen. Yleensä halutaan. Voi tuntua luontevalta olettaa, että kun tietokoneen teho kaksinkertaistetaan, se pystyy ratkaisemaan kaksi kertaa niin isoja tehtäviä kuin ennen. Ikävä kyllä näin on vain, jos algoritmi on niin sanotusti lineaarinen. Muussa tapauksessa konetehon kasvaessa ratkeavan tehtävän koko kasvaa hitaammin ja hitaammin. Tämä voi selittää sen, että vaikka tietokoneiden tehot ovat aina vain kasvaneet, jotkut asiat sujuvat hitaammin kuin ennen. Ohjelmaa aikanaan tehtäessä ei käytetty asymptoottisesti hyvää menetelmää, koska muinoin tehtävät olivat pieniä. Nyt ne ovat isoja, mutta muinaisuudessa muinaisajan vaatimusten mukaan tehdyillä perusratkaisuilla on ikävä taipumus jäädä pysyviksi. Sitä todistavat muun muassa qwerty-näppäimistö ja vuoden 2000 ongelma.

Yllättävän vaikeille tehtäville tunnetaan nopeita ratkaisumenetelmiä. Internetin hakukoneet löytävät halutun sanan sisältävät dokumentit sekunneissa, vaikka dokumentteja on miljoonittain ja hakukoneilla on paljon yhtäaikaisia käyttäjiä. Lyhimmän reitin etsintä paikasta A maantieverkossa paikkaan B sujuu hyvin tehdyltä ohjelmalta sutjakasti vaikka kartalla olisi tuhansittain teitä ja risteyksiä. Monisatanumeroisesta luvusta voidaan selvittää hetkessä, onko se alkuluku. Shakkikoneet löytävät paremman siirron kuin ihmiset samassa ajassa, ja niin edelleen.

Toisaalta on paljon tärkeitä tehtäviä, joille ei tunneta nopeita ratkaisumenetelmiä. Jakeluautojen kuljettajat olisivat hyvillään ohjelmasta, joka etsii lyhimmän reitin, joka käy monessa paikassa vapaassa järjestyksessä, mutta ikävä kyllä kukaan ei osaa tehdä nopeaa yleiskäyttöistä ohjelmaa tähän tehtävään. Kaikki tunnetut menetelmät parhaan reitin laskemiseksi ovat eksponentiaalisia, mikä tarkoittaa, että laskenta-aika kasvaa räjähdysmäisesti kun tehtävän koko ylittää jonkin rajan. Sellainen ohjelma toimisi kyllä mainiosti Hervannassa, mutta olisi aivan liian hidas koko Suomessa toimivalle kuljetusliikkeelle. Niinpä joudutaan tyytymään ohjelmiin, joiden löytämät reititykset eivät ole parhaita mahdollisia. Tilanne on täysin sama, kun tehtävänä on vaatteen osien leikkaaminen kankaasta niin että hukkapaloja syntyy mahdollisimman vähän, tai kytkentöjen vetäminen piirilevylle mahdollisimman edullisella tavalla, tai luentojen sijoittaminen saleihin ja lukujärjestykseen niin että opiskelijoiden ja luennoijien toiveet otetaan huomioon. Yhtä vaikeita käytännön laskentatehtäviä tunnetaan satoja.

Tiedetään, että monet laskentatehtävät ovat sisäiseltä olemukseltaan niin vaativia, että niille ei voi olla olemassa nopeita yleispäteviä ratkaisumenetelmiä. Ei tiedetä varmuudella, ovatko mainitsemani sadat käytännön tehtävät vaativia, mutta tiedetään, että joko ne kaikki ovat vaativia, tai yksikään ei ole. Koska yhdellekään niistä ei innokkaasta etsinnästä huolimatta ole löydetty asymptoottisesti nopeaa ratkaisumenetelmää, näyttää vahvasti siltä, että ne kaikki ovat vaativia. Avainkäsite näissä todistuksissa on nimeltään NP-kovuus. Sen keksi vuonna 1971 Stephen A. Cook.

Vaikka NP-koville tehtäville ei tunneta nopeita yleispäteviä ratkaisumenetelmiä, eikä sellaisia ehkä edes voi olla olemassa, pystytään osalle niistä löytämään käyttökelpoisia epätäydellisiä ratkaisuja kohtuullisessa ajassa. Jos lyhintä reittiä ei löydy, jakeluauton kuljettaja joutuu ajamaan pitemmän matkan, mutta tavarat on silti jaettava. Mitä tarkemmin tilanteessa mahdollisesti olevat helpottavat tekijät käytetään hyväksi ja mitä huolellisemmin ohjelmat ja niissä käytettävät tietorakenteet ja algoritmit suunnitellaan ja toteutetaan, sitä parempia ratkaisuja ja sitä nopeammin ohjelma löytää. Tässä on alue, jossa algoritmiikan supervahva osaaminen yhdistettynä sovellusalueen hyvään tuntemukseen voi tuottaa merkittävän kilpailuedun.

Seuraava luonnollinen tehtäväluokka vaikeampaan suuntaan mentäessä on PSPACE-kovat tehtävät. Se on minulle erityisen läheinen luokka, koska tutkimusalani perustehtävät ovat PSPACE-kovia. Älkää siis syyttäkö tutkimusryhmääni, jos heidän tekemillään ohjelmilla on suorituskykyongelmia --- vika ei ole heissä vaan luonnossa.

5. Formalismit ja spesifiointi

Yksi mielenkiintoinen alue, jolla laskennallisen vaativuuden teorian tuloksia voi soveltaa ihmisten maailmaan on kielten tutkiminen. Ohjelmointikielet ovat tietysti keinotekoisia, mutta niitten tutkiminen on paljastanut yleisiä lainalaisuuksia, jotka näyttävät olevan osittain sovellettavissa luonnollisiinkin kieliin. Nykyisin on tapana jakaa ohjelmointikielen rakenne neljään osaan: leksikaalinen taso, syntaksi, staattinen semantiikka ja dynaaminen semantiikka. Leksikaalinen taso vastaa luonnollisten kielten sanojen kokoamista ääntiöistä tai kirjaimista, syntaksi vastaa lauseiden kokoamista sanoista, staattinen semantiikka edustaa järkevyystarkastuksia tyyliin yksiköt ja monikot täsmäävät, ja dynaaminen semantiikka on ilmaisun varsinainen merkitys.

Ohjelmointi- ja muiden muodollisten kielten tapauksessa kaksi alinta tasoa on hämmästyttävän tehokkaasti hallittavissa suoraviivaisin menetelmin. Näistä menetelmistä olisi suurta hyötyä monien ohjelmistoteknisten haasteiden ratkaisemisessa. Ikävä kyllä ne on opetuksessa yleensä kytketty alkuperäiseen sovellusalueeseensa eli kääntäjätekniikkaan, minkä vuoksi liian harvat opiskelevat ne, ja vielä harvemmat oppivat soveltamaan niitä muuallakin.

Ohjelman kääntäminen konekielelle osataan hyvin, mutta muuten dynaamisen semantiikan tutkimus on ollut hyvin haastavaa, ja siinä joudutaan helposti ratkeamattomiin tehtäviin. Tämä ei ole ihme, sillä se on ilmaisujen merkityksen tutkimusta. Spesifiointikielten ja reaktiivisten järjestelmien dynaamisen semantiikan määrittelemisessä käytetään muun muassa matemaattisen logiikan malliteoriaa, tavallista joukko-oppia sekä abstraktia algebraa. Nämäkin tulokset saattavat olla osittain sovellettavissa luonnollisiin kieliin.

6. Reaktiivisuus ja rinnakkaisuus

Edellä käsittelin, mitä osittaisia funktioita tietokoneilla voi laskea ja kuinka nopeasti. Toinen tietokoneen tärkeä ominaisuus on sen vuorovaikutus ympäristönsä kanssa --- puhutaan rinnakkaisuudesta ja reaktiivisuudesta. Vuorovaikutukseen liittyvät asiat korostuvat muun muassa sulautetuissa järjestelmissä, tietoliikennejärjestelmissä ja käyttöliittymissä, joiden kaikkien merkitys on viime aikoina ollut kasvussa.

Yleisesti hyväksyttyä tietokoneiden vuorovaikutuksen teoriaa ei vielä ole, mutta sellainen on parhaillaan muotoutumassa. On havaittu, että synkroniset tapahtumat on teorian kannalta perusmekanismi, josta muut vuorovaikutuksen muodot voidaan johtaa. Synkronisessa tapahtumassa osapuolet ovat yhtä aikaa mukana, kuten puhelinkeskustelussa ja toisin kuin kirjeen kirjoittamisessa ja lukemisessa.

Vuorovaikuttavat osapuolet voidaan lähes aina mallittaa tilakoneina. Tilakone ei ole sama asia kuin klassinen äärellinen automaatti, vaikka niillä toki on tiettyjä yhtäläisyyksiä. Tilakoneiden yhteistoiminnan lopputulos voidaan laskea, ja sekin on tilakone. Jotta tilakoneiden käyttäytymistä voitaisiin tarkastella niiden ympäristön näkökulmasta, Robin Milner ja Tony Hoare käynnistivät 1970-luvun lopulla sittemmin laajaksi paisuneen täyden abstrahoinnin ja bisimilaarisuuden tutkimuksen, johon itsekin olen osallistunut.

Vaikka yksittäiset osat olisivat deterministisiä, on useasta keskenään vuorovaikuttavasta osasta koostuva järjestelmä yleensä epädeterministinen. Tämä johtuu siitä, että vuorovaikutuksen lopputulos riippuu paitsi osien rakenteesta, se riippuu hyvin herkästi myös siitä nopeudesta, jolla kukin osa toimii, ja nopeuksia ei yleensä tunneta riittävällä tarkkuudella. Rinnakkaisuuden teorian epädeterminismi ei siis ole aitoa vaan piilomuuttujien aiheuttamaa, mutta se on silti välttämätön osa teoriaa. Toteutumatta jäävät mahdollisuudet voidaan ottaa teoriassa huomioon kahdella eri tavalla, nimittäin valitsemalla lineaarinen tai haarautuva ajan malli.

Rinnakkaisuus käsitellään yleensä niin sanotun lomittelumallin mukaan, jossa yhtäaikaiset tapahtumat kuvitellaan tapahtuviksi peräkkäin jommassa kummassa järjestyksessä. Osa tutkijoista haluaa ehdottomasti käyttää aitoa rinnakkaisuutta sisältäviä malleja, mutta niiden matematiikka on tavattoman monimutkaista, ja useimmat tutkijat ovat sitä mieltä, että aidon ja lomittelurinnakkaisuuden erolla on mitättömän vähän muuta kuin filosofista merkitystä.

Vielä tänä päivänä rinnakkaisuuden ja reaktiivisuuden teorioiden markkinoilla vallitsee melkoinen kaaos. Yhtenä suurena syynä tähän on, että useimmat teoriat on laadittu järjestelmien spesifioinnin ja suunnittelun apuvälineiksi eikä vuorovaikutukseen liittyvien ilmiöiden ymmärtämisen välineiksi. Niinpä niistä on jätetty pois käsitteitä, joiden on katsottu edustavan huonoa suunnittelua, tai joista ei ole välitöntä hyötyä. Uusin teorioiden kehittely suhtautuu asioihin avoimemmin. Ennustan, että rinnakkaisuuden yleinen teoria löytää muotonsa, saavuttaa alan tutkijoiden yleisen hyväksynnän ja päätyy itsestään selväksi osaksi korkekoulutasoista ohjelmoinnin opetusta 10 tai 20 vuoden kuluessa.

7. Älykkyys

Siirryn nyt käsittelemään kysymystä tietokoneiden älykkyydestä. Sitä pohti jo Alan Turing. Hän kehitti nimeään kantavan testin, jolla tietokoneen älykkyyttä voi verrata ihmisen älykkyyteen. Testaaja on sähköpostiyhteydessä kahden tahon kanssa. Testaaja tietää, että toinen niistä on ihminen ja toinen tietokoneohjelma, mutta hän ei tiedä kumpi on kumpi. Testaaja keskustelee kummankin tahon kanssa sähköpostitse jonkin aikaa, ja sen jälkeen arvaa, kumpi on ihminen. Jos testaajan arvaukset menevät oikein enintään noin joka toinen kerta, voidaan sanoa, että testattu ohjelma on älykäs.

Turingin testin tulokset riippuvat siitä, minkälaisella kielellä keskustelu käydään, ja minkälaisia kysymyksiä testaajalla on lupa esittää. Tulokseksi on saatu, että parhaat nykyiset ohjelmat ovat älykkäitä jollakin hyvin kapealla alueella kuten shakkipelissä, mutta missään yleisessä mielessä älykkäitä ohjelmia ei ole vielä tehty. Ihmisaivot ovat kiistatta huikean paljon älykkäämpiä kuin nykyiset tietokoneohjelmat.

Mihin ihmisaivojen ylivoimainen älykkyys perustuu? On väitetty, että syynä on aivojen kyky käsitellä asioita rinnakkaisesti, eli useita asioita yhtä aikaa. Tietokoneet ovat tyhmiä, koska ne käsittelevät asioita peräkkäisesti. Tämä selitys on selvästi väärä. Peräkkäistietokone voi matkia rinnakkaisuutta vuorottelemalla nopeasti eri tehtävien välillä. Tiedetään, että samasta laskentakapasiteetista saadaan sitä vähemmän irti, mitä useampaan rinnakkaiseen yksikköön se on jaettu. Älykkyyden kannalta ihmisaivojen rinnakkaisuus on siis pikemminkin haitta kuin etu.

Myös on väitetty, että ihmisaivot voittavat tietokoneet valtavan paljon suuremman muisti- ja laskentakapasiteettinsa ansiosta. Tämäkin selitys lienee väärä. Ihmisaivojen kapasiteetti vastaa enintään kymmentä miljonaa modernia PC:tä, tuskin edes miljoonaa. Kymmenen miljoonaa kuulostaa suurelta luvulta, mutta internetissä on paljon enemmän laskentakapasiteettia. Mikään ei kuitenkaan viittaa siihen, että internet olisi älykäs! Kapasiteettiero ei siis yksinään riitä ihmisaivojen huikeiden kykyjen selittäjäksi.

Paljon uskottavampi on selitys, jonka mukaan aivoissa on paljon paremmat algoritmit kuin ihmisten tekemissä tietokoneissa, onhan evoluutiolla ollut runsaasti aikaa kehittää niitä. Mielestäni tämä selitys on järkeenkäypä ja uskon sen kattavan suuren osan ihmisen ja koneen nykyisistä kykyeroista, mutta henkilökohtaisesti en pidä sitäkään täysin riittävänä.

Vaikka aivot eivät olisi muuta kuin laadukasta ohjelmaa ajava tietokone, voi silti olla, että emme koskaan pysty ymmärtämään, miten ne toimivat. Satunnaisen ohjelman toimintaahan on mahdoton ymmärtää, kuten aiemmin totesin.

Ihmisaivojen ylivertaisuus saattaisi johtua myös siitä, että aivot perustuisivat aidosti Turingin konetta vahvempaan laskennan malliin. Osa tällaisista ehdotuksista venyttää tunnetun fysiikan rajoja, kuten vetoaminen epälineaarisiin kvantti-ilmiöihin. Ainoa tuntemani nykyfysiikkaan hyvin mahtuva ehdotus lähtee siitä, että aivoissa näyttää olevan kaoottisia prosesseja. Kaoottisen prosessin alkutilan aina vain vähemmän merkitsevät bitit aiheuttavat aikaa myöten makroskooppisia vaikutuksia. Kaaos tuottaisi siis jatkuvasti ikään kuin ylimääräisiä bittejä aivojen käyttöön. Tämä ilmiö saattaa hyvinkin olla todellinen, ja aiheuttaa aivojen toimintaan ennustamattomuutta. Minusta olisi kuitenkin aika mielikuvituksellista, suorastaan mystiikkaa hipovaa olettaa, että kaaoksesta esiin pulppuavat bitit toisivat mukanaan käyttökelpoista informaatiota. Paljon uskottavampaa on, että ne ovat vain taustakohinaa. Siinä tapauksessa kaaos vastaa tavallisten tietokoneiden satunnaislukugeneraattoreita, eikä kelpaa älykkyyden selitykseksi.

8. Kokeminen ja tietoisuus

Vaikka älykkyys olisikin selitettävissä tietokoneiden avulla, on ihmismielessä muitakin kiintoisia ilmiöitä. Mielestäni kaikkein vaikeimmin selitettävissä on se, että meillä on kokemuksia. Olemme tietoisia itsestämme ja ympäristöstämme. Miellämme värejä ja nautimme musiikista. Tunnemme kipua, iloa ja kaipausta. Lisäksi meillä on jossain määrin vapaa tahto, tai ainakin harhakuva sellaisesta.

Ennen kuin jatkan, on hyvä hieman täsmentää käsitteitä. Tietoisuudella tarkoitan kykyä kokea. Valveilla ollessamme olemme tietoisia ja nukkuessamme emme, paitsi ehkä nähdessämme unia. Joskus olemme tietoisuuden rajoilla. Kokemisella en tarkoita havaintojen tekoa, vaan havaintojen meissä herättämiä tuntemuksia. Jos sormeni osuu vahingossa kynttilän liekkiin, käyttäydyn siten, että vedän sen heti pois ja huudan ``au!'', mutta lisäksi koen jotakin, nimittäin kipua. Ei ole vaikeaa tehdä yksinkertainen laite joka myös liekkiä koskettaessaan vetäisi robottikätensä äkkiä pois ja äännähtäisi kuuluvasti, mutta useimmat ihmiset taitavat uskoa, että se ei tuntisi kipua.

Kokemisesta, tietoisuudesta ja tahdosta on vaikea sanoa mitään varmaa, koska tiedämme niistä erittäin vähän. Ne ovat hyvin subjektiivisia ilmiöitä ja siksi vaikeita tutkia. Niinpä jotkut ovat jyrkästi sitä mieltä, että niitä ei oikeasti ole olemassa, että ne ovat vain harhoja; vain käyttäytyminen on olemassa. Tämä yltiöbehavioristinen kanta on liian räikeässä ristiriidassa useimpien ihmisten henkilökohtaisen kokemuksen kanssa voidakseen kelvata heille, ja tutkijoidenkin keskuudessa se näyttää olevan menettämässä suosiotaan.

Erään selitysmallin ilmaisee iskulause ``tunteet ovat kemiaa''. Minusta siinä sekoitetaan toisiinsa varsinainen ilmiö ja sitä välittävä tai kannatteleva mekanismi. Se jättää kertomatta, mikä on se ero, jonka vuoksi minä tunnen kipua, mutta yksinkertainen robottikäsi ei tunne. Samalla lailla väärin olisi väittää, että koska televisiossa näkyvään kuvaan voidaan vaikuttaa häiritsemällä kuvaputken elektronisuihkuja, ovat kuvat elektronisuihkuja.

Tästä pääsemme olennaiseen kysymykseen josta nykyisin kovasti kinastellaan: onko mitään ilmiötä olemassakaan irrallaan sitä kannattelevista aineellisista mekanismeista? Jääkö mitään jäljelle, jos kokonaisuudesta vähennetään sen aineellisten osien summa? Tietojenkäsittelijästä on luonnollista vastata tähän ``kyllä''. Sama tietokoneohjelma voi esiintyä magneettikentän vaihteluina kiekon pinnalla, reikinä paperinauhassa, varauksen vaihteluina piilastussa ja musteläiskinä paperilla. Tietokoneohjelmassa ei ole olennaista aine, jolla se esitetään, vaan jonkinlainen abstrakti muoto, joka kyllä tarvitsee ainetta esiintymisalustakseen, mutta joka ei ole ronkeli esiintymisalustansa materiaalin ja esitystavan yksityiskohtien suhteen. Eivät hyvin tehdyt ohjelmat ole kovin ronkeleita myöskään niitä suorittavan tietokoneen suhteen. Minusta abstraktit aineettomat kohteet ovat olemassa jossain pikkuisen vahvemmassa mielessä kuin mitä nykyinen reduktionismi edustaa. Mielestäni tähän viittaavat paitsi tietojenkäsittelyteorian tulokset, myös matemaattisen logiikan löydökset.

Jotkut haluavat selittää tietoisuuden aivojen tietojenkäsittelyyn liittyvänä ilmiönä. Minustakin se on hyvä lähtökohta. Ikävä kyllä, nykyinen tietojenkäsittelytiede ei tarjoaa mitään mekanismia tämän selityksen pohjaksi. Se tarjoaa aika uskottavan selityksen käyttäytymisellemme, mutta tietoisuuteen se ei ota kantaa, paitsi ehkä saamalla sen näyttämään entistäkin kummallisemmalta. Tietojenkäsittelytieteen puolesta voisimme aivan yhtä hyvin tehdä kaiken mitä teemme ikään kuin unissakävelijä. Munuaisemme toimivat ilman että tiedostamme sitä; konekirjoittajan sormet löytävät oikeat näppäimet ilman että hänen tarvitsee ajatella sitä; miksi meidän tarvitsee tiedostaa mitään tekemisiämme?

Jos tietoisuus kumpuaa aivoissa tapahtuvista tietojenkäsittelyprosesseista, tietoisuutta tulisi esiintyä aina kun aivojen ohjelmiston kaltaiselle ohjelmalle annetaan aivojen saamia herätteitä muistuttavia syötteitä sopivassa tahdissa riippumatta siitä, missä ja millä nopeudella ohjelmaa oikeasti suoritetaan ja mistä syötteet oikeasti tulevat. Sama syötteiden ja vasteiden välinen riippuvuus voidaan saada aikaan usealla erilaisella ohjelmalla. Ohjelman tila voidaan tallettaa usealla eri tavalla, vaikkapa salattuna. Tällöin fyysisen muistin varausjakauma näyttää täysin satunnaiselta, ja on varmasti aivan erilainen kuin aivoissa. Jos tietoisuus on tietojenkäsittelytieteellinen ilmiö, sen pitäisi olla riippumaton näistä tekijöistä. Kun tätä päättelyä jatketaan jonkin aikaa, päädytään siihen, että joko kaikki laskennat ovat tietoisia, tai tietoisuus on jonkin abstraktin matemaattisen muodon ominaisuus. Kumpikin kuulostaa minusta kovin mystiseltä.

Oma kantani on, että yritykset selittää tietoisuus nykyisin tunnettuihin fysikaalisiin ilmiöihin perustuvana laskentaprosessina ontuvat sen verran, että selittäjäksi tarvitaan vielä nykyisin tuntematon luonnonilmiö. Nämä ovat kuitenkin vain minun mielipiteitäni, ja toiset saattavat tehdä samasta todistusaineistosta toisenlaisia johtopäätöksiä. Todistusaineisto on vielä sen verran heikkoa ja moniselitteistä, että kukaan rehellinen ihminen ei voi väittää tietävänsä, miten asia oikeasti on.

Pari aiheeseen liittyvää linkkiä

(Lisätty 7.12.1999.)


Antti Valmari 2.12.1999