Folien - Lehrstuhl Informatik 1 - RWTH

Werbung
Mächtigkeit von WHILE-Programmen
Prof. Dr. Berthold Vöcking
Lehrstuhl Informatik 1
Algorithmen und Komplexität
RWTH Aachen
26. November 2009
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
1 / 20
Maschinenmodelle und Programmiersprachen
Programmiersprachen
C, C++, C#
Maschinenmodelle
Turing-Maschine
Java
Registermaschine
PHP, JavaScript
Endliche Automaten
PostScript
SQL
Alle (genannten) Programmiersprachen sind nicht mächtiger
als TM/RAM.
Gibt es Funktionen, die sie nicht berechnen können?
Was ist überhaupt ein Algorithmus?
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
2 / 20
Turing-mächtige Programmiersprachen
Definition
Eine Programmiersprache wird als Turing-mächtig bezeichnet,
wenn jede Funktion, die durch eine TM berechnet werden kann,
auch durch ein Programm in dieser Programmiersprache berechnet
werden kann.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
3 / 20
Die Programmiersprache WHILE – Syntax
Elemente eines WHILE-Programms
Variablen x0 x1 x2 . . .
Konstanten −1 0 1
Symbole ; := + 6=
Schlüsselwörter WHILE DO END
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
4 / 20
Die Programmiersprache WHILE – Syntax
Induktive Definition – Induktionsanfang
Zuweisung
Für jedes c ∈ {−1, 0, 1} ist die Zuweisung
xi := xj + c
ein WHILE-Programm.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
5 / 20
Die Programmiersprache WHILE – Syntax
Induktive Definition – Induktionsschritte:
Hintereinanderausführung
Falls P1 und P2 WHILE-Programme sind, dann ist auch
P1 ; P2
ein WHILE-Programm.
WHILE-Konstrukt
Falls P ein WHILE-Programm ist, dann ist auch
WHILE xi 6= 0 DO P END
ein WHILE-Programm.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
6 / 20
Die Programmiersprache WHILE – Semantik
Ein While-Programm P berechnet eine k-stellige Funktionen der
Form f : Nk → N.
Die Eingabe ist in den Variablen x1 , . . . , xk enthalten.
Alle anderen Variablen werden mit 0 initialisiert.
Das Resultat eines WHILE-Programms ist die Zahl, die sich
am Ende der Rechnung in der Variable x0 ergibt.
Programme der Form xi := xj + c sind Zuweisungen des
Wertes xj + c an die Variable xi .
In einem WHILE-Programm P1 ; P2 wird zunächst P1 und
dann P2 ausgeführt.
Das Programm WHILE xi 6= 0 DO P END hat die Bedeutung,
dass P solange ausgeführt wird, bis xi den Wert 0 erreicht.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
7 / 20
Beispiel eines WHILE-Programms
Was berechnet dieses WHILE-Programm?
WHILE x2 6= 0 DO
x1 := x1 + 1;
x2 := x2 − 1
END;
x0 := x1 + 0
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
8 / 20
Die Programmiersprache WHILE – Mächtigkeit
Satz
Die Programmiersprache WHILE ist Turing-mächtig.
Lemma I (vgl. Übungsaufgabe 2.3)
Eine TM kann durch eine RAM mit konstant vielen Registern und
eingeschränktem Befehlssatz
LOAD, CLOAD, STORE, CADD, CSUB,
GOTO, IF c(0) 6= 0 GOTO, END
simuliert werden.
Lemma II
Ein WHILE-Programm kann eine eingeschränkte RAM (s. o.) simulieren.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
9 / 20
Simulation von TM durch eingeschränkte RAM
Beweisidee:
Annahme: Σ = {0, 1}, Γ = {0, 1, B}
Speicherung von Konfiguration w1 · · · wj−1 qk wj · · · wn
Register 1 Zustand der TM: k
Register 2 Bandinschrift
links vom Kopf:
Pj−1
j−i−1
code(w
i) · 3
i=1
Register 3 Bandinschrift
rechts vom Kopf:
Pn
i−j
i=j code(wi ) · 3
code(B) = 0
code(0) = 1
code(1) = 2
Zugriff auf das Band mittels CADD, CMULT, CDIV, CMOD
(einfach mit vorhandenen Befehlen zu implementieren).
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
10 / 20
Simulation von TM durch eingeschränkte RAM
TM
Zustand: q13
Bandinschrift:
BBB 1 1 0 1 1 0 1 BB
RAM
c(1) = 13
c(2) = (000221)3
c(3) = (002122)3
Ablauf eines Simulationsschrittes:
IF-Abfrage, welcher Zustand, welches Zeichen unter dem Kopf
Aktualisierung des Zustands
Änderung des Zeichens unter dem Kopf, Verschieben des
Kopfes
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
11 / 20
Simulation von TM durch eingeschränkte RAM
TM
Zustand: q13
Bandinschrift:
0 0 0 2 2 1 2 2 1 2 0 0
RAM
c(1) = 13
c(2) = (000221)3
c(3) = (002122)3
Ablauf eines Simulationsschrittes:
IF-Abfrage, welcher Zustand, welches Zeichen unter dem Kopf
Aktualisierung des Zustands
Änderung des Zeichens unter dem Kopf, Verschieben des
Kopfes
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
11 / 20
Simulation von TM durch eingeschränkte RAM
TM
Zustand: q13
Bandinschrift:
0 0 0 2 2 1 2 2 1 2 0 0
RAM
c(1) = 13
c(2) = (00022)3
c(3) = (0021221)3
Ablauf eines Simulationsschrittes:
IF-Abfrage, welcher Zustand, welches Zeichen unter dem Kopf
Aktualisierung des Zustands
Änderung des Zeichens unter dem Kopf, Verschieben des
Kopfes
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
11 / 20
Simulation von TM durch eingeschränkte RAM
TM
Zustand: q13
Bandinschrift:
0 0 0 2 2 2 2 2 1 2 0 0
RAM
c(1) = 13
c(2) = (0002)3
c(3) = (00212222)3
Ablauf eines Simulationsschrittes:
IF-Abfrage, welcher Zustand, welches Zeichen unter dem Kopf
Aktualisierung des Zustands
Änderung des Zeichens unter dem Kopf, Verschieben des
Kopfes
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
11 / 20
Beweis Turing-Mächtigkeit von WHILE-Programmen
Lemma II
Ein WHILE-Programm kann eine eingeschränkte RAM simulieren.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
12 / 20
Beweis Turing-Mächtigkeit von WHILE-Programmen
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
13 / 20
Beweis Turing-Mächtigkeit von WHILE-Programmen
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
14 / 20
Beweis Turing-Mächtigkeit von WHILE-Programmen
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
15 / 20
Beweis Turing-Mächtigkeit von WHILE-Programmen
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
16 / 20
Ausblick: Die Programmiersprache LOOP
Syntax
Änderung im Vergleich zu WHILE-Programmen:
Wir ersetzen das WHILE-Konstrukt durch ein LOOP-Konstrukt der
folgenden Form:
LOOP xi DO P END ,
wobei die Variable xi nicht in P vorkommen darf.
Semantik
Das Programm P wird xi mal hintereinander ausgeführt.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
17 / 20
Ausblick: Die Programmiersprache LOOP – Mächigkeit
Definition
Die durch LOOP-Programme berechenbaren Funktionen werden
als LOOP-berechenbar oder primitiv-rekursiv bezeichnet.
Vermutung von Hilbert (1926): Die Klasse der primitiv rekursiven
Funktionen stimmt mit der Klasse der rekursiven (berechenbaren)
Funktionen überein.
Ackermann (1929): Diese Vermutung stimmt nicht!
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
18 / 20
Ausblick: Die Ackermann-Funktion – Definition
Definition
Die Ackermannfunktion A : N2 → N ist folgendermaßen definert:
A(0, n)
= n+1
A(m + 1, 0)
= A(m, 1)
A(m + 1, n + 1) = A(m, A(m + 1, n))
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
für n ≥ 0
für m ≥ 0
für m, n ≥ 0
26. November 2009
19 / 20
Ausblick: Berechenbarkeit der Ackermannfunktion
Beobachtung
Die Ackermannfunktion ist rekursiv.
Begründung?
Satz
Die Ackermannfunktion ist nicht primitiv rekursiv.
Beweis folgt.
Berthold Vöcking, Informatik 1 ()
Vorlesung Berechenbarkeit und Komplexität
26. November 2009
20 / 20
Herunterladen