18.09.2013 Aufrufe

Skript in PDF - Theoretische Informatik - Technische Universität ...

Skript in PDF - Theoretische Informatik - Technische Universität ...

Skript in PDF - Theoretische Informatik - Technische Universität ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

102 KAPITEL 4. CHURCHSCHE THESE<br />

4.2 RAM-Berechenbarkeit<br />

Def<strong>in</strong>ition. E<strong>in</strong>e RAM berechnet e<strong>in</strong>e Funktion f(n1, n2, . . . , nk), deren Variablen<br />

und Werte <strong>in</strong> liegen, falls die RAM auf die E<strong>in</strong>gabe n1, n2, . . . , nk hält und auf dem<br />

Ausgabeband m (nur e<strong>in</strong>e Zahl) steht, wobei f(n1, . . .,nk) = m. E<strong>in</strong>e Funktion, die<br />

von e<strong>in</strong>er (geeignet programmierten) RAM berechnet werden kann, heißt RAMberechenbar.<br />

Beispiel 1. Die Funktionen<br />

f(n, m) = n + m und f(n, m) = n ∗ m<br />

s<strong>in</strong>d RAM-berechenbar.<br />

Das Programmieren von RAMs ist zwar im Vergleich zu modernen Programmiersprachen<br />

aufwendig und kompliziert, trotzdem ist es nicht schwer zu zeigen, dass<br />

jede Funktion, die sich mit e<strong>in</strong>em PASCAL-Programm berechnen lässt, auch <strong>in</strong> e<strong>in</strong>er<br />

RAM programmiert werden kann.<br />

Obwohl Tur<strong>in</strong>gmasch<strong>in</strong>en weniger realistisch als RAMs s<strong>in</strong>d (und viel e<strong>in</strong>facher),<br />

s<strong>in</strong>d sie ke<strong>in</strong>eswegs schwächer:<br />

Satz 1. Jede RAM-berechenbare Funktion ist Tur<strong>in</strong>g-berechenbar.<br />

Beweis. Wir haben e<strong>in</strong> RAM-Programm für die Funktion f(a1, . . .,ak), und wir<br />

simulieren es mit e<strong>in</strong>er 6-Band TM mit zusätzlichem Gedächtnis wir folgt:<br />

Band 1 (E<strong>in</strong>gabeband)<br />

Band 2 (Speicher)<br />

Band 3 (Akkumulator)<br />

Band 4 (Befehlszähler)<br />

Band 5 (Hilfsband)<br />

Band 6 (Ausgabeband)<br />

$ a1 $ a2 $ . . . ak $<br />

$ $ 1 $ $$ 2 $ $ $<br />

<br />

<br />

f(a1, . . . , ak)<br />

Die TM hat also das Bandalphabet Σ = {|, $}, und die E<strong>in</strong>gabe der RAM wird<br />

mit Trennungssymbolen $ auf Band 1 geschrieben. Band 2 enthält den Speicher<br />

der RAM: falls Register Ri benutzt wurde und momentan n enthält, f<strong>in</strong>den wir auf<br />

Band 2 die Komb<strong>in</strong>ation<br />

$ $ i $ n $$, was = n bedeutet.<br />

(Wir können aber mehrere solcher Komb<strong>in</strong>ationen mit demselben i auf Band 2<br />

f<strong>in</strong>den. In diesem Fall nehmen wir nur die, die am weitesten rechts steht). Band<br />

3 enthält den Inhalt des Akkumulators und Band 4 den des Befehlszählers. Band<br />

6 ist das Ausgabeband. Das (endliche) Programm der RAM ist im zusätzlichen<br />

Gedächtnis der TM gespeichert.<br />

Anfang der Simulation: Alle Bänder außer Band 1 s<strong>in</strong>d leer. Speziell wird Befehl<br />

Nr. 0 (= 0) simuliert.<br />

Simulation der Befehle: Es wird immer der Befehl, dessen Zeilennummer auf Band<br />

4 steht, simuliert. Wir zeigen e<strong>in</strong>ige Beispiele:<br />

READ Auf Band 1 steht der Kopf unter $, jetzt bewegt er sich, bis er auf dem<br />

nächsten $ stehen bleibt, wobei die Zahl ai auf Band 3 geschrieben<br />

wird. Danach wird der Befehlszähler (Band 4) um 1 erhöht.<br />

STORE i Auf Band 2 wird nach dem letzten Symbol $ die Komb<strong>in</strong>ation i $ n $<br />

$ geschrieben, wobei n der Inhalt des Akkumulators (Band 3) ist.<br />

. . .

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!