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
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