Hoare-Logik - vollständige Korrektheit der Schleifen

7

Betrachten Sie eine while-Schleife des Formulars:

while (C) {S}

mit die Bedingung und den Hauptteil der Schleife.CS

Sei und jeweils eine Invariante und eine Variante dieser Schleife. Die Regel für die vollständige Korrektheit von while-Schleifen ist in meinem Lehrbuch gegeben durch:IV

IfIV0

Und[ICV=v0]S[IV<v0]

Dann[I]while (C) {S}[I¬C]

ich weiß, muss die Variante strikt abnehmen und auch durch Null begrenzt sein , damit die Schleife endet . Wenn ich das jedoch mathematisch übersetze, erhalte ich einen anderen Satz als in meinem Lehrbuch: V

[V0V=v0]S[V0V<v0]

Meine Frage : Sagen dieser letzte Satz und die Regel meines Lehrbuchs dasselbe darüber, was bewiesen werden muss, damit die Schleife endet? Mit anderen Worten: ist

[ICV0V=v0]S[IV0V<v0]

das Gleiche wie

IV0 zusammen mit[ICV=v0]S[IV<v0]

Warum oder warum nicht?

Dory
quelle
Die Behauptung, dass "𝚅 streng abnehmen muss und dass es auch durch Null begrenzt sein muss" ausreichend ist, ist irreführend. Sie brauchen auch, dass 𝚅 eine Funktion mit einem fundierten Bereich ist. Stellen Sie sich vor, Sie verwenden stattdessen die nicht negativen rationalen Zahlen und konstruieren ein Gegenbeispiel.
Kai

Antworten:

4

Sie sind insofern gleichwertig, als Sie jedes Mal, wenn Sie die Lehrbuchregel anwenden können, auch Ihre eigene Regel anwenden können und umgekehrt. Die Invariante für die beiden Regeln ist ähnlich, aber nicht gleich.

Konvertieren einer Lehrbuchregelinstanz in eine Instanz Ihrer Regel

Angenommen, wir haben eine Anwendung oder Ihre Lehrbuchregel. wir haben einige für die:I

IV0 zusammen mit[ICV=v0]S[IV<v0]

Dann haben wir dank der obigen Implikation auch . Mit der Regel PrePost können wir die Invariante in ihre Entsprechung umschreiben und erhalten eine Anwendung Ihrer Regel:IIV0

[ICV0V=v0]S[IV0V<v0]

Hier verwenden wir dieselbe Invariante wie in der Lehrbuchregel.

Konvertieren einer Instanz Ihrer Regel in eine Lehrbuchregelinstanz

Nun zur umgekehrten Richtung. Angenommen, wir haben für Ihre Regel gefunden:I

[ICV0V=v0]S[IV0V<v0]

Jetzt können wir nicht annehmen , daher können wir für die Lehrbuchregel verwenden. Wir können jedoch als neue Invariante . Wir haben trivialerweise durch Konstruktion (*). Weiter aus der HypotheseIV0II:=IV0IV0

[ICV0V=v0]S[IV0V<v0]

wir können erhalten (durch PrePost)

[ICV=v0]S[IV<v0] (**)

Die Eigenschaften (*) und (**) sind genau das, was wir brauchen, um die Lehrbuchregel anzuwenden.

Chi
quelle