Berechenbarkeitstheorie/Vorbereitungen

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SchemeJS</language>
==Endliche Mengen==

Die Mächtigkeit endlicher Mengen ergibt sich aus deren Kardinalität. Man kann sie rekursiv definieren als 
\[ card(M) =
\left\{
  \begin{array}{cl}
    0, & \hbox{wenn } M=\emptyset \\
    1+card(\{a_2,a_3,\ldots,a_n\}), & \hbox{wenn } M=\{a_1,a_2,a_3,\ldots,a_n\}
  \end{array}
\right. \]

Dies lässt sich leicht in ein Programm umsetzen:
<code id="4f5a2647cd148">
(define card
  (lambda (m)
    (if (null? m)
      0
      (+ 1 (card (cdr m))))))
</code>
<run id="4f5a2647cd1ce">(card '(y z u a k w))</run>


== Intuitiver Berechenbarkeitsbegriff ==

===Primzahlzwillinge===

Man weiß nicht, ob es tatsächlich unendlich viel gibt.

<code id="6540145977ae7" hidden>
(define prim?
  (lambda (n)
    (letrec 
        ((helper
          (lambda (teiler)
            (cond
              ((= 1 teiler) #t)
              ((zero? (modulo n teiler)) #f)
              (else
               (helper (- teiler 1)))))))
      (helper (- n 1)))))

(define F
  (lambda (n)
    (letrec
        ((helper
          (lambda (p)
            (if (and (prim? p)(prim? (+ p 2)))
                p
                (helper (+ p 1))))))
      (helper (+ n 1)))))
</code>

$$F(n) = \text{kleinstes } p,\text{ mit } p>n\text{ und } p,p+2\text{ sind Primzahlen}.$$

<run id="6540145977b42">(F 27)</run>


===Collatz-Folge===

Man weiß nicht, ob die Folge für jede beliebige Startzahl bei 1 endet.

<code id="4f5a2d18cd8c3">
(define collatz
  (lambda (a)
    (cond
      ((= a 1) '(1))
      ((even? a)(cons a (collatz (/ a 2))))
      (else
       (cons a (collatz (+ (* 3 a) 1)))))))
</code>
<run id="4f5a2d18cd934">(collatz 7)</run>