Teoria rekursji Teoria rekursji to dział logiki matematycznej zapoczątkowany w latach trzydziestych XX w. Inicjatorzy tej dziedziny to: Alan Turing i Stephen Kleene. Teoria rekursji bada obiekty (np. funkcje, relacje i zbiory), które nazywa się rekurencyjnymi. Uwaga: Od tego momentu w dalszych rozważaniach do zbioru liczb naturalnych dołączamy liczbę zero. Funkcje rekurencyjne, to takie funkcje o argumentach i wartościach naturalnych, które są albo szczególnie prostej postaci (np. funkcje stałe lub identyczność), albo powstają z tych pierwszych w wyniku zastosowania skończonej liczby dopuszczalnych operacji (takich jak składanie funkcji czy definiowanie indukcyjne). Natomiast zbiór jest rekurencyjny, gdy jego funkcja charakterystyczna jest rekurencyjna. Funkcje rekurencyjne są modelem funkcji czy relacji obliczalnych, to znaczy takich, których wartość dla dowolnych argumentów można podać w skończonej liczbie kroków w sposób mechaniczny. Pojęcie obliczalności jest nieścisłe i może być rozumiane jedynie w sposób intuicyjny, nieformalny, rekurencyjność zaś jest pojęciem ściśle matematycznym. Obiekty rekurencyjne można zdefiniować w inny, równoważny sposób mianowicie podzbiór A zbioru liczb naturalnych nazywamy rekurencyjnym, jeśli istnieje algorytm rozstrzygający dla każdej liczby naturalnej, czy należy ona do zbioru A czy nie. Algorytm to procedura mechaniczna: składa się ze skończonej liczby operacji i może być realizowany np. przez maszynę Turinga. Maszyna Turinga to abstrakcyjny, matematyczny model komputera służący do wykonywania algorytmów. 1
Problem jest rozwiązalny na komputerze (obliczalny), jeśli da się zdefiniować rozwiązującą go maszynę Turinga (algoryt. Okazuje się, że można ponumerować wszystkie maszyny Turinga, co za tym idzie wszystkie algorytmy (procedury) czyli wszystkie problemy rozwiązalne. Funkcje rekurencyjne Funkcje rekurencyjne to pojęcie matematyczne obejmujące kilka znaczeń. Będziemy rozróżniać funkcje rekurencyjne (obliczalne), funkcje pierwotnie rekurencyjne, częściowo rekurencyjne i elementarnie rekurencyjne. Najszersza klasa to funkcje częściowo rekurencyjne. Rozważamy funkcje częściowe nad N o dowolnej liczbie argumentów o wartościach naturalnych (określenie funkcje częściowe - oznacza, że nie dla każdego argumentu musi istnieć wartość takich funkcji). Funkcje częściowo rekurencyjne, to funkcje otrzymane z funkcji bazowych (zero, następnik i rzutowania) za pomocą trzech operacji: składania, rekursji prostej i operacji minimum. Oto ścisłe definicje tych pojęć: v Niech f : A A L A N. 1 2 k Jeśli Ai N i k, to mówimy, że f jest określona na liczbach naturalnych i stosujemy zapis: f: N k o N, który czytamy: f jest k-argumentową funkcją częściową o argumentach i wartościach w N. v Funkcje bazowe: Funkcje zerowe stałe 0k(n1,,nk) = 0, w szczególności funkcja jednoargumentowa 0: 0( = 0, gdy k = 1 Następnik S: = n+1 (inne oznaczenia: n +, succ() Rzutowania: i k (n1,,nk) = ni, gdzie k 1, i k. Mówimy, że zbiór funkcji F jest zamknięty ze względu na n-argumentową operację Θ, jeśli z faktu, że fi F dla i n wynika, że Θ(f1,,f F. 2
v Operacje: Składanie funkcji: funkcja f: N k o N powstaje przez składanie funkcji h: N l o N z funkcjami g1,,gl: N k o N, jeżeli zachodzą równości: (*) D( f ) = { n : n D( g ) i ( g1(,..., g ( ) D( h) } (**) f ( = h( g1(,..., gl ( ) n D( f ). i Rekursja prosta (definiowanie przez indukcję): funkcja f: N k+1 o N powstaje przez rekursję prostą z funkcji h: N k+2 o N i funkcji g: N k o N, jeżeli dla dowolnego n N i dowolnego m r N k spełnione są równania: (*) f ( 0, = g( r (**) f (, = h( f (,. Szczególnym przypadkiem tej operacji jest tzw. schemat czystej iteracji, który prowadzi od funkcji h( do funkcji f( określonej przez równania: f (0) = 0, f ( n + 1) = h( f ( ). Operacja minimum: funkcja f: N k o N powstaje z funkcji h: N k+1 o N przez zastosowanie operacji minimum, co zapisujemy: f ( = ( µ y)[ h( y) = 0] gdy dla dowolnego n r N k mamy: a) jeśli istnieje takie m, że h( n r, = 0 oraz dla i<m h( n r, i) > 0, to f ( n r ) = m (czyli f ( = najmniejsze m takie, że h( = 0 ). r b) jeśli takiego m nie ma, to f ( jest nieokreślone. Minimum efektywne: Jeżeli funkcja h: N k+1 o N jest taka, że n m h( = 0, to o operacji minimum zastosowanej do funkcji h mówimy, że jest efektywna. Operację minimum ograniczoną jedynie do funkcji mających powyższą własność nazywamy minimum efektywne. Minimum ograniczone: Pewną modyfikacją operacji minimum jest minimum ograniczone, które funkcji h( n r, przyporządkowuje funkcję r f = ( µ y x)[ h( y) = 0] określoną następująco: r r ( µ y)[ h( y) = 0 y x] gdy taki y istnieje f ( x) = 0 gdy taki y nie istnieje 3 l
Def. 1. Klasa funkcji częściowo rekurencyjnych to najmniejsza klasa funkcji częściowych nad N zawierająca funkcje bazowe i zamknięta ze względu na składanie, rekursję prostą i operację minimum. Def. 2. Funkcje rekurencyjne (obliczalne) to te funkcje częściowo rekurencyjne, które są całkowite (określone dla wszystkich argumentów naturalnych). Uwaga 1: Zbiór funkcji rekurencyjnych określamy jako najmniejszy zbiór funkcji zawierający funkcje bazowe oraz zamknięty ze względu na operacje składania, rekursji prostej i minimum efektywnego. Uwaga 2: Operacja minimum nie jest obliczalna, to znaczy nie istnieje maszyna Turinga, o której wiemy, że dla dowolnej funkcji rekurencyjnej f operacja brania jej minimum zakończy się w skończonym czasie. Aby można było oczekiwać istnienia takiej maszyny funkcja rekurencyjna f musi spełniać warunek efektywności. Jednak dla takiej klasy funkcji (rekurencyjne o własności efektywności) operacja minimum równoważna jest operacji minimum ograniczonego. Uwaga 3: Funkcje rekurencyjne można równoważnie zdefiniować jako te funkcje, dla których istnieje maszyna Turinga obliczająca ich wartości. Def. 3. Zbiór funkcji pierwotnie rekurencyjnych jest to najmniejszy zbiór funkcji nad N zawierający funkcje bazowe i zamknięty ze względu na składanie i rekursję prostą. Uwaga 4: Zachodzą następujące inkluzje: PRek Rek CzRek, PRek - zbiór funkcji pierwotnie rekurencyjnych, Rek zbiór funkcji rekurencyjnych, CzRek zbiór funkcji częściowo rekurencyjnych. gdzie Uwaga 5: Zbiory PRek oraz CzRek są równoliczne ze zbiorem liczb naturalnych. 4
Wniosek: Zbiór funkcji obliczalnych jest przeliczalnym podzbiorem zbioru mocy continuum wszystkich funkcji f: N N. Okazuje się, że znane funkcje są najczęściej pierwotnie rekurencyjne, czyli nie znamy większości funkcji N N. Przykłady: a) definiowanie stałych przez złożenie operacji następnika: 1 = 0) = 0 + 2 = 0)) = (0 + ) +,n = S n (0) b) dodawanie przez rekursję prostą: 0 + m = m + m = n + c) mnożenie: 0 m = 0 m = n m + m d) silnia( = n! (0)! = 1 ( )! = (! e) potęga(m, = power(m, = m n : power( m,0) = 1 power( m, ) = m power( m, f) poprzednik - P( = n - : P(0) = 0 P( ) = n g) odejmowanie ograniczone - m n gdy m n m & 0 = m m & n = 0 gdy m < n m & = P( m & h) wartość bezwzględna różnicy: m n = ( m & + ( n & i) Równość sprawdzenie, czy dwie liczby są równe: 1 gdy m = n ( = )( m, = (=)(m,= 1 & m n 0 gdy m n j) Reszta z dzielenia n przez m (n mod : 0 mod m = 0 mod m = ( n mod m + 1) & m ( = )( n mod m, P( ) Uwaga 6: Nie wszystkie funkcje rekurencyjne są pierwotnie rekurencyjne. 5
Przykład: Funkcja Ackermanna odkryta w 1928 r. jest funkcją rekurencyjną, ale nie jest pierwotnie rekurencyjna. Ψ(0, = n + 1 Definicja indukcyjna tej funkcji: Ψ( m + 1,0) = Ψ( m,1) Ψ( m + 1, n + 1) = Ψ( m, Ψ( m + 1, ) Funkcja powyższa charakteryzuje się bardzo szybkim wzrostem, rośnie szybciej niż jakakolwiek funkcja pierwotnie rekurencyjna. Relacje pierwotnie rekurencyjne Def. 4. Relację R o polu N nazywamy pierwotnie rekurencyjną (rekurencyjną równoważnie obliczalną), jeśli istnieje funkcja f PRek (f Rek) taka, że ( 1 k 1 k = m,..., m ) R f ( m,..., m ) 0. Przykład: Następujące relacje są pierwotnie rekurencyjne: Nierówność nieostra: x y x & y = 0 Nierówność ostra: x < y ( x + 1) & y = 0 Równość: x = y x y = 0. Przykład: Wykazać, że jeśli f1 i f2 PRek, a R jest relacją pierwotnie rekurencyjną, f1( n1,..., nk ) gdy ( n1,..., nk ) R to funkcja F( n1,..., nk ) = jest funkcją pierwotnie f 2( n1,..., nk ) gdy ( n1,..., nk ) R rekurencyjną. Zbiory pierwotnie rekurencyjne Def. 5. Zbiór A N nazywamy zbiorem pierwotnie rekurencyjnym (rekurencyjnym = obliczalny, jeżeli istnieje taka funkcja f PRek ( f PRek), że m A f ( = 0. Def. 6. Zbiór A N nazywamy zbiorem rekurencyjnie przeliczalnym, jeżeli istnieje taka funkcja obliczalna f (czyli f Rek), że f(n) = A. 6