{"id":174,"date":"2021-01-27T00:53:31","date_gmt":"2021-01-26T22:53:31","guid":{"rendered":"http:\/\/tslespoo.fi\/wordpress\/?p=174"},"modified":"2021-02-07T21:20:30","modified_gmt":"2021-02-07T19:20:30","slug":"primitiivirekursiiviset-funktiot","status":"publish","type":"post","link":"http:\/\/tslespoo.fi\/wordpress\/2021\/01\/27\/primitiivirekursiiviset-funktiot\/","title":{"rendered":"Primitiivirekursiiviset funktiot"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Yleist\u00e4<\/h2>\n\n\n\n<p>1900-luvun alkupuoli oli matemaattisen logiikan kulta-aikaa, jolloin suuret matemaatikot, kuten Alan Turing (1912-1954), Kurt G\u00f6del (1906-1978), Alonzo Church (1903-1995), Emil Post (1897-1954) ja useat muut kehittiv\u00e4t useita matemaattisia malleja, jotka mallinsivat nykyaikaisia tietokoneita ennen kuin niit\u00e4 oli varsinaisesti rakennettu. Samalla pystyttiin jo ennen tietokoneiden keksimist\u00e4 p\u00e4\u00e4ttelem\u00e4\u00e4n, mit\u00e4 on tietokoneella laskettavissa ja mit\u00e4 ei, vaikka resursseja olisi kuinka paljon. Alan Turing tunnettiin erityisesti Turingin koneesta, joka vastaa tietokonetta, jolla on nauhamainen muisti, rekistereit\u00e4 ja lukup\u00e4\u00e4. Emil Post vastaavasti oli merkkijonoj\u00e4rjestelmien uranuurtaja, Alonzo Church kehitti sittemmin $\\lambda$-laskentana tunnetun j\u00e4rjestelm\u00e4n, joka simuloi sit\u00e4, kuinka tietokoneohjelmien funktiot ottavat parametreja ja k\u00e4sittelev\u00e4t niit\u00e4. Church teki erityisen tunnetuksi konseptin, jossa funktiot voivat ottaa parametreikseen toisia funktioita, mik\u00e4 nyky\u00e4\u00e4n tunnetaan funktionaalisena ohjelmointina, ollen k\u00e4yt\u00f6ss\u00e4 useissa nykyaikaisissa Javascript-kirjastoissa, kuten React.JS:ss\u00e4. Kurt G\u00f6del keksi yksinkertaisehkot m\u00e4\u00e4ritelm\u00e4t lukuteoreettisille funktioille, sek\u00e4 j\u00e4rjestelm\u00e4n, jolla lukupareja, useamman luvun listoja tai merkkijonoja voidaan koodata luonnollisiksi luvuiksi. T\u00e4llainen systeemi on nyky\u00e4\u00e4n k\u00e4yt\u00f6ss\u00e4 esimerkiksi UTF-8-merkist\u00f6koodauksessa. T\u00e4m\u00e4 artikkeli k\u00e4sittelee lukuteoreettisten funktioiden merkitt\u00e4v\u00e4\u00e4 osajoukkoa, primitiivirekursiivisia funktioita.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Primitiivirekursiivisten funktioiden m\u00e4\u00e4ritelm\u00e4<\/h2>\n\n\n\n<p>Primitiivirekursiiviset funktiot ovat er\u00e4it\u00e4 funktioita nollan tai useamman luonnollisen luvun listalta yhdelle luonnolliselle luvulle. Funktiot tyhj\u00e4lt\u00e4 listalta luonnolliselle luvuille ovat luonnolliset luvut itse, kuten $0$, $1$, $2$, $3$ jne.<\/p>\n\n\n\n<p>Primitiivirekursiiviset funktiot kattavat initiaalifunktiot, eli nollafunktion, seuraajan ja projektiofunktiot ja ovat suljettuja funktioiden yhdist\u00e4misen ja primitiivirekursion suhteen. Seuraavassa merkit\u00e4\u00e4n $\\vec{x}$, jos tarkoitetaan $n$ kappaleen luonnollisen luvun listaa $x_0,x_1,x_2, &#8230; ,x_{n-1}$.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Initiaalifunktiot<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Nollafunktio<\/h4>\n\n\n\n<p>$0$-paikkainen nollafunktio $\\zeta$, m\u00e4\u00e4ritell\u00e4\u00e4n<br>$$\\zeta()=0$$<br>T\u00e4m\u00e4 vastaa p.r. funktioissa itse lukua $0$.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Seuraaja<\/h4>\n\n\n\n<p>$1$-paikkainen seuraajafunktio $\\sigma$, &#8221;m\u00e4\u00e4ritell\u00e4\u00e4n&#8221; tai tulee my\u00f6hemmin t\u00e4ss\u00e4 artikkelissa tarkoittamaan lis\u00e4\u00e4mist\u00e4 yhdell\u00e4, esimerkiksi:<br>$$\\sigma(0)=1, \\sigma(1)=2 &#8230;$$<br>Funktion t\u00e4ysi merkitys voidaan esitell\u00e4 vasta funktioiden yhdist\u00e4misen m\u00e4\u00e4ritelm\u00e4n j\u00e4lkeen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Projektio<\/h4>\n\n\n\n<p>$n$-paikkainen $m$-projektiofunktio $\\pi_m^n$ poimii listasta $\\vec{x}=x_0,x_1,&#8230;,x_{n-1}$ alkion kohdasta $m$, jolloin indeksointi (t\u00e4ss\u00e4 artikkelissa) alkaa nollasta. Esimerkiksi:<br>$$\\pi_1^3(5,3,1)=3$$<br>My\u00f6hemmin vakiofunktioiden esitt\u00e4misen j\u00e4lkeen projektiofunktiota voidaan yksinkertaistaa poistamalla oletus sen paikkaluvusta.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Primitiivirekursiiviset operaatiot<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Yhdist\u00e4minen<\/h4>\n\n\n\n<p>Jos $g$ on $m$-paikkainen funktio ja $\\vec{h}=h_0,h_1&#8230;h_{m-1}$, $n$-paikkaisia funktioita, niin $g$:n ja $\\vec{h}$:n yhdiste<br>$$f=g(\\vec{h}(\\vec{x}))$$<br>on primitiivirekursiivinen. Merkit\u00e4\u00e4n<br>$$f=(\\gamma g\\vec{h})$$<br>tai<br>$$f=(\\gamma g h_0 h_1 &#8230; h_{m-1})$$<br>Vakiofunktioiden esitt\u00e4misen j\u00e4lkeen voidaan l\u00f6yst\u00e4\u00e4 oletusta siit\u00e4, ett\u00e4 kaikki $\\vec{h}$:oon kuuluvat funktiot olisivat t\u00e4sm\u00e4lleen $n$-paikkaisia.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Primitiivirekursio<\/h4>\n\n\n\n<p>Jos $g$ on $n$-paikkainen funktio ja $h$ on $n+2$, paikkainen funktio, niin $f$ on $n+1$-paikkainen funktio, joka saadaan $g$:st\u00e4 ja $h$:sta primitiivirekursiolla:<br>$$\\left\\{<br>\\begin{array}{ccc}<br>f(0,\\vec{x}) &amp; = &amp; g(\\vec{x}) \\\\<br>f(n+1,\\vec{x}) &amp; = &amp; h\\left(n,f(n,\\vec{x}),\\vec{x}\\right)<br>\\end{array}<br>\\right.$$<br>Merkit\u00e4\u00e4n<br>$$f=(\\rho g h)$$<br>Vakiofunktioiden esitt\u00e4misen j\u00e4lkeen voidaan l\u00f6yst\u00e4\u00e4 oletusta $g$:n ja $h$:n paikkaluvuista.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Numeraalit ja vakiofunktiot<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">(Church)-numeraalit<\/h3>\n\n\n\n<p>Kun yhdist\u00e4minen on esitelty, voidaan luonnollisten lukujen m\u00e4\u00e4ritelm\u00e4t kirjoittaa sen avulla seuraavasti:<br>\\begin{array}{ccc}<br>0 &amp; = &amp; \\zeta \\\\<br>1 &amp; = &amp; (\\gamma \\sigma \\zeta) \\\\<br>2 &amp; = &amp; \\left(\\gamma \\sigma (\\gamma \\sigma \\zeta)\\right) \\\\<br>3 &amp; = &amp; \\left(\\gamma \\sigma \\left(\\gamma \\sigma (\\gamma \\sigma \\zeta)\\right)\\right) \\\\<br>&#8230;<br>\\end{array}<br>Jatkossa n\u00e4it\u00e4 monimutkaisempia muodollisia m\u00e4\u00e4ritelmi\u00e4 v\u00e4ltet\u00e4\u00e4n ja luonnolliset luvut kirjoitetaan numeroilla.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vakiofunktiot<\/h3>\n\n\n\n<p>Monesti tulee tilanne, jossa tarvitaan vakiofunktiota, joka kuitenkin ottaa vastaan parametreja, mutta ei k\u00e4yt\u00e4 niit\u00e4 mihink\u00e4\u00e4n. Viitaten yll\u00e4 primitiivirekursion m\u00e4\u00e4ritelm\u00e4\u00e4n, $1$-paikkainen $0$-funktio voitaisiin saada aikaan seuraavasti:<br>$$\\left\\{<br>\\begin{array}{ccc}<br>f(0) &amp; = &amp; 0 \\\\<br>f(n+1) &amp; = &amp; f(n)<br>\\end{array}<br>\\right.$$<br>T\u00e4m\u00e4 olisi muodollisesti $f=(\\rho\\zeta\\pi_1^2)$. Yleisesti voidaan kaikki funktiot $K_m^n(\\vec{x})=m$, mik\u00e4 tarkoittaa $n$-parametrista vakiofunktiota, jonka arvo on aina $m$, johtaa rekursiivisilla s\u00e4\u00e4nn\u00f6ill\u00e4:<br>$$\\left\\{<br>\\begin{array}{ccc}<br>K_0^0 &amp; = &amp; \\zeta \\\\<br>K_{m+1}^n &amp; = &amp; (\\gamma\\sigma K_m^n) \\\\<br>K_m^{n+1} &amp; = &amp; (\\rho K_m^n \\pi_1^{n+2})<br>\\end{array}<br>\\right.$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eksplisiittinen transformaatio<\/h3>\n\n\n\n<p>Koska projektios\u00e4\u00e4nt\u00f6 mahdollistaa my\u00f6s funktion argumenttien paikan vaihtamisen, eli k\u00e4yt\u00e4nn\u00f6ss\u00e4, jos $f(x,y)$ on p.r., niin my\u00f6s $g(x,y)=f(y,x)$ on p.r., muodollisesti $g=(f\\pi_1^2 \\pi_0^2)$, niin voidaan p\u00e4\u00e4tell\u00e4, ett\u00e4 ylim\u00e4\u00e4r\u00e4iset huomiotta j\u00e4\u00e4v\u00e4t parametrit miss\u00e4 tahansa kohdassa listaa eiv\u00e4t muuta niiden funktioiden perhett\u00e4, joita voidaan normaaleillakin p.r. funktioiden s\u00e4\u00e4nn\u00f6ill\u00e4 luoda. Kun tehd\u00e4\u00e4n lis\u00e4oletus &#8221;projisoinnista listan ulkopuolelle&#8221;, eli parametrit, joita ei erikseen ole m\u00e4\u00e4ritelty, mutta joita kysyt\u00e4\u00e4n, ovat nollia, voidaan luopua projektiofunktiossa listan pituuden esittelyst\u00e4 ja sallia funktioiden yhdist\u00e4miset ja primitiivirekursiot ilman tarkkaa oletusta parametrien m\u00e4\u00e4rist\u00e4 ja j\u00e4rjestyksest\u00e4. Jatkossa m\u00e4\u00e4ritell\u00e4\u00e4n, ett\u00e4  $\\pi_m(\\vec{x})$ on vektorin alkio kohdassa $m$ tai $0$, jos alkio on vektorin ulkopuolella. Esimerkin vuoksi saatetaan edelleen joissakin kohden k\u00e4ytt\u00e4\u00e4 tarkkaa muotoa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Peruslaskutoimituksia<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Summa<\/h3>\n\n\n\n<p>Kahden luvun summa $n+x$ on primitiivirekursiivinen. Yksinkertaistetussa muodossa voidaan ensin havaita, ett\u00e4:<br>$$\\left\\{<br>\\begin{array}{ccc}<br>n+0 &amp; = &amp; n \\\\<br>(n+1)+x &amp; = &amp; \\sigma(n+x)<br>\\end{array}<br>\\right.$$<br>Muodollisesti $\\mathrm{plus}=\\left(\\rho\\left(\\pi_0^1(\\gamma\\sigma\\pi_1^3)\\right)\\right)$.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rajoitettu edelt\u00e4j\u00e4<\/h3>\n\n\n\n<p>Rajoitettu edelt\u00e4j\u00e4, jossa mink\u00e4 tahansa muun luvun paitsi luvun $0$ edelt\u00e4j\u00e4 on sit\u00e4 yht\u00e4 pienempi luku, on p.r.<br>$$\\left\\{<br>\\begin{array}{ccc}<br>\\sigma^{-1}(0) &amp; = &amp; 0 \\\\<br>\\sigma^{-1}(n+1) &amp; = &amp; n<br>\\end{array}<br>\\right.$$<br>Muodollisesti $\\sigma^{-1}=(\\rho\\zeta\\pi_0^2)$.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rajoitettu v\u00e4hennyslasku<\/h3>\n\n\n\n<p>Rajoitettu v\u00e4hennyslasku $x-&#8217;n=\\mathrm{monus}(n,x)$ on p.r.<br>$$\\left\\{<br>\\begin{array}{ccc}<br>\\mathrm{monus}(0,x) &amp; = &amp; x \\\\<br>\\mathrm{monus}(n+1,x) &amp; = &amp; \\sigma^{-1}\\mathrm{monus}(n,x)<br>\\end{array}<br>\\right.$$<br>Muodollisesti $\\mathrm{monus}=\\left(\\rho\\left(\\pi_0^1(\\gamma\\sigma^{-1}\\pi_1^3)\\right)\\right)=\\left(\\rho\\left(\\pi_0^1\\left(\\gamma(\\rho\\zeta\\pi_0^2)\\pi_1^3\\right)\\right)\\right)$. Rajoitettu v\u00e4hennyslasku poikkeaa normaalista v\u00e4hennyslaskusta siten, ett\u00e4 negatiiviset luvut eiv\u00e4t ole k\u00e4yt\u00f6ss\u00e4, joten jos $x\\le y$, niin v\u00e4hennyslaskun $x-&#8217;y$ tulos on aina $0$, muuten tavallinen v\u00e4hennyslaskun tulos. My\u00f6hemmin havainnollistetaan, kuinka n\u00e4in voidaan toteuttaa loogisia operaatioita.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tulo<\/h3>\n\n\n\n<p>Tulo $n\\cdot x=\\mathrm{prod}(n,x)$ on p.r.<br> $$\\left\\{<br>\\begin{array}{ccc}<br>\\mathrm{prod}(0,x) &amp; = &amp; 0 \\\\<br>\\mathrm{prod}(n+1,x) &amp; = &amp; \\mathrm{plus}(\\mathrm{prod}(n,x),x)<br>\\end{array}<br>\\right.$$<br>Muodollisesti<br>$\\mathrm{prod}=(\\rho K_0^1(\\gamma\\ \\mathrm{plus}\\ \\pi_1^3 \\pi_2^3))$. T\u00e4ss\u00e4 kohden on viimeist\u00e4\u00e4n huomattava, kuinka monimutkaista voi olla varmistaa, ett\u00e4 primitiivirekursio-operaatiossa $\\rho$ on funktioilla oikea argumenttien lukum\u00e4\u00e4r\u00e4. Tarvittiin esimerkiksi $K_0^1$ pelk\u00e4n $\\zeta$:n sijaan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Logiikkaa<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Predikaatit<\/h3>\n\n\n\n<p>Useissa loogisissa lausekkeissa kiinnostaa lukuarvojen sijasta vain, onko lause tosi $\\top$ vai ep\u00e4tosi $\\bot$. Voidaan sopia, ett\u00e4 ep\u00e4totta arvoa vastaa $0$ ja totta arvoa vastaa $1$. Jos on funktio $P_f(\\vec{x})$, joka voi saada vain arvot $0$ ja $1$, sanotaan, ett\u00e4 $P_f$ on predikaatin $P$ karakteristinen funktio. Predikaatit, joiden karakteristinen funktio on p.r. ovat primitiivirekursiivisia predikaatteja. Seuraavassa taulukossa on lueteltu joitakin predikaattien operaatioita:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Lauseke<\/strong><\/td><td><strong>Merkitys<\/strong><\/td><\/tr><tr><td>$P,\\ P=\\top$<\/td><td>$P$ on tosi<\/td><\/tr><tr><td>$\\lnot P,\\ P=\\bot$<\/td><td>$P$ on ep\u00e4tosi<\/td><\/tr><tr><td>$P\\land Q$<\/td><td>JA: $P$ ja $Q$ ovat molemmat tosia<\/td><\/tr><tr><td>$P\\lor Q$<\/td><td>TAI: Ainakin jompikumpi $P$ tai $Q$ on tosi<\/td><\/tr><tr><td>$P\\to Q$<\/td><td>$P$:st\u00e4 seuraa $Q$, sama kuin $\\lnot P\\lor Q$.<\/td><\/tr><tr><td>$P\\leftrightarrow Q$<\/td><td>$P$ ja $Q$ ovat samoja<\/td><\/tr><tr><td>$P\\not\\leftrightarrow Q$<\/td><td>ERI: Joko $P$ tai $Q$, ei molempia<\/td><\/tr><\/tbody><\/table><figcaption>Predikaattilogiikan operaattoreita: jos $P$ ja $Q$ ovat p.r. predikaatteja my\u00f6s n\u00e4ill\u00e4 johdetut predikaatit ovat p.r.<\/figcaption><\/figure>\n\n\n\n<p>Kaikki taulukon operaattorit ovat primitiivirekursiivisia predikaatteja. Todistetaan t\u00e4m\u00e4 muutamille t\u00e4rkeimmille, loppujen todistukset voi tehd\u00e4 harjoitusteht\u00e4v\u00e4n\u00e4. $P=\\top$ on p.r., koska $P_f=1$, $P=\\bot$ on p.r., koska $P_f=0$, $R=\\lnot P$ on p.r. koska $R_f=1-&#8217;P_f$, $R=P\\land Q$ on p.r. koska $R_f=P_f\\cdot Q_f$, $P\\lor Q=\\lnot(\\lnot P \\land \\lnot Q)$ ja $P\\to Q=\\lnot P\\lor Q$ kuten taulukossakin mainittiin. Kaksi alinta j\u00e4\u00e4v\u00e4t lukijan itse p\u00e4\u00e4telt\u00e4viksi. My\u00f6s muita tapoja todistaa n\u00e4it\u00e4 on olemassa.<br>Funktio $\\mathrm{sgn}$, joka m\u00e4\u00e4ritell\u00e4\u00e4n niin, ett\u00e4 $\\mathrm{sgn}(0)=0$ ja $1$ muuten ja joka siis muuntaa mink\u00e4 tahansa funktion predikaatiksi, on my\u00f6s p.r.<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>\\mathrm{sgn}(0) &amp; = &amp; 0 \\\\<br>\\mathrm{sgn}(n+1) &amp; = &amp; 1<br>\\end{array}<br>\\right.<br>$$<br>Vaihtoehtoisesti $\\mathrm{sgn}(x)=1-&#8217;(1-&#8217;x)$ tai muodollisesti $\\mathrm{sgn}=(\\rho\\zeta K_1^2)$.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rajoitettu universaali kvantifikaatio<\/h3>\n\n\n\n<p>Jos $P(n,\\vec{x})$ on primitiivirekursiivinen predikaatti, niin predikaatti<br>$$Q(m,\\vec{x})=\\forall[n&lt;m] P(n,\\vec{x})$$<br>eli &#8221;kaikilla $n&lt;m$, p\u00e4tee $P(n,\\vec{x})$&#8221;, on my\u00f6s primitiivirekursiivinen.<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>Q(0,\\vec{x}) &amp; = &amp; \\top \\\\<br>Q(m+1,\\vec{x}) &amp; = &amp; Q(m,\\vec{x}) \\land P(m+1,\\vec{x}<br>)\\end{array}<br>\\right.<br>$$<br>Rajoittamaton universaali kvantifikaatio $Q(\\vec{x})=\\forall n P(n,\\vec{x})$ sen sijaan <em>ei ole<\/em> primitiivirekursiivinen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rajoitettu eksistentiaalinen kvantifikaatio<\/h3>\n\n\n\n<p>Jos $P(n,\\vec{x})$ on primitiivirekursiivinen predikaatti, niin predikaatti<br>$$Q(m,\\vec{x})=\\exists[n&lt;m] P(n,\\vec{x})$$<br>eli &#8221;on olemassa $n&lt;m$, siten ett\u00e4 p\u00e4tee $P(n,\\vec{x})$&#8221;, on my\u00f6s primitiivirekursiivinen.<br>$$<br>Q(m,\\vec{x})=\\lnot\\left(\\forall[n&lt;m] \\lnot P(n,\\vec{x})\\right)<br>$$<br>Taaskaan rajoittamaton eksistentiaalinen kvantifikaatio $Q(\\vec{x})=\\exists n P(n,\\vec{x})$ ei ole p.r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Yht\u00e4suuruus ja erisuuruus<\/h3>\n\n\n\n<p>Lukujen yht\u00e4suuruuden tai suuruusj\u00e4rjestyksen m\u00e4\u00e4ritt\u00e4minen on p.r. Esimerkiksi sen testaaminen, onko luku $0$, voidaan m\u00e4\u00e4ritell\u00e4<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>\\textrm{0?}(0) &amp; = &amp; \\top \\\\<br>\\textrm{0?}(n+1) &amp; = &amp; \\bot<br>\\end{array}<br>\\right.<br>$$<br>Lis\u00e4ksi $(x\\leq y)=(x-&#8217;y=0)$ ja $(x=y)=((x\\leq y)\\land(y\\leq x))$.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lis\u00e4\u00e4 lukujen laskutoimituksia<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Rajoitettu summa ja tulo<\/h3>\n\n\n\n<p>Jos $\\phi(n,\\vec{x})$ on primitiivirekursiivinen funktio, niin my\u00f6s $f(m,\\vec{x})=\\sum_{n=0}^{m-1} \\phi(n,\\vec{x})$ on primitiivirekursiivinen.<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>f(0,\\vec{x}) &amp; = &amp; 0 \\\\<br>f(m+1,\\vec{x}) &amp; = &amp; f(m,\\vec{x})+\\phi(m+1,\\vec{x}<br>)\\end{array}<br>\\right.<br>$$<br>Hyvin samantapaisella kaavalla voi todistaa, ett\u00e4 my\u00f6s rajoitettu tulo $f(m,\\vec{x})=\\prod_{n=0}^{m-1} \\phi(n,\\vec{x})$ on p.r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Potenssiin korottaminen<\/h3>\n\n\n\n<p>Potenssiin korottaminen $m^n=\\underbrace{m\\cdot m\\cdots m}_n$ on primitiivirekursiivinen:<br>$$m^n=\\prod_{k=0}^{n-1} m$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Rajoitettu minimalisaatio<\/h3>\n\n\n\n<p>Seuraava operaatio on hyvin t\u00e4rke\u00e4. Olemme t\u00e4h\u00e4n menness\u00e4 j\u00e4tt\u00e4neet esimerkiksi osam\u00e4\u00e4r\u00e4n, jakoj\u00e4\u00e4nn\u00f6ksen, juurenoton ja logaritmin k\u00e4sittelem\u00e4tt\u00e4, koska ne ovat luonteeltaan sellaisia, ett\u00e4 niit\u00e4 varten tarvitsee ratkaista ep\u00e4yht\u00e4l\u00f6 tai yht\u00e4l\u00f6. Toisaalta niiss\u00e4 tiedet\u00e4\u00e4n raja, jonka puitteissa voidaan tehd\u00e4 etsint\u00e4. Esimerkiksi $m\/n$ ei koskaan ole suurempi kuin $m$, jos $m\\ge 0$ ja $n\\ge 1$.<\/p>\n\n\n\n<p>Jos $\\phi(n,\\vec{x})$ on primitiivirekursiivinen funktio, niin my\u00f6s $f(m,\\vec{x})=\\mu[n&lt;m]\\phi(n,\\vec{x})=0$, eli pienin $n&lt;m$ siten, ett\u00e4 $\\phi(n,\\vec{x})=0$, on primitiivirekursiivinen.<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>f(0,\\vec{x}) &amp; = &amp; 0 \\\\<br>f(m+1,\\vec{x}) &amp; = &amp;<br>\\left\\{<br>\\begin{array}{cc}<br>m+1 &amp; \\textrm{jos}\\ \\left(\\phi(m,\\vec{x})\\neq 0\\right) \\land \\left(f(m,\\vec{x})=m\\right) \\\\<br>f(m,\\vec{x}) &amp; \\textrm{muuten}<br>\\end{array}<br>\\right.<br>\\end{array}<br>\\right.<br>$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Osam\u00e4\u00e4r\u00e4<\/h3>\n\n\n\n<p>Osam\u00e4\u00e4r\u00e4 on p.r.<br>$$x\/y=\\left(\\mu[n&lt;(x+1)]\\ \\lnot(ny&gt;x)\\right)-&#8217;1$$<br>T\u00e4ss\u00e4 $\\lnot$-merkki\u00e4 k\u00e4ytettiin, koska ylemp\u00e4n\u00e4 m\u00e4\u00e4rittelimme rajoitetun minimalisaation tarkoittavan pienimm\u00e4n nollakohdan hakua, mutta nyt halusimme sit\u00e4vastoin, ett\u00e4 tietty predikaatti olisi tosi (jolloin sen negaatio on$0$).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jakoj\u00e4\u00e4nn\u00f6s<\/h3>\n\n\n\n<p>Jakoj\u00e4\u00e4nn\u00f6s on p.r.<br>$$x\\%y=x-(x\/y)\\cdot y$$<br>On muistettava, ett\u00e4 osam\u00e4\u00e4r\u00e4 on t\u00e4ss\u00e4 kokonaisluku, joka on alasp\u00e4in py\u00f6ristetty tulos reaalisesta osam\u00e4\u00e4r\u00e4st\u00e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Juurenotto<\/h3>\n\n\n\n<p>Juurenotto on p.r.<br>$$\\sqrt[y]{x}=\\left(\\mu[n&lt;(x+1)]\\ \\lnot(n^y&gt;x)\\right)-&#8217;1$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Logaritmi<\/h3>\n\n\n\n<p>Logaritmi on p.r.<br>$$\\log_y(x)=\\left(\\mu[n&lt;(x+1)]\\ \\lnot(y^n&gt;x)\\right)-&#8217;1$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Alkuluvut<\/h3>\n\n\n\n<p>Predikaatti, joka tarkastaa, onko annettu luku alkuluku, on p.r.<br>$$\\mathrm{prime?}(x)=\\forall[n&lt;x]\\ (n&lt;2)\\lor (x\\%n \\neq 0)$$<br>On mahdollista todistaa, ett\u00e4 funktio, joka antaa jotakin lukua seuraavan alkuluvun ja funktio, joka generoi $n$:nnen alkuluvun ovat molemmat p.r. T\u00e4m\u00e4 j\u00e4tet\u00e4\u00e4n harjoitusteht\u00e4v\u00e4ksi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tietorakenteet, algoritmit ja G\u00f6del-numerointi<\/h2>\n\n\n\n<p>T\u00e4h\u00e4n menness\u00e4 olemme k\u00e4sitelleet vain funktioita, jotka palauttavat yksitt\u00e4isen luonnollisen luvun. Kuitenkin nykyaikaisessa tietotekniikassa esiintyy tarvetta palauttaa ja k\u00e4sitell\u00e4 paljon muunlaistakin tietoa, kuten merkkijonoja, lukupareja, lukulistoja ja objekteja. Lis\u00e4ksi tarvetta on muidenkin numeroituvien lukujoukkojen kuten kokonaislukujen, rationaalilukujen tai jopa kompleksilukujen, joiden reaali- ja imaginaariosat ovat molemmat rationaalikertoimisia, k\u00e4sittelyyn ja useimmat t\u00e4llaisetkin operaatiot ovat p.r. Seuraavassa k\u00e4sittelemme tekniikan, jolla yksitt\u00e4iseen luonnolliseen lukuun voidaan koodata n\u00e4enn\u00e4isesti laajempi tietorakenne. Olennaista on, ett\u00e4 tietorakenne on numeroituva. Siksi esimerkiksi koko reaalilukujen tai kompleksilukujen joukkoa tai mit\u00e4\u00e4n muuta ylinumeroituvaa joukkoa ei voi k\u00e4sitell\u00e4 pelkill\u00e4 primitiivirekursiivisilla funktioilla.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kolmioluvut ja Cantorin parifunktio<\/h3>\n\n\n\n<p>Kolmioluvut ovat lukuja, joita saadaan laskemalla per\u00e4j\u00e4lkeen luonnollisia lukuja, esimerkiksi $T(0)=0, T(1)=0+1=1, T(2)=0+1+2,\\cdots$. Koska kyseess\u00e4 on rajoitettu aritmeettinen summa, on se edell\u00e4 k\u00e4sitellyn rajoitetun summan perusteella tietenkin p.r. Kuitenkin t\u00e4ss\u00e4 yhteydess\u00e4 on hyv\u00e4 muistuttaa mieleen aritmeettisen summan kaavasta johdettu kolmiolukujen kaava:<br>$$<br>T(n)=\\frac{n(n+1)}{2}<br>$$<br>Jos nyt tarkastellaan lukupareja, jotka on ensisijaisesti j\u00e4rjestetty lukujen summan mukaan, toissijaisesti j\u00e4lkimm\u00e4isen luvun mukaan, saadaan jono $(0,0),(1,0),(0,1),(2,0),(1,1),(0,2),(3,0),\\cdots$. Havaitaan, ett\u00e4 kaikkien parien, joiden j\u00e4lkimm\u00e4inen luku on $0$, positiot (nollasta lukien) ovat kolmiolukuja! T\u00e4m\u00e4 johtaa seuraavaan kaavaan, jolla kaksi luonnollista lukua pakataan yhteen lukuun:<br>$$<br>\\mathrm{cons}(x,y)=T(x+y)+y<br>$$<br>Funktiota $\\mathrm{cons}$ sanotaan keksij\u00e4ns\u00e4\/julkaisijansa mukaan Cantorin parifunktioksi ja se on p.r. Mitk\u00e4 ovat Cantorin parifunktion k\u00e4\u00e4nteisfunktiot, jotka purkavat lukuparin koodauksen?<br>Ratkaistaan toisen asteen yht\u00e4l\u00f6:<br>$$<br>\\begin{eqnarray}<br>\\frac{n(n+1)}{2} &amp; = &amp; m \\\\<br>n^2+n-2m &amp; = &amp; 0 \\\\<br>n &amp; = &amp; \\frac{-1\\pm\\sqrt{1+8m}}{2}<br>\\end{eqnarray}<br>$$<br>Koska nyt k\u00e4sitell\u00e4\u00e4n luonnollisia lukuja, voidaan yll\u00e4oleva lauseke py\u00f6rist\u00e4\u00e4 alasp\u00e4in ja k\u00e4ytt\u00e4\u00e4 neli\u00f6juuren etumerkiss\u00e4 pelkk\u00e4\u00e4 $+$-merkki\u00e4:<br>$$<br>T^{-1}(m)=\\left\\lfloor\\frac{\\sqrt{1+8m}-&#8217;1}{2}\\right\\rfloor<br>$$<br>Nyt tied\u00e4mme, ett\u00e4 $T^{-1}$ on p.r. ja ett\u00e4 koodatusta lukuparista $p$ saadaan eroteltua ainakin lukuparin summa laskemalla $S=T^{-1}(p)$. Voidaan p\u00e4\u00e4tell\u00e4<br>$$<br>\\begin{eqnarray}<br>x+y &amp; = &amp; S \\\\<br>y &amp; = &amp; p-S \\\\<br>x &amp; = &amp; 2S-p<br>\\end{eqnarray}<br>$$<br>T\u00e4m\u00e4n perusteella voidaan m\u00e4\u00e4ritt\u00e4\u00e4 p.r. funktiot $\\mathrm{car}$ ja $\\mathrm{cdr}$, jotka purkavat lukuparin ensimm\u00e4isen tai toisen j\u00e4senen seuraavasti:<br>$$<br>\\begin{eqnarray}<br>\\mathrm{car}(\\mathrm{cons}(x,y)) &amp; = &amp; x=2S-&#8217;p \\\\<br>\\mathrm{cdr}(\\mathrm{cons}(x,y)) &amp; = &amp; y=p-&#8217;S<br>\\end{eqnarray}<br>$$<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Linkitetyt listat<\/h3>\n\n\n\n<p>Parifunktio mahdollistaa mielivaltaisen pituisten lukujonojen eli lukulistojen laatimisen. Sovitaan, ett\u00e4 $L=0$ vastaa tyhj\u00e4\u00e4 listaa ja sit\u00e4 suuremmilla luvuilla $L-&#8217;1$ olkoon pari, jossa vasemmalla puolella on listan nollas alkio ja oikealla puolella listan loppuosa. Lista p\u00e4\u00e4ttyy, jos listan loppuosa on tyhj\u00e4 lista eli $0$.<\/p>\n\n\n\n<p>Listan $L$ $n$:nnen alkion lukeminen $L[n]$ on p.r.<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>L[0] &amp; = &amp; \\mathrm{car}(L) \\\\<br>L[n+1] &amp; = &amp; \\mathrm{cdr}(L)[n]<br>\\end{array}<br>\\right.<br>$$<br>samoin kuin listan pituuden $\\mathrm{len}(L)$ m\u00e4\u00e4ritt\u00e4minen:<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>\\mathrm{len}(0) &amp; = &amp; 0 \\\\<br>\\mathrm{len}(L) &amp; = &amp; 1+\\mathrm{len}(\\mathrm{cdr}(L))\\quad \\textrm{muuten}<br>\\end{array}<br>\\right.<br>$$<br>tai listan $n$:nnen alkion poisto $\\mathrm{rm}(L,n)$:<br>$$<br>\\left\\{<br>\\begin{array}{ccc}<br>\\mathrm{rm}(L,0) &amp; = &amp; \\mathrm{cdr}(L) \\\\<br>\\mathrm{rm}(L,n+1) &amp; = &amp; \\mathrm{cons}(\\mathrm{car}(L),\\mathrm{rm}(L,n))<br>\\end{array}<br>\\right.<br>$$<br>N\u00e4iden lis\u00e4ksi l\u00e4hes kaikki muutkin ajateltavissa olevat tavanomaiset listaoperaatiot, kuten tietyn listan arvon etsint\u00e4, alkioiden lis\u00e4\u00e4minen listojen v\u00e4liin, listojen yhteenliitt\u00e4minen yms. ovat p.r. Todistukset ovat samantapaisia kuin kolme aiempaa esimerkki\u00e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Binaaripuut<\/h3>\n\n\n\n<p>Binaaripuu voidaan koodata siten, ett\u00e4 sovitaan parillisten lukujen tarkoittavan yhden luvun binaaripuuta $b\/2$ ja parittomien lukujen tarkoittavan binaaripuuta, jonka vasemmalla puolella on $\\mathrm{car}((b-&#8217;1)\/2)$ ja oikealla puolella $\\mathrm{cdr}((b-&#8217;1)\/2)$. Binaaripuun syvyys on p.r. funktio tai alkion esiintyminen binaaripuussa tai erikseen sen vasemmalla tai oikealla puolella p.r. relaatio. Alkioiden sijainti tai syvyys puussa on my\u00f6s p.r.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Merkkijonot ja unionit<\/h3>\n\n\n\n<p>Halutaan mahdollistaa merkkijonot, mutta sen lis\u00e4ksi my\u00f6s niiden seassa mielivaltaiset luvut. T\u00e4ll\u00f6in voidaan laatia lista, kuten ylemp\u00e4n\u00e4, mutta sopia, ett\u00e4 listassa oleva luku $x$ tarkoittaa lukua $x\/2$, jos $x$ on parillinen tai Unicode-merkki\u00e4 $(x-&#8217;1)\/2$ muuten.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objektit<\/h3>\n\n\n\n<p>Halutaan mahdollistaa taulukot, joissa on avain-arvopareja niin, ett\u00e4 kutakin merkkijonoarvoa vastaa luku tai muu objekti, esimerkiksi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"auto\": 6,\n  \"polkupy\u00f6r\u00e4: 12,\n  \"moottoripy\u00f6r\u00e4\": (18,17)\n}<\/code><\/pre>\n\n\n\n<p>T\u00e4ll\u00f6in voidaan keksi\u00e4 ensin yksitt\u00e4isten rivien vasempia puolia vastaava koodaustapa ja sen j\u00e4lkeen luoda lista pareista $\\mathrm{cons}(\\mathrm{VP},\\mathrm{OP})$.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Johtop\u00e4\u00e4t\u00f6s<\/h2>\n\n\n\n<p>Olemme havainneet, ett\u00e4 l\u00e4hes kaikki ajateltavissa olevat lukujen ja muiden rakenteiden operaatiot, joita esiintyy, ovat primitiivirekursiivisia. Artikkelisarjan j\u00e4lkimm\u00e4isess\u00e4 osassa k\u00e4yd\u00e4\u00e4n l\u00e4pi funktioita, jotka ovat kyll\u00e4 laskettavia, mutta eiv\u00e4t ole primitiivirekursiivisia. Lis\u00e4ksi osoitamme, ett\u00e4 tietyt funktiot ja relaatiot eiv\u00e4t ole laskettavia. T\u00e4t\u00e4 yll\u00e4tt\u00e4v\u00e4\u00e4 tulosta ja sen eri variaatioita kutsutaan G\u00f6delin lukuteorian ep\u00e4t\u00e4ydellisyyslauseeksi.<\/p>\n\n\n\n<p>Artikkelisarjan seuraava osa on <a href=\"http:\/\/tslespoo.fi\/wordpress\/2021\/02\/06\/lukuteoreettiset-funktiot\/\" data-type=\"post\" data-id=\"216\">t\u00e4\u00e4ll\u00e4<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Yleist\u00e4 1900-luvun alkupuoli oli matemaattisen logiikan kulta-aikaa, jolloin suuret matemaatikot, kuten Alan Turing (1912-1954), Kurt G\u00f6del (1906-1978), Alonzo Church (1903-1995), Emil Post (1897-1954) ja useat muut kehittiv\u00e4t useita matemaattisia malleja, jotka mallinsivat nykyaikaisia tietokoneita ennen kuin niit\u00e4 oli varsinaisesti rakennettu. Samalla pystyttiin jo ennen tietokoneiden keksimist\u00e4 p\u00e4\u00e4ttelem\u00e4\u00e4n, mit\u00e4 on tietokoneella&#8230;<\/p>\n","protected":false},"author":2,"featured_media":233,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,4],"tags":[],"class_list":["post-174","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-korkeakoulu","category-matematiikka"],"_links":{"self":[{"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/posts\/174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/comments?post=174"}],"version-history":[{"count":32,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/posts\/174\/revisions"}],"predecessor-version":[{"id":237,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/posts\/174\/revisions\/237"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/media\/233"}],"wp:attachment":[{"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/media?parent=174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/categories?post=174"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/tslespoo.fi\/wordpress\/wp-json\/wp\/v2\/tags?post=174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}