Schemat rekursji 1 Schemat rekursji dla funkcji jednej zmiennej Dla dowolnej liczby naturalnej a i dowolnej funkcji h: N 2 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) = b dla n > 0, (b) f(n) = (c) f(n) = b dla n = 1 c dla n > 1, 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) = 2 n, (c) f(n) = n 2, (d) f(n) = n 2 + 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ą. 1
2 Funkcje plus i mult Funkcja plus: N 2 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: N 2 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: N 2 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). 2
3 Schemat rekursji dla funkcji wielu zmiennych Dla dowolnej funkcji g: N N i dowolnej funkcji h: N 3 N istnieje dokładnie jedna funkcja f: N 2 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: N 3 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 f 1 : N N i f 2 : N N są określone za pomocą schematu rekursji odpowiednio przez liczby a 1 i a 2 oraz funkcje h 1 : N 2 N i h 2 : N 2 N. Znajdź schemat rekursji dla funkcji f: N 2 N takiej, że: (a) f(n, m) = f 1 (n) + f 2 (m) dla dowolnych n, m N, (b) f(n, m) = f 1 (n) f 2 (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: N 3 N, gdy dane są funkcje g: N 2 N i h: N 4 N. Zadanie 14 Określ za pomocą schematu rekursji funkcję f: N 3 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, U n i : N n N, U n i (x 1,..., x n ) = x i, n 1, 1 i n, oraz wszystkie funkcje, które można otrzymać z nich za pomocą składania funkcji i operatora rekursji: f(0, x 1,..., x n ) = g(x 1,..., x n ) f(x 0 + 1, x 1,..., x n ) = h(x 0, x 1,..., x n, f(x 0, x 1,..., x n )). 3
Zadanie 15 Wyznacz następujące złożenia funkcji: (a) S(Z(x)), (b) S(S(S(x))), (c) S(U2 3 (x, y, z)), (d) U1 2(U 2 2(x, y), U 1 2 (x, y)). Zadanie 16 Podaną funkcję f przedstaw w postaci złożenia funkcji Z, S i Ui n, n 1, 1 i 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: N 2 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 π 2 n + 1. Zadanie 20 Wykaż, że jeśli funkcja f: N 2 N jest pierwotnie rekurencyjna, to funkcja g: N 2 N, g(x, y) = f(y, x) też jest pierwotnie rekurencyjna. Zadanie 21 Udowodnij, że jeśli funkcje g: N n 1 N i h: N n+1 N są pierwotnie rekurencyjne, to funkcja określona za ich pomocą przez rekursję względem zmiennej x i f(x 0,..., x i 1, 0, x i+1,..., x n ) = g(x 0,..., x i 1, x i+1,..., x n ) f(x 0,..., x i 1, x i + 1, x i+1,..., x n ) = h(x 0,..., x i,..., x n, f(x 0,..., x i,..., x n )) jest też pierwotnie rekurencyjna. Rozwiązania, wskazówki, odpowiedzi, komentarze 1 Odpowiedź. (a) f(n) = (b) f(n) = a dla każdego n N, (d) f(n) = n + a dla każdego n N. 0 dla n > 0, 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 funkcje h lub po prostu nowych, jeszcze nieskontruowanych funkcji przez funkcje, które już skonstruowaliśmy. Dlaczego tylko takie użycie schematu rekursji nas interesuje? Wystarczy spojrzeć na definicję funkcji pierwotnie (prymitywnie) rekurencyjnych. 4
(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ąć b dla n N i m = 0 h(n, m) = c dla n N i m > 0. (c) Odpowiedź. Wystarczy przyjąć b dla n N i m = 0 h(n, m) = 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ąć (c) Odpowiedź. Wystarczy przyjąć h(n, m) = 1 dla n N i m = 0 h(n, m) = 2 dla n N i m = 1 0 dla n N i m > 1. 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 0 dowodzimy, że plus(n, m) 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. 5
Jeśli m 0, to m = succ(m ) dla pewnego m N. Wówczas plus(n, m) = plus(n, succ(m )) = succ(plus(n, m )). Skoro succ(plus(n, m )) = succ(k), to plus(n, m ) = k, więc plus(n, m ) = plus(m, n) na mocy założenia indukcyjnego. Zatem plus(n, m) = succ(plus(m, n)) = plus(succ(m ), n) = plus(m, n). Na mocy indukcji twierdzenie jest prawdziwe dla dowolnych m, n N. Uwaga. Skorzystaliśmy z własności succ(plus(m, n)) = plus(succ(m ), n). Należy ją udowodnić oddzielnie (również metodą indukcji). 7 Wskazówka. Indukcja względem m. 15 Odpowiedź. (a) x 1, (b) x x + 3, (c) (x, y, z) y + 1, (d) (x, y) y. 16 Odpowiedź. (a) f(x) = S(S(x)), (b) np. f(x, y, z)) = Z(U1 3 (x, y, z)), (c) np. f(x, y)) = S(S(S(Z(U1 2 (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. 6