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

Dies führt auf folgende Spezifikation:<br />

while u x do<br />

begin<br />

{ P } x = A y = B<br />

0 = 0 y x = A y = B<br />

z := 0;<br />

z = 0 y x = A y = B<br />

u := 0;<br />

{ I} z = u y x = A y = B<br />

{ IB } z = u y u x x = A y = B<br />

r := x;<br />

z + y = (u + 1) y x = A y = B<br />

z := z + y;<br />

z = (u + 1) y x = A y = B<br />

R 1<br />

R 1<br />

R 1<br />

3.6.7 Verifikation von Code <strong>zur</strong> Er<strong>mit</strong>tlung des ggT<br />

<strong>Der</strong> folgende Code zieht jeweils die Variable <strong>mit</strong> <strong>dem</strong> aktuell größeren Wert<br />

von der <strong>mit</strong> <strong>dem</strong> momentan kleineren Wert ab. Dies wird wiederholt, bis beide<br />

Variablen den gleichen Wert haben, ist dies erreicht, ist der ggT er<strong>mit</strong>telt.<br />

function ggT(x, y : integer) : integer;<br />

var a, b : integer;<br />

begin<br />

a := x;<br />

b := y;<br />

while a b do<br />

begin<br />

while a > b do<br />

a := a - b;<br />

while b > a do<br />

b := b - a;<br />

end;<br />

ggT := b;<br />

end;<br />

Anweisungen, die zu<br />

verifizieren sind<br />

1. Umfassende Vor- und Nachbedingungen aufstellen:<br />

end<br />

u := u + 1;<br />

{ I} z = u y x = A y = B<br />

R 1<br />

{ P } x > 0 y > 0<br />

a := x;<br />

{ IB } z = u y x = A y = B (u x)<br />

R 4a<br />

b := y;<br />

{ Q } z = x y x = A y = B<br />

while a b do<br />

begin<br />

while a > b do<br />

begin<br />

end;<br />

end;<br />

while b > a do<br />

begin<br />

end;<br />

a := a - b;<br />

b := b - a;<br />

{ Q } a = b b = ggT(x, y)<br />

45<br />

46

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!