Ich schaue auf Hoare Logic und ich habe Probleme, die Methode zu verstehen, die Schleifeninvariante zu finden.
Kann jemand die Methode zur Berechnung der Schleifeninvariante erklären?
Und was sollte eine Schleifeninvariante enthalten, um eine "nützliche" zu sein?
Ich habe es nur mit einfachen Beispielen zu tun, Invarianten zu finden und teilweise und vollständige Korrekturen in Beispielen wie:
nachzuweisen %Vor%Wenn wir von Hoares Logik sprechen, um die (teilweise) Korrektheit von Programmen zu beweisen, dann benutzen Sie die Vor- und Nachbedingung, zerlegen das Programm und benutzen die Regeln von Hoares Logik-Inferenzsystem, um eine induktive Formel zu erstellen und zu beweisen >
In Ihrem Beispiel möchten Sie das Programm mit der Regel
zerlegen %Vor%In Ihrem Fall
Also im nächsten Schritt schließen wir {i ≥ 0 ^ i > 0} i := i−1 {i ≥ 0}
ab. Dies kann weiter leicht abgeleitet und bewiesen werden.
Ich hoffe, das hilft.
Um nützlich zu sein (für Ihre Argumentation) ist der Hauptpunkt der Invariante. Sehen Sie sich also die Nachbedingung an, die Sie beweisen möchten, und versuchen Sie, eine Invariante zu erstellen, die Ihnen hilft, Schritt für Schritt zur Nachbedingung zu gelangen, die aus dem Code der Schleife abgeleitet werden kann.
Ich bin mir nicht sicher, ob das deine Frage beantworten wird, aber nur für den Fall, dass es das tut:
Tags und Links language-agnostic invariants logic verification loop-invariant