ALP I Rekursive Funktionen SS 2011
Äquivalenz vieler Berechnungsmodelle Effektiv Berechenbare Funktionen Mathematische Modelle Maschinelle Modelle Text λ-kalkül Kombinatorische Logik Allgemein rekursive Funktionen Register Maschinen Turing- Maschine While- Programme µ-rekursive Funktionen ALP II Theoretische Informatik I GOTO- Programme equiv. primitiv-rekursive Funktionen
Alle Beispiele, die wir in den letzten zwei Vorlesungen diskutiert haben, sind Beispiele aus der Menge der sogenannten primitiv-rekursiven Funktionen PR. Die primitiv-rekursiven Funktionen sind die einfachste Klasse von rekursiven Funktionen. Die PR-Funktionen sind eine Untermenge der Effektiv Berechenbaren Funktionen. Das bedeutet, es gibt rekursive Funktionen, die berechenbar sind aber nicht primitiv-rekursiv sind.
Motiviert von D. Hilbert haben vor allem K. Gödel (1906-1978) und Rózsa Péter (1905-1977) sich mit der Theorie der rekursiven Funktionen auseinandergesetzt sowie diese stark geprägt. Was kann alles mit primitiv-rekursiven Funktionen berechnet werden? Gibt es ein allgemeines Schema zur Definition beliebiger berechenbarer Funktionen?
(PR) Das Schema zur Definition beliebiger primitiv-rekursiver Funktionen besteht aus folgenden drei Hauptteilen: 1. Eine Reihe von Grundfunktionen. 2. Ein Ersetzungsmechanismus zur Definition von Funktionen ohne Rekursion (Funktionskomposition). 3. Ein Mechanismus zur Definition von primitivrekursiven Funktionen mit Rekursion (PR).
(PR) Die Klasse der PR-Funktionen N m N wird wie folgt induktiv definiert. I Grundfunktionen II Kompositionsschema III Rekursionsschema
I Grundfunktionen 1. Die Nullfunktion Z : N m N ist primitiv rekursiv Z(x 1,,x m ) = 0 2. Die Nachfolgerfunktion S : N N ist primitiv rekursiv S(n) = n+1 3. Die Projektionsfunktionen definiert durch π m i : N m N π m i (x 1,,x i,,x m ) = x i, 1 i m sind primitiv-rekursiv Beispiel: π 3 (a, b, c) = b 2
II Kompositionsschema Die Funktionskomposition ist primitiv-rekursiv. Das bedeutet, für alle primitiv-rekursiven Funktionen f : N m N und g 1,, g m : N n N ist die Funktion C : N n N, definiert durch C (x 1,...,x n ) = f (g 1 ( x 1,...,x n ),, g m ( x 1,...,x n )) auch primitiv rekursiv.
III Rekursionsschema Jede Funktion, die sich durch primitive Rekursion (Induktion) aus primitiv-rekursiven Funktionen definieren lässt, ist auch primitivrekursiv. Das bedeutet: Wenn g : N m N und h : N m+2 N primitiv-rekursive Funktionen sind, dann ist die folgende (induktiv definierte) Funktion R : N m+1 N R (0, x 1,...,x m ) = g(x 1,...,x m ) R (S(n), x 1,...,x m ) = h( R(n, x 1,...,x m ), n, x 1,...,x m ) ebenfalls primitiv rekursiv. S = Nachfolgerfunktion
Eine konstante Funktion, die eine beliebige Zahl n in der Konstante 3 abbildet, sieht wie folgt aus: k3 : N N k3 ( m ) = S(S(S(Z(m)))) = 3 Die Identitätsfunktion kann wie folgt definiert werden: id : N N id ( m ) = π 1 1 (m) = m
Können wir die Additionsfunktion auf eine Definition, die nur aus primitiv-rekursiven Funktionen besteht, zurückführen? aus I, II und III: add : N 2 N add 0 m add ( 0, m ) = m add (n+1) m = (add n m) +1 = g(m) add ( S(n), m ) = h(add (n, m), n, m) g und h müssen primitivrekursiv sein add ( 0, m ) = add ( S(n), m ) = π 1 (m) 1 S(π 3 (add (n, m), n, m)) 1
Vorgänger-Funktion: pred : N N Weil die primitiv-rekursiven Funktionen nur über die natürlichen Zahlen definierbar sind, wird der Vorgänger von 0 als gleich 0 definiert. pred 0 = 0 pred (n+1) = n pred ( 0 ) = g () pred ( S(n) ) = h (pred (n), n) pred ( 0 ) = Z () pred ( S(n) ) = π 2 ( pred (n), n ) 2
Die Multiplikation kann rekursiv über die Addition definiert werden. mult 0 m = 0 mult (n+1) m = (mult n m ) + m mult ( 0, m ) = g ( m ) mult ( S(n), m ) = h (mult (n, m), n, m) mult ( 0, m ) = Z ( m ) mult(s(n), m) = add (π 3 (mult(n, m),n,m), π 3 (mult (n,m),n,m)) 1 3
Eine mögliche Definition der Subtraktion sieht wie folgt aus: sub m 0 = m sub m n = pred (sub m (pred n)) sub 2 1 => pred (sub 2 (pred 1)) => pred (sub 2 0) => pred 2 => 1 sub 1 2 => pred (sub 1 (pred 2)) => pred (sub 1 1) => pred (pred (sub 1 0)) => pred (pred 1) => pred 0 => 0 Eine primitiv-rekursive Definition der Subtraktion sieht wie folgt aus: sub (0, m ) = π 1 (m) 1 sub (S(n), m) = pred (π 3 (sub(n, m),n,m)) 1
weitere Beispiele an der Tafel...