LOOP-Programme: Syntaktische Komponenten LOOP-Programme bestehen aus folgenden Zeichen (syntaktischen Komponenten): Variablen: x 0 x 1 x 2... Konstanten: 0 1 2... Operationssymbole: + Trennsymbole: ; := Schlüsselwörter: LOOP DO END R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 41
LOOP-Programme: Syntax Die Syntax von LOOP-Programmen wird wie folgt induktiv definiert. (i) Jede Wertzuweisung der Form x i := x j + c bzw. x i := x j c ist ein LOOP-Programm, wobei c eine Konstante ist. (ii) Sind P 1, P 2 LOOP-Programme, dann sind auch P 1 ; P 2 sowie LOOP x i DO P 1 END LOOP-Programme. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 42
LOOP-Programme: Semantik, Teil i) (i) Jede Wertzuweisung der Form x i := x j +c wird wie üblich interpretiert: der neue Wert der Variablen x i berechnet sich als Summe des Wertes der Variablen x j und der Konstanten c, wobei der Wert in der Variablen x j erhalten bleibt. Die Wertzuweisung x i := x j c wird analog interpretiert, wobei sich aber die Werte nach der sogenannten modifizierten Differenz, die wie folgt definiert ist n 1 n 2 = { n 1 n 2 falls n 1 n 2, 0 sonst, berechnen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 43
LOOP-Programme: Semantik, Teil ii) ii) Ein LOOP-Programm der Form P 1 ; P 2 soll die Hintereinanderausführung der Programme P 1 und P 2 bedeuten, also zuerst wird das Programm P 1, dann das Programm P 2 ausgeführt. Ein LOOP-Programm der Form LOOP x i DO P 1 END bedeutet, dass das Programm P 1 sooft ausgeführt wird, wie der Wert der Variablen x i zu Beginn angibt. Änderungen des Wertes der Variablen x i haben also keinen Einfluss auf die Anzahl der Wiederholungen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 44
LOOP-berechenbare Funktionen Eine Funktion f : N k N, k N, heißt LOOP-berechenbar, falls es ein LOOP-Programm P gibt, das f in dem Sinne berechnet, dass P, gestartet mit n 1, n 2,..., n k in den Variablen x 1, x 2,..., x k und 0 in den restlichen Variablen, mit dem Wert f(n 1, n 2,..., n k ) in der Variablen x 0 stoppt. Schreibweise: f = f k P R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 45
Erstes Beispiel einer LOOP-berechenbaren Funktion Gegeben sei das LOOP-Programm x 0 := x 1 + 0; LOOP x 2 DO x 0 := x 0 + 1 END Man erkennt leicht, dass das Programm mit dem Wert der Summe der Anfangsbelegungen der Variablen x 1 und x 2 in der Variablen x 0 stoppt. Es berechnet also die Addition +: N 2 N vermöge (x 1, x 2 ) +(x 1, x 2 ) = x 1 + x 2. Also ist die Addition LOOP-berechenbar. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 46
Zweites Beispiel einer LOOP-berechenbaren Funktion Gegeben sei das LOOP-Programm LOOP x 2 DO LOOP x 1 DO x 0 := x 0 + 1 END END Eine genaue Betrachtung des Programms zeigt, dass damit die Funktion : N 2 N vermöge (x 1, x 2 ) (x 1, x 2 ) = x 1 x 2, berechnet wird. Die Multiplikation ist damit also LOOP-berechenbar. Man beachte, dass die Anfangsbelegung der Variablen x 0 Definition 0 ist. Das wird hier gebraucht und verwendet. natürlich laut R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 47
Drittes Beispiel einer LOOP-berechenbaren Funktion Das Konstrukt IF x 1 = 0 THEN A ELSE B END wird durch das LOOP-Programm x 2 := 1; x 3 := 0; LOOP x 1 DO x 2 := 0; x 3 := 1 END; LOOP x 2 DO A END; LOOP x 3 DO B END simuliert. Dabei sind die Variablen x 2 und x 3 natürlich nicht in den Programmen A und B enthalten. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 48
Aussagen über LOOP-berechenbarer Funktionen Jede von einem LOOP-Programm berechnete Funktion ist total. (Da die Anzahl der Abläufe einer LOOP-Schleife endlich ist, stoppt das Programm bei jeder Eingabe.) Es gibt (intuitiv) berechenbare Funktionen, die nicht LOOP-berechenbar sind. (z.b. jede berechenbare Funktion, die nicht total ist) Es gibt totale und (intuitiv) berechenbare Funktionen, die nicht LOOPberechenbar sind. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 49
WHILE-Programme: Syntaktische Komponenten WHILE-Programme bestehen aus folgenden Zeichen (syntaktischen Komponenten): Variablen: x 0 x 1 x 2... Konstanten: 0 1 2... Trennsymbole: ; := Operationssymbole: + Schlüsselwörter: LOOP WHILE DO END R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 50
WHILE-Programme: Syntax Die Syntax von WHILE-Programmen wird wie folgt induktiv definiert. (i) Jede Wertzuweisung der Form x i := x j + c bzw. x i := x j c ist ein WHILE-Programm, wobei c eine Konstante ist. (ii) Sind P 1, P 2 WHILE-Programme, dann sind auch P 1 ; P 2 und LOOP x i DO P 1 END und WHILE x i 0 DO P 1 END WHILE-Programme. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 51
WHILE-Programme: Semantik, Teil i) Jede Wertzuweisung der Form x i := x j + c wird wie üblich interpretiert: der neue Wert der Variablen x i berechnet sich als Summe des Wertes der Variablen x j und der Konstanten c, wobei der Wert in der Variablen x j erhalten bleibt. Die Wertzuweisung x i := x j c wird analog interpretiert, wobei sich aber die Werte nach der sogenannten modifizierten Differenz, die wie folgt definiert ist { n 1 n 2 falls n 1 n 2, n 1 n 2 = 0 sonst, berechnen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 52
WHILE-Programme: Semantik, Teil ii) Ein WHILE-Programm der Form P 1 ; P 2 soll die Hintereinanderausführung der Programme P 1 und P 2 bedeuten, also zuerst wird das Programm P 1, dann das Programm P 2 ausgeführt. Ein WHILE-Programm der Form LOOP x i DO P 1 END bedeutet, dass das Programm P 1 sooft ausgeführt wird, wie der Wert der Variablen x i zu Beginn angibt. Änderungen des Wertes der Variablen x i haben also keinen Einfluss auf die Anzahl der Wiederholungen. Ein WHILE-Programm der Form WHILE x i 0 DO P 1 END bedeutet, dass das Programm P 1 solange ausgeführt wird, wie der Wert der Variablen x i ungleich Null ist. Es findet also vor jedem erneuten Durchlauf des Programms P 1 eine Abfrage der Variablen x i statt. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 53
WHILE-berechenbare Funktionen Eine Funktion f : N k N, k N, heißt WHILE-berechenbar, falls es ein WHILE-Programm P gibt, das f in dem Sinne berechnet, dass P, gestartet mit n 1, n 2,..., n k in den Variablen x 1, x 2,..., x k und 0 in den restlichen Variablen, mit dem Wert f(n 1, n 2,..., n k ) in der Variablen x 0 stoppt. Ist f(n 1, n 2,..., n k ) dagegen nicht definiert, so stoppt P nicht. Schreibweise: f = f k P Folgerung: Jede LOOP-berechenbare Funktion ist WHILE-berechenbar. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 54
1. Beispiel einer WHILE-berechenbaren Funktion Das WHILE-Programm x 3 := x 1 5; WHILE x 3 0 DO x 1 := x 1 + 1 END; LOOP x 1 DO x 0 := x 0 + 1 END; LOOP x 2 DO x 0 := x 0 + 1 END berechnet die Funktion f : N 2 N vermöge f(x 1, x 2 ) = { x 1 + x 2 falls x 1 5, nicht definiert sonst. Folgerung: Es gibt WHILE-berechenbare Funktionen, die nicht LOOPberechenbar sind. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 55
2. Beispiel einer WHILE-berechenbaren Funktion Das WHILE-Programm x 1 := x 1 + 1; WHILE x 1 0 DO x 0 := x 0 + 1; LOOP x 2 DO x 1 := x 1 1 END END; x 0 := x 0 1 berechnet die ganzzahlige Division div : N 2 N vermöge { x 1 x x 1 div x 2 = 2 falls x 2 > 0, nicht definiert sonst. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 56
Äquivalenz von WHILE-Programmen und Turingmaschinen Satz: 1. Jede WHILE-berechenbare Funktion ist Turing-berechenbar. 2. Jede Turing-berechenbare Funktion ist WHILE-berechenbar. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 57
Simulation: WHILE-Programm durch Turingmaschine Mehrband-Turingmaschinen können Wertzuweisungen ausführen (wobei ein Band einer Variablen entspricht), Konstanten addieren und subtrahieren, hintereinander ausgeführt werden, WHILE-Schleifen ausführen. Damit kann man ein WHILE-Programm (mit k Variablen) durch eine (k-band-)turingmaschine simulieren. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 58
Simulation: Turingmaschine durch WHILE-Programm 1 Gegeben sei TM M = (Z, Σ, Γ, δ, z 1,, {z k }), wobei Z = {z 1, z 2,..., z k }, Γ = {a 1, a 2,..., a m }. Sei außerdem b eine Zahl mit b > m. Eine Turingmaschinen-Konfiguration a i1 a i2... a ip z l a j1 a j2... a jq wird durch drei Programmvariablen x, y, z mit den Werten x = (i 1 i 2... i p ) b, y = (j q j q 1... j 1 ) b, z = l repräsentiert; dabei bedeutet (i 1 i 2... i p ) b die Zahl i 1 i 2... i p in b-närer Darstellung, also x = p i µ b p µ, y = µ=1 q j µ b µ 1 µ=1 R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 59
Simulation: Turingmaschine durch WHILE-Programm 2 Stuktur des WHILE-Programmes mit Eingabe und Ausgabe auf y z := 1; WHILE z < k DO END a := y mod b; z := z; IF(z = 1 AND a = 1) THEN P 1,1 END; IF(z = 1 AND a = 2) THEN P 1,2 END;. IF(z = k 1 AND a = m) THEN P k 1,m END; Das Teilprogramm P i,j simuliert die Konfigurationsänderung für Zustand z i und Bandsymbol a j. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 60
Simulation: Turingmaschine durch WHILE-Programm 3 Stuktur des Teilprogrammes P i,j für δ(z i, a j ) = (z i, a j, L) z := i ; y := y div b; y := b y + j ; y := b y + (x mod b); x := x div b Entsprechend kann man sich die anderen Fälle vorstellen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 61
Die Churchsche These Jede intuitiv berechenbare Funktion ist Turing-berechenbar. Die Churchsche These kann naturgemäß nicht bewiesen werden. Sie wird aber durch die Tatsache gestützt, dass zahlreiche weitere Modelle der Berechenbarkeit äquivalent zur Turing-Berechenbarkeit sind, z.b. Post- und Markov-Algorithmen, Registermaschinen, partiell-rekursive Funktionen. R. Stiebe: Theoretische Informatik für ING-IF und Lehrer, 2006 62