Yleistä
1900-luvun alkupuoli oli matemaattisen logiikan kulta-aikaa, jolloin suuret matemaatikot, kuten Alan Turing (1912-1954), Kurt Gödel (1906-1978), Alonzo Church (1903-1995), Emil Post (1897-1954) ja useat muut kehittivät useita matemaattisia malleja, jotka mallinsivat nykyaikaisia tietokoneita ennen kuin niitä oli varsinaisesti rakennettu. Samalla pystyttiin jo ennen tietokoneiden keksimistä päättelemään, mitä on tietokoneella laskettavissa ja mitä ei, vaikka resursseja olisi kuinka paljon. Alan Turing tunnettiin erityisesti Turingin koneesta, joka vastaa tietokonetta, jolla on nauhamainen muisti, rekistereitä ja lukupää. Emil Post vastaavasti oli merkkijonojärjestelmien uranuurtaja, Alonzo Church kehitti sittemmin
Primitiivirekursiivisten funktioiden määritelmä
Primitiivirekursiiviset funktiot ovat eräitä funktioita nollan tai useamman luonnollisen luvun listalta yhdelle luonnolliselle luvulle. Funktiot tyhjältä listalta luonnolliselle luvuille ovat luonnolliset luvut itse, kuten
Primitiivirekursiiviset funktiot kattavat initiaalifunktiot, eli nollafunktion, seuraajan ja projektiofunktiot ja ovat suljettuja funktioiden yhdistämisen ja primitiivirekursion suhteen. Seuraavassa merkitään
Initiaalifunktiot
Nollafunktio
Tämä vastaa p.r. funktioissa itse lukua
Seuraaja
Funktion täysi merkitys voidaan esitellä vasta funktioiden yhdistämisen määritelmän jälkeen.
Projektio
Myöhemmin vakiofunktioiden esittämisen jälkeen projektiofunktiota voidaan yksinkertaistaa poistamalla oletus sen paikkaluvusta.
Primitiivirekursiiviset operaatiot
Yhdistäminen
Jos
on primitiivirekursiivinen. Merkitään
tai
Vakiofunktioiden esittämisen jälkeen voidaan löystää oletusta siitä, että kaikki
Primitiivirekursio
Jos
Merkitään
Vakiofunktioiden esittämisen jälkeen voidaan löystää oletusta
Numeraalit ja vakiofunktiot
(Church)-numeraalit
Kun yhdistäminen on esitelty, voidaan luonnollisten lukujen määritelmät kirjoittaa sen avulla seuraavasti:
Jatkossa näitä monimutkaisempia muodollisia määritelmiä vältetään ja luonnolliset luvut kirjoitetaan numeroilla.
Vakiofunktiot
Monesti tulee tilanne, jossa tarvitaan vakiofunktiota, joka kuitenkin ottaa vastaan parametreja, mutta ei käytä niitä mihinkään. Viitaten yllä primitiivirekursion määritelmään,
Tämä olisi muodollisesti
Eksplisiittinen transformaatio
Koska projektiosääntö mahdollistaa myös funktion argumenttien paikan vaihtamisen, eli käytännössä, jos
Peruslaskutoimituksia
Summa
Kahden luvun summa
Muodollisesti
Rajoitettu edeltäjä
Rajoitettu edeltäjä, jossa minkä tahansa muun luvun paitsi luvun
Muodollisesti
Rajoitettu vähennyslasku
Rajoitettu vähennyslasku
Muodollisesti
Tulo
Tulo
Muodollisesti
Logiikkaa
Predikaatit
Useissa loogisissa lausekkeissa kiinnostaa lukuarvojen sijasta vain, onko lause tosi
Lauseke | Merkitys |
JA: | |
TAI: Ainakin jompikumpi | |
ERI: Joko |
Kaikki taulukon operaattorit ovat primitiivirekursiivisia predikaatteja. Todistetaan tämä muutamille tärkeimmille, loppujen todistukset voi tehdä harjoitustehtävänä.
Funktio
Vaihtoehtoisesti
Rajoitettu universaali kvantifikaatio
Jos
eli ”kaikilla
Rajoittamaton universaali kvantifikaatio
Rajoitettu eksistentiaalinen kvantifikaatio
Jos
eli ”on olemassa
Taaskaan rajoittamaton eksistentiaalinen kvantifikaatio
Yhtäsuuruus ja erisuuruus
Lukujen yhtäsuuruuden tai suuruusjärjestyksen määrittäminen on p.r. Esimerkiksi sen testaaminen, onko luku
Lisäksi
Lisää lukujen laskutoimituksia
Rajoitettu summa ja tulo
Jos
Hyvin samantapaisella kaavalla voi todistaa, että myös rajoitettu tulo
Potenssiin korottaminen
Potenssiin korottaminen
Rajoitettu minimalisaatio
Seuraava operaatio on hyvin tärkeä. Olemme tähän mennessä jättäneet esimerkiksi osamäärän, jakojäännöksen, juurenoton ja logaritmin käsittelemättä, koska ne ovat luonteeltaan sellaisia, että niitä varten tarvitsee ratkaista epäyhtälö tai yhtälö. Toisaalta niissä tiedetään raja, jonka puitteissa voidaan tehdä etsintä. Esimerkiksi
Jos
Osamäärä
Osamäärä on p.r.
Tässä
Jakojäännös
Jakojäännös on p.r.
On muistettava, että osamäärä on tässä kokonaisluku, joka on alaspäin pyöristetty tulos reaalisesta osamäärästä.
Juurenotto
Juurenotto on p.r.
Logaritmi
Logaritmi on p.r.
Alkuluvut
Predikaatti, joka tarkastaa, onko annettu luku alkuluku, on p.r.
On mahdollista todistaa, että funktio, joka antaa jotakin lukua seuraavan alkuluvun ja funktio, joka generoi
Tietorakenteet, algoritmit ja Gödel-numerointi
Tähän mennessä olemme käsitelleet vain funktioita, jotka palauttavat yksittäisen luonnollisen luvun. Kuitenkin nykyaikaisessa tietotekniikassa esiintyy tarvetta palauttaa ja käsitellä paljon muunlaistakin tietoa, kuten merkkijonoja, lukupareja, lukulistoja ja objekteja. Lisäksi tarvetta on muidenkin numeroituvien lukujoukkojen kuten kokonaislukujen, rationaalilukujen tai jopa kompleksilukujen, joiden reaali- ja imaginaariosat ovat molemmat rationaalikertoimisia, käsittelyyn ja useimmat tällaisetkin operaatiot ovat p.r. Seuraavassa käsittelemme tekniikan, jolla yksittäiseen luonnolliseen lukuun voidaan koodata näennäisesti laajempi tietorakenne. Olennaista on, että tietorakenne on numeroituva. Siksi esimerkiksi koko reaalilukujen tai kompleksilukujen joukkoa tai mitään muuta ylinumeroituvaa joukkoa ei voi käsitellä pelkillä primitiivirekursiivisilla funktioilla.
Kolmioluvut ja Cantorin parifunktio
Kolmioluvut ovat lukuja, joita saadaan laskemalla peräjälkeen luonnollisia lukuja, esimerkiksi
Jos nyt tarkastellaan lukupareja, jotka on ensisijaisesti järjestetty lukujen summan mukaan, toissijaisesti jälkimmäisen luvun mukaan, saadaan jono
Funktiota
Ratkaistaan toisen asteen yhtälö:
Koska nyt käsitellään luonnollisia lukuja, voidaan ylläoleva lauseke pyöristää alaspäin ja käyttää neliöjuuren etumerkissä pelkkää
Nyt tiedämme, että
Tämän perusteella voidaan määrittää p.r. funktiot
Linkitetyt listat
Parifunktio mahdollistaa mielivaltaisen pituisten lukujonojen eli lukulistojen laatimisen. Sovitaan, että
Listan
samoin kuin listan pituuden
tai listan
Näiden lisäksi lähes kaikki muutkin ajateltavissa olevat tavanomaiset listaoperaatiot, kuten tietyn listan arvon etsintä, alkioiden lisääminen listojen väliin, listojen yhteenliittäminen yms. ovat p.r. Todistukset ovat samantapaisia kuin kolme aiempaa esimerkkiä.
Binaaripuut
Binaaripuu voidaan koodata siten, että sovitaan parillisten lukujen tarkoittavan yhden luvun binaaripuuta
Merkkijonot ja unionit
Halutaan mahdollistaa merkkijonot, mutta sen lisäksi myös niiden seassa mielivaltaiset luvut. Tällöin voidaan laatia lista, kuten ylempänä, mutta sopia, että listassa oleva luku
Objektit
Halutaan mahdollistaa taulukot, joissa on avain-arvopareja niin, että kutakin merkkijonoarvoa vastaa luku tai muu objekti, esimerkiksi:
{
"auto": 6,
"polkupyörä: 12,
"moottoripyörä": (18,17)
}
Tällöin voidaan keksiä ensin yksittäisten rivien vasempia puolia vastaava koodaustapa ja sen jälkeen luoda lista pareista
Johtopäätös
Olemme havainneet, että lähes kaikki ajateltavissa olevat lukujen ja muiden rakenteiden operaatiot, joita esiintyy, ovat primitiivirekursiivisia. Artikkelisarjan jälkimmäisessä osassa käydään läpi funktioita, jotka ovat kyllä laskettavia, mutta eivät ole primitiivirekursiivisia. Lisäksi osoitamme, että tietyt funktiot ja relaatiot eivät ole laskettavia. Tätä yllättävää tulosta ja sen eri variaatioita kutsutaan Gödelin lukuteorian epätäydellisyyslauseeksi.
Artikkelisarjan seuraava osa on täällä.
Viimeisimmät kommentit