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 />
{ P } n 0<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 />
R 1<br />
R 1<br />
3.6.4 Verifikation von Anweisungen zum Vertauschen<br />
zweier Variablen<br />
Die folgende Prozedur vertauscht die Inhalte zweier Variablen:<br />
procedure swap(var x, y : integer) : integer;<br />
begin<br />
x := x + y;<br />
y := x - y;<br />
x := x - y;<br />
end;<br />
Anweisungen, die zu verifizieren<br />
sind<br />
while k > 0 do<br />
begin<br />
end<br />
R 3a<br />
R 4a<br />
y := 1;<br />
y p k = x n k 0<br />
{ I} y p k = x n k 0<br />
{ IB } y p k = x n k 0 k > 0<br />
Ja<br />
{P B}<br />
y p k = x n <br />
k 0 k > 0 <br />
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 } y p k = x n k 0<br />
{ P } y p k = x n k 0<br />
{ B } k 2<br />
R 1<br />
R 1<br />
R 1<br />
{ R } y p k = x n k 0<br />
{ I} y p k = x n k 0<br />
{ IB } y p k = x n k 0 (k > 0)<br />
{ Q } y = x n<br />
Nein<br />
{P B}<br />
y p k = x n <br />
k 0 k>0 <br />
k 2)<br />
y p p k - 1 = x n k - 1 0<br />
y := y * p;<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 />
R 1<br />
Als Erstes werden die Vor- und Nachbedingungen der gesammten Spezifikation<br />
eingetragen. Das Problem besteht hierbei in der Findung einer formalen Beschreibung.<br />
Dies kann durch die Einführung zweier Zustände A und B gelöst<br />
werden.<br />
Also: Anfangs befindet sich die Variable x in einem Zustand A und die Variable<br />
y in einem Zustand B, nach<strong>dem</strong> die Anweisungen abgearbeitet sind, soll sich<br />
die Variable y in genau <strong>dem</strong> Zustand A befinden, den x am Anfang hatte und x<br />
in <strong>dem</strong> Zustand B, den y zu Beginn hatte.<br />
Dieses Beispiel veranschaulicht insbesondere insbesondere den <strong>Umgang</strong><br />
<strong>mit</strong> Zuweisungen, da diese Verifikation ausschließlich durch dreifache Anwendung<br />
dieses Axioms durchgeführt werden kann.<br />
Erste Anwendung von R 1 :<br />
{ P } x = A y = B<br />
...<br />
x := x + y;<br />
...<br />
y := x - y;<br />
y = A x - y = B<br />
x := x - y;<br />
{ P } x = A y = B<br />
x := x + y;<br />
y := x - y;<br />
x := x - y;<br />
{ Q } y = A x = B<br />
R 1<br />
Zweite Anwendung:<br />
{ P } x = A y = B<br />
...<br />
x := x + y;<br />
x - y = A x – (x – y) = B<br />
y := x - y;<br />
y = A x - y = B<br />
x := x - y;<br />
R 1<br />
{ Q } y = A x = B<br />
{ Q } y = A x = B<br />
37<br />
38