22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!