Korrektheitsbeweis

Korrektheitsbeweis

1. Was bedeutet Korrektheit?

Unterschied zwischen partielle und totale Korrektheit


2. Das Halteproblem (Terminierung)

Wichtige Schritte bei Terminierungsbeweisen

  • Schleifenvariable identifizieren und zeigen, dass sie sich bei jedem Durchlauf in Richtung der Abbruchbedingung bewegt.
  • Abbruchbedingung formulieren und beweisen, dass sie erreicht wird.

Terminierungsbeweis beim Beispiel (ägyptische Multiplikation)

  1. Schleifenvariable: x (entspricht n im Input).
  2. Eingangsbelegung: x0 = n.
  3. Abbruchbedingung: while (x >= 1).
  4. Beobachtung:
    • x bleibt eine ganze Zahl.
    • Pro Durchlauf wird x entweder halbiert (wenn gerade) oder (x - 1) halbiert (wenn ungerade). In beiden Fällen verringert sich der Wert garantiert.
    • Nach maximal n Schritten (bzw. einer Funktion, die von n abhängt) wird x so klein, dass die Schleife endet.
  5. Ergebnis: Der Algorithmus terminiert bei jeder natürlichen Zahl n.

3. Partielle Korrektheit

Damit der Algorithmus nicht nur anhält, sondern auch das richtige Ergebnis berechnet, muss man zeigen, dass die ausgegebene Variable tatsächlich dem gewünschten Wert entspricht. Beim Beispiel der ägyptischen Multiplikation soll das Produkt n * m berechnet werden.


4. Schleifeninvariante

Definition

Beispiel-Invariante bei der ägyptischen Multiplikation

xy+p.

Hier sind x, y und p Variablen, die im Algorithmus in jedem Schleifendurchlauf geändert werden.

Beispiel-Invariante bei der Maximumsuche

Algorithmus Max-Search(A)1.max12.for j2 to length(A) do3.if A[j]>A[max] then maxj4.return max// max ist der Index eines maximalen Elements

5. Induktionsbeweis (Vollständige Induktion)

Um zu zeigen, dass die Schleifeninvariante tatsächlich zu einem korrekten Ergebnis führt, nutzt man meist einen Induktionsbeweis:

  1. Induktionsbasis:

    • Man zeigt, dass die Invariante vor dem ersten Schleifendurchlauf gilt (z. B. x0 = n, y0 = m, p0 = 0, sodass x0 * y0 + p0 = n * m + 0).
  2. Induktionsschritt:

    • Angenommen, die Invariante hält nach dem i-ten Durchlauf.
    • Dann zeigt man, dass sie auch nach dem (i+1)-ten Durchlauf gilt.
    • Man rechnet also die Änderungen von x, y und p in den zwei Fällen (gerade/ungerade) durch und stellt sicher, dass x * y + p sich nicht ändert.
  3. Ergebnis nach Abbruch:

    • Wenn die Schleife beendet ist, gilt x = 0 (bzw. < 1).
    • Die Invariante besagt:0y+p=p.
    • Also muss p = n * m sein (da die Invariante mit dem Anfangswert n*m übereinstimmt).