In der Informatik ist a Schleifeninvariante Eines Sonden – Formular , wo invariant , stirbt vor, während und nach der Ausführung Wacholder Schleife in Einem Algorithmus gelb ist [1] . Sie ist DAMIT unabhängig von der Zahl ihrer DERZEIT Durchläufe. Eine Schleifeninvariante Wird zur Form Ellen Verifizierung von Algorithmus benötigt und hilft zudem, sterben Vorgänge Innerhalb Einer Schleife besser zu erfassen. Typischerweise beschreiben Schleifeninvarianten Wertebereiche von Die Variable und Beziehung , wo die Variable ungetestet Rentiere Ander. Da es sich bei der Schleifeninvariante um EINEN Logistik chen Ausdruck Handelt, Kann sie Entweder wahr oder falsch sein.
Wenn Sie feststellen, dass Schleife sich befindet, ist das der Fall, dass die Schleife ist vergoldet, z. B. eine Tautologie wer „wahr = wahr“. Sie können auch lesen, dass invariant zu wählen ist, dies ist aber nicht immer dafür geeignet, einen formalen Korrektheitsbeweis durchzuführen.
Korrektheitsbeweis
Entsprechend sie Hoare-Kalkül ist beim Korrektheitsbeweis Wacholder Wacholder Schleifeninvariante Schleife Profilierung mittels zu zeigen, sterben Dass Schleifeninvariante direkt vor der Ausführung der Schleife und nach Jeder Prüfung der Schleifenbedingung gelb ist. Nach der Prüfung der Schleifenbedingung Kann sterben Schleife Entweder betreten Werden (Schleifenbedingung Erfüllt) oder verlassene Werden (Schleifenbedingung nicht Erfüllt). Deshalb Sie sterben invariant Sowohl direkt am Anfang jeden Schleifendurchlaufs gelt Als Auch direkt nach der Schleife (siehe Beispiel).
Teilweise korrekt Heit
Für die partielle Korrektheitsüberprüfung prüft man, in der Invariante Kritikpunkt, direkt vor der Schleife. Wird der Durchgang fast immer eingehalten? Of this vorgehen Entspricht der Vollständigen Induktions der Mathematik [2] . Außer muss die Invariante auch direkt an der Schleife ausgekleidet sein. Sie alle drehen Zeitpunkte, die die Schleifeninvariante korrekt signalisieren, dh die Variablen müssen innerhalb des definierten Bereichs liegen.
Nach Dem verlassene Wacholder Schleife, bei der sterben invariant nicht verletzt Wird, gelt sterben abweisende Schleifenbedingung (sonst wäre sterben Schleife nicht verlassene worden) und sterben Schleifeninvariante. If ich aus Dieser Beide logistisch chen Ausdrücken der gewünschte Plan Ergebnis der Schleife Durch und-Verknüpfung Ergibt, Dann sind teilweise korrekte Schleife bewiesen Heit der sterben. Partielle Correct edt Bedeutende that immer, sterben, ideal Schleife terminiert (verlassene Wird), das richtige Plan Ergebnis vorliegt. DAMIT ist jedoch nicht bewiesen, sterben Dass Schleife immer terminiert (total Correct Heit).
Total Korrektur Heit
Über den gesamten Korrekturcode, Schleife zu haben, musste zunächst die Partielle Korrektheit nachgewiesen werden. Anschließend wird geprüft, welche Schleife immer terminiert. Dazu muss erst einmal ermittelt werden, wann geschiedene Schleife waren. Als sie ausgetauscht wurden, konnten sie sich nicht daran gewöhnen, denn sie waren in jedem Fall Tut, z. B. Die Zählervariablen Einer For-Schleife ist Mitglied der Dedizierten Gesellschaft und gehört nicht zu den Schleife nicht verändert.
When so nachgewiesen ist, dass der gesamte Korrekturtitel der Schleife bewiesen ist.
Es ist bewiesen, Dass es Keinen algorithm Gibt, der automatisiert für alle Schleifer Eine Schleifeninvariante findet, sterben Für einen Korrektheitsbeweis used Werden Kann.
Beispiel
Der folgende Algorithmus multipliziert die beiden Variablen a und b miteinander:
1 multipliziere ( a , b ) { 2 x : = a ; 3 y : = b ; 4 p : = 0 ; 5 // Invariante muss vor der Schleife gelogen 6, während x > 0 do { 7 // de Invariante muss am Anfang sein Durchlaufs gelten 8 p : = p + y ; 9 // Innere Halle der Schleife, die den Invariante Cousin verließ, 10 // (x * y) + p = a * b ist eine dieser Stelle nicht erfüllt 11 x : = x - 1 ; 12 // Invariante muss auch am Ende jedes Durchlaufs 13 } 14 // Das Invariante muss auch gleich nach der Schleife 15 zurückgeben p 16 }
Eine Schleifeninvariante für diesen Algorithmus lautet:
-
- {\ displaystyle (x \ cdot y) + p = a \ cdot b}
Native Unterstützung durch Programmiersprachen
Eiffel
Die Programmierrede Eiffel Bietet Nativ Schleifeninvarianten an. [3] Die invariant Wird von der Programmiersprache zur Laufzeit überwacht.
Im folgenden Beispiel wird die Invariante x <= 10
für die Schleife definiert. Diese Schleife ist so lang wie x
der Wert 10 erreicht hat. Dann wird die Schleife ausgestoßen. Die Invariante ist auch so wie sie nach der Ausführung der Schleife erfolgt.
von x = 0 invariant x <= 10 bis x > = 10 Schleife x : = x + 1 End
Siehe auch
- wp-Kalkül
Einzelstunden
- Hochspringen↑ Martin Glinz, Harald Gall: Systematische Programmierer: Lesbares und endloses Programmschrauben . In: Softwareentwicklung . 2005, S. 39-40 ( ifi.uzh.ch [PDF; abgeraufen am 11. April 2014]).
- Hochspringen↑ Edsger Wybe Dijkstra : Einige schöne Argumente mit mathematischer Induktion . In: Acta Informatica . Auf Rang. 13, 1980, S. 1-8.
- Hochspringen↑ Bertrand Meyer : Eiffel: Die Sprache . Prentice Hall, 1991, S. 129-131.