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

{ 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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!