Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Rein hypothetisch könnte man bei <strong>der</strong> Verifikation einer Schleife auch ohne Invariante und Variante auskommen,<br />
wenn man beschreiben könnte, wie oft die Schleife durchlaufen wird. Wäre bekannt, daß die Schleife<br />
from Init until Abbruch loop Anweisung end<br />
nach genau n Durchgängen terminiert, dann könnte die Vorbedingung pre <strong>der</strong> Schleife aus <strong>der</strong> Nachbedingung<br />
post wie folgt berechnet werden:<br />
wp(Anweisung;Anweisung; ...;Anweisung<br />
<br />
n−mal<br />
, post)<br />
Mathematisch kann die Unkenntnis über die konkrete Anzahl n <strong>der</strong> Durchgänge bis zur Terminierung durch<br />
einen Existenzquantor ersetzt werden und es ist tatsächlich möglich, einen Prädikatentransformer ohne Kenntnis<br />
dieser Anzahl zu formulieren. Die schwächste Vorbedingung für die Nachbedingung post unter <strong>der</strong> obigen<br />
Schleife ist daher eine Formulierung <strong>der</strong> folgenden Aussage:<br />
Es gibt eine Anzahl n, so daß gilt<br />
Für alle Werte k ∈{1..n − 1} ist nach k-maliger Durchführung von Anweisung ist Abbruch nicht erfüllt<br />
und nach n-maliger Durchführung von Anweisung ist Abbruch erfüllt<br />
und es gilt die schwächste Vorbedingung von post bezüglich <strong>der</strong> n-fachen Ausführung von Anweisung.<br />
Für eine Präzisierung dieser Aussage muß man nun noch den Begriff <strong>der</strong> n-malige Durchführung einer Anweisung<br />
durch ein Prädikat ersetzen. Wir führen zu diesem Zweck ein Prädikat Hn ein, welches folgende<br />
Bedeutung haben soll:<br />
Hn(Anweisung, Abbruch, post) ist die schwächste Vorbedingung dafür, daß nach genau n-maliger<br />
Durchführung von Anweisung die Bedingung Abbruch erfüllt ist und post gilt.<br />
Hn kann durch eine rekursive logische Definition ausgedrückt werden, denn H0 gilt genau dann, wenn die<br />
Schleife sofort abbricht und post gilt, und Hn+1 genau dann, wenn die Schleife nicht abbricht und nach<br />
einmaliger Ausführung von Anweisung Hn gilt.<br />
H0(Anweisung,Abbruch,post) ≡ Abbruch ∧ post<br />
Hn+1(Anweisung,Abbruch,post) ≡ ¬Abbruch ∧ wp(Anweisung, Hn(Anweisung,Abbruch,post))<br />
Mit Hn läßt sich die schwächste Vorbedingung für post bezüglich einer Schleife ausdrücken als<br />
wp(Init, ∃n:IN . Hn(Anweisung, Abbruch, post)).<br />
Durch den Existenzquantor ist diese Form für die Praxis zu umständlich. Daher verzichtet man bei Schleifen im<br />
allgemeinen auf die schwächste Vorbedingung und stellt eine Verifikationsregel auf, die hinreichende Prämissen<br />
für Terminierung und Erfüllung <strong>der</strong> Nachbedingung enthält. Für diese Schlußregel sind Informationen über<br />
die Invariante Inv und die Variante Var <strong>der</strong> Schleife unabdinglich.<br />
Für die partielle Korrektheit reicht es aus, über die Invariante zu argumentieren. Wenn die Invariante nach <strong>der</strong><br />
Initialisierung gilt und nach je<strong>der</strong> Ausführung von Anweisung, wenn sie vorher galt, dann gilt nach Beendigung<br />
<strong>der</strong> Schleife die Invariante und natürlich auch die Abbruchbedingung.<br />
{ pre} Init { Inv} , { Inv ∧ ¬Abbruch} Anweisung { Inv}<br />
{ pre} from Init until Abbruch loop Anweisung end { Inv ∧ Abbruch}<br />
Diese Regel berücksichtig noch nicht, daß auch die Terminierung eine Prämisse für die totale Korrektheit <strong>der</strong><br />
Schleife sein muß. Um Terminierung zu beweisen, benötigen wir als Voraussetzung, daß die Variante nach <strong>der</strong><br />
Initialisierung nicht negativ ist und nach je<strong>der</strong> (legalen) Ausführung von Anweisung kleiner geworden ist:<br />
{ pre} Init { Var≥0} und { ¬Abbruch ∧ Var≥0 ∧ Var=x} Anweisung { Var≥0 ∧ Var