TIA: Bild- und Projektionssatz (Lernziele KE6 2/4, Update)

Update: Schnitzer im Projektionssatz aufgefallen. Fixed.

Als ich die letzten Beiträge zu Kurseinheit 5 von TIA durchgegangen bin, ist mir aufgefallen, dass einige Beweise doch noch nicht so nachvollziehbar sind, wie ich das gerne hätte.

Nach dem Editieren kam ich auf eine Seitenzahl von über 20. Schon wieder. Da blieb mir also nichts anderes übrig, als den Beitrag zu KE6 erneut zu trennen. Schwierigkeiten machten mir aber die Kommentare zu den Lernzielen als alles noch ein einzelner Beitrag war. Diese zu verschieben war ohne manuellen Eingriff in die Datenbank nicht möglich.

Solltet Ihr daher auf Kommentare treffen, die nicht unbedingt zu dem Beitrag hier passen: meine Schuld. Sie gehören dann zu einem der drei anderen.

Dieser Artikel ist brandneu und die anderen Beiträge zu KE6 sind teilweise massiv überarbeitet worden. Eine erneute Lektüre könnte sich also lohnen wenn Ihr bei KE6 der theoretischen Informatik A noch strauchelt und den Sachverhalt gerne mal in anderen Worten gelesen hättet.

Lange Rede, kurzer Sinn: Das sind also die Beiträge zu Kurseinheit 6.

Dieser dreht sich komplett um den Bild- und Projektionssatz. Ursprünglich war er nicht einmal eine halbe Seite lang. Als ich den Beweis dann Schritt für Schritt nachvollzog, wuchs er auf die aktuelle Größe heran. Tja, und da ist er nun.

Lernziel 5

Charakterisierung der r.a. Mengen durch Bild- und Projektionssatz

Die Charakterisierung ist wie folgt definiert:

1. \(A \subseteq \mathbb{N}\) ist r.a. gdw. \( A = \emptyset\) oder \(A = Bild(g)\) für ein \(g \in R^{(1)}\)

2. \(A \subseteq \mathbb{N}^k\) ist r.a. gdw. es eine rekursive Menge \(B \subseteq \mathbb{N}^{k+1}\) gibt mit \(A = \{x \in \mathbb{N}^k \mid (\exists t)(x,t) \in B\}\)

Nr. 1 bedeutet, dass eine Menge \(A\) dann rekursiv ist, wenn sie von einer totalen, rekursiven Funktion \(g\) aufgezählt werden kann, d.h. dass \(A\) Bild dieser Funktion ist.

Nr. 2 ist der Projektionssatz: eine Menge ist r.a. wenn sie die Projektion einer rekursiven Menge ist. Das Bild im Skript ist relativ eindeutig wenn man weiß, nach was man schauen muss. Ich nehme hierzu ein konkretes Beispiel mit \(k=1\) und der Menge \(B = \{(1,4),(1,2),(3,3),(3,2),(3,1),(5,1),(6,1)\}\), welche aus \(7\) Tupeln besteht.

Wir haben also zwei Achsen, die wir wie in der Definition \(t\) und \(x\) nennen. So sieht es dann aus:

Das Bild ist angelehnt an das aus dem Skript, nur mit einer Sonne, die ich gleich erkläre. Im Skript steht

„Die Projektion ist der eindimensionale Schatten bei der Beleuchtung von oben“.

Wir machen aus unserem \(2\)-Tupel nun ein \(1\)-Tupel: Uns interessieren nur die \(x\)-Werte aus den Tupeln, und so kommen wir auf die 2. x-Achse im Bild für unser \(A = \{(1),(3),(5),(6)\}\) . Das ist unsere vorderste Front.

Der Projektionssatz sagt also aus:

War unsere Menge \(B\) rekursiv (entscheidbar), so ist unsere Projektion \(A\) rekursiv aufzählbar (r.a.). Die Umkehrrichtung gilt auch: Ist unsere Projektion r.a., so ist die Menge \(B\) entscheidbar.

Aber beweisen wie diese Aussagen zunächst:

1. Teilbeweis zu Nr. 1\(A\text{ ist r.a.}\Rightarrow{A=\emptyset}\) oder \(A=Bild(g)\) mit \(g\in R^{(1)}\).

Das ist umgangssprachlich am besten so auszudrücken: eine leere Menge \(A=\emptyset\) ist der Definition nach immer rekursiv/entscheidbar. Also Auch immer rekursiv aufzählbar/semi-entscheidbar. Hier gibt es für uns nichts weiter zu beweisen.

Ansonsten gilt: wenn die Menge durch eine totale Funktion aufgezählt werden kann, so ist diese Menge rekursiv-aufzählbar/semi-entscheidbar. Das ist leicht einzusehen: Semi-Entscheidbarkeit einer Menge \(A\) bedeutet ja, dass für für jedes Element aus \(A\) immer einen positiven (oder negativen, aber nicht beides gleichzeitig) Bescheid bekommen und somit auch \(A\) tatsächlich die Bildmenge der Funktion ist, die sie entscheidet: nämlich \(g\) ist.

Haben wir z.B. die Gesamtmenge der Instanzen für das Post’sche Korrespondenzproblem und wollen wir daraus die Menge der lösbaren Instanzen konstruieren, so können wir für jedes Element der Gesamtmenge die Funktion \(g\) laufen lassen, die es in jedem Fall positiv entscheidet wenn eine Lösung dafür gefunden wurde (dass wir das können, haben wir im letzten Beitrag schon gezeigt) und somit jedes Element aus der Menge \(A\), der Menge der gelösten Probleminstanzen, aufzählen.

Genau diese Definition begründet den Namen Art von Mengen: sie werden von \(g\) aufgezählt und sind damit rekursiv aufzählbar.

Das war der erste Teil. Kommen wir nun zum Umkehrschluss.

2. Teilbeweis zu Nr. 1\(A\text{ ist r.a.}\Leftarrow{A=\emptyset}\) oder \(A=Bild(g)\) mit \(g\in R^{(1)}\).

Fall 1: \(A=\emptyset\): Wir nehmen an, dass die \(A\) leer ist. Nun suchen wir eine Funktion \(d\), die für alle Eingabewerte \(n\) kein Ergebnis liefert und setzen \(A\) als Definitionsmenge dieser Funktion \(d\): \(A=Def(d)\). Damit haben wir den ersten teil gezeigt.

Fall 2: Nun nehmen wir eine totale Funktion \(g\) und setzen \(A\) als Bildmenge von \(g\): \(A=Bild(g)\). Jetzt kommt unser \(f\) ins Spiel:

\(f(y)=\mu{x}[g(x)=y]\)

Was macht \(f\)? Es gibt uns für einen Eingabewert \(y\) das kleinste \(x\), wo gilt, dass der Funktionswert von \(g\) bei der Eingabe von \(x\) genau \(y\) ist.

Man mache sich hier klar, dass egal, was \(g\) als Eingabewert bekommt, wir immer \(div\) zurückbekommen (denn die leere Menge \(A\) ist die Bildmenge von \(g\)).

\(f\) kann im Gegenzug alle Werte aus \(\mathbb{N}\) bekommen und auf alle abbilden. Diese Funktion ist offensichtlich berechenbar.

Das bedeutet: für ein \(y\in{Def(f)}\) gibt es auch ein \(x\) mit \(g(x)=y\). Da \(y\in{Bild(g)}\) ist, gilt: \(Def(f)=Bild(g)\) und \(Bild(g)\) ist somit rekursiv aufzählbar.

Und das war der zweite Teil.

1. Teilbeweis zu Nr. 2\(A\text{ ist r.a.}\Rightarrow{B}\text{ rekursiv}\)

Zeigen wir zunächst den umgekehrten Weg von Punkt 2 mit: \(A\text{ ist r.a.}\Rightarrow{B}\text{ rekursiv}\). Dafür gehen wir davon aus, dass eine Menge \(A\subseteq\mathbb{N}^k\) rekursiv aufzählbar ist:

  • Dann gibt es eine Gödelnummer \(i\) für ein \(x\in{A}\) mit \(\varphi_i(\pi^{(k)}(x))\) existiert.

Es gibt also eine Maschine mit der Nr. \(i\), die uns zum Element \(x\) eine Ausgabe beschert. Die Cantorsche Tupelfunktion \(\pi\) ist hier nur dazu da um eine evtl. Mehrstelligkeit \(k\) der Eingabe für die Maschine auf eine Stelle herunterzurechnen.

  • Gibt es die Maschine mit der Nr. \(i\), so gibt es auch selbstverständlich die dazu gehörige Schrittzahlfunktion \(SZ\), die im \(\Phi\)-Theorem benutzt wird: \(\Phi_i(\pi^{(k)}(x))\)

Kennen wir alles schon: das ist die Anzahl der Schritte, die \(\varphi_i\) bei der Eingabe von \(x\) braucht um zum Ende zu gelangen. Da die Menge \(A\) rekursiv aufzählbar ist, existiert für jedes \(x\in{A}\) diese Rechenzeitfunktion \(\Phi_i(x)\).

  • Und damit gilt: \((\exists{t})\Phi_i(\pi^{(k)}(x))\leq{t}\)

Es gibt also ein kleinstes \(t\), d.h. die minimale Anzahl der Schritte, die die Maschine \(\varphi_i\) bei der Eingabe von \(x\) rechnet um bis zum Ergebnis zu gelangen. Es gibt aber auch noch mehr \(t’s\). Eben die, die kleiner sind als die maximale Schrittzahl, die die Maschine bei der Eingabe von \(x\) rechnet um bis zur HALT-Marke zu gelangen.

  • Nun definieren wir die Menge \(B=\{(x,t)\mid\Phi_i(\pi^{(k)}(x))\leq{t}\}\)

Die Paare sind also die Eingabe \(x\) für die Maschine \(\varphi_i\) und \(t\) die Anzahl der Schritte, die die Maschine bis zum Ergebnis rechnen könnte. Sagen wir z.B. die Maschine rechnet bei der Eingabe von \(x\) genau \(5\) Schritte bis sie an der \(HALT\)-Marke ankommt, so kann \(t\leq{5}\) sein. In der Menge \(B\) würde daher \((x,1)(x,2)(x,3),(x,4),(x,5)\) liegen.

  • Nach dem \(\Phi\)-Theorem ist diese Menge \(B\) also entscheidbar.

Das sollte klar sein: das Paar \((x,t)\), also die Eingabe \(x\) und die Rechenzeit \(t\) ist entscheidbar, da wir für jedes \(x\) (wenn es in der Menge \(A\) ist) immer einen Ausgabewert haben, ist auch die maximale Schrittzahl immer gegeben. Wir können entscheiden ob die Maschine bei der Eingabe von \(x\) nach \(t\) Schritten hält oder nicht.

Anders ausgedrückt: Wir können fragen: „Hey, gilt \((x,5)?\) und \(\Phi\) prüft ab ob bei der Eingabe von \(x\) die Maschine innerhalb von \(5\) Schritten zum Ergebnis kommt und kann dann sagen „Ja, das geht!“ oder „Nein, ging nicht!“. Diese Menge ist also Entscheidbar.

Der eine Weg von Punkt 2 ist damit gezeigt.

2. Teilbeweis zu Nr. 2\({A}\text{ ist r.a.}\Leftarrow{B}\text{ rekursiv}\)

Und nun die andere Richtung: \({A}\text{ ist r.a.}\Leftarrow{B}\text{ rekursiv}\). Sei \(B\subseteq\mathbb{N}^{k+1}\) also rekursiv/entscheidbar.

  • Setzen wir die Menge \(A=\{x\in\mathbb{N}^k\mid{}(\exists{t} (x,t)\in{B}\}\)


\(B\) ist, wie wir wissen ja entscheidbar. Zu einer Eingabe erhalten wir (wenn sie zu einer r.a. Menge gehört) auch eine maximale Rechenzeit und können so prüfen ob sie \(t\) entspricht oder größer/kleiner ist. Hier ist \(A\) also die Menge der Eingaben, d.h. die ersten Elemente aus den Tupeln von \(B\), die aus Eingabe \(x\) und zugehörigem Wert für eine angenommene Rechenzeit \(t\) bestehen.

  • Nun definieren wir unsere „Projektionsfunktion“ durch

\(f(x):=\mu{t}[cf_B(x,t)=1]\)

Was tut \(f\)? Zunächst fragen wir uns, was tut \(cf_B\)? Das ist die (volle) charakteristische Funktion für die Menge \(B\). Sie gibt uns eine \(1\) zurück wenn die Maschine bei der Eingabe von \(x\) nach maximal \(t\) Schritten hält.
Und \(\mu{t}\)? Sie gibt uns das kleinste \(t\) zurück, d.h. die minimalste Anzahl an Schritten, die benötigt werden um bei der Eingabe von \(x\) von der Maschine eine Ausgabe zu erhalten, denn in unserer menge \(B\) liegen ja durchaus mehrere Kombinationen von \((x,t)\) mit den unterschiedlichsten \(t’s\).

Mit \(f(x)\) bekommen wir das also für die Eingabe \(x\) kleinste \(t\).

Der Definitionsbereich von \(f\) sind somit alle Elemente aus \(A\) und \(A\) damit rekursiv aufzählbar.

Done.

Exkurs: den Unterlagen der Uni Düsseldorf kann man den Projektionssatz auch mit einer anderen Menge \(B\) beweisen, z.B. mit \((x,z)\) (wobei \(x\) die Eingabe und \(z=\pi(y,t)\) das durch die Tupelfunktion \(\pi\) auf ein Element \(z\) zurückgeführte Paar aus Ausgabe \(y\) und Schrittzahl \(t\) ist) wenn \(T_i(x,t)\) (auch Turingprädikat genannt) erfüllt ist.

Das Turingprädikat ist genau dann erfüllt wenn Maschine \(T_i\) bei der Eingabe von \(x\) nach \(t\) Schritten mit einer Ausgabe \(y\) hält.

Im Endeffekt also nur ein kleines Upgrade unserer Menge \(B\).

Fassen wir die Ergebnisse zusammen, kommen wir so zu unserer Antwort zum Lernziel.

Antwort zum Lernziel: Der erste Teil des Projektionssatzes ist der Grund für den Begriff  „rekursiv-aufzählbar“ für eine Menge \(A\). Diese ist genau dann rekursiv-aufzählbar wenn ihre Elemente von einer totalen Funktion \(g\) aufgezählt werden können, es gilt damit \(A=Bild(g)\) und \(A\) ist r.a.

Der zweite Teil ist die Projektion, die aus den Eingabewerten \(x\) einer r.a. Menge \(A\) besteht. Da diese positiv beschieden sind, gibt es auch die zugehörige Anzahl an Schritten, die die Maschine für den positiven Bescheid brauchte. Setzen wir in den Tupeln \((x,t)\) das Element \(t\) auf Werte, die höher sind als die Schrittzahlfunktion der Maschine bei der Eingabe \(x\), so haben wir in der Menge \(B\) mehrere Tupel der Form \((x,t)\) mit festem \(x\) und variablem \(t\).

Aus diesen Elementen der Menge \(B\) bilden wir die \(x\)– und \(y\)-Achse unserer Grafik. Diese Wertekombinationen aus \(x\) und \(t\) sind entscheidbar (ich kann entscheiden ob ich zu einer positiven Eingabe \(x\) mehr als \(t\) Schritte brauche oder nicht). Das ist der Weg von einer rekursiv-aufzählbaren Menge \(A\) zu einer entscheidbaren \(B\).

Auch der Rückweg gilt: aus der Menge \(B\) mit den Elementen \((x,t)\) kann ich mir meine Eingabewerte \(x\) wieder rausholen, indem ich mich nur für das kleinste \(t\) interessiere (die Minimierungsfunktion). Damit „blende“ ich alle anderen Kombinationen mit größerem \(t\) einfach aus. Das ist die Projektion.

Merksatz: Eine Menge ist rekursiv aufzählbar wenn sie die Projektion einer entscheidbaren Menge ist.

Weiter geht es im nächsten Beitrag zum Halte- Äquivalenz- und Korrektheitsproblem, Reduzierbarkeit und Satz von Rice

TIA: Turingmaschinen, Bandmaschinen und berechenbare Wortfunktionen (Lernziele KE3, Update II)

Update 3: Korrektur nach Einwand von Phil. Finde ich super, dass Ihr nach fast 3 Jahren immer noch Fehler aufspürt und in den Kommentaren helft, die zu entfernen. Danke!

Update 2: Bitte Kommentar von Steve beachten. Grafik habe ich nun ersetzt (Marke 9 hinzugefügt), aber die Punkte für die „Endlosigkeit“ der Bänder in den Beispielen müsst Ihr euch noch dazu denken. Auf die habe ich der Übersichtlichkeit halber (ja, nur der Übersichtlichkeit wegen! Gegen den Einwand, dass meine Schreibfaulheit daran Schuld wäre, wehre ich mich entschieden(!)) in den Beispielen verzichtet 😉

Update: Flussdiagramm Lernziel 2 abgeändert. Danke Basti!

Nun kommen wir zu den Turing- und Bandmaschinen.

Wir nähren uns also der Essenz des ersten Teils der theoretischen Informatik. Die folgenden Beiträge wurden für diese Kurseinheit bereits erstellt und sind in den passenden Lernzielen entsprechend verlinkt.

Ich empfehle daher sich einfach mal entlang dieses Beitrags zu hangeln und die Details dann entsprechen der Verlinkung aus dem anderen Beitrag zu holen.

Lernziel 1

Erläuterung der Definition einer Turingmaschine

Das, was im oben verlinkten Beitrag steht, fassen wir hier noch einmal kurz zusammen, da wir dort nur die Einbandmaschine im Detail beschrieben haben.

Die Turingmaschine (Mehrbandmaschine) ist definiert als:

\(M=(F,(\Sigma^{*})^k,\Sigma^{*},EC^{(k)},AC)\)
  • Das \(F\) der Turingmaschine ist unser Flussdiagramm
  • \((\Sigma^{*})^{k}\) sind unsere beliebig langen \(k\) Worte über dem Alphabet \(\Sigma\), welche später auf die \(k\) Bänder geschrieben werden.
  • Die Turingmaschine operiert auf unendlichen Folge von Bändern als Datenspeicher mit dem darauf verwendeten Arbeitsalphabet \(\Gamma\).
  • Die Turingmaschine hat folgende Eingabecodierung: \(EC^{(k)}:(\Sigma^{*})^k\rightarrow D\), definiert als
    \(EC^{(k)}(x_1,…,x_k):=((\epsilon,B,\epsilon),(\epsilon,B,x_1),…,(\epsilon,B,x_k),(\epsilon,B,\epsilon))\)
    Das bedeutet nichts anderes, als dass wir jedes Eingabewort auf jeweils ein Band schreiben und alle anderen Bänder leer sind.
    Beispiel: \(EC^{(3)}(aaa,b,bba):=((\epsilon,B,\epsilon),(\epsilon,B,aaa),(\epsilon,B,b),(\epsilon,B,bba),…,(\epsilon,B,\epsilon))\)
    Initial steht also der Lesekopf über dem ersten Blank.
  • Die Turingmaschine hat folgende Ausgabecodierung \(AC\): das längste Wort auf Band \(0\) , welches direkt links vom Lesekopf steht und nur Zeichen aus dem Alphabet \(\Sigma\) beinhaltet. Lesen wir die Ausgabe also zurück, so stoppen wir beim \(B\); die bis dahin gelesenen Zeichen sind unsere Ausgabe.
  • Die Turingmaschine besteht nur aus folgenden Befehlen:
    • \(i:L\) Lesekopf auf Band \(i\) ein Feld nach links
    • \(i:R\) Lesekopf auf Band \(i\) ein Feld nach rechts
    • \(i:a\) Schreibe auf Band \(i\) das Zeichen \(a\) unter den Kopf
    • \(i:a?\) Teste auf Band \(i\), ob das Zeichen \(a\) unter dem Kopf steht

Achtung: sollte bei einer Links- oder Rechtsbewegung dann plötzlich ein \(\epsilon\) unter dem Lesekopf stehen, wird ein Blank \(B\) daraus, da \(\epsilon\) nicht zum Alphabet gehört.

Der Einwand vom Phil in den Kommentaren ist berechtigt. \(\epsilon\) gehört nicht zum Alphabet und wird nur für die Darstellung als Tripel \((u,v,w)\) benutzt (siehe letzter Kommentar).

Ist doch nicht so schwer, oder. Beispiel?

Beispiel: Turingmaschine \(M=(F,(\Sigma^{*})^k,\Sigma^{*},EC^{(k)},AC)\)

Alphabet \(\Sigma=\{1,0\}\), besteht nur aus \(1\) oder \(0\)

Anzahl der Arbeitsbänder und somit auch unserer Worte: \(k=2\)

Arbeitsalphbet \(\Gamma\), dass aus unserem \(\Sigma\) und einem Blank \(\{B\}\) besteht.

Die oben definierte Eingabecodierung \(EC\)

Die oben definierte Ausgabecodierung \(AC\)

Und unserem Flussdiagramm \(F\):

Download: JFLAP-Datei Turing-Maschine 111.

Sieht etwas kompliziert aus, ist es aber nicht. Sicherlich könnte man das alles auch etwas einfacher gestalten.

Was tut die Maschine? Es zählt die Einsen, die auf den Bändern \(1\) und \(2\) auf gleicher Position stehen und schreibt dann eine \(1\) auf Band \(0\). Bei jedem Schritt werden die Zeichen auf Band \(1\) und \(2\) jedoch auch entfernt.

Würden wir die Maschine also mit \(0100101\) und \(0000100\) starten, so hätten wir am Ende die Ausgabe \(1\) auf Ausgabeband \(0\). Würden wir als Eingabe aber \(0100101\) und \(1010010\) wählen, so wäre das Ausgabeband leer.

Formal ausgedrückt bedeutet es

\((1,(\epsilon,B,\epsilon),(B,0100101,B),(B,000100,B))\) \(\vdash^*(6,(1,B,\epsilon),(\epsilon,B,\epsilon),(\epsilon,B,\epsilon))\)

Ihr kennt die \(\vdash^{*}\)-Notation ja bereits, aber dennoch zur Auffrischung: es bedeutet, dass ausgehend vom Marker \(1\) mit einem leeren Ausgabeband und \(0100101\) auf Band \(1\), sowie \(0000100\) auf Band \(2\), wir am Ende in Marker \(6\) (unsere \(HALT\)-Marke) landen und dabei folgende Bandbelegung haben: auf Band \(0\) steht eine \(1\), Band \(1\) und \(2\) sind leer.

Und so sieht der 2. Fall (\(0100101\) und \(1010010\)) aus:

\((1,(\epsilon,B,\epsilon),(B,0100101,B),(B,1010010,B))\) \(\vdash^*(6,(\epsilon,B,\epsilon),(\epsilon,B,\epsilon),(\epsilon,B,\epsilon))\)

Es befand sich keine \(1\) auf der gleichen Position auf beiden Bändern, so ist Band \(0\) am Ende der Berechnung ebenfalls leer.

Fertig!

Antwort zum Lernziel: das Flussdiagramm einer Turingmaschine besteht aus vier verschiedenen Befehlen (gehe links/rechts, schreibe Zeichen \(a\), prüfe ob Zeichen \(a\) auf dem Band steht), die auf den Bändern ausgeführt werden können. Die initiale Belegung belegt immer nur Band \(1-k\), wobei das Ausgabeband \(0\) leer bleibt und erst während der Berechnung beschrieben wird (oder eben nicht).

Die Worte, die auf den Bändern stehen können, sind über dem Alphabet \(\Sigma\) gebildet. Zusätzlich zu den Zeichen aus \(\Sigma\) wird auch noch das Blank-Zeichen \(B\) im Arbeitsalphabet \(\Gamma\) auf den Bändern verwendet.

Lernziel 2

Nachweis der Berechenbarkeit einfacher Wortfunktionen

Auch ist in diesem Beitrag bereits beschrieben, wie man das nachweisen kann. Das Verfahren ist ähnlich dem Beispiel für die Einzelschrittfunktion und dem Beweis der Addition mit einer Registermaschine, wo man Behauptungen aufstellt und diese durch vollständige Induktion beweist.

Formal ausgedrückt müssen wir zeigen, dass eine Wortfunktion dann berechenbar ist wenn es eine Turingmaschine gibt, die sie berechnet.

Eine Wortfunktion \(f:\subseteq(\Sigma^*)^k\rightarrow\Sigma^*\) heißt berechenbar, gdw. es eine Turingmaschine \(M\) gibt mit \(f=f_M\).

Beispiel: \(f(x)=1^{\#1(x)}\)

Wir haben als Ausgabe der Wortfunktion einfach nur die Anzahl der Einsen aus dem Wort \(x\).

Um zu beweisen, dass die berechenbar ist, müssen wir also eine Turingmaschine angeben, die den gleichen Ausgabewert hat wie unsere Funktion, so dass am Ende eben gilt: \(f=f_M\).

Das ist unser Flussdiagramm für diese äußerst komplizierte Konstruktion:

KE3LE2

Und nun stellen wir uns die Frage, was wir beweisen wollen:

Behauptung: Für alle \(x\in\Sigma^{*}\) gilt

\((1,(\epsilon,B,\epsilon),(\epsilon,B,x))\vdash^*(6,(1^{\#1(x)},B,\epsilon),(x,B,\epsilon),(\epsilon,B,\epsilon),…)\)

Wir landen also beider Eingabe von \(x\) nach endlich vielen Schritten in Marker \(6\) und haben auf dem Ausgabeband die Anzahl der Einsen von \(x\), während auf Band \(1\) links vom Kopf unsere Eingabe steht, die wir gelesen haben.

Beweis

\(n=lg(x)\), d.h. wir zeigen die Korrektheit über die Länge unserer Eingabe \(x\).

\(n=0\): dabei ist die Eingabe leer, d.h. \(x=\epsilon\) und wir landen direkt in \((6,(\epsilon,B,\epsilon),(\epsilon,B,\epsilon),(\epsilon,B,\epsilon),…)\)

\(n\rightarrow n+1\): nun nehmen wir an, dass wir für alle Worte der Länge \(n\) über \(\Sigma\), d.h. für alle \(x\in W_n(\Sigma)\) die obige Behauptung gezeigt haben.

Jetzt können wir einen Schritt weiter gehen und \(x\in{W_{n+1}}(\Sigma)\) setzen. Dann gibt es ein \(x^{‚}\in{W_{n}}(\Sigma)\) und ein \(a\) aus \(\Sigma\) mit \(x=x^{‚}a\) mit

\((1,(\epsilon,B,\epsilon),(\epsilon,B,x^{‚}a))\vdash^*(6,(1^{\#1(x^{‚}a)},B,\epsilon),(x^{‚}a,B,\epsilon),(\epsilon,B,\epsilon),…)\)

wenn \(a=1\) und

\((1,(\epsilon,B,\epsilon),(\epsilon,B,x^{‚}a))\vdash^*(6,(1^{\#1(x^{‚})},B,\epsilon),(x^{‚}a,B,\epsilon),(\epsilon,B,\epsilon),…)\)

wenn \(a=0\).

Damit gilt die Behauptung für alle \(x\in{W_{n+1}}(\Sigma)\). Und wir haben \(f=f_M\) bewiesen.

Warum ist das so?

Es sieht zwar etwas kompliziert aus, ist es aber nicht wirklich. Schauen wir uns den ersten Fall doch mal genauer an:

Erklärung:

Wir haben ein \(x\in{W_{n}}(\Sigma)\), d.h. unser \(x\) mit der Länge \(n\) endet entweder mit einer \(1\) oder einer \(0\). Mehr Möglichkeiten haben wir nicht, denn das sind die einzigen Zeichen in unserem Alphabet \(\Sigma\).

Nehmen wir unser \(x\in{W_{n+1}}(\Sigma)\), d.h. es ist um ein Zeichen länger, ändert sich an der Anzahl der Möglichkeiten etwas? Nein, unser „\(+1\)“ endet immer noch entweder mit einer \(1\) oder einer \(0\).

Jetzt kommt unsere Fallunterscheidung ins Spiel mit einem Zeichen aus \(a\in\Sigma\), dass nur \(1\) oder \(0\) sein kann. Damit ist in jedem Fall \(x=x^{‚}a\), denn \(lg(x)=n+1\) und \(lg(x^{‚}a)=n+1\).

Wie sieht denn unsere Ausgabe am Ende aus wenn wir \(a=1\) haben? Auf dem Ausgabeband steht dann die Anzahl der Einsen von \(x^{‚}\) und \(a\), also \(1^{\#1(x^{‚}a)}\). Und bei \(a=0\)? Genau! Nur die Anzahl der Einsen von \(x^{‚}\), genau \(1^{\#1(x^{‚})}\).

Wenn wir es nun genau nehmen, gilt \(f=f_M\) noch nicht, denn

\(f(10111)=1111\), während

\(f_M=(6,(1111,B,\epsilon),(10111,B,\epsilon),(\epsilon,B,\epsilon),…)\)

Was tun? Hier hilft unsere Ausgabecodierung \(AC\) (Definition siehe oben), denn \(AC((6,(1111,B,\epsilon),(10111,B,\epsilon),(\epsilon,B,\epsilon),…))=1111\).

Jetzt erst gilt \(f=f_M\)!

Antwort zum Lernziel: um eine Wortfunktion als berechenbar nachzuweisen, müssen wir eine Turingmaschine angeben, die sie berechnet. Der formale Nachweis wird mittels vollständiger Induktion erbracht, indem man zeigt, dass für alle Eingaben  das passende Ergebnis am Ende der Berechnung (unser geliebtes Zeichen \(\vdash^*\)) auf dem Ausgabeband steht.

Lernziel 3

Erläuterung der Definition einer Bandmaschine

Hier hatten wir auch bereits in diesem Beitrag Vorarbeit geleistet. Der Unterschied zu Turingmaschinen mit \(k\) Arbeitsbändern ist nicht groß. Wir passen die Ein- und Ausgabecodierung an und ändern die Befehle so ab, dass sie nur auf Band \(0\) arbeiten.

Aus der Eingabecodierung für Mehrbandmaschinen mit

  • \(EC^{(k)}(x_1,…,x_k):=((\epsilon,B,\epsilon),(\epsilon,B,x_1),…,(\epsilon,B,x_k),(\epsilon,B,\epsilon))\)

wird ganz einfach

  • \(EC^{(k)}(x_1,…,x_k):=(\epsilon,B,x_1B…B,x_k)\).

Und nun zu den Befehlen:

  • \(i:L\rightarrow L\)
  • \(i:R\rightarrow R\)
  • \(i:a\rightarrow a\)
  • \(i:a?\rightarrow a?\)

Antwort zum Lernziel: die Befehle einer Turingmaschine (Mehrband) behalten auch bei Bandmachinen (Einband) ihre Gültigkeit. Nur arbeiten diese statt auf \(k+1\) (Ausgabeband + \(k\) Arbeitsbänder) Bändern nun auf einem einzigen Band \(0\).

Ebenso verhält es sich mit der Eingabecodierung, die angepasst werden muss. Für die Ausgabecodierung ändert sich nichts, es bleibt auf Band \(0\) als das längste Wort links vom Lesekopf.

Lernziel 4

Erläuterung der Grundidee des Beweises Turing-berechenbar = Band-berechenbar

Das ist Turings ursprüngliche Konstruktion.

Wenn wir doch schon so schön mit Mehrbandmaschinen arbeiten könne, wozu dann Einband? Weil beide Maschinen von der Berechnungsstärke äquivalent sind und letztere weniger kompliziert sind. Persönlich finde ich, dass man mit den Mehrbandmaschinen einfacher hantieren kann, aber sei es drum.

Die Grundidee des Beweises habe ich bereits hier beschrieben, so dass wir uns nur noch um das Lernziel kümmern müssen. Formal ausgedrückt lässt sich festhalten:

Zu jeder Einbandmaschine \(M\) gibt es eine Mehrbandmaschine \(M^{‚}\) mit dem gleichen Bandalphabet wie \(M\), so dass gilt: \(f_M=f_{M^{‚}}\).

Zu jeder Mehrbandmaschine \(M^{‚}\) gibt es eine Einbandmaschine \(M\), so dass gilt: \(f_M=f_{M^{‚}}\).

Damit haben wir uns auch schon enttarnt: wir können die Mehrbandmaschine durch ein vergrößertes Bandaphabet simulieren. Anders herum bleibt das Bandalphabet natürlich gleich, denn es ist ja bereits groß.

Antwort zum Lernziel: die Simulation der Mehrband- in einer Einbandmaschine erfolgt auf Basis eines vergrößerten Alphabets für die Darstellung der Position der Leseköpfe auf den simulierten Bändern.

Damit erhalten wir „Spuren“ auf dem einen Band für die eig. Eingabe und zusätzliche Spuren für die Position der Leseköpfe um die getrennt beweglichen Leseköpfe auf den vormals \(k\) Spuren zu simulieren.

Diese neuen Symbole, die wir für die Markierung der Leseköpfe brauchen werden Hilfssymbole genannt und bereichern unser Arbeitsalphabet \(\Gamma\) wenn wir sie nicht durch eine Codierung eliminiert haben (siehe nächstes Lernziel).

Lernziel 5

Erläuterung der Grundidee des Beweises, dass man bei Bandmaschinen ohne Hilfssymbole auskommt

Auch hier ist im alten Beitrag die Grundidee bereits beschrieben worden. Ich fasse mich daher sehr schmallippig.

Antwort zum Lernziel: die neuen Hilfssymbole für die simulierte Kopfpositionen der Bänder einer Mehrbandmaschine werden anstatt durch Aufblähen des Arbeitsalphabets mit neuen Zeichen einfach durch eine erweiterte Länge der Wörter über dem alten Arbeitsalphabet \(\Gamma\) codiert.

Dadurch ist es möglich, dass das Bandalphabet einer Einbandmaschine bei \(\Gamma=\Sigma\cup\{B\}\) bleibt.

Diesen Beitrag habe ich etwas zügig getippt, es könnten sich also ein paar Fehler eingeschlichen haben. Wer etwas sieht: ab damit in die Kommentare. Danke!