BuK/IIm10/BuK-Übung04 G2
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>FLACI_c97gpsjc5dyr</language>
=Aufzählbarkeit und Entscheidbarkeit=
== Aufgabe ==
Drücken Sie den Beweis des folgenden Satzes mit Racket aus.
Wenn <math>M</math> eine aufzählbar unendliche Menge ist, dann ist <math>M</math> semi-entscheidbar.
== Lösung ==
<math>M</math> ist eine aufzählbar unendliche Menge und damit existiert eine Funktion <math>f:\mathbb{N}\rightarrow{}M</math>, die surjektiv und berechenbar ist und die Menge <math>M</math> aufzählt. <br>
<math>M</math> ist semi-entscheidbar, wenn eine Funktion <math>\chi'_M:A^{\ast}\rightarrow{}\mathbb{B}</math> existiert, die berechenbar ist.<br>
Die folgende Umsetzung in Racket beweist, dass <math>M</math> semi-entscheidbar ist, wenn die Aufzählfunktion <math>f</math> gegeben ist.
<code id="123">
(define chi-strich
(lambda (wort)
(letrec
((suche-in-chi
(lambda (i) (if (string=? wort (f i))
#t
(suche-in-chi (+ i 1))))))
(suche-in-chi 0))))
</code>
=== Beispiel ===
Gegeben sei das Alphabet ("a" "b" ... "z").
Die Menge <math>M</math> ist die Menge der Wörter, die sich aus der Verkettung mit dem Buchstaben "a" bilden lassen. Die folgende Funktion <math>f</math> zählt diese Menge auf.
<code id="4ded0dd08707f">
(define f
(lambda (i) (make-string i #\a)))
</code>
<run id="4ded0dd087100">
(f 3)
</run>
Der Aufruf der Funktion <math>\chi'_M</math> berechnet, ob das gegebene Wort in <math>M</math> enthalten ist.
<run id="4ded0dd087160">
(chi-strich "aaaaa")
</run>
Wird ein Wort aus <math>A^{\ast}\backslash{}M</math> als Parameter übergeben, so stoppt die Berechnung nicht.
<run id="4ded0dd0871ba">
(chi-strich "ab")
</run>
= Entscheidbarkeit und Aufzählbarkeit =
== Aufgabe ==
Beweisen Sie: Wenn <math>M</math> entscheidbar ist, dann sind <math>M</math> und <math>A^{\ast}\backslash{}M</math> aufzählbar. Illustrieren Sie anschließend mit Racket.
== Lösung ==
Entscheidbarkeit bedeutet, es exisitert eine (totale) charakteristische Funktion <math>\chi_{M_1,M_2}</math>, welche ein Wort <math>w</math> aus <math>M_2</math> als Eingabe erwartet und "1" zurückgibt, falls <math>w \in M_1</math> und "0", falls <math>w \in M_2\backslash{}M_1</math>.
Das heißt wir können davon ausgehen, dass die Funktion <math>\chi_{M,A^{\ast}}(w)</math> exisitert.
Die Mengen <math>M</math> und <math>A^{\ast}\backslash{}M</math> sind aufzählbar, wenn die surjektiven, berechenbaren Funktionen <math>f_M: \mathbb{N} \mapsto M</math>
und <math>f_{A^{\ast}\backslash{}M}: \mathbb{N} \mapsto A^{\ast}\backslash{}M</math> existieren.
Diese Aufzählfunktionen können unter Verwendung von <math>\chi_{M,A^{\ast}}(w)</math> definiert werden. Dafür benötigen wir noch eine Funktion <math>g</math>, welche die Menge <math>A^{\ast}</math> aufzählt.
Zur Illustration legen wir fest, dass <math>A^{\ast}</math> die Menge der natürlichen Zahlwörter, <math>M</math> die Menge der Zahlwörter für die geraden Zahlen und <math>A^{\ast}\backslash{}M</math> die Menge der Zahlwörter für die ungeraden Zahlen darstellen.
<code id="4dac2a35c519c">
(define f-m
(lambda (i)
(if (chi? (g i))
(g i)
a)))
</code>
<code id="4dac2a35c51ff">
(define f-m2
(lambda (i)
(if (chi? (g i))
a
(g i))))
</code>
= Semi-Entscheidbarkeit =
== Aufgabe ==
Zeigen Sie auf der Basis der Semi-Entscheidbarkeit, dass wenn <math>M</math> und <math>A^{\ast}\backslash{}M</math> aufzählbar sind, <math>M</math> entscheidbar ist. Repräsentieren Sie den Beweis anschließend mit Racket.
Verwenden Sie die entwickelten Racket-Prozeduren für folgendes Beispiel: <math>A^{\ast}</math> ist die Menge der natürlichen Zahlwörter, <math>M</math> die Menge der Zahlwörter für die geraden Zahlen und <math>A^{\ast}\backslash{}M</math> die Zahlwörter für die ungeraden Zahlen.
== Lösung ==
Die Mengen <math>M</math> und <math>A^{\ast}\backslash{}M</math> sind aufzählbar. D.h. es existiert eine Funktion <math>f_M:\mathbb{N}\rightarrow{}M</math> sowie eine Funktion <math>f_{M\backslash{}A^{\ast}}:\mathbb{N}\rightarrow{}M\backslash{}A^{\ast}</math>. <math>M</math> ist entscheidbar wenn <math>\chi_M:A^{\ast}\rightarrow{}\mathbb{B}</math> eine berechenbare Funktion ist.<br>
Die folgende Racket-Funktion beweist, dass <math>M</math> entscheidbar ist. Die Funktion ''f-m'' ist die Aufzählfunktion der Menge <math>M</math> und die Funktion ''f-m2'' ist die Aufzählfunktion der Komplementärmenge <math>M\backslash{}A^{\ast}</math>.
<code id="576a35ec25a7d">
(define chi
(lambda (wort)
(letrec
((suche-in-chi
(lambda (i) (if (string=? wort (f-m i))
#t
(if (string=? wort (f-m2 i))
#f
(suche-in-chi (+ i 1)))))))
(suche-in-chi 1))))
</code>
=== Beispiel ===
Wie oben in der Aufgabenstellung ist <math>A^{\ast}</math> die Menge aller Zahlwörter der natürlichen Zahlen. <math>M</math> ist die Menger der Zahlwörter der geraden Zahlen und wird aufgezählt durch:
<code id="576a35ec25af2">
(define f-m
(lambda (i)
(number->string (* i 2) 10)))
</code>
Die Komplementärmenge <math>M\backslash{}A^{\ast}</math> ist demzufolge die Menge der Zahlwörter der ungeraden Zahlen und wird aufgezählt durch:
<code id="576a35ec25b65">
(define f-m2
(lambda (i)
(number->string (- (* i 2) 1) 10)))
</code>
Die Funktion <math>\chi_M</math> berechnet für jedes Zahlwort einen Rückgabewert (Wahr oder Falsch).
<run id="576a35ec25c68">(chi "12")</run>