Schemat rekursji
1 Schemat rekursji dla funkcji jednej zmiennej
Dla dowolnej liczby naturalnej a i dowolnej funkcji h: N2 → N istnieje dokładnie jedna funkcja f : N → N spełniająca następujące warunki:
( f (0) = a
f (n + 1) = h(n, f (n)) dla każdego n ∈ N.
Mówimy, że funkcja f jest określona za pomocą schematu rekursji przez liczbę a i funkcję h.
Oczywiście argument funkcji f możemy oznaczać inną literą, np. x.
Zadanie 1 Jaką funkcję określa schemat rekursji, jeśli (a) h(n, m) = 0 dla n, m ∈ N,
(b) h(n, m) = m dla n, m ∈ N, (c) h(n, m) = n dla n, m ∈ N, (d) h(n, m) = succ(m) dla n, m ∈ N.
(e) h(n, m) = n + m dla n, m ∈ N.
Uwaga. Odnotujmy, że dla danych a i h funkcja f , spełniająca warunki schematu rekursji, jest określona jednoznacznie. Oznacza to, że jeśli pewna, odgadnięta przez nas, funkcja f spełnia te warunki, to jest funkcją określoną przez ten schemat rekursji.
Zadanie 2 Dane są liczby naturalne a, b, c, d. Podaj przykład funkcji h („prostszej” od f ), dla której za pomocą schematu rekursji otrzymamy funkcję
(a) f (n) =
( a dla n = 0 b dla n > 0,
(b) f (n) =
a dla n = 0 b dla n = 1 c dla n > 1,
(c) f (n) =
a dla n = 0 b dla n = 1 c dla n = 2 d dla n > 2.
Zadanie 3 Określ funkcję f : N → N za pomocą schematu rekursji:
(a) f (n) = 2n, (b) f (n) = 2n, (c) f (n) = n2,
(d) f (n) = n2+ 3n + 5.
Zadanie 4 Podaj przykład (możliwie najprostszej) funkcji h, dla której za pomocą schematu rekursji otrzymamy taką funkcję f , że f (n) jest równe reszcie z dzielenia n:
(a) przez 2, (b) przez 3,
(c) przez k, gdzie k jest daną liczbą naturalną.
2 Funkcje „plus” i „mult”
Funkcja plus: N2 → N jest określona za pomocą następującego schematu rekursji:
( plus(n, 0) = n dla dowolnego n ∈ N
plus(n, succ(m)) = succ(plus(n, m)) dla dowolnych n, m ∈ N.
Zadanie 5 Wykaż, że succ(n) = plus(n, succ(0)) dla każdego n ∈ N.
Uwaga. Istotą schematu rekursji jest określanie (definiowanie) nowych funkcji. Na przykład funkcję „plus” definiujemy mając tylko „succ”, a funkcję „mult” za pomocą „plus”.
Jeśli chcemy teraz udowodnić jakąś własność funkcji „plus”, to powinniśmy korzystać jedynie z powyższej definicji przez schemat rekursji oraz podstawowych własności liczb naturalnych (aksjomatów). Jedna z nich to zasada indukcji, dwie pozostałe dotyczą funkcji „succ” – jest ona różnowartościowa i 0 nie jest następnikiem żadnej liczby naturalnej.
W żadnym wypadku nie możemy się odwoływać do znanych własności dodawania. Dodawanie jest tu dopiero zdefiniowane i wszystko trzeba po kolei udowodnić.
Zadanie 6 Uzasadnij, że:
(a) plus(0, n) = n dla każdego n ∈ N;
(b) plus(n, m) = 0 wtedy i tylko wtedy, gdy (n, m) = (0, 0);
(c) plus(m, n) = plus(n, m) dla dowolnych m, n ∈ N.
Zadanie 7 Udowodnij, że plus(plus(k, l), m) = plus(k, plus(l, m)) dla dowolnych k, l, m ∈ N.
Funkcja mult: N2 → N jest określona za pomocą następującego schematu rekursji:
( mult(n, 0) = 0 dla dowolnego n ∈ N
mult(n, succ(m)) = plus(n, mult(n, m)) dla dowolnych n, m ∈ N.
Zadanie 8 Udowodnij, że mult(plus(k + l), m) = mult(plus(k, m), plus(l, m)) dla dowolnych k, l, m ∈ N.
Zadanie 9 Wprowadźmy oznaczenie 1 = succ(0). Wykaż, że mult(1, m) = m dla dowolnego m ∈ N.
Funkcja exp: N2 → N jest określona za pomocą następującego schematu rekursji:
( exp(n, 0) = 1 dla dowolnego n ∈ N
exp(n, succ(m)) = mult(n, exp(n, m)) dla dowolnych n, m ∈ N.
Zadanie 10 Udowodnij, że dla dowolnych k, l, m ∈ N zachodzą równości:
(a) exp(mult(x, y), z) = mult(exp(x, z), exp(y, z)), (b) exp(x, mult(y, z)) = exp(exp(x, y), z).
3 Schemat rekursji dla funkcji wielu zmiennych
Dla dowolnej funkcji g: N → N i dowolnej funkcji h: N3 → N istnieje dokładnie jedna funkcja f : N2 → N spełniająca następujące warunki:
( f (n, 0) = g(n) dla każdego n ∈ N,
f (n, m + 1) = h(n, m, f (n, m)) dla dowolnych n, m ∈ N.
Zadanie 11 Jaką funkcję f określa schemat rekursji z danymi funkcjami g: N → N i h: N3→ N?
(a) g(n) = n, h(n, m, k) = k,
(b) g(n) = 0, h(n, m, k) = n + m + k, (c) g(n) = 2n, h(n, m, k) = k + 3.
Zadanie 12 Wypisz funkcje g(n) i h(n, m, k) występujące w schemacie rekursji określającym funkcje: „plus”, „mult”, „exp”.
Zadanie 13 Funkcje f1: N → N i f2: N → N są określone za pomocą schematu rekursji odpo- wiednio przez liczby a1 i a2 oraz funkcje h1: N2 → N i h2: N2 → N. Znajdź schemat rekursji dla funkcji f : N2→ N takiej, że:
(a) f (n, m) = f1(n) + f2(m) dla dowolnych n, m ∈ N, (b) f (n, m) = f1(n) · f2(m) dla dowolnych n, m ∈ N.
Następujący schemat rekursji:
( f (k, l, 0) = g(k, l) dla każdego n ∈ N, f (k, l, m + 1) = h(k, l, m, f (k, l, m)) dla dowolnych n, m ∈ N, określa funkcję f : N3 → N, gdy dane są funkcje g: N2 → N i h: N4 → N.
Zadanie 14 Określ za pomocą schematu rekursji funkcję f : N3 → N.
(a) f (k, l, m) = kl + lm + mk, (b) f (k, l, m) = klm + k + l + m, (c) f (k, l, m) = (k + l + m)2.
4 Funkcje pierwotnie rekurencyjne
Funkcjami pierwotnie (prymitywnie) rekurencyjnymi nazywamy funkcje:
Z: N → N, Z(x) = 0, S: N → N, S(x) = x + 1, Uin: Nn→ N, Uin(x1, . . . , xn) = xi, n > 1, 1 6 i 6 n,
oraz wszystkie funkcje, które można otrzymać z nich za pomocą składania funkcji i operatora rekursji:
( f (0, x1, . . . , xn) = g(x1, . . . , xn)
f (x0+ 1, x1, . . . , xn) = h(x0, x1, . . . , xn, f (x0, x1, . . . , xn)).
Zadanie 15 Wyznacz następujące złożenia funkcji:
(a) S(Z(x)), (b) S(S(S(x))), (c) S(U23(x, y, z)),
(d) U12(U22(x, y), U12(x, y)).
Zadanie 16 Podaną funkcję f przedstaw w postaci złożenia funkcji Z, S i Uin, n> 1, 1 6 i 6 n.
(a) f (x) = x + 2, (b) f (x, y, z) = 0, (c) f (x, y) = 3.
Zadanie 17 Wykaż, że następujące funkcje są pierwotnie rekurencyjne:
(a) f : N → N, f (n) = 2,
(b) f : N → N, f (n) = k, gdzie k jest daną liczbą naturalną, (c) f : N2→ N, f(m, n) = m + 1.
Zadanie 18 Uzasadnij pierwotną rekurencyjność funkcji f z zadań 2, 3 i 4.
Zadanie 19 Udowodnij, że następujące funkcje są pierwotnie rekurencyjne:
(a) f : N → N, f (n) = (−1)n+ 1, (b) f : N → N, f (n) = sinπ2n + 1.
Zadanie 20 Wykaż, że jeśli funkcja f : N2→ N jest pierwotnie rekurencyjna, to funkcja g: N2 → N, g(x, y) = f (y, x) też jest pierwotnie rekurencyjna.
Zadanie 21 Udowodnij, że jeśli funkcje g: Nn−1 → N i h: Nn+1→ N są pierwotnie rekurencyjne, to funkcja określona za ich pomocą przez rekursję względem zmiennej xi
( f (x0, . . . , xi−1, 0, xi+1, . . . , xn) = g(x0, . . . , xi−1, xi+1, . . . , xn)
f (x0, . . . , xi−1, xi+ 1, xi+1, . . . , xn) = h(x0, . . . , xi, . . . , xn, f (x0, . . . , xi, . . . , xn)) jest też pierwotnie rekurencyjna.
Rozwiązania, wskazówki, odpowiedzi, komentarze
1 Odpowiedź. (a) f (n) =
( a dla n = 0 0 dla n > 0, (b) f (n) = a dla każdego n ∈ N,
(d) f (n) = n + a dla każdego n ∈ N.
2 Komentarz. Ktoś złośliwy mógłby tu podać przykład funkcji h(n, m) = f (n + 1), jako załatwiającej sprawę dla dowolnego f .
Schemat rekursji służy do określania bardziej skomplikowanych funkcji f przez prostsze funk- cje h lub po prostu nowych, jeszcze nieskontruowanych funkcji przez funkcje, które już skonstru- owaliśmy. Dlaczego tylko takie użycie schematu rekursji nas interesuje? Wystarczy spojrzeć na definicję funkcji pierwotnie (prymitywnie) rekurencyjnych.
(b) Rozwiązanie. Szukamy funkcji f takiej, że h(0, f (0)) = f (1) = b oraz h(n, f (n)) = f (n + 1) = c dla n > 0 (dokładniej: h(0, a) = b, h(1, b) = c oraz h(n, c) = c dla n > 1).
Wystarczy przyjąć
h(n, m) =
( b dla n ∈ N i m = 0 c dla n ∈ N i m > 0.
(c) Odpowiedź. Wystarczy przyjąć
h(n, m) =
b dla n ∈ N i m = 0 c dla n ∈ N i m = 1 d dla n ∈ N i m > 1.
4 Pamiętajmy o tym, że funkcja h nie jest określona jednoznacznie dla danej funkcji f .
(a) Rozwiązanie. Szukana funkcja h powinna spełniać warunek: h(n, f (n)) = f (n + 1) dla każdego n, czyli h(n, 0) = 1 dla n parzystych oraz h(n, 1) = 0 dla n nieparzystych.
Zauważmy, że wystarczy przyjąć funkcję h(n, m), której wartości zależą tylko od zmiennej m, czyli h(n, m) = g(m). Wówczas nasz warunek wygląda tak: g(0) = 1 i g(1) = 0 (wartości g(m) dla m > 1 mogą być dowolne). Weźmy zatem
h(n, m) =
( 1 dla n ∈ N i m = 0 0 dla n ∈ N i m > 0.
(b) Odpowiedź. Wystarczy przyjąć
h(n, m) =
1 dla n ∈ N i m = 0 2 dla n ∈ N i m = 1 0 dla n ∈ N i m > 1.
(c) Odpowiedź. Wystarczy przyjąć
h(n, m) =
( m + 1 dla n ∈ N i m = 0, . . . , k − 1 0 dla n ∈ N i m = k, k + 1, . . .
5 Wskazówka. Czemu jest równe plus(n, succ(0))? Spójrz na drugą linię schematu rekursji.
6 (a) Wskazówka. Indukcja.
(b) Wskazówka. W przypadku n = 0 korzystamy z punktu (a). Dla n 6= 0 dowodzimy, że plus(n, m) 6= 0 stosując indukcję względem m. Pamiętamy, że następnik dowolnej liczby naturalnej jest różny od 0.
(c) Rozwiązanie. Indukcja względem k = plus(n, m). Dla k = 0 mamy n = m = 0 (punkt b), więc plus(m, n) = plus(n, m).
Niech teraz k będzie dowolną liczbą naturalną. Załóżmy, że twierdzenie jest prawdziwe dla wszystkich par (n, m) takich, że plus(n, m) = k. Rozważmy dowolną parę (n, m) spełniającą warunek plus(n, m) = k + 1. Pokażemy, że plus(m, n) = plus(n, m).
Jeśli m = 0, to plus(m, n) = n (punkt a) oraz plus(n, m) = n (pierwsza linia schematu rekursji), więc zachodzi teza indukcji.
Jeśli m 6= 0, to m = succ(m0) dla pewnego m0 ∈ N. Wówczas
plus(n, m) = plus(n, succ(m0)) = succ(plus(n, m0)).
Skoro succ(plus(n, m0)) = succ(k), to plus(n, m0) = k, więc plus(n, m0) = plus(m0, n) na mocy założenia indukcyjnego. Zatem
plus(n, m) = succ(plus(m0, n)) = plus(succ(m0), n) = plus(m, n).
Na mocy indukcji twierdzenie jest prawdziwe dla dowolnych m, n ∈ N.
Uwaga. Skorzystaliśmy z własności succ(plus(m0, n)) = plus(succ(m0), n). Należy ją udowodnić oddzielnie (również metodą indukcji).
7 Wskazówka. Indukcja względem m.
15 Odpowiedź.
(a) x 7→ 1, (b) x 7→ x + 3, (c) (x, y, z) 7→ y + 1, (d) (x, y) 7→ y.
16 Odpowiedź.
(a) f (x) = S(S(x)),
(b) np. f (x, y, z)) = Z(U13(x, y, z)), (c) np. f (x, y)) = S(S(S(Z(U12(x, y))))).
Piotr Jędrzejewicz, Ćwiczenia ze wstępu do matematyki dla informatyków, I rok informatyki, jesień 2002.
Schemat rekursji, wersja trzecia, 12 II 2003.