GOTO-Programm
GOTO-Programme sind spezielle Programme mit einer sehr einfachen Syntax. Dennoch spielen sie in Zusammenhang mit Berechenbarkeit eine große Rolle für die theoretische Informatik, insbesondere weil sich zeigen lässt, dass jede Turing-berechenbare Funktion GOTO-berechenbar ist.
Syntax
GOTO-Programme haben folgende Syntax in modifizierter Backus-Naur-Form:
- sind Marken (k ∈ ℕ)
ist die Menge aller GOTO-Programme gemäß obiger Definition.
Jede GOTO-berechenbare Funktion ist WHILE-berechenbar und umgekehrt.
Jede Turing-berechenbare Funktion ist GOTO-berechenbar und umgekehrt.
Erklärung der Syntax
Jedes GOTO-Programm besteht aus einer Anzahl von Anweisungen , getrennt mit jeweils einem Semikolon. Vor jeder Anweisung befindet sich eine (eindeutige) Marke , gefolgt von einem Doppelpunkt.
GOTO-Programme haben eine endliche Anzahl von Variablen und Konstanten . Es sind nur fünf verschiedene Anweisungen erlaubt:
- Zuweisung einer Variablen durch eine weitere (dieselbe oder eine andere) Variable, vermehrt um eine Konstante, etwa
- oder vermindert um eine Konstante, etwa
- .
- eine Sprunganweisung
- eine bedingte Sprunganweisung, wobei eine Variable auf Gleichheit mit einer Konstanten abgefragt wird, etwa
- und die STOP-Anweisung
- .
Konsequenz
Man kann formal beweisen, dass jedes GOTO-Programm auch durch ein äquivalentes Pascal-, C-, C++- oder Java-Programm dargestellt werden kann, und umgekehrt.
Simulation durch WHILE-Programm
Ein GOTO-Programm
M1: A1; M2: A2; ... Mk: Ak
kann durch ein WHILE-Programm der folgenden Form simuliert werden
counter := 1; WHILE counter != 0 DO IF counter = 1 THEN B1 END; IF counter = 2 THEN B2 END; ... IF counter = k THEN Bk END; IF counter = k+1 THEN counter := 0 END END
wobei
Bi = xj := xn + c; counter := counter + 1 falls Ai = xj := xn + c Bi = xj := xn - c; counter := counter + 1 falls Ai = xj := xn - c Bi = counter := n falls Ai = GOTO Mn Bi = IF xj = c THEN counter := n ELSE counter := counter + 1 falls Ai = IF xj = c THEN GOTO Mn END Bi = counter := 0 falls Ai = STOP
In WHILE-Programmen gibt es keine IF THEN END Anweisungen, diese können aber mit LOOP oder WHILE Schleifen implementiert werden. Das folgende Programm simuliert eine IF x1 = c THEN P1 END Anweisung, dabei werden drei neue Variablen xn1, xn2, xn3 verwendet.
xn1:=x1-(c-1); xn2:=x1-c; xn3:=1; LOOP xn1 DO LOOP xn2 DO xn3:=0 END; LOOP xn3 DO P1 END END
Siehe auch
Literatur
- Uwe Schöning: Theoretische Informatik – kurz gefasst. 5. Auflage. Spektrum Akademischer Verlag, Heidelberg, ISBN 978-3-8274-1824-1, 2.3 LOOP-, WHILE und GOTO-Berechenbarkeit.