04.01.2015 Aufrufe

Der Umgang mit dem Hoare-Kalkül zur Programmverifikation

Der Umgang mit dem Hoare-Kalkül zur Programmverifikation

Der Umgang mit dem Hoare-Kalkül zur Programmverifikation

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.

Michael Gellner<br />

Einführung in die Verifikation<br />

Michael Gellner<br />

Einführung in die Verifikation<br />

der Verzweigung dar und ist nur abzulesen, da P und R der jeweils äußeren Invarianten<br />

I entsprechen, ist diese ebenfalls nur zu übertragen.<br />

drei weitere Zuweisungen, die durch weitere Anwendungen des Zuweisungsaxioms<br />

bearbeitet werden.<br />

Ja<br />

{P B}<br />

y p k = x n k 0 k > 0 k 2<br />

{ R } y p k = x n k 0<br />

{ P } y p k = x n k 0<br />

{ B } k 2<br />

{P B}<br />

y p k = x n k 0 k>0 k 2)<br />

S 1 S 2<br />

{ R } y p k = x n k 0<br />

Nein<br />

Regel der Fallunterscheidung:<br />

{ P },<br />

{ B },<br />

{ P B },<br />

{ P B }<br />

{ R }<br />

müssen gefunden<br />

werden<br />

1 x n = x n n 0<br />

k := n;<br />

1 x k = x n k 0<br />

p := x;<br />

1 p k = x n k 0<br />

y := 1;<br />

R 1<br />

R 1<br />

R 1<br />

{ R } y p k = x n k 0<br />

y p k = x n k 0<br />

Da<strong>mit</strong> bleiben als letzte innere Elemente die beiden Anweisungsfolgen S 1 und<br />

S 2. Beide werden nacheinander nach <strong>dem</strong> Zuweisungsaxiom <strong>mit</strong> Klauseln<br />

durchsetzt und die sich ergebenden Vorbedingungen werden <strong>mit</strong> den Nachbedingungen<br />

der umfassenden Klauseln (aus der Verzweigung) abgeglichen.<br />

Hierbei ergeben sich ebenfalls keine Widersprüche in sich oder gegenüber der<br />

anfänglichen Vorbedingung des Quelltextes. Die Beweisskizze zusammengesetzt:<br />

Fall 1: k 2<br />

{P B} y p k = x n k 0 k > 0 k 2<br />

y (p p) k div 2 = x n k div 2 0<br />

p := p * p;<br />

y p k div 2 = x n k div 2 0<br />

k := k div 2;<br />

R 1<br />

R 1<br />

{ R } y p k = x n k 0<br />

Fall 2: (k 2)<br />

{P B} y p k = x n k 0 k > 0 k 2)<br />

y p p k - 1 = x n k - 1 0<br />

y := y * p;<br />

R 1<br />

y p k - 1 = x n k - 1 0<br />

k := k - 1;<br />

{ R } y p k = x n k 0<br />

R 1<br />

Hierbei geht alles auf. Die verschachtelten Anweisungen sind verifiziert, die<br />

Arbeit kann oberhalb der While-Schleife fortgesetzt werden. Hier befinden sich<br />

35<br />

36

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!