210 likes | 378 Views
Veel rekursiivsetest funktsioonidest. Ackermanni üldistatud aste: f(0, x, y) = x + y f(1, x, y) = y * x f(2, x, y) = y x … f(z + 1, x, y) = tulemus, mis saadakse, rakendades arvule y x – 1 korda z. taseme tehet. f(0, 0, y) = y f(0, x + 1, y) = f(0, x, y) +1 f(1, 0, y) = 0
E N D
Veel rekursiivsetest funktsioonidest • Ackermanni üldistatud aste: f(0, x, y) = x + y f(1, x, y) = y * x f(2, x, y) = yx … f(z + 1, x, y) = tulemus, mis saadakse, rakendades arvule y x – 1 korda z. taseme tehet
f(0, 0, y) = y f(0, x + 1, y) = f(0, x, y) +1 f(1, 0, y) = 0 f(z + 2, 0, y) = 0 f(z + 1, x + 1, y) = f(z, f(z + 1, x, y), y)
Algoritmid ja algoritmilised funktsioonid f(x) = 1, kui arvu pii kümnendkohtade jadas leidub täpselt x järjestikust 5-e 0, muidu g(x) = 1, kui arvu pii kümnendkohtade jadas leidub vähemalt x järjestikust 5-e 0, muidu • Funktsiooni f arvutamiseks ei teata ühtki algoritmi • Funktsioon g on lihtrekursiivne
Goldbachi hüpotees: Iga 2-st suurem paarisarv on kahe esitatav kahe algarvu summana h(x) = 1, kui hüpotees on tõene 0, kui hüpotees on väär • h on konstantne funktsioon, seega lihtrekursiivne. • Kuid me ei tea, kuidas seda tegelikult arvutada,
5. Diagonalisatsioon. • Funktsioonide kirjeldamiseks kasutatavaid sümboleid on lõplik arv: funktsioonisümbolid, muutujad, numbrid, sulud, koma, +, =, spetsiaalsümbolid algfunktsioonide jaoks, realõpu sümbol .
Leidub efektiivne kontroll, kas antud sümbolite jada on korrektne esitus mingile rekursiivsele funktsioonile. Jadad pikkusega 1 Jadad pikkusega 2 … Võime koostada sellise algoritmi, mis paneb nimekirja kõik ühe muutuja rekursiivsete funktsioonide jadad.
Olgu Qxjärjekorras (x+1). jada selles nimekirjas ja gx olgu funktsioon, mida see jada kirjeldab. • Defineerime h(x) = gx(x)+1. Funktsiooni h arvutamine: Antud x korral tuleb genereerida funktsioonide kirjelduste nimekirja kuni x-nda funktsioonini, siis rakendada gx(x) ja lisada 1. • Teiselt poolt, h ei saa olla rekursiivne. Kui oleks, siis leiduks selline y, et h = gy, s.t. h oleks ise ka nimekirjas sees. Aga gy(y) = h(y) = gy(y)+1, mis on vastuolu.
Seega kõik algoritmiga kirjeldatavad funktsioonid ei saa olla lihtrekursiivsed. • Olgu x osaline funktsioon, mida kirjeldab (x+1). liige nimekirjas Qx ja olgu y valitud nii, et y on selline osaline funktsioon: • Et arvutada (x), leiame Qx, arvutame x(x) • Kui x(x) annab vastuseks mingi väärtuse, siis on (x) = x(x)+1. • Võrdus y(y) = (y) = y(y)+1 ei sisalda endas vastuolu, sest (y) ei pea väärtust omama.
Nt. saame osalise funktsiooni g(x) jaoks kirjeldada sellise algoritmi: arvutada pii kümnendkohti, kuni ilmub järjest vähemalt x 5-e; kui see juhtub, siis väljasta vastusena esimese asukoht • h(x) jaoks: vaadelda järjest 2-st suuremaid paarisarve, kuni leidub mõni, mis ei ole kahe algarvu summa; kui see juhtub, siis anda vastuseks g(x) = 0.
Def. Px on reeglite hulk, mis on kõigi selliste reeglite hulkade nimekirjas tähistatud täisarvuga x. Arvu x nimetatakse Pxindeksiks e. Gödeli arvuks. Teoreem 1. Leidub täpselt N (loenduvalt lõpmatu arv) osalist rekursiivset funktsiooni ja täpselt N rekursiivset funktsiooni. Teoreem 2. Leidub funktsioone, mis pole rekursiivsed. Teoreem 3. Iga osaline rekursiivne funktsioon omab N erinevat indeksit.
6. Numeratsiooniteoreem ja s-m-n-teoreem. • Olgu Px nimekiri kõigist 1-muutuja (osalistest) rekursiivsetest funktsioonidest.
Vaatleme järgmist algoritmi, mis arvutab funktsiooni : • Sisendi (x,y) korral leida Px, rakendada funktsiooni x sisendile y, saades tulemuseks x(y), kui see on määratud. See väärtus võtta (x,y) väärtuseks. Seega, (x,y) = x(y), kui x(y) on määratud, määramata muidu.
Teoreem1 (Numeratsiooniteoreem). Leidub selline indeks z, et kõikvõimalike x jay korral z(x,y) = x(y), kui x(y) on määratud, määramata muidu. • Funktsiooni z nimetatakse universaalseks osaliseks funktsiooniks.
Teoreem 2 (s-m-n-teoreem). Iga positiivsete täisarvude paari (m,n) korral leidub selline totaalne arvutatav funktsioon sm: NNmN, et s (y1, …, yn) = i(x1, …, xm, y1, …,yn), kus s = s(i, x1, …, xm). Teisisõnu, iN, (x1, …, xm)Nm korral domain (s(n)) = {(y1, …, yn)N (x1, …, xm, y1, …, yn)domain (i(m+n))} ja s (y1, …, yn) = i(x1, …, xm, y1, …,yn) alati, kuivähemalt üks pool võrdusest on määratud
Näide rakendamise kohta. Tõestada, et leidub selline totaalne arvutatav funktsioon F: N2N, et F(i,j) = i◦ji,jN. s.t. kahe arvutatava osalise funktsiooni kompositsioon on arvutatav ja kuidas leida kompositsioonile vastava Turingi masina indeksit. Defineerime osalise funktsiooni : N3N, (n, i, j) = (i ◦j)(n) mis on määratud, kui parem pool onmääratud.
on arvutatav : • esmalt rakendame Turingi masina Mj sisendile n; • kui arvutus lõpeb, rakendame masina Mi sisendile j(n); • valime sellise arvu pN, et = p(3). • S-m-n-toereemi tõttu leidub totaalne arvutatav funktsioon s: N3N, nii et s(k,i,j)(x) = k(3)(x, i, j).
Defineerime totaalse arvutatava funktsiooni g: N2N, g(i, j) = s(p, i, j) i,j jaoks. g(i,j)(x) = s(p,i,j)(x) = p(3)(x, i, j) = (x, i, j) = (i ◦j)(x). □
Def. Programmeerimissüsteemiks nimetatakse nimekirja 0,1,…, mis koosneb täpselt kõigist osalistest arvutatavatest funktsioonidest. Sellist nimekirja nimetatakse aktsepteeritavaks programmeerimissüsteemiks (lühendatult APS), kui sel on järgmised omadused: • S-m-n-omadus : iga arvutatava osalise funktsiooni : N2N korral leidub selline totaalne arvutatav funktsioon f: NN, et f(i)(x) = (i, x) i jaoks. • Universaalsuse omadus: osaline funktsioon (i, j) i(j) on arvutatav.
7. Minimiseerimisoperaator. Teoreem 1. Olgu f rekursiivne k+1-muutuja funktsioon. Siis on min k [f(k, k1, …, kn) = 1] osaline rekursiivne k-muutuja funktsioon. • Kui f asemel oleks osaline rekursiivne funktsioon, siis see teoreem enam ei kehtiks.
On olemas moodus, mille abil on võimalik iga osalist rekursiivset funktsiooni saada (totaalsetest) rekursiivsetest funktsioonidest üheainsa minimiseerimise teel: Teoreem 2. (Kleene’i normaalkuju teoreem) Leiduvad fikseeritud rekursiivsed funktsioonid p ja t, mis on vastavalt 1 ja 3 muutuja funktsioonid, nii et kõigi z jaoks z(x) = p(min y [t(z, x, y) = 1]).
Järeldus. Leiduvad rekursiivsed funktsioonid p ja tk, nii et kõigi z jaoks z(k)(x1, …, xk) = p(min y [tk(z, x1, …, xk, y) = 1]). Teoreem 3. Ei leidu sellist rekursiivset 2-muutuja funktsiooni f, et kõigi x ja z jaoks kehtiks: Pz rakendatuna x-le annab väljundi Pz rakendatuna x-le annab väljundi vähema arvu kui f(z,x) sammuga. Teoreem 4. Leidub selline osaline rekursiivne funktsioon , et ühegi rekursiivse funktsiooni f jaoks ei kehti (x) = min y [f(x,y) = 1].