BuK-Übung04 G1
Aus ProgrammingWiki

Inhaltsverzeichnis |
Aufzählbarkeit und Entscheidbarkeit
Aufgabenstellung
Drücken Sie den Beweis des folgenden Satzes mit Racket aus. Wenn M eine aufzählbar unendliche Menge ist, dann ist M semi-entscheidbar.
Lösung
Das nachfolgende Beispiel muss manuel unterbrochen werden, da es sonst ewig laufen würde.
Entscheidbarkeit und Aufzählbarkeit
Aufgabenstellung
Beweisen Sie: Wenn M entscheidbar ist, dann sind M und A* \ M aufzählbar. Illustrieren Sie anschließend mit Racket.
Lösung
Semi-Entscheidbarkeit
Aufgabenstellung
Zeigen Sie auf der Basis der Semi-Entscheidbarkeit, dass wenn M und A* \ M aufzählbar sind, M entscheidbar ist. Repräsentieren Sie den Beweis anschließend mit Racket. Verwenden Sie die entwickelten Racket-Prozeduren für folgendes Beispiel: A* ist die Menge der natürlichen Zahlwörter, M die Menge der Zahlwörter für die geraden Zahlen und A* \ M die Zahlwörter für die ungeraden Zahlen.
Lösung
Für den Nachweis muss eine Funktion implementiert werden, die wie folgt definiert ist:
Zunächst müssen wir ein neues Alphabet AM definieren und eine Funktion gM(n) die die Wörter über diesem Alphabet aufzählt.
Nun sind die Chi-Strich Funktionen für M (gerade Zahlen) und A/M (ungerade Zahlen) an der Reihe. Da die Methoden im Packet 'engines.ss' im Wiki leider nicht funktionieren und somit die, für diesen Beweis erforderliche, zeitbeschränkte Evaluation nicht durchführbar ist, müssen wir uns hier eines, zwar theoretisch falschen, aber dennoch erforderlichen Tricks bedienen. Um die zeitbeschränkte Evaluation zu simulieren, übergeben wir an die beiden Funktionen einfach einen weiteren Parameter, welcher bei jedem erneutem rekursivem Aufruf dekrementiert wird, wobei bei 0 die Funktion #f zurückgibt. Da dies nicht der Definition von chi-strich entspricht, nennen wir diese Methoden einfach pseudo_chi-strich.
Es fehlen nur noch die Funktionen fM(n) und fA-M(n), die mit Hilfe von chi-strichM(w) und chi-strichA-M(w) und g(n), die Menge der geraden bzw. ungeraden Zahlen aufzählen. Damit diese Methoden funktionieren muss zunächst die Idee zur Nutzung der zeitbeschränkten Evaluation näher erläutert werden.
Die Idee dazu ist es, jedem Wort aus immer mehr Zeit zur Berechnung zu geben. Kann die Zugehörigkeit zur Menge M in einer vorgegebenen Zeit nicht gefunden werden, so wird dieses Wort zurückgestellt und später mit mehr Zeit wieder an Chi-Strich übergeben.
Damit sichergestellt wird, dass jedes Wort immer wieder geprüft wird, verwenden wir eine Vorgehensweise, ähnlich dem Ersten Cantorschen Diagonalargument. Dabei werden alle Wörter aus
und die Anzahl der Takte zur Berechnung in einer Tabelle der folgenden Form angeordnet:
Dabei stehen in den Zeilen die Wortnummern aus und in den Spalten die Anzahl der Takte, die maximal zur Berechnung verwendet werden dürfen. Die Nummern in den Zellen geben dabei eine bijektive Abbildung der Natürlichen Zahlen auf die Kombination aller möglichen Wörter aus
und der Anzahl der Takte an. Eine Funktion die diese Abbildung berechnet ist
. Diese müssen wir nun noch nach x bzw. y umstellen.
Dabei erhalten wir:
und
mit
Damit ist es nun ein leichtes, die Chi-Funktion mit Hilfe von fM(n) und fA-M(n) anzugeben.