While-True (WHILE, LOOP)

| Back to Overview

WHILE

WHILE ist das einfachere von beiden...

Die Programmiersprache WHILE ist sehr simple, sie besteht aus:

  • Variablen: x0,,xnx_0, \dots, x_n
  • Konstanten: 1,0,1-1, 0, 1
  • Symbolen: ;,:=,+,;, :=, +, \neq
  • Schlüsselwörtern: WHILE,DO,ENDWHILE, DO, END

Die Syntax ist wie folgt definiert:

  • xi:=xj+1x_i := x_j + 1 ist eine Zuweisung
  • Sind P1P_1 und P2P_2 Programme, so ist P1;P2P_1; P_2 ein Programm, das zuerst P1P_1 und dann P2P_2 ausführt
  • Ist PP ein Programm, so ist WHILE xi0x_i \neq 0 DO PP END ein Programm, das PP solange ausführt, bis xi=0x_i = 0 ist

Weitere Semantik:

  • Die Eingabe ist in den Variablen x0,,xnx_0, \dots, x_n gespeichert. Der default Wert = 0
  • Die Ausgabe ist in den Variablen x0,,xnx_0, \dots, x_n gespeichert

Guckt hier später vorbei ich liste dann die Programme auf die wir schon hatten (ich muss dringend lernen uff):


WHILE ist Turingmächtig

LOOP

LOOP ist das erste Berechnungsmodell, das nicht Turingmächtig ist, dafür garantiert es uns aber, dass eine Programm immer anhält.

Die Programmiersprache LOOP ist sehr ähnlich zu WHILE und besteht aus:

  • Variablen: x0,,xnx_0, \dots, x_n
  • Konstanten: 1,0,1-1, 0, 1
  • Symbolen: ;,:=,+,;, :=, +, \neq
  • Schlüsselwörtern: LOOP,DO,ENDLOOP, DO, END

Die Syntax ist wie folgt definiert:

  • xi:=xj+1x_i := x_j + 1 ist eine Zuweisung
  • Sind P1P_1 und P2P_2 Programme, so ist P1;P2P_1; P_2 ein Programm, das zuerst P1P_1 und dann P2P_2 ausführt
  • Ist PP ein Programm, so ist LOOP xix_i DO PP END ein Programm, das PP xix_i mal ausführt. WICHTIG: xix_i darf nicht in PP vorkommen!

Weitere Semantik:

  • Die Eingabe ist in den Variablen x0,,xnx_0, \dots, x_n gespeichert. Der default Wert = 0
  • Die Ausgabe ist in den Variablen x0,,xnx_0, \dots, x_n gespeichert

Ackermannfunktion

Die Ackermannfunktion ist unser Beweis, dass LOOP nicht Turingmächtig ist. Da sie schneller wächst als jede Berechenbare LOOP Funktion.

Die Ackermannfunktion ist definiert als A:NNA: \mathbb{N} \to \mathbb{N}:

  • A(0,n)=n+1A(0,n) = n+1 für n0n \ge 0
  • A(m+1,0)=A(m,1)A(m+1, 0) = A(m, 1) für m0m \ge 0
  • A(m+1,n+1)=A(m,A(m+1,n))A(m+1, n+1) = A(m, A(m+1, n)) für m,n0m, n \ge 0

Monotonie Eigenschaften der Ackermannfunktion sind:

  • Strickte Monotonie in der zweiten Komponente: A(m,n+1)>A(m,n)A(m, n+1) > A(m,n) für alle m,nNm, n \in \mathbb{N}
  • Diagonale Monotonie: A(m+1,n)A(m,n+1)A(m+1, n) \ge A(m, n+1) für alle m,nNm, n \in \mathbb{N}

Falls ihr eine Monotonie Eigenschaft in der Klausur Beweisen müsst !vollständige Induktion! verwenden. (Falls ihrs Vergessen haben: (Induktionsanfang) \to (Induktionsvoraussetzung) \to (Induktionsschritt))