Definition 1.11 Die Klasse der primitiv rekursiven Funktionen (a) Basisfunktionen: (1.) die konstanten Funktionen c (c N) (2.) die Projektionen Π m i (x 1,...,x m ) = x i (1 i m) (3.) die Nachfolgerfunktion s(n) = n + 1 (b) Abschlusseigenschaften: (4.) Komposition: g : N k N, h 1,...,h k : N m N : f(x 1,...,x m ) = g(h 1 (x 1,...,x m ),...,h k (x 1,...,x m )) (5.) Primitive Rekursion: g : N k N, h : N k+2 N : f(0, x 1,...,x k ) = g(x 1,...,x k ) f(n+1, x 1,...,x k ) = h(f(n, x 1,...,x k ), n, x 1,...,x k ) Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 45 / 309
Alle primitiv rekursiven Funktionen sind total und (intuitiv) berechenbar. Frage: Sind dies genau die totalen und berechenbaren Funktionen? Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 46 / 309
Beispiele: (1.) add : N 2 N : add(0, x) = x (= Π 1 1 (x)) add(n+1, x) = s(add(n, x))(= s(π 3 1 (add(n, x), n, x))) (2.) mult : N 2 N : mult(0, x) = 0 mult(n+1, x) = add(mult(n, x), x) = h(mult(n, x), n, x) mit h(u, v, w) = add(π 3 1 (u, v, w),π3 3 (u, v, w)) (3.) Ist f(v, w, x, y) prim. rek., so auch g(a, b, c) = f(b, b, c, a), denn: g(a, b, c) = f(π 3 2 (a, b, c),π3 2 (a, b, c),π3 3 (a, b, c),π3 1 (a, b, c)). Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 47 / 309
(4.) u(n) = max(n 1, 0) : u(0) = 0 u(n+1) = n (5.) sub(x, 0) = x sub(x, y + 1) = u(sub(x, y)) (= Π 2 2 (u(n), n)) Dann: sub(x, y) = max(x y, 0) = x y. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 48 / 309
(6.) ( ) n 2 = n(n 1) 2 : ( 0 ( 2) = 0, n+1 ) ( 2 = n ) 2 + n (7.) c : N 2 N : c(x, y) = ( x+y+1) ( 2 + x = add( s(add(x,y)) ),Π 2 1 (x, y)) x y 0 1 2 3 4 5 2 0 0 2 5 9 14 20 1 1 4 8 13 19 26 2 3 7 12 18 25 33 3 6 11 17 24 32 41 4 5 10 16 23 31 40 50 15 22 30 39 49 60 c ist Bijektion von N 2 auf N. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 49 / 309
Verallgemeinerung,..., : N k+1 N : n 0, n 1,...,n k := c(n 0, c(n 1,...,c(n k, 0)...)) Seien e, f : N N die Umkehrfunktionen zu c: e(c(x, y)) = x, f(c(x, y)) = y, c(e(n), f(n)) = n. Dann : d 0 (n) = e(n) d 1 (n) = e(f(n)). d k (n) = e(f(f(...f(n)...))) }{{} k-mal Es gilt: d i ( n 0, n 1,...,n k ) = n i (0 i k). Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 50 / 309
Lemma 1.12 Die Funktionen e und f sind primitiv rekursiv. P N ˆ= Prädikat P(n) n P gdw. P(n) gilt. Charakteristische { Funktion zu P: 1 falls P(n) χ P (n) = 0 sonst Definition P(n) ist prim. rekursiv gdw. χ P ist prim. rekursiv. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 51 / 309
Beschränkter max-operator: q(n) := max{ x n P(x)} := max({ x x n und P(x)} {0}). Lemma 1.13 Mit P ist auch q primitiv rekursiv. Beweis: q(0) = 0 { n+1 falls P(n+1) q(n+1) = q(n) sonst = q(n)+χ P (n+1) ((n+1) q(n)). Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 52 / 309
Beschränkter Existenzquantor: Q(n) gdw. x n : P(x) Dann : Q(0) gdw. P(0) Q(n+1) gdw. d.h. χ Q (0) = χ P (0) P(n+1) oder Q(n) χ Q (n+1) = χ P (n+1)+χ Q (n) χ P (n+1) χ Q (n) Lemma 1.14 Mit P ist auch Q primitiv rekursiv. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 53 / 309
Beweis zu e, f sind primitiv rekursiv: e (n, m, k) := max{ x n y k : c(x, y) = m} Beh. e ist primitiv rekursiv. Bew.: Definiere P(x, y, m) gdw. c(x, y) = m. Dann gilt: χ P (x, y, m) = 1 ((c(x, y) m)+(m c(x, y))), d.h., P ist primitiv rekursiv. Definiere Q(x, k, m) gdw. y k : c(x, y) = m gdw. y k : P(x, y, m). Q ist primitiv rekursiv nach Lemma 1.14. e (n, m, k) = max{ x n Q(x, k, m)}, also ist e primitiv rekursiv nach Lemma 1.13. Es gilt e (n, n, n) = max{ x n y n : c(x, y) = n} = e(n). f (n, m, k) := max{ y n x k : c(x, y) = m} Dann: f (n, n, n) = f(n). Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 54 / 309
Satz 1.15 Die Klasse der primitiv rekursiven Funktionen stimmt mit der Klasse der LOOP-berechenbaren Funktionen überein. Beweis: : Sei F : N r N LOOP-berechenbar. Es gibt ein LOOP-Programm P, das F berechnet. P enthalte die Variablen x 0, x 1,...,x k (k r). Behauptung: Es gibt eine prim. rekursive Funktion g P : N N: g P ( a 0, a 1,...,a k ) = b 0, b 1,...,b k, wobei a 0, a 1,...,a k die Werte von x 0, x 1,...,x k beim Start und b 0, b 1,...,b k die Werte von x 0, x 1,...,x k beim Halt von P sind. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 55 / 309
Beweis Induktion über den Aufbau von P: (i) x i := x j ± c g P (n) = d 0 (n),...,d i 1 (n), d j (n)±c, d i+1 (n),...,d k (n) (ii) Q; R g P (n) = g R (g Q (n)) (iii) LOOP x i DO Q END g P (n) = h(d i (n), n) mit h(0, x) = x h(n+1, x) = g Q (h(n, x)) d.h. h(n, x) = g Q (g Q (...(g }{{ Q (x))...) } n-mal Nun gilt: F(n 1,...,n r ) = d 0 (g P ( 0, n 1,...,n r, 0,...,0 )). }{{} k r Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 56 / 309
: Sei F primitiv rekursiv. Behauptung: Es gibt ein LOOP-Programm, das F berechnet. Beweis: Ind. über den Aufbau von F: (i) Basisfunktionen : LOOP-berechenbar. (ii) F(n 1,...,n m ) = g(h 1 (x 1,...,x m ),...,h k (x 1,...,x m )): P F aus P g und P h1,...,p hk. (iii) F(0, x 1,...,x r ) = g(x 1,...,x r ) F(n+1, x 1,...,x r ) = h(f(n, x 1,...,x r ), n, x 1,...,x r ) P F : y := g(x 1,...,x r ); ( mit P g ) k := 0; LOOP n DO y := h(y, k, x 1,...,x r );( mit P h ) k := k + 1 END Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 57 / 309
Definition 1.16 (µ-operator) Sei f : N k+1 N. Definiere g : N k N durch Anwendung des µ-operators auf f: g(x 1,...,x k ) = min{ n f(n, x 1,...,x k ) = 0 und m < n : f(m, x 1,...,x k ) N} Dabei: min := undefiniert. Bezeichnung: g = µf. Beispiel: f(x, y) = 1. Dann: g(y) := µf(y) = min{ n f(n, y) = 0} = Ω (undef. Funktion) Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 58 / 309
Beispiel: f(x, y) = (y + 1) (x + 1) 2. g(y) = µf(y) = min{ n f(n, y) = 0 und m < n : f(m, y) N} = min{ n (y + 1) (n+1) 2 = 0} : n = 0 : (y + 1) (n+1) 2 = y, also: g(0) = 0, n = 1 : (y + 1) (n+1) 2 = y 3, also: g(y) = 1 für 1 y 3, n = 2 : (y + 1) (n+1) 2 = y 8, also: g(y) = 2 für 4 y 8. Damit: g(y) := µf(y) = min{ n (n+1) 2 > y } = max{ n n 2 y } = y. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 59 / 309
Definition 1.17 Die Klasse der µ-rekursiven Funktionen (a) Basisfunktionen : konstante Funktionen, Π m i, s. (b) Abschluss: Komposition, prim. Rekursion, µ-operator. Satz 1.18 Die Klasse der µ-rekursiven Funktionen stimmt mit der Klasse der WHILE-berechenbaren Funktionen überein. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 60 / 309
Beweis: Es bleibt, den µ-operator und die WHILE-Schleife zu betrachten. : WHILE-Programm: WHILE x i 0 DO Q END Die Funktion h(n, x) liefert den Zustand der Programmvariablen x = x 0,...,x k nach n Ausführungen von Q. Dann: g P (x) = h(µ(d i h)(x), x), wobei µ(d i h)(x) = min{ n d i h(n, x) = 0 und m < n : d i h(m, x) N}. Mit h ist dann g P µ-rekursiv. : Sei g(x) = µf(x). Nach I.V. gibt es ein WHILE-Programm für f. P g : x 0 := 0; y := f(0, x 1,...,x k ); WHILE y 0 DO x 0 := x 0 + 1; y := f(x 0, x 1,...,x k ); END Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 61 / 309
Satz 1.19 (Kleene) Für jede n-stellige µ-rekursive Funktion f gibt es zwei (n+1)-stellige, primitiv rekursive Funktionen p und q, sodass sich f wie folgt darstellen lässt: f(x 1,...,x n ) = p(x 1,...,x n,µq(x 1,...,x n )). Beweis: Sei f µ-rekursiv. WHILE-Programm, das f berechnet WHILE-Programm mit nur einer WHILE-Schleife, das f berechnet prim. rek. Funktionen p und q, die f wie oben darstellen. Prof. Dr. F. Otto (Universität Kassel) Berechenbarkeit und Formale Sprachen 62 / 309