BuK-Übung02 G2

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Loading

Inhaltsverzeichnis

Halteproblem

Aufgabe

Spielen Sie die Betrachtungen zum Halteproblem mit Scheme-Prozeduren nach. Hinweis: Definieren Sie ggf. auch eine Prozedur haelt-tricky?, die #t zurück gibt, wenn das betrachtete Programm P ein Ergebnis berechnet, und #f, wenn die Berech- nung in einer gewissen Zeit T zu keinem Ergebnis führt. Verwenden Sie zeitbeschränkte Berechnungen, deren Implementierungsidee einige Kreativität erfordert.

Lösung für Racket

Die Lösungsidee besteht darin, einen neuen Thread für sie zu prüfende Prozedur zu starten. Der Hauptthread fragt anschließend periodisch ab, ob der andere Thread seine Berechnung beendet hat. Ist die Berechnung nach einer bestimmten Zeit nicht abgeschlossen, wird die Berechnung gestoppt und #f zurückgegegen. In der Praxis ist diese Lösungsvariante mit Threads und einem Timeout häufig anzutreffen.

Aufrufbeispiele:

Eine ähnliche Implementation in Java kann hier gefunden werden.

Beweise

Aufgabe 1

Zeigen Sie, dass die Menge der rationalen Zahlen abzählbar unendlich ist.

Lösung

Eine Menge ist dann abzählbar unendlich wenn sie gleichmächtig zur Menge der natürlichen Zahlen ist. Mit Cantors erstes Diagonalargument lässt sich zeigen, dass die unendliche Menge der rationalen Zahlen gleichmächtig mit der Menge der natürlichen Zahlen ist.

Aufgabe 2

Zeigen Sie, dass die Wortmenge über abzählbar unendlich ist.

Lösung

Gegeben sei ein Alphabet mit den Elementen im weiteren Buchstaben genannt. Die Anzahl der Buchstaben ist und endlich. Weiterhin sei die Ordnungsrelation für die Buchstaben gegeben.
Die Wortmenge wird gebildet, in dem beliebige Buchstaben aus verkettet werden. Die Länge eines Wortes wird über die Anzahl der Buchstaben festgelegt.
Beispiel: hat die Länge 1, hat die Länge 3 und als Spezialfall für das leere Wort mit der Länge 0.
Die Abbildung der Wörter aus auf die natürlichen Zahlen wird wie folgt umgesetzt. Die Wörter werden ihrer Länge entsprechend angeordnet, wobei die kürzeren (Länge ist kleiner) zuerst verwendet werden. Wörter der selben Länge werden lexikographisch geordnet. Das erste Wort wird der 1 zugeordnet, das Zweite der 2 usw..
Angewendet ergibt sich:

Jedem Element der Wortmenge kann genau eine natürliche Zahl zugeornet werden. Die Wortmenge über ist also abzählbar unendlich.


Aufgabe 3

Zeigen Sie, dass die Menge der reellen Zahlen überabzählbar unendlich ist.

Lösung

Durch Widerspruch kann gezeigt werden, dass die Menge der reellen Zahlen überabzählbar unendlich ist. Für den Beweis wird das offene Intervall (0,1) betrachtet was eine echte Teilmenge der reellen Zahlen darstellt.
Annahme: Die Menge der reellen Zahlen im offenen Intervall (0,1) ist abzählbar.
Es muss eine bijektive Abbildung der reellen Zahlen auf die natürlichen Zahlen existieren. Sei nun eine beliebige Folge von reellen Zahlen im offenen Intervall (0,1). Die Folge lässt sich dezimal wie folgt darstellen:

wobei reelle Zahlen sind und die Dezimalstellen dieser Zahlen. Nun lässt sich eine Zahl konstruieren die nicht in der Folge zu finden ist.

wobei
Diese Diagonalzahl unterscheidet sich von allen anderen Zahlen der Folge und ist ebenfalls im Intervall (0,1). Es kann also für jede beliebige Folge eine Zahl gefunden werden die nicht in der Folge enthalten ist.
Es existiert keine surjektive Abbildung der natürlichen Zahlen auf das offene Intervall (0,1). D.h. es kann auch keine bijektive Abbildung existieren. Die Menge der reellen Zahlen im Intervall (0,1) ist also nicht abzählbar. Sie ist überabzählbar unendlich. Da das Intervall eine echte Teilmenge der reellen Zahlen ist, gilt das auch für die Menge der reellen Zahlen.

Kreativität

Schauen Sie sich das Video an, um den Begriff der Kreativität besser zu verstehen.

Bijektive Funktion

Aufgabe

Verifizieren Sie, dass die folgende Funktion eine bijektive Funktion ist und implementieren Sie eine Prozedur, die die zugehörige Umkehrfunktion berechnet.

Lösung

Scheme Prozedur

Handrechnung

Beweis

Es existiert eine Funktion , die die Umkehrfunktion von darstellt. Dann muss gelten:
(1):
D.h. aber auch, dass alle Zahlen aus auf genau eine Zahl aus abgebildet werden. Die Abbildung durch die Funktion ist injektiv. Würde das nicht gelten wäre die Gleichung (1) nicht erfüllt.
Die Abbildung der Funktionswerte von auf ist ebenfalls injektiv. Das reicht aber noch nicht um die Bijektivität der Funktion zu beweisen. Dazu muss gelten:
(2):
Aus Gleichung (2) ist zu entnehmen, dass wirklich alle Werte (nicht nur die Funktionswerte aus ) aus auf abgebildet werden.
Gegeben ist die Umkehrfunktion:

Beweis Gleichung (1)
 : trivial
gerade :

ungerade :

Damit ist für alle gezeigt, das die Gleichung erfüllt ist.
Beweis Gleichung (2)
 : trivial
 :

 :

Für alle ist somit gezeigt, dass die Gleichung (2) erfüllt ist.
Da jetzt bewiesen ist, dass die Gleichung (1) und (2) mit der gegebenen Umkehrfunktion gelten handelt es sich bei der Funktion um eine bijektive Funktion. Jeder Zahl aus kann genau eine Zahl aus zugeordnet werden und umgekehrt.

Prozedur für die Umkehrfunkion

Die folgende Funktion berechnet die Umkehrfunktion für gültige Eingaben in C#. Die Klasse Fraction stellt die rationale Zahlen dar.

Func<Fraction, int> reverse = null;
reverse = x => 
  (x == Fraction.One) ? 1 : 
    (x > Fraction.One) ? reverse (x - 1) * 2 : reverse (Fraction.Inverse (x)) + 1;
Persönliche Werkzeuge