22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

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.

{ pre} Anweisung1 { p} , { p} Anweisung2 { post}<br />

{ pre} Anweisung1 ; Anweisung2 { post}<br />

wp(Anweisung1;Anweisung2 , post) ≡ wp(Anweisung1 , wp(Anweisung2, post))<br />

Abbildung 4.6: Verifikationsregel und Prädikatentransformer für zusammengesetzte Anweisungen<br />

Beispiel 4.3.6 (Weakest Precondition zusammengesetzter Anweisungen)<br />

1. wp(n:=n+1;x:=x*n , x=n!) ≡<br />

wp(n:=n+1 , wp(x:=x*n, x=n!) ) ≡<br />

wp(n:=n+1 , x*n = n! ) ≡<br />

x=n! (Vergleiche Beispiel 4.3.2 auf Seite 146)<br />

Das bedeutet, die schwächste Vorbedingung von x=n! für n:=n+1; x:=x*n wie<strong>der</strong> die Bedingung x=n!<br />

ist. Diese Bedingung ist als invariant gegenüber <strong>der</strong> Ausführung <strong>der</strong> beiden Anweisungen. Diese Tatsache<br />

werden wir später bei <strong>der</strong> Verifikation einer Funktion zur Berechnung <strong>der</strong> Fakultätsfunktion (siehe<br />

Beispiel 4.3.9 auf Seite 161) ausnutzen.<br />

2. Es sei P ein beliebiges Prädikat mit zwei freien Variablen. Dann gilt:<br />

wp(hilf:=a; a:=b; b:=hilf , P(a,b)) ≡<br />

wp(hilf:=a, wp(a:=b; b:=hilf , P(a,b))) ≡<br />

wp(hilf:=a, wp(a:=b, wp(b:=hilf, P(a,b) ) ) ) ≡<br />

wp(hilf:=a, wp(a:=b, P(a,hilf) ) ) ≡<br />

wp(hilf:=a, P(b,hilf) ) ≡<br />

P(b,a)<br />

Da wir für P alles einsetzen dürfen, haben wir allgemein bewiesen, daß hilf:=a; a:=b; b:=hilf die<br />

Werte von a und b vertauscht.<br />

Zum Zweck <strong>der</strong> besseren Lesbarkeit werden wir in Beispielen ab jetzt immer die Zusicherungen direkt in unser<br />

Programm einfügen und dabei das auf Seite 140 vorgestellte Schema benutzen.<br />

{ pre}<br />

Anweisung1; { p1}<br />

Anweisung2; { p2}<br />

.<br />

Anweisungn<br />

{ post}<br />

Diese Notation hat folgende Bedeutung: stehen zwei Zusicherungen { p} und { q} untereinan<strong>der</strong>, so sind<br />

sie nach den Regeln <strong>der</strong> Prädikatenlogik o<strong>der</strong> nach anwendungsspezifischen Regeln (z.B. <strong>der</strong> Arithmetik)<br />

ableitbar. Steht zwischen zwei Zusicherungen { p} und { q} eine Anweisung Anweisung, so bedeutet dies,<br />

daß { p} Anweisung { q} aufgrund <strong>der</strong> entsprechenden Ableitungsregel des Hoare-Kalküls gilt. Wir haben<br />

diese Notation bereits in füheren Beispielen verwendet, um Sätze des Hoare-Kalküls mit logischen Regeln<br />

zu modifizieren. Erst die Verifikationsregel für zusammengesetzte Anweisungen jedoch rechtfertigt es, auch<br />

mehrere Anweisungen hintereinan<strong>der</strong> zu verwenden.<br />

Beispiel 4.3.7 (Verifikation zusammengesetzter Anweisungen)<br />

Programm Zusicherungen Prämissen<br />

{ P(b,a)}<br />

hilf:=a; { P(b,hilf)}<br />

a:=b; { P(a,hilf)}<br />

b:=hilf { P(a,b)}

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!