www.wikidata.de-de.nina.az
In der Informatik ist eine Schleifeninvariante eine Sonderform der Invariante die am Anfang und Ende eines jeden Schleifendurchlaufs und vor und nach der Ausfuhrung der Schleife in einem Algorithmus gultig ist 1 Sie ist damit unabhangig von der Zahl ihrer derzeitigen Durchlaufe Eine Schleifeninvariante wird zur formalen Verifizierung von Algorithmen benotigt und hilft zudem die Vorgange innerhalb einer Schleife besser zu erfassen Typischerweise beschreiben Schleifeninvarianten Wertebereiche von Variablen und Beziehungen der Variablen untereinander Da es sich bei der Schleifeninvariante um einen logischen Ausdruck handelt kann sie entweder wahr oder falsch sein Zu jeder Schleife lasst sich eine Invariante finden die vor der Schleife und nach jeder Prufung der Schleifenbedingung gilt z B eine Tautologie wie wahr wahr Es lasst sich also immer eine Invariante bestimmen diese ist aber nicht immer dafur geeignet einen formalen Korrektheitsbeweis durchzufuhren Inhaltsverzeichnis 1 Korrektheitsbeweis 1 1 Partielle Korrektheit 1 2 Totale Korrektheit 2 Beispiel 3 Native Unterstutzung durch Programmiersprachen 3 1 Eiffel 4 Siehe auch 5 EinzelnachweiseKorrektheitsbeweis BearbeitenEntsprechend dem Hoare Kalkul ist beim Korrektheitsbeweis einer Schleife mittels einer Schleifeninvariante zu zeigen dass die Schleifeninvariante direkt vor der Ausfuhrung der Schleife und nach jeder Prufung der Schleifenbedingung gultig ist Nach der Prufung der Schleifenbedingung kann die Schleife entweder betreten werden Schleifenbedingung erfullt oder verlassen werden Schleifenbedingung nicht erfullt Deshalb muss die Invariante sowohl direkt am Anfang jedes Schleifendurchlaufs gelten als auch direkt nach der Schleife siehe Beispiel Partielle Korrektheit Bearbeiten Fur die partielle Korrektheitsuberprufung pruft man zuerst ob die Invariante beim ersten kritischen Zeitpunkt gilt also direkt vor der Schleife Danach wird gepruft ob sie beim Ubergang von einem Durchgang zum nachsten erhalten bleibt Dieses Vorgehen entspricht der vollstandigen Induktion der Mathematik 2 Ausserdem muss die Invariante auch direkt nach der Schleife gelten Zu allen drei Zeitpunkten muss die Schleifeninvariante korrekt sein d h Variablen mussen z B innerhalb definierter Bereiche liegen oder gewisse Beziehungen zueinander haben Nach dem Verlassen einer Schleife bei der die Invariante nicht verletzt wird gelten die abweisende Schleifenbedingung sonst ware die Schleife nicht verlassen worden und die Schleifeninvariante Wenn sich aus diesen beiden logischen Ausdrucken das gewunschte Ergebnis der Schleife durch und Verknupfung ergibt dann ist die partielle Korrektheit der Schleife bewiesen Partielle Korrektheit bedeutet dass immer wenn die Schleife terminiert verlassen wird das korrekte Ergebnis vorliegt Damit ist jedoch nicht bewiesen dass die Schleife immer terminiert totale Korrektheit Totale Korrektheit Bearbeiten Um die totale Korrektheit einer Schleife zu beweisen muss zunachst die partielle Korrektheit bewiesen werden Anschliessend wird gepruft ob die Schleife immer terminiert Dazu muss zunachst ermittelt werden wann die Schleife verlassen werden kann Wenn sie verlassen werden kann muss nachgewiesen werden dass sie das in jedem Fall tut z B die Zahlervariable einer For Schleife erhoht sich bei jedem Durchlauf bis zu einer Obergrenze und wird innerhalb der Schleife nicht verandert Wenn so nachgewiesen ist dass die Schleife immer terminiert und dass anschliessend immer das gewunschte Ergebnis vorliegt ist die totale Korrektheit der Schleife bewiesen Es ist bewiesen dass es keinen Algorithmus gibt der automatisiert fur alle Schleifen eine Schleifeninvariante findet die fur einen Korrektheitsbeweis verwendet werden kann Beispiel BearbeitenDer folgende Algorithmus multipliziert die beiden Variablen a und b miteinander multiply a b x a y b p 0 die Invariante muss vor der Schleife gelten while x gt 0 do die Invariante muss am Anfang jedes Durchlaufs gelten p p y innerhalb der Schleife muss die Invariante nicht gelten x y p a b ist an dieser Stelle nicht erfullt x x 1 die Invariante muss auch am Ende jedes Durchlaufs gelten die Invariante muss auch direkt nach der Schleife gelten return p Eine Schleifeninvariante fur diesen Algorithmus lautet x y p a b displaystyle x cdot y p a cdot b nbsp dd Native Unterstutzung durch Programmiersprachen BearbeitenEiffel Bearbeiten Die Programmiersprache Eiffel bietet nativ Schleifeninvarianten an 3 Die Invarianten werden von der Programmiersprache zur Laufzeit uberwacht Im folgenden Beispiel wird die Invariante x lt 10 fur die Schleife definiert Die Schleife lauft so lange bis x den Wert 10 erreicht hat Dann wird die Schleife verlassen Die Invariante ist im Beispiel sowohl vor der Ausfuhrung der Schleife als auch nach jeder Ausfuhrung der Schleife erfullt from x 0 invariant x lt 10 until x gt 10 loop x x 1 endSiehe auch Bearbeitenwp KalkulEinzelnachweise Bearbeiten Martin Glinz Harald Gall Systematisches Programmieren Lesbare und anderbare Programme schreiben In Software Engineering 2005 S 39 40 ifi uzh ch PDF abgerufen am 11 April 2014 Edsger Wybe Dijkstra Some beautiful arguments using mathematical induction In Acta Informatica Nr 13 1980 S 1 8 utexas edu Bertrand Meyer Eiffel The Language Prentice Hall 1991 S 129 131 Abgerufen von https de wikipedia org w index php title Schleifeninvariante amp oldid 233086252