BuK/IIm10/BuK-Übung05 G2

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Scheme</language>
= Prozedur <tt>stoppt-collatz-bis?</tt> =

== Aufgabe ==
Schreiben Sie eine Scheme-Prozedur <tt>stoppt-collatz-bis?</tt>, die eine Zahl n als Eingabe erwartet und feststellt, ob die endlichen Collatzfolgen für <math> i = 2, 3, ..., n</math> existieren.

<language>Scheme</language>
== Lösung ==
Die Collatz-Folge, auch '''(3n+1)-Problem''' oder '''Ulam-Funktion''' genannt, ist so definiert:

<math>
collatz(n)= 
\left\lbrace
\begin{aligned}
   1           & \text{, wenn } n=1\\
  collatz(n/2) & \text{, wenn } n \text{ gerade}\\
  collatz(3n+1)& \text{, wenn } n \text{ ungerade}\\
\end{aligned}
</math>

Die Vermutung ist, das die Folge, für eine beliebige Zahl <math>n \in \mathds{N}, n > 0</math> immer auf <math>1</math> endet.
Diese Vermutung konnte bisher noch nicht mathematisch bewiesen werden.

Wir können auch eine Prozedur angeben, welche die Folge berechnet:
<code id="4db830ef18b33">
(define collatz
  (lambda (n)
    (cond
      ((= n 1) 1)
      ((= (modulo n 2) 0) (collatz (/ n 2)))
      (else (collatz (+ 1 (* 3 n))))
)))
</code>
Dazu der Aufruf:
<run id="4db830ef18c1d">
(collatz 5)
</run>

Das Problem besteht darin, dass nicht festgestellt werden kann, ob die Folge auch für alle <math>n \in \mathds{N}</math> wirklich auf <math>1</math> endet.
Man könnte beweisen, das die Folge immer stoppt. Diese Prozedur sieht so aus:

<code id="4db830ef18b9f">
(define stoppt-collatz-bis?
  (lambda (start)
    (if (= 1 (collatz start))
    #t
    #f
)))
</code>

<run id="4db830ef18c88">
(stoppt-collatz-bis? 7)
</run>

Dieses Problem führt uns direkt zu dem Halteproblem: Es kann nicht festgestellt werden, ob diese/eine Prozedur stoppt.

= Beweis =
== Aufgabe ==
== Lösung ==

= Turingmaschine (TM) und RADOsche Funktion =
== Aufgabe ==
== Lösung ==

= Beweis =
== Aufgabe ==
== Lösung ==