BuK/IIm10/BuK-Kreativaufgabe04 G1
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
=Zeitbeschränkte Prozesse mit Engines=
; Satz
: Wenn M semi-entscheidbar ist, dann ist M aufzählbar.
Beim Analysieren des Satzes erkennt man, dass folgendes gelten soll:
# M ist semi-entscheidbar
# M ist aufzählbar
Für die Semi-Entscheidbarkeit gilt:
<math>
\chi ':A^*\rightarrow M
</math>
<math>
\chi_M '(w)=\begin{cases}
true, \text{wenn }w \in M \\
n.d., sonst
\end{cases}
</math>
Diese Funktion ist partiell '''berechenbar'''.
Für die Aufzählbarkeit gilt:
<math>
f: \mathbb{N}_0\rightarrow M
</math>
Diese Funktion ist total, surjektiv und '''berechenbar'''.
Des Weiteren gilt, dass <math>A^*</math> aufzählbar unendlich ist. Das bedeutet, das eine Funktion <math>g: \mathbb{N}_0 \rightarrow A^*</math> surjektiv und berechenbar ist.
Die Funktion um den Satz zu beweisen würde wie folgt aufgebaut sein:
<math>
f(i)=\begin{cases}
g(i),\text{wenn } \chi_M '(g(i))\\
a \in M, \text{sonst}
\end{cases}
</math>
Leider kann die Funktion so nicht berechnet werden, da eine Überprüfung von <math>g(i)</math> mit <math>\chi '</math> nicht zu einem Ende kommt, wenn <math>g(i)</math> nicht in <math>M</math> enthalten ist.
Durch die Anwendung zeitbeschränkter Evaluation wie in [[BuK/IIm10/BuK-Übung04 G1#Semi-Entscheidbarkeit | Aufgabe 3]], kann dieses Problem jedoch behoben werden.
Wie wir bereits festgestellt haben, können wir zeitbeschränkte Evaluation im Wiki leider nicht verwenden und müssen uns einer theoretisch nicht korrekten Variante bedienen.
<code id="4dad5727bd16d" hidden>
;############### wortmenge.ss ############
(define wortmenge-stufe
(lambda (n alphabet)
(if (= n 0)
'("")
(apply
append
(map
(lambda (zeichen)
(map
(lambda (wort)(string-append (string zeichen) wort))
(wortmenge-stufe (- n 1) alphabet)))
alphabet)))))
(define wortmenge-bis-stufe
(lambda (n alphabet)
(if (= n 0)
(wortmenge-stufe 0 alphabet)
(append
(wortmenge-bis-stufe (- n 1) alphabet)
(wortmenge-stufe n alphabet)))))
</code>
<code id="4dad5727bd1d7">
(define AM '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9)) ; Alphabet
(define gM
(lambda (i)
(let* ((s (if (< i 2) 1 (ceiling (/ (log i)(log (length AM))))))
(A*-bis-stufe (wortmenge-bis-stufe s AM)))
(list-ref A*-bis-stufe i))))
(define pseudo_chi-strichM
(lambda (w n)
(cond
((= n 0) #f)
((string=? "" w) (pseudo_chi-strichM w (- n 1)))
(else
(let ((num (- (char->integer (string-ref w (- (string-length w) 1))) 48))) (if (= 0 (modulo num 2)) #t
(pseudo_chi-strichM w (- n 1))))))))
(define z
(lambda (x y)
(+ (/ (* (+ x y)(+ x y 1)) 2) y)))
(define z-1
(lambda (n)
(letrec ((helfer
(lambda (k)
(let ((x (- (/ (* k (+ k 3)) 2) n))
(y (- n (/ (* k (+ k 1)) 2))))
(if (and (>= x 0)(>= y 0))
(cons x y)
(helfer (+ k 1)))))))
(helfer 0))))
(define fM
(lambda (n)
(let* ((x-y (z-1 n)) (i (car x-y)) (takte (cdr x-y)) (w_i (gM i)))
(if (pseudo_chi-strichM w_i (+ 10 takte)) w_i "0" ))))
</code>
<run id="4dad5727bd26a">
(fm 6)
</run>