BuK-Übung05 G1

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Prozedur stoppt-collatz-bis?

Aufgabenstellung

Schreiben Sie eine Scheme-Prozedur stoppt-collatz-bis?, die eine Zahl als Eingabe erwartet und feststellt, ob die endlichen Collatzfolgen für existieren.

Loading

Lösung

Beweis

Aufgabenstellung

Beweisen Sie, dass nicht berechenbar ist, d.h. eine Prozedur totalmacher für , die eine partielle zahlentheoretische Funktion nimmt, gibt es nicht.

Lösung

Definition von

Die Funktion ist definiert als:

mit und . Dabei ist der Wertebereich von .

Beweis

Der Beweis erfolgt durch den indirekten Beweis. Dafür wird die Annahme getroffen, dass berechnbar ist. Dann ist das Prädikat berechenbar. Somit ist haelt_fuer_n? ebenfalls berechenbar. Dies widerspricht jedoch dem HALTEPROBLEM. Damit ist die Annahme falsch, also nicht berechenbar.

Turingmaschine (TM) und RADOsche Funktion

Aufgabenstellung

Machen Sie sich mit dem in AtoCC eingebauten TM-Modell vertraut. Tragen Sie einige TM zusammen, die das Busy-Beaver-Problem für kleinere n lösen. Verwenden Sie AtoCC, um diese zu simulieren.

Lösung

In diesem Wikipedia Artikel ist eine Erläuterung des Busy-Beaver zu finden.

Obwohl die Turing-Maschine ein Produkt der Theoretischen Informatik ist, ist in diesem Video zu sehen, dass dieses Modell nur theoretische Spielerei ist. In dem Video ist eine TM zu sehen, die den Busy Beaver mit 4 Zuständen berechnet.

TM für n=1

Definition:

Übergange:

Busy Beaver1.png

TM für n=2

Definition:

Übergänge:

Busy Beaver2.png


Beweis

Aufgabenstellung

Zeigen Sie, dass die Vereinigungsmenge zweier aufzählbarer Mengen und wiederum eine aufzählbare Menge ist.



Lösung

In der Zeichung ist zu erkennen, dass es für eine natürliche Zahl durch Anwendung der Aufzählfunktionen und zwei Abbildungen gibt. Eine Abbildung in und ein in .

Aufgabe4.png

Um nachzuweisen, dass ebenfalls aufzählbar ist, benötigt man eine Funktion , die diese Menge aufzählt. Die Ausgaben dieser Funktion wären folgende:

Es ist zu erkennen, dass die Funktion wie folgend definiert sein muss.

Zusatz: Aufzählfunktion der Schnittmenge

Etwas schwieriger wird es, wenn wir beweisen sollen, dass wenn M1 und M2 aufzählbar sind, auch die Schnittmenge von M1 und M2 aufzählbar ist. Dazu muss ebenfalls eine surjektive und berechenbare Funktion g existieren, die unter Verwendung von f1 und f2 die Schnittmenge von M1 und M2 aufzählt.

Aufgabe4 2.png

Hierbei existiert das Problem, dass wir nicht einfach prüfen können, ob ein Element aus M1 auch in M2 enthalten ist. Da dazu alle Elemente untersucht werden müssen, würde die Funktion nicht zum Ende kommen, bevor alle Elemente aufgezählt wurden. Also müssen wir uns wieder der zeitbeschränkten Evaluation bedienen und der Prüfung, ob ein Element in einer der Mengen enthalten ist, nur eine bestimmte Zeit zur Verfügung stellen.

Wir können aber noch einen weiteren Trick verwenden. Indem wir einfach Listen L1 und L2 für die ersten n Elemente jeder Menge erstellen und prüfen, ob f1(n) in L2 oder f2(n) in L1 enthalten ist. Wenn ja, dann wird das entsprechende n-te Element von M1, bzw. M2 zurückgegeben, ansonsten irgendein beliebeiges a, welches in der Schnittmenge von M1 und M2 sicher enthalten ist. Um dieses a zu finden, können wir einfach die Funktion zunächst mit n=0 aufrufen und dann das n solange zu inkrementieren, bis f1(n) in L2 oder f2(n) in L1 enthalten ist und das erste so gefundene Element zurückgeben.

Das führt uns zur folgenden Implementierung:

Zur Aufzählung verwenden wir auch hier wieder Streams und erwarten natürlich nur ungeraden Quadratzahlen:

Persönliche Werkzeuge