TI: Entscheidbarkeit und charakteristische Funktion

Inhaltsverzeichnis

  1. Berechenbarkeit von Zahlen- und Wortfunktionen
  2. Entscheidbarkeit (rekursiv) und Semi-Entscheidbarkeit (rekursiv aufzählbar)
  3. Erstes und zweites Diagonalargument von Cantor

Im Skript wird dieses Thema schnell durchgekauft. Persönlich halte ich es jedoch für sehr wichtig, sich diese Begrifflichkeiten unbedingt zu merken. Also fangen wir auch direkt an:

Berechenbarkeit

Noch einmal kurz als Wiederholung bzgl. Berechenbarkeit: dem Begriff selbst liegen Berechnungsmodelle zugrunde. Wir haben hier die LOOP-Berechenbarkeit (primitiv rekursive Funktionen) und die WHILE-Berechenbarkeit ($$\mu$$-rekursive Funktionen). Während jedes LOOP-Programm durch ein WHILE-Programm ersetzt werden kann, kann nicht jedes WHILE-Programm durch ein LOOP-Programm ersetzt werden, d.h. die LOOP-Programme sind eine echte Untermenge der WHILE-Programme. Wann ist eine Funktion denn nun berechenbar? Genau dann:

Eine (ggf. partielle) Zahlenfunktion $$f : \subseteq \mathbb{N}^k \rightarrow \mathbb{N}$$ ist genau dann berechenbar, wenn es eine Registermaschine $$M$$ gibt, die die Funktion berechnet. Wenn also $$f = f_M$$ gilt.

Und was ist mit Wortfunktionen für Turing-Maschinen?

Eine (ggf. partielle) Wortfunktion $$g : \subseteq (\Sigma^*)^k \rightarrow \Sigma^*$$ ist genau dann berechenbar, wenn es eine Turing-Maschine $$T$$ gibt, die die Funktion berechnet. Wenn also $$g =g_T$$ gilt.

Aber eig. brauchen wir die Turing-Maschinen garnicht. Warum? Zauberwort: Standardnummerierung. Wir können dadurch die Berechenbarkeit von Worten auf die Berechenbarkeit von Zahlen zurückführen indem wir die Wortfunktionen mittels Standardnummerierung in Zahlen codieren und diese mit Registermaschinen berechnen. Da die Standardnummerierung bijektiv ist, können wir den Spaß auch anders herum aufziehen und unsere Zahlenfunktionen durch Turing-Maschinen berechnen lassen nachdem wir die Zahlenfunktionen in Worte codiert haben.

Schaut dazu in den entsprechenden Beitrag für die Kurseinheit 4. Dort wird das Thema dann etwas genauer behandelt. Wichtig ist, dass man sich den Zusammenhang zwischen Wort- und Zahlenfunktionen und das Bindeglied (Standardnummerierung) zwischen diesen merkt.

(Semi-) Entscheidbarkeit

Wir unterscheiden hier die Entscheidbarkeit und die Semi-Entscheidbarkeit. Ihr Kern ist die charakteristische Funktion. Wozu brauchen wir sie? Der Begriff „Entscheidbarkeit“ ist auf Mengen fokusiert, für uns sind aber eher Funktionen spannend, wo nur der Begriff „Berechenbarkeit“ verwendet wird. Die charakteristische Funktion ist das Bindelglied zwischen diesen Mengen und der Funktionen (den Satz habe ich aus dem Buch von Dirk W. Hoffmann geklaut). Formalisieren wir das:

Eine Menge $$ T \subseteq M$$ ist entscheidbar/rekursiv wenn die charakteristische Funktion $$\chi_T: M \rightarrow \{0,1\}$$ definiert durch

$$\chi_T(t)=\begin{cases} 1, & \mbox{ falls } t \in T \\ 0, & \mbox{ sonst}\end{cases}$$

berechenbar ist (Achtung: sie muss berechenbar sein!)

Was ist damit gemeint? Damit ist gemeint, dass man hier eindeutig entscheiden kann ob ein Element $$t$$ aus der Menge $$M$$ in der Menge $$T$$ sind. Es wird nach endlicher Zeit also eindeutig entschieden ob JA oder NEIN.

Beispiel: ob eine Zahl gerade ist oder eine Primzahl ist, ist entscheidbar/rekursiv (Wikipedia). Diese Zahlen sind auch rekursiv aufzählbar (denn ich kann sie ja aufzählen).

Und nun zur Semi-Entscheidbarkeit/rekursiver Aufzählbarkeit.

Eine Menge $$T$$ ist semi-entscheidbar/rekursiv aufzählbar wenn die partielle charakteristische Funktion $$\chi^{‚}_T: M \rightarrow \{1\}$$ definiert durch

$$\chi^{‚}_T(t)=\begin{cases} 1, & \mbox{ falls } t \in T \\ \perp, & \mbox{ sonst}\end{cases}$$

Diesen Spaß nennt man also semi-entscheidbar.  D.h. wenn das Element $$t$$ aus $$M$$ in $$T$$ liegt, so wird nach endlicher Zeit ein JA (oder auch NEIN wenn man anders herum testen möchte) ausgegeben. Wenn nicht, so hängen wir ggf. in einer Endlosschleife. Der Unterschied hier ist, dass wir nicht wissen ob wir einfach noch länger warten müssen bis wir (irgendwann) ein JA/NEIN bekommen oder wir tatsächlich in einer Endlosschleife sind.

Beispiel: Das Halteproblem (ob alle Paare (Turingmaschine, Eingabe)) für alle Eingaben und Turingmaschinen halten ist semi-entscheidbar/rekursiv aufzählbar, aber nicht entscheidbar/rekursiv. Denn für einige Eingaben kann eine Turingmaschine in eine Endlosschleife laufen und wir können nicht mit Sicherheit sagen ob sie nicht doch vielleicht irgendwann hält. Damit ist das Halteproblem eben nur rekursiv aufzählbar, denn wir können die Menge der Paare mit der Eigenschaft ja aufzählen.

Achtung: jede rekursiv aufzählbare/semi-entscheidbare Menge ist abzählbar. Aber nicht jede abzählbare Menge ist rekursiv aufzählbar/semi-entscheidbar. Z.B. ist die Menge der falschen Formeln einer PL1-Sprache (dazu in einem späteren Beitrag mehr) abzählbar, jedoch nicht entscheidbar/rekursiv aufzählbar. Ebenso ergeht es uns mit dem Busy Beaver Problem (auch hierzu folgt später ein Beitrag). Das Halteproblem, wie im Abschnitt vorher angegeben, ist ein Beispiel für die andere Richtung.

Abzählbarkeit: erstes und zweites Diagonalargument (Cantor)

Wir bezeichnen Mengen als abzählbar wenn diese die gleiche Mächtigkeit hat, wie $$\mathbb{N}$$. In dem Eintrag für die Cantorsche Tupelfunktion wir beschrieben, wie man prüft ob zwei Mengen gleichmächtig sind. Wir prüfen also den Fall $$\left| M \right| = \left| \mathbb{N} \right|$$? Um das zu tun müssen wir eine bijektive Abbildung $$f: M \rightarrow \mathbb{N}$$ aufzeigen, die jedem Element aus $$M$$ eindeutig ein Element aus $$\mathbb{N}$$ zuordnet. Durch die Bijektivität ist diese Funktion natürlich umkehrbar und wir können zu einem Element aus $$\mathbb{N}$$ wieder eindeutig ein Element aus $$M$$ zuordnen. Das nennt man das erste Diagonalisierungsargument von Cantor.

Wie in dem oben verlinkten Beitrag können wir z.B. eine bijektive Abbildung $$f: \mathbb{Z} \rightarrow \mathbb{N}$$ angeben und so zeigen, dass die ganzen Zahlen ($$\mathbb{Z}$$) genauso mächtig sind wie die natürlichen Zahlen ($$\mathbb{N}$$) obwohl die ganzen Zahlen gefühlt mehr Zahlen enthalten als die natürlichen Zahlen. Ebenso können wir durch diese Cantorsche Tupelfunktion $$n$$-Tupel aus $$\mathbb{N}^n$$, z.B. $$(1,5)$$ aus $$\mathbb{N}^2$$ auf eine einzige Zahl aus $$\mathbb{N}$$ abbilden. Das gleiche geht für Tripel usw. Damit ist bewiesen, dass der $$n$$-dimensionale Raum $$\mathbb{N}^n$$ gleichmächtig zu $$\mathbb{N}$$ ist, egal welches $$n$$ wir wählen.

Gibt es ein Beispiel für nicht abzählbare Mengen? Ja: die reellen Zahlen sind nicht gleichmächtig zu $$\mathbb{N}$$ und damit auch nicht abzählbar. Es gibt also keine bijektive Abbildung $$f: \mathbb{R} \rightarrow \mathbb{N}$$. Cantor bewies dies 2x. Sein letzter Beweis ist einfacher, deswegen möchte ich diesen hier kurz skizzieren: es ist sein zweites Diagonalisierungsargument.

Beispiel: zweites Diagonalisierungsargument von Cantor

Zunächst einmal sollten wir uns klar machen, was wir mit einer bijektiven Abbildung denn eigentlich machen. Eine bijektive Abbildung kann es nur zwischen zwei gleichmächtigen Mengen geben. Im vorherigen Beitrag hatten wir z.B. $$M_1 = \{a,z,d\}$$ und $$M_2 = \{5,1,9\}$$. Wir geben eine bijektive Abbildung für diese Mengen an: $$f: M_1 \rightarrow M_2$$ definiert durch $$a=5, z=1, d=9$$ (Umkehrabbilung $$f^{-1}$$ ist dann genau umgekehrt).

Wir wir sehen können wir zu einem Element aus $$M_1$$ eindeutig ein Element aus $$M_2$$ zuordnen und aufgrund der Eindeutigkeit geht es auch anders herum und wir bekommen ein eindutiges Element aus $$M_1$$ zu einem Element aus $$M_2$$. Damit sind die beiden Mengen gleichmächtig.

Eine bijektive Abbildung können wir auch für $$\mathbb{Z}$$ und $$\mathbb{N}$$ angeben und zeigen, dass diese Mengen ebenfalls gleichmächtig sind. Wir verwenden wieder das Beispiel aus dem Beitrag für die Cantorsche Tupelfunktion: $$ f:\mathbb{Z} \rightarrow \mathbb{N}$$ definiert durch:

$$f(x) = \begin{cases} -2x, & \mbox{ falls } x<0\\ 2x+1, & \mbox{ falls } x\geq 0\end{cases}$$+

Die Umkehrabbildung ist:

$$f^{-1}(x) = \begin{cases} -x/2, & \mbox{ wenn x gerade }\\ (x-1)/2, & \mbox{ wenn x ungerade}\end{cases}$$

Unsere Abbildung sieht nun für ein paar Zahlen so aus:

Wie wir sehen, sind auch diese Mengen gleichmächtig. Wir haben wieder eine eindeutige Zuordnung zwischen den Elementen aus $$\mathbb{R}$$ und $$\mathbb{N}$$. Probieren wir das gleiche doch für $$\mathbb{N} \rightarrow \mathbb{R}$$. Es reicht uns sogar einfach nur alle reellen Zahlen zwischen 0 und 1 anzuschauen (also: 0,72636…, 0,12238383…., …). Für eine bijektive Abbildung müssen wir allen diesen Zahlen dann natürliche Zahlen zuordnen. Dazu basteln wir uns eine Matrix und eine willkürliche Abbildungsfunktion, die allen Zahlen aus $$\mathbb{N}$$ eine Zahl aus dem Intervall $$(0,1)$$ aus $$\mathbb{R}$$ zuordnet.

Wir weisen z.B. dem Definitionswert $$0$$ aus $$N$$ den Funktionswert $$0,1574…$$, dem Definitionswert $$1$$ die $$0,0701…$$ usw. zu. Mit $$…$$ haben wir angedeutet, dass die Matrix aus unendlich vielen Zeilen und die Dezimalbruchdarstellung aus unendlich vielen Nachkommastellen besteht. Lasst euch von den Kästchen nicht verwirren, $$0,1574…$$ ist ein Element, die Kästchen dienen nur dem, was wir gleich vor haben: wir zeigen jetzt mit dem Diagonalisierungsargument, dass die Matrix nie vollständig sein kann, dass es also einen Wert zwischen $$0$$ und $$1$$ aus $$\mathbb{R}$$ gibt, auf den wir nicht abbilden.

Wir führen einen Widerspruchsbeweis: nehmen wir an die Matrix sein vollständig und wir haben alle Zahlen aus $$\mathbb{R}$$ zwischen 0 und 1 in Dezimaldarstellung durchnumemriert. Wir basteln uns einen neuen Funktionswert, der von allen anderen Funktionswerten verschieden ist: wir verwenden die diagonalen Elemente der Matrix (grüne Markierung) und erhöhen oder erniedrigen sie um 1 ($$<5$$: neue Zahl wird erhöht, $$\geq 5 $$: neue Zahl wird erniedrigt) und verwenden diese Zahlen als Nachkommastellen unseres neuen Eintrags. Damit ist sichergestellt, dass wir diesen Eintrag noch nicht als Funktionswert in unserer Matrix haben, denn die reelle Zahl in der $$i$$-ten Zeile unserer Matrix unterscheidet sich min. in der $$i$$-ten Stelle von unserer neuen Zahl (wir haben sie ja erniedrigt oder erhöht).

 

Damit ist $$0,2658…$$ unser neuer Eintrag, der definitiv noch nicht un unserer Matrix ist. Soweit so gut, nur wie wird er jetzt mit einer Zahl aus $$\mathbb{N}$$ nummeriert?! Wir sind doch von der Vollständigkeit unserer Matrix ausgegangen und haben damit doch alle unsere Elemente aus $$\mathbb{N}$$ ausgeschöpft, haben aber trotzdem ein neues aus $$\mathbb{R}$$, dass wir nummerrieren müssen! Also: Widerspruch! Damit sind $$\mathbb{R}$$ und $$\mathbb{N}$$ nicht gleich mächtig, $$\mathbb{R}$$ ist sogar deutlich größer, da wir ja nicht einmal das Intervall $$(0,1)$$ mit allen Elementen aus $$\mathbb{N}$$ nummerrieren konnten. $$\mathbb{R}$$ und $$\mathbb{N}$$ stehen also für zwei unterschiedliche Unendlichkeiten. Ein sehr cooler Beitrag auf youtube zeigt das nochmal in bewegten Bildern.

So schließt sich auch der Kreis zu den Funktionen: die Menge aller berechenbaren mehrstelligen Wortfunktionen ist ebenfalls abzählbar. Warum? Weil wir die Menge der mehrstelligen Wortfunktionen in einstellige Wortfunktionen überführen können, diese durch die Standardnummerierung in einstellige Zahlenfunktionen überführt wird und wir diese anschließend durchnummerieren können.

TI: Cantorsche Tupelfunktion (Update 4)

Update 4: Rechenfehler bei Umkehrfunktion, statt \(1218\) ist \(1185\) richtig. Danke Marion.

Update 3: Tippfehler, statt \(q(500)\) muss das nun \(q(39)\) heißen. Danke Christian.

Update 2: meine Güte, wo war ich mit meinen Gedanken? Nach mehreren Hinweisen von Martin und David z. B. scheint die Tupelfunktion nicht ganz richtig definiert gewesen zu sein. Ich weiß ehrlich gesagt auch nicht mehr, wo ich sie her hatte. Nundenn, ist nun wieder aktuell, so definiert wie in der Wikipedia und im Skript und müsste korrekt sein.

Die Cantorsche Tupelfunktion ist eigentlich ein sehr nettes Werkzeug und relativ einfach zu verstehen. Daher wird dieser Beitrag wahrscheinlich eher kurz ausfallen. Martin hat mich auf die Idee gebracht und da mir die Definition der Funktion nicht mehr so geläufig war: warum also nicht? 😉

Die Paarungsfunktion \(\pi : \mathbb{N}^2 \rightarrow \mathbb{N}\) macht folgendes: es weist einem Tupel (z.B. (2,6)) einen eindeutigen Wert zu. Aus diesem Wert kann man das Tupel wieder zurückgewinnen. Sie ist somit umkehrbar, d.h. bijektiv und total. Eig. eine ziemlich coole Sache (ja, ich habe eine durchaus fragwürdige Definition von „cool“). Wozu brauche ist das überhaupt? Z.B. für folgendes:

Mächtigkeit von Mengen

Nehmen wir einfach mal zwei Mengen \(M_1\) und \(M_2\). Zwei Mengen sind gleichmächtig (d.h. es sie beinhalten die gleiche Anzahl an Elementen) wenn es eine bijektive Abbildung \(f : M_1 \rightarrow M_2\) gibt. Die Bijektivität der Abbildung ordnet jedem Wert aus der Definitionsmenge \(M_1\) genau einen Wert aus der Wertemenge \(M_2\) zu. Nicht mehr und nicht weniger. Gibt es diese Abbildung, so gilt jede unendliche Menge als abzählbar wenn die Mächtigkeit von M der Mächtigkeit von \(\mathbb{N}\) entspricht (\(\left|M\right| =\left|\mathbb{N}\right|\)).  Tut sie das nicht (\(\left|M\right| \neq\left|\mathbb{N}\right|\)), ist sie überabzählbar.

Z.B. sind die Mengen

\(M_1 = \{a,z,d\}\) und \(M_2 = \{5,1,9\}\) gleichmächtig (\(\left|M_1\right| = \left|M_2\right|\)).

Wir nummerieren die Elemente einer Menge durch die Elemente der anderen Menge. Wie, ist egal. Hauptsache es gibt eine Nummerierung. Ein schönes Beispiel ist die Nummerierung der ganzen Zahlen \(\mathbb{Z}\) (…,-2,-1,0,1,…) durch die natürlichen Zahlen \(\mathbb{N} (0,1,2,3,…)\) aus dem Buch von Dirk. W. Hoffmann. Intuitiv scheint die Menge der ganzen Zahlen größer, es sind schließlich auch negative Zahlen dabei. Ist sie aber nicht. Eine Nummerierung könnte z.B. wie folgt aussehen: \( f:\mathbb{Z} \rightarrow \mathbb{N}\) mit:

\(f(x) = \begin{cases} -2x, & \mbox{ falls } x<0\\ 2x+1, & \mbox{ falls } x\geq 0\end{cases}\)

\(f(-5) = 10\) und \(f(5) = 11\). Da es eine bijektive Abbildung ist, können wir daraus auch eine Umkehrfunktion \( f^{-1}:\mathbb{N} \rightarrow \mathbb{Z}\) basteln mit:

\(f^{-1}(x) = \begin{cases} -x/2, & \mbox{ wenn x gerade }\\ (x-1)/2, & \mbox{ wenn x ungerade}\end{cases}\)

\(f^{-1}(10) = -5\) und \(f^{-1}(11) = 5\).

Damit haben wir eine eindeutige Nummerierung und Umkehrabbildung gefunden.

Die Tupelfunktion

Aber wir sind nicht nur in der Lage einem Tupel (z.B. (2,3)) eine eindeutige Nummer zu vergeben. Wir können die Zahl sogar einem Tripel (z.B. (5,3,9)) und einem Quadrupel (z.B. (7,4,9,1) und … ach, Ihr wisst worauf ich hinaus will. Hierbei hilft uns die Cantorsche Paarungsfunktion. Sie ist definiert als:

\(\pi_\mathbb{N}(x,y) = \sum_{i=0}^{x+y} i+y={{1}\over{2}}(x+y)(x+y+1)+y\)

Um auch Tripel zu erfassen, ist die Funktion definiert als:

\(\pi_\mathbb{N}^3(x,y,z)=\pi_\mathbb{N}(\pi_\mathbb{N}(x,y),z)\)

Wir können den Gedanken weiterspinnen und landen so bei der allgemeinen Definition:

\(\pi^1_\mathbb{N}(x_1) := x_1\) \(\pi^{n+1}_\mathbb{N}(x_1,…,x_n,x_{n+1}) := \pi_\mathbb{N}(\pi^{n}_\mathbb{N}(x_1,…,x_n),x_{n+1})\)

Beispiel gefällig? Sicher doch!

Beispiel: \(\pi^{4}_\mathbb{N}(5,3,9,1)\)

Wir lösen zunächst auf und rechnen dann aus. Die exemplarische Nebenrechnungen für das erste Tupel ist unter dem Rechenweg damit es nicht zu unübersichtlich wird:

\(\begin{array} {lcl}\pi^{4}_\mathbb{N}(5,3,9,1)&=&\pi_\mathbb{N}(\pi^{3}_\mathbb{N}(5,3,9),1)\\{}&=&\pi_\mathbb{N}(\pi_\mathbb{N}(\pi_\mathbb{N}(5,3),9),1)\\{}&{}&\mbox{(nun }\pi_\mathbb{N}(5,3)\mbox{ ausrechnen: siehe Nebenrechnung)}\\{}&=&\pi_\mathbb{N}(\pi_\mathbb{N}(39,9),1)\\{}&{}&\mbox{(jetzt }\pi_\mathbb{N}(39,9) \mbox{ ausrechnen)}\\{}&=&\pi_\mathbb{N}(1185,1)\\{}&{}&\mbox{(als letztes noch }\pi_\mathbb{N}(1185,1)\mbox{)}\\{}&=&703892\end{array}\)

(Korrektur! Danke Marion)

* Nebenrechnung 1:

\(\begin{array} {lcl}\pi_\mathbb{N}(5,3) &=&{{1}\over{2}}(5+3)(5+3+1)+3\\&=&{{1}\over{2}}(25+15+5+15+9+3)+3\\&=&{{1}\over{2}}(72)+3\\&=&39\end{array}\)

Tada! Ist doch eig. ganz einfach. Es sei denn man macht es wie ich und verrechnet sich dauernd bis man die Formel in Wolfram alpha eingibt 😉

Update: Umkehrfunktion

Da wir in der theoretischen Informatik Teil B auch die Umkehrfunktion brauchen, schreibe ich diese der Vollständigkeit halber mal auf. Martin hat ja einen schönen Link gepostet. Nehmen wir an wir suchen also die Tupel zu \(z = 39\), d.h. \(\pi(39)\). Das sind zunächst die 4 Formeln, die wir dazu brauchen (frech geklaut aus der Wikipedia):

\(q(z) =\lfloor{\frac{\sqrt{8\cdot z+1}-1}{2}} \rfloor\) \(f(w) =\frac{w\cdot(w+1)}{2}\) \(\pi_2(z) = z – f(q(z))\) \(\pi_1(z) = q(z) – \pi_2(z)\)

Setzen wir unser \(z = 39\) einfach mal ein und rechnen das aus:

\(q(39) = \lfloor {\frac{\sqrt{8\cdot 39+1}-1}{2}} \rfloor = 8\)

\(f(8) = \frac{8\cdot (8+1)}{2} = 36\) \(\pi_2(39) = 39 – 36 = 3\) \(\pi_1(39) = 8 – 3 = 5\)

Und damit \(\pi(39) = <5,3>\). That’s it (Danke Martin!).