Rekursio Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on käyttää rekursiota: 1 (Alkuarvot) Ilmoitetaan funktion arvot f (0),..., f (k 1). 2 (Rekursiokaava) Kun n k, esitetään, miten f (n) riippuu luvuista f (n k), f (n k + 1),..., f (n 1). Usein funktion sijasta ajatellaan lukujonoa, jolloin käytetään merkintää f n tai y n funktiomerkinnän f (n) sijasta.
Esimerkki Fibonaccin luvut. Alkuarvot: Asetetaan f 0 = 0 ja f 1 = 1. Rekursiokaava: Kun n 2, asetetaan f n = f n 2 + f n 1. Lasketaan rekursiokaavan avulla Fibonaccin luvut f 2,..., f 8 : f 2 = f 0 + f 1 = 0 + 1 = 1, f 3 = f 1 + f 2 = 1 + 1 = 2, f 4 = 1 + 2 = 3, f 5 = 2 + 3 = 5, f 6 = 3 + 5 = 8, f 7 = 5 + 8 = 13, f 8 = 8 + 13 = 21.
Rekursio ja induktio Jos lukujono (f n ) n N on määritelty rekursiolla, niin sen ominaisuuksia voidaan aina todistaa induktiolla. Jos tehtävänä on todistaa, että P(f n ) pätee jokaisella n N, niin menetellään seuraavasti: 1 (Perusaskel) Todistetaan P(f 0 ),..., P(f k 1 ). 2 (Induktioaskel) Tehdään IO: P(f n k ),..., P(f n 1 ) tosia IO:n avulla todistetaan IV: P(f n ) on tosi. 3 (Johtopäätös) Induktioperiaatteen nojalla n N : P(f n ) on tosi. (Huom: tässä käytetään toista induktioperiaatetta.)
Esimerkki Tarkastellaan lukujonoa, joka määritellään rekursiolla seuraavasti: f 0 = 1 f n = 2f n 1 + 1, kun n > 0. Todistetaan induktiolla, että f n = 2 n+1 1 jokaisella n N. (Toisin sanoen, osoitetaan, että f n = 2 n+1 1, n N, on rekursioyhtälön/differenssiyhtälön f n = 2f n 1 + 1 ratkaisu alkuarvolla f 0 = 1.)
Esimerkki jatkuu Perusaskel: Kun n = 0, on f 0 = 1 = 2 1 = 2 0+1 1, joten väite on tosi. Induktioaskel: Olkoon n > 0. IO: f n 1 = 2 (n 1)+1 1 = 2 n 1. IV: f n = 2 n+1 1. IV:n todistus: f n = 2f n 1 + 1 IO = 2(2 n 1) + 1 = 2 2 n + 2 1 = 2 n+1 + 1.
Esimerkki Määritellään lukujono (e n ) n N rekursiolla seuraavasti: e 0 = 1, e 1 = 2 e n = e n 2 e n 1, kun n 2. Todistetaan induktiolla, että e n = 2 fn on Fibonaccin luku. jokaisella n N, missä f n (Perusaskel) e 0 = 1 = 2 0 = 2 f 0 ja e 1 = 2 = 2 1 = 2 f 1. (Induktioaskel) Oletetaan, että n 2, ja väite pätee luvuilla n 2 ja n 1. Tällöin e n = e n 2 e n 1 = 2 f n 2 2 f n 1 = 2 (f n 2+f n 1 ) = 2 fn.
Rekursio ja kolme pistettä Kun matemaattisessa määritelmässä käytetään symbolia, kysymys on lähes poikkeuksetta rekursiivisesta määritelmästä, jota ei vain kirjoiteta auki. Esimerkiksi kertoman määritelmä kirjoitetaan tavallisesti muotoon n! = 1 2 n. Tyhjä tulo tulkitaan ykköseksi eli 0! = 1. Tämä on vain lyhennysmerkintä kertoman rekursiiviselle määritelmälle: 0! = 1, n! = n(n 1)!.
Rekursio ja kolme pistettä Vastaavasti potenssin a n tavallinen määritelmä on a n = aa }{{ a}, n kertaa missä tyhjä tulo (tapaus n = 0) on yksi, kunhan a 0. (0 0 on joko 1 tai määrittelemätön riippuen yhteydestä.) Rekursiivinen määritelmä potenssille a n on a 0 = 1, a n = aa n 1. (Alkuarvo kirjoitetaan a 1 = a, jos a = 0 ja 0 0 ei ole määritelty.)
Rekursio ja kolme pistettä Myös summa- ja tulomerkinnät ovat piilotettuja rekursiivisia määritelmiä: Kun a 1, a 2, a 3,... ovat (reaali)lukuja, kirjoitetaan tavallisesti n a i = a 1 + + a n i=1 Näiden rekursiiviset määritelmät ovat 0 a i = 0 i=1 n+1 ja n a i = a 1 a n. i=1 0 a i = 1 i=1 a i = ( n n+1 ) a i + an+1 a i = ( n ) a i an+1 i=1 i=1 i=1 i=1
Esimerkki Olkoon (f n ) n N Fibonaccin lukujono. Todistetaan induktiolla, että n i=0 f i = f n+2 1 jokaisella n N. (Perusaskel) 0 i=0 f i = f 0 = 0 = f 2 1 (Induktioaskel) Oletetaan, että n 1, ja n 1 i=0 f i = f n+1 1. Tällöin n f i = (n 1 ) f i + fn = (f n+1 1) + f n = f n+2 1. i=0 i=0
Rekursiosta yleisemmin Paitsi funktioita tai lukujonoja, rekursiolla voidaan määritellä matemaattisia käsitteitä yleisemminkin. Otetaan lähtökohdaksi luonnollisten lukujen joukon perusominaisuus: N on pienin sellainen joukko A, jolla pätee ehdot (i) 0 A (ii) jos n A, niin n + 1 A Tämä voidaan muotoilla joukon N määritelmäksi joukko-opissa. (Operaatio +1 pitää ensin korvata joukko-opillisella vastineella.)
Esimerkki: bittijonot Bittijono on merkkijono b = b 1 b n, missä n N ja b i {0, 1}, kun 1 i n. Tapauksessa n = 0, b on tyhjä jono, jolloin sitä merkitään symbolilla ε. Kaikkien bittijonojen joukko B voidaan määritellä samaan tapaan kuin luonnollisten lukujen joukko: B on pienin sellainen joukko A, jolla pätee ehdot (i) ε A (ii) jos b A, niin b0 A ja b1 A. (Tässä b0 tarkoittaa merkkijonoa, joka saadaan lisäämällä jonon b perään merkki 0.)
Esimerkki: aakkoston sanojen joukko Yleistetään edellinen esimerkki. Olkoon Σ on äärellinen aakkosto, eli joukko symboleja (merkkejä). Aakkoston Σ sanojen joukko Σ on tällöin pienin joukko A, jolla pätee ehdot (i) ε A (ii) jos w A ja a Σ, niin wa A. Erityisesti siis bittijonojen joukko B on siis sama kuin {0, 1}.
Rekursiosta induktioon Edelläolevan kaltaisiin rekursiivisiin määritelmiin liittyy aina automaattisesti vastaava induktioperiaate. Esimerkiksi jos tarkoituksena on todistaa, että jokaisella sanalla w Σ on ominaisuus P, niin voidaan menetellä seuraavasti: 1 (Perusaskel). Osoitetaan, että P(ε) on tosi. 2 (Induktioaskel). Tehdään induktio-oletus, että P(w) on tosi. Todistetaan induktioväite, että P(wa) on tällöin tosi jokaisella a Σ. Tällöin tulee osoitetuksi, että joukko A = {w Σ P(w)} toteuttaa joukon Σ määritelmän ehdot (i) ja (ii), joten on oltava A = Σ.
Esimerkki Määritellään rekursiolla funktio f : {0, 1} Z + Z + : f (ε) = (1, 1) { f (b0) = (r, r + s) f (b1) = (r + s, s) kun f (b) = (r, s). Käytetään merkintöjä f 1 (b) ja f 2 (b) lukuparin f (b) koordinaateille. Siis f 1 (b) = r ja f 2 (b) = s, kun f (b) = (r, s). Todistetaan induktiolla, että syt(f 1 (b), f 2 (b)) = 1 kaikilla b {0, 1}.
Esimerkki jatkuu (Perusaskel) Kun b = ε, on f 1 (b) = f 2 (b) = 1, joten syt(f 1 (b), f 2 (b)) = 1. (Induktioaskel) Oletetaan, että syt(f 1 (b), f 2 (b)) = 1. Olkoon f 1 (b) = r ja f 2 (b) = s. Tällöin f 1 (b0) = r ja f 2 (b0) = r + s. Oletetaan, että m Z + on lukujen r ja r + s yhteinen tekijä. Tällöin m on myös lukujen r ja s yhteinen tekijä, joten m = 1. Siispä syt(f 1 (b0), f 2 (b0)) = 1. Samalla tavalla osoitetaan, että syt(f 1 (b1), f 2 (b1)) = 1.
Rekursio lauselogiikassa Lauselogiikan kaavojen joukko K voidaan määritellä rekursiolla seuraavasti: K on pienin sellainen joukko A, jolla pätee ehdot (i) p i A jokaisella i N. (ii) Jos ϕ, ψ A, niin (a) ϕ A (b) (ϕ ψ) A (c) (ϕ ψ) A (d) (ϕ ψ) A (e) (ϕ ψ) A Huomaa, että K Σ, missä Σ on aakkosto {p i i N} {,,,,, (, )}.
Induktio kaavan rakenteen suhteen Kun pitää todistaa, että jokaisella kaavalla ϕ K on ominaisuus P, menetellään seuraavasti. 1 (PA) Osoitetaan, että P(p i ) on tosi jokaisella i N. 2 (IA) Tehdään induktio-oletus: P(ϕ) ja P(ψ) ovat tosia. Todistetaan induktioväitteet: (a) P( ϕ) on tosi. (b) P((ϕ ψ)) on tosi. (c) P((ϕ ψ)) on tosi. (d) P((ϕ ψ)) on tosi. (e) P((ϕ ψ)) on tosi.
Esimerkki Todistetaan induktiolla, että jokaisessa kaavassa on yhtä monta vasenta sulkua kuin oikeata sulkua. Tätä varten kannattaa ensin määritellä vasempien sulkujen ja oikeiden sulkujen lukumäärät rekursiolla: v(p i ) = 0 o(p i ) = 0 v( ϕ) = v(ϕ) o( ϕ) = o(ϕ) v(ϕ ψ) = v(ϕ)+v(ψ)+1 o(ϕ ψ) = o(ϕ)+o(ψ)+1 v(ϕ ψ) = v(ϕ)+v(ψ)+1 o(ϕ ψ) = o(ϕ)+o(ψ)+1 v(ϕ ψ) = v(ϕ)+v(ψ)+1 o(ϕ ψ) = o(ϕ)+o(ψ)+1 v(ϕ ψ) = v(ϕ)+v(ψ)+1 o(ϕ ψ) = o(ϕ)+o(ψ)+1
Esimerkki jatkuu Nyt on helppo todistaa induktiolla, että v(ϕ) = o(ϕ) jokaisella ϕ K: (PA) v(p i ) = 0 = o(p i ) jokaisella i N. (IA) Oletetaan, että v(ϕ) = o(ϕ) ja v(ψ) = o(ψ). Tällöin (a) v( ϕ) = v(ϕ) = o(ϕ) = o( ϕ) (b) v(ϕ ψ) = v(ϕ)+v(ψ)+1 = o(ϕ)+o(ψ)+1 = o(ϕ ψ) (c) v(ϕ ψ) = v(ϕ)+v(ψ)+1 = o(ϕ)+o(ψ)+1 = o(ϕ ψ) (d) v(ϕ ψ) = v(ϕ)+v(ψ)+1 = o(ϕ)+o(ψ)+1 = o(ϕ ψ) (e) v(ϕ ψ) = v(ϕ)+v(ψ)+1 = o(ϕ)+o(ψ)+1 = o(ϕ ψ)
Totuusjakaumat ja totuusarvot Totuusjakauma on funktio v, joka liittää jokaiseen propositiosymboliin p i totuusarvon v(p i ), joka on 0 (epätosi) tai 1 (tosi). Siis v : {p i i N} {0, 1}. Kaavan ϕ K totuusarvo V (ϕ) {0, 1} totuusjakaumalla v määritellään rekursiolla seuraavasti: (i) V (p i ) = v(p i ) jokaisella i N. (ii) Oletetaan, että V (ϕ) ja V (ψ) on määritelty. (a) V ( ϕ) = 1 jos ja vain jos V (ϕ) = 0. (b) V (ϕ ψ) = 1 jos ja vain jos V (ϕ) = V (ψ) = 1. (c) V (ϕ ψ) = 1 jos ja vain jos V (ϕ) = 1 tai V (ψ) = 1. (d) V (ϕ ψ) = 1 jos ja vain jos V (ϕ) = 0 tai V (ψ) = 1. (e) V (ϕ ψ) = 1 jos ja vain jos V (ϕ) = V (ψ).