Priv.-Doz. Dr.rer.nat.habil. Karl-Heinz Niggl Technische Universität Ilmenau Fakultät für Informatik und Automatisierung Institut für Theoretische Informatik Fachgebiet Komplexitätstheorie und Effiziente Algorithmen J Die primitiv rekursiven Funktionen Im folgenden betrachten wir zahlentheoretische Funktionen, d.h. Funktionen f : N k N mit k N. Im Mittelpunkt steht dabei eine Funktionenalgebra PR (und ihre Schichten E n ) zur Definition von bestimmten zahlentheoretischen Funktionen, die sogenannten primitiv rekursiven Funktionen. Die Menge PR ist ein Beispiel für das Prinzip der induktiven Definition (vgl. das gleichnamige Dokument). Die zugrundeliegende Basis besteht aus den folgenden Funktionen: die Null 0 als 0-stellige Funktion aufgefaßt der Successor S : N N mit S(x) = x + 1 alle Projektionen Π m i : N m N mit Π m i ( x) = x i für 1 i m (m 1). Die Regeln für den Zusammenbau (Definition) von neuen Funktionen aus bereits gebauten (definierten) Funktionen sind in Form zweier Schemata gegeben. Definition 1 (Einsetzung). Eine Funktion f : N k N heißt durch Einsetzung aus Funktionen h: N m N und g 1,..., g m : N k N definiert, in Zeichen f :=E(h, g 1,..., g m ), falls für alle x = x 1,..., x k N gilt: f( x) = h(g 1 ( x),..., g m ( x)) Definition 2 (Primitive Rekursion). Eine Funktion f : N k+1 N heißt durch primitive Rekursion aus g : N k N und h: N k+2 N definiert, in Zeichen f := R(g, h), falls f die folgenden Rekursionsgleichungen (für alle x, y N) erfüllt: f( x, 0) = g( x) f( x, y + 1) = h( x, y, f( x, y)) In f( x, y) heißen x die Parameter und y das Rekursionsargument von f; ferner heißt f( x, y) der Vorgängerwert von f( x, y + 1). Definition 3 (PR). Die Klasse PR der primitiv rekursiven Funktionen ist die kleinste Menge von zahlentheoretischen Funktionen, die die Basisfunktionen 0, S sowie alle Projektionen Π m i enthält und abgeschlossen ist unter den Schemata der Einsetzung und der primitiven Rekursion. Die Menge PR kann man auch als maschinenunabhängige Beschreibung von Algorithmen zur Berechnung bestimmter zahlentheoretischer Funktionen auffassen. In der Tat sind die durch LOOP-Programme (FOR-Schleifenprogramme über Registern nach Meyer und Ritchie) berechenbaren Funktionen genau die Funktionen in PR.
Induktive Definitionen 2 Daß jede PR-Funktion LOOP-berechenbar ist, kann man sich leicht und ohne die konkrete Syntax von LOOP-Programmen zu bemühen so klarmachen die Umkehrung ist etwas kniffliger und verwendet primitiv rekursive Kodierung und Dekodierung von n-tupeln natürlicher Zahlen. Offenbar ist jede Basisfunktion LOOP-berechenbar. Hat man schon LOOP-Programme P h, P 1,..., P m für die Komponenten h, g 1,..., g m in f = E(h, g 1,..., g m ), so erhält man in naheliegender Weise ein LOOP-Programm P f für f: Auf Input x berechnet man nacheinander (für i = 1,..., m) die Werte y i := g i ( x) mittels P i und dann h( y) mittels P h. Seien nun LOOP-Programme P g und P h für die Komponenten g, h in f = R(g, h) bereits gegeben. Der Schlüssel zur Konstruktion eines LOOP-Programms P f für f ist die folgende Ausfaltungsdarstellung, die sich durch maximales Ausfalten der Rekursionsgleichungen für f ergibt: f( x, y) = h( x, y 1, h( x, y 2,..., h( x, 0, g( x))...)) Damit wird f( x, y) wie folgt berechnet: Nacheinander berechnet man die Werte v 0 := g( x) mittels P g und (falls y > 0) in einer Schleife die Werte v 1,..., v y v i+1 := h( x, i, v i ) für i < y jeweils mittels P h und gibt dann v y aus, denn induktiv folgt v i = f( x, i) für i y. Bemerkung. Jede natürliche Zahl a, wie üblich als 0-stellige Funktion Ca 0 aufgefaßt, kann durch a-malige Anwendung des Einsetzungsschemas aus den Basisfunktionen S und 0 = C0 0 definiert werden. Damit gewinnt man jede n-stellige konstante Funktion Ca n mittels Einsetzung aus C 0 a. C n a (x 1,..., x n ) := a Dies ergibt sich durch eine präzisere Fassung des Einsetzungsschemas: Für m, n N ist E m,n ein Funktional, das Funktionen h: N m N und g 1,..., g m : N n N die Funktion E m,n (h, g 1,..., g m ): N n N zuordnet, wobei E m,n (h, g 1,..., g m )( x) := h(g 1 ( x),..., g m ( x)) Also hat C n a für n 1 die Darstellung C n a = E 0,n (C 0 a, ()). Bemerkung. Wie im Skript Induktive Definitionen erwähnt, denkt man sich die natürlichen Zahlen N ebenfalls als induktiv definierte Menge I R (B). Das aus der Schule bekannte Schema der vollständigen Induktion ist somit nichts anderes als Induktion über den Aufbau von N und das Schema der primitiven Rekursion ist nichts anderes als Rekursion über den Aufbau von N, wobei hier N k als Parametermenge X fungiert. Bemerkung. Daß das Rekursionsargument in einer primitiven Rekursion f = R(g, h) stets an der letzten Argumentstelle erscheint, hat nur vereinfachende Gründe. Mittels
Induktive Definitionen 3 Einsetzung und Projektionen kann man zeigen, daß jede Rekursion im i-ten Argument eine zulässige Instanz der primitiven Rekursion ist. Beispiele für primitiv rekursive Funktionen Die Fallunterscheidung C: N 3 N mit besitzt die Rekursionsgleichungen { y falls x = 0 C(x, y, z) := z sonst C(0, y, z) = y C(x + 1, y, z) = z und hat somit die Darstellung C = R(Π 2 1, h) mit h(u, y, z, v) := z = Π 4 3(u, y, z, v). Der Predecessor P : N N, P (x) := max{x 1, 0} hat Rekursionsgleichungen : P (0) = 0 P (x + 1) = x Hieraus liest man die Darstellung P = R(C 0 0, h) mit h(u, v) := u = Π 2 1(u, v) ab. Bemerkung. C und P sind Beispiele für sogenannte uneigentliche Rekursionen, die von den Vorgängerwerten nicht Gebrauch machen, sondern nur von der im Schema eingebauten Fallunterscheidung bzgl. des Rekursionsargumentes y nach y = 0 oder y > 0, sowie von der Dekrementierung eines Rekursionsargumentes y > 0. Die Addition add: N 2 N, add(x, y) = x+y, besitzt die Rekursionsgleichungen : add(x, 0) = x add(x, y + 1) = S(add(x, y)) Hieraus folgt add = R(Π 1 1, h) mit h(x, u, v) := S(v) = E 1,3 (S, Π 3 3)(x, u, v)). Bemerkung. Es gilt x + y = S (y) (x), wobei für eine Funktion f : N N die k-te Iterierte von f, in Zeichen f (k) : N N, wie folgt induktiv definiert ist: f (0) (x) := x f (k+1) (x) := f(f (k) (x)) Die abgeschnittene Subtraktion. : N 2 N mit x. y := max{x y, 0} besitzt wegen x. y = P (y) (x) die Rekursionsgleichungen x. 0 = x x. y + 1 = P (x. y) und damit (analog zu add) die Darstellung. = R(Π 1 1, E 1,3 (P, Π 3 3)).
Induktive Definitionen 4 Die Multiplikation mult: N 2 N, mult(x, y) = x y, hat Rekursionsgleichungen mult(x, 0) = 0 mult(x, y + 1) = mult(x, y) + x und somit folgt mult = R(C0, 1 h) mit h(x, u, v) := v +x = E 2,3 (add, Π 3 3, Π 3 1)(x, u, v)). Die Exponentiation exp: N 2 N, exp(x, y) = x y hat die Rekursionsgleichungen exp(x, 0) = 1 exp(x, y + 1) = exp(x, y) x und somit (analog zu mult) die Darstellung exp = R(C1, 1 E 2,3 (mult, Π 3 3, Π 3 1)). Praktischer Umgang mit Einsetzung und primitiver Rekursion Die obigen Beispiele zeigen zwei Aspekte der Bauart von PR. Einsetzung und primitive Rekursion sind zum einen nicht benutzerfreundlich, wenn es darum geht, für konkrete Funktionen nachzuweisen, daß sie primitiv rekursiv sind man muß ja stets die informalen Rekursionsgleichungen auf die gewünschte Form bringen. Zum anderen entsteht der Eindruck, daß man aus den jeweils angegebenen informalen Rekursionsgleichungen stets die gewünschte formale Darstellung ablesen kann. Tatsächlich sind die fraglichen Schemata nicht für den praktischen Gebrauch gedacht, sondern nur für theoretische Überlegungen zur Klasse PR, wo diese strukturierte Form von Vorteil ist. Ein Beispiel dafür war der informale Beweis, daß alle PR-Funktionen LOOP-berechenbar sind. Der Schlüssel zu einem benutzerfreundlichen Umgang mit den primitiv rekursiven Funktionen ist das folgende zur Einsetzung äquivalente und programmiersprachennahe Konzept der expliziten Definition, das die Rolle der Basisfunktionen Π m i genauer beleuchtet. Definition 4. Eine Abb. f : N n N ist explizit definierbar aus Funktionen g 1,..., g m, falls es einen (wohlgeformten) Ausdruck E mit Symbolen unter g 1,..., g m, x 1,..., x n gibt, so daß für alle a = a 1,..., a n N gilt: f( a) = I n (E)( a) Schreibweise f( x) = E. Dabei ist die Interpretation von E, I n (E): N n N, induktiv über den Aufbau von Ausdrücken mit Symbolen unter g 1,..., g m, x 1,..., x n definiert: I n (x i ) = Π n i I n (g i (E 1,..., E mi )) = E m i,n (g i, I n (E 1 ),..., I n (E mi )) Beispiel: f(x 1, x 2, x 3, x 4 ) = (x 1 + (x 1 x x 2 3 )). (x 2 x 3 ) Bemerkung. Explizite Definitionen unterstützen insbesondere das Vertauschen, Vervielfältigen und Weglassen von Parametern (Variablen) und das Ineinanderschachteln solcher Ausdrücke. Bemerkung. Für den praktischen Umgang mit expliziten Definitionen kann man natürlich neben den Funktionssymbolen g 1,..., g m und den Variablen x 1,..., x n in f( x) = E auch
Induktive Definitionen 5 beliebige Konstanten a N verwenden, denn man darf a mit dem Ausdruck S (a) (0) bzw. mit dem Symbol C 0 a identifizieren. Ferner schreibt man S(x) in der gewohnten Form x+1. Lemma 5 (Explizite Definition = Einsetzung + Projektn.). Für f : N n N gilt: f ist explizit definierbar aus g 1,..., g m f ist mittels Einsetzung aus g 1,..., g m und Projektionen definierbar. Beweis. Die Implikation folgt induktiv aus der Definition von I n (E). Für die Umkehrung definieren wir etwas allgemeiner Abbildungen J k, die jeder k-stelligen Funktion, die man mittels Einsetzung aus g 1,..., g m und Projektionen definieren kann, einen Ausdruck J k (g) in g 1,..., g m, x 1,..., x k zuordnet, für den I k (J k (g)) = g gilt. J k (g i ) := g i (x 1,..., x k ) J k (Π k i ) := x i E n,k (h, f 1,..., f n ) := J n (h)[j k (f 1 ),..., J k (f n )/x 1,..., x n ] Für Ausdrücke e, e 1,..., e l bezeichne dabei e[e 1,..., e l /x 1,..., x l ] den Ausdruck, der durch simultane Ersetzung (für i = 1,..., l) aller Vorkommen von x i in e durch e i entsteht. Anwendungen: Für den Nachweis, daß f : N k N eine Darstellung f = E m,k (h, g 1,..., g m ) in PR besitzt, genügt die Angabe einer expliziten Definition f( x) = E, für einen Ausdruck E in Symbolen x 1,..., x k und h 1,..., h l PR. Für den Nachweis, daß f : N k+1 N eine Darstellung f = R(g, h) in PR besitzt, genügt die Angabe von Rekursionsgleichungen für f in der Form f( x, 0) = E b f( x, y + 1) = E s wobei E b ein Ausdruck in x und bestimmten g 1,..., g b PR ist, und E s ein Ausdruck in x, y und bestimmten h 1,..., h s PR sowie in f( x, y). Im Fall f =R(g, h) sind die gesuchten Funktionen g, h PR einfach I k (E b ) und I k+2 (Es ), wobei Es aus E s entsteht, indem man alle Vorkommen von f( x, y) durch eine neue Variable v ersetzt. Blicken wir nun auf die obigen Beispiele zurück, so stellen wir fest, daß die jeweiligen informalen Rekursionsgleichungen schon in der Form f( x, 0) = E b f( x, y + 1) = E s angegeben wurden und daß daraus tatsächlich die formale Gestalt f = R(g, h) gewonnen werden kann dies läßt sich auch automatisieren.
Induktive Definitionen 6 Die n-te Grzegorcyk-Klasse E n Die erste Schichtung der primitiv rekursiven Funktionen in eine Hierarchie von echt aufsteigenden Komplexitätsklassen E 0 E 1 E 2... mit E n = PR n 0 geht auf den Mathematiker A. Grzegorczyk (1953) zurück. Definition 6. Die Klasse E n ist die kleinste Klasse zahlentheoretischer Funktionen, die die Basisfunktionen 0, S, alle Projektionen Π m i und A n enthält und abgeschlossen ist unter Einsetzung und beschränkter primitiver Rekursion. Dabei bezeichnet A n : N 2 N den n-ten Ackermannschen Zweig, der sich durch Festhalten des ersten Argumentes aus der 3-stelligen Ackermannfunktion A ergibt, d.h. A n (x, y)= A(n, x, y) für x, y N. Die Funktionen A n besitzen die folgenden Rekursionsgleichungen: A 0 (x, y) = y + 1 x falls n = 0 A n+1 (x, 0) = 0 falls n = 1 1 sonst A n+1 (x, y + 1) = A n (x, A n+1 (x, y)) Definition 7. Eine Funktion f : N k+1 N heißt durch beschränkte primitive Rekursion aus g : N k N, h: N k+2 N und b: N k+1 N definiert, in Zeichen f := BR(g, h, b), falls f die folgenden beschränkten Rekursionsgleichungen (für alle x, y N) erfüllt: f( x, 0) = g( x) f( x, y + 1) = h( x, y, f( x, y)) f( x, y) b( x, y) Bemerkung. Grzegorczyks Idee zur Definition der Schichten E n war, daß man Funktionen f in Schicht E n durch primitive Rekursion aus Funktionen g, h E n gewinnen darf, solange man eine bereits definierte Schranke b E n für f zur Verfügung hat. Damit dieser Ansatz in jeder Schicht zu neuen Funktionen führt, benötigt man eine Schar von immer schneller wachsenden Basisfunktionen A n, deren Wachstum im Limes n zu einer Funktion A führt, die schneller wächst als jede primitiv rekursive Funktion. In der Tat gilt: A 0 (x, y) = x+1 A 1 (x, y) = x + y A 2 (x, y) = x y A 3 (x, y) = x y A 4 (x, y) = x y mit x 0 := 1 und x l+1 := x x l und so weiter Die konkrete Wahl dieser Funktionenschar geht auf ein modernes Design der ursprünglichen Schichten E n zurück, die der Mathematiker Ritchie (1965) in weiterführenden Untersuchungen zugrundelegte.
Induktive Definitionen 7 Die Funktion A n bildet tatsächlich die Hauptfunktion der Schicht E n in dem Sinne, daß jede Funktion in Schicht n durch eine konstante Anzahl von Kompositionen von A n mit sich selbt beschränkt werden kann. Satz 8. Zu jedem f E n, n 0, findet man eine Konstante c f, so daß stets gilt: f( x) A n+1 (max(2, x), c f ) Man beachte hierbei, daß nach der Ausfaltungsdarstellung für Konstanten c gilt: A n+1 (x, c) = A n (x, A n (x,..., A n (x, 0)...)) mit c+1 Vorkommen von A n. Die Funktion B mit B(x):=A n+1 (x, c) liegt also in E n. Der Beweis des Satzes ist nicht Gegenstand dieses Kompendiums. Wir beschließen stattdessen diesen Abschnitt mit der Übertragung der Einsichten aus dem letzten Abschnitt auf die Grzegorczyk-Schichten. Lemma 9 (Explizite Definitionen in E n ). Für f : N n N und g 1,..., g m E n gilt: f ist explizit definierbar aus g 1,..., g m f ist mittels Einsetzung aus g 1,..., g m und Projektionen definierbar Beweis. Wie vorher, nur daß man nun die Abgeschlossenheit von E n unter Einsetzung berücksichtigt. Anwendungen: Für den Nachweis, daß f : N k N eine Darstellung f = E m,k (h, g 1,..., g m ) in E n besitzt, genügt es, f explizit aus Funktionen in E n zu definieren. Für den Nachweis, daß f : N k+1 N eine Darstellung f =BR(g, h, b) in E n besitzt, genügt die Angabe von beschränkten Rekursionsgleichungen für f in der Form f( x, 0) = E b f( x, y + 1) = E s f( x, y) E w wobei E b ein Ausdruck in x und bestimmten g 1,..., g b E n ist, E s ein Ausdruck in x, y und bestimmten h 1,..., h s E n sowie in f( x, y), und E w ein Ausdruck in x, y und bestimmten b 1,..., b w E n. Im Fall f = BR(g, h, b) sind die gesuchten Funktionen g, h, b E n einfach I k (E b ) und I k+2 (E s ) und I k+1 (E w ). Beispiel: Die Addition + liegt in E 2, denn es gilt: x + 0 = x x + (y + 1) = (x + y) + 1 x + y (x + 1) (y + 1)