Theoretische Informatik SS 03 Übung 3 Aufgabe 1 a) Sind die folgenden Funktionen f : partiell oder total: f(x, y) = x + y f(x, y) = x y f(x, y) = x y f(x, y) = x DIV y? Hierbei ist x DIV y = x y der ganzzahlige Anteil der Division von x durch y, also z.b. 8 DIV 3 = 2, 25 DIV 6 = 4. f(x, y) = x + y = total, da x + y für alle Werte x, y definiert ist. f(x, y) = x y = partiell, da x y für Werte x, y, x < y, falls = {0, 1, 2,...}. Für = {1, 2, 3,...} gilt sogar bei x y, x y. f(x, y) = x y = total, da x y für alle Werte x, y definiert ist. f(x, y) = x DIV y = partiell, da x DIV y für Werte x, y, x < y (somit f an dieser Stelle undefiniert), falls durch = {1, 2,...} definiert ist. Ebenfalls undefiniert ist x DIV y falls y = 0. Für = {0, 1, 2, 3,...} ist x DIV y immer noch für y = 0 undefiniert. b) Zeigen Sie unter Angabe einer Übergangsfunktion, dass die Funktion f : mit Turing-berechenbar ist. { x, x ungerade f(x) = undefiniert, x gerade δ 0 1 z 1 (z 0, 0, R) (z 0, 1, R) (z 1,, L) z 2 (z 2, 0, R) (z 3, 1, L) (z 2,, R) z 3 (z 3, 0, L) (z 3, 1, L) (z e,, R) z e - - - 1
Zunächst wird das niederwertigste Bit der Eingabe gesucht. Ist dies Eins, handelt es sich also um eine ungerade Eingabe, wird der Lese-/ Schreibkopf wieder auf das höchstwertige Eingabebit bewegt und der Endzustand z e eingenommen. Andernfalls verharrt die TM in einer Endlosschleife in Zustand z 2. Aufgabe 2 a) Warum stoppt jedes Programm in der Programmiersprache LOOP nach endlicher Zeit? x i := x j + c ist ein LOOP-Programm, für dessen Ausführung ein Rechenschritt benötigt wird, das also nach endlicher Zeit stoppt. Gegeben Sei ein LOOP-Programm P, mit endlicher Laufzeit. Dann ist die Laufzeit von LOOP x i DO P END; ebenfalls endlich, da x i mit einem Wert n i belegt ist und folglich die Schleife nur endlich oft durchlaufen wird. Sind zwei LOOP-Programme P 1 und P 2 endlicher Laufzeit gegeben, so ist die Laufzeit von P 1 ; P 2 die Summe beider Laufzeiten, also ebenfalls endlich. D.h. durch Anwendung beider Regeln können nur LOOP-Programme endlicher Laufzeit entstehen. Da jedes LOOP-Programm lediglich unter Anwendung der genannten Konzepte entsteht (endlich oft), weist jedes LOOP- Programm eine endliche Laufzeit auf. b) Geben Sie ein WHILE-Programm an, welches niemals stoppt. x := 1; WHILE x 0 DO x := 1 END; Aufgabe 3 a) Geben Sie jeweils kurze LOOP- und WHILE-Programme zur Berechnung der Funktionen x + y und x y an. Sie können hierbei die Nachfolgefunktion f(x) = x + 1 benutzen. Zuweisungen x := k, k = const., lassen sich mit Anweisungen der Form x := x l + k simulieren, wobei x l eine ungenutzte Variable ist, also nach Definition mit 0 belegt. In den folgenden Programmfragmenten kürzen wir dies durch x := k ab. 2
x + y als LOOP-Programm: LOOP y DO x := x + 1 END; Das Resultat der Berechnung ergibt sich als Wert der Variablen x. x y als LOOP-Programm: z := 0; LOOP y DO LOOP x DO z := z + 1 END; END; Das Resultat der Berechnung ergibt sich als Wert der Variablen z. x + y als WHILE-Programm: WHILE y 0 DO x := x + 1; y := y 1 END Das Resultat der Berechnung ergibt sich als Wert der Variablen x. x y als WHILE-Programm: t := x; z := 0; WHILE y 0 DO WHILE x 0 DO z := z + 1; x := x 1; END; x := t; y := y 1; END; Das Resultat der Berechnung ergibt sich als Wert der Variablen z. b) Geben Sie ein LOOP-Programm an, welches das Konstrukt simuliert. IF x = 0 THEN A END ELSE B END 3
y := 1; z := 1; LOOP x DO y := 0 END; LOOP y DO A; z:=0 END; LOOP z DO B END; Aufgabe 4 Die Ackermann-Funktion a(x, y) ist definiert durch a(0, y) = y + 1 a(x, 0) = a(x 1, 1), x > 0 a(x, y) = a(x 1, a(x, y 1)), x, y > 0 Weisen Sie die folgenden Eigenschaften nach: a) y < a(x, y) Beweis: Wir führen Induktion nach x: IA: IV: IB: 0 < y + 1 = a(0, y) y < a(x, y), y y < a(x + 1, y), y IS: 1 (IV ) < a(x, 1) 1 Def. < a(x + 1, 0) 0 < a(x + 1, 0) Dies ist der Induktionsanfang für einen Induktionsbeweis über y, innerhalb dieses Induktionsschlusses: IA(y): IV(y): 0 < a(x + 1, 0) y < a(x + 1, y) 4
IB(y): y + 1 < a(x + 1, y + 1) IS(y): In IA setzen wir für y den Wert a(x + 1, y) ein. Es gilt also: a(x + 1, y) < a(x, a(x + 1, y)) Def. = a(x + 1, y + 1) Damit gilt jedoch: y IV (y) < a(x + 1, y) < a(x + 1, y + 1) Da alle Werte ganzzahlig sind, gilt also: y + 1 < a(x + 1, y + 1) = Gilt y < a(x, y) für festes x und alle y, so gilt auch y < a(x + 1, y) für alle y. Folglich gilt y < a(x, y) für alle x, y. b) a(x, y) < a(x, y + 1) Beweis: Wir führen Induktion über x: IA: IV: IB: a(0, y) Def. = y + 1 < y + 2 Def. = a(0, y + 1) a(x, y) < a(x, y + 1) a(x + 1, y) < a(x + 1, y + 1) IS: y < a(x, y) wurde in Teilaufgabe a) bereits gezeigt. Wir setzen für x den Wert x 1 ein und für y den Wert a(x, y): a(x, y) < a(x 1, a(x, y)) Def. < a(x, y + 1) c) a(x, y + 1) a(x + 1, y) Beweis: Induktion nach y: IA: IV: a(x, 1) Def a(x + 1, 0) a(x, y + 1) a(x + 1, y) 5
IB: a(x, y + 2) a(x + 1, y + 1) IS: Bereits unter Teilaufgabe a) wurde gezeigt: y + 1 < a(x, y + 1) = y + 2 a(x, y + 1) IV a(x + 1, y) Ebenfalls bereits bewiesen wurde unter b): a(x, y) < a(x, y + 1) = a(x, y + 2) a(x, a(x + 1, y)) Def = a(x + 1, y + 1) d) a(x, y) = a(x + 1, y) Beweis: a(x, y) b) < a(x, y + 1) c) a(x + 1, y) 6