22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4.3.4.4 Verifikation<br />

Die Verifikationsregel für bedingte Anweisungen ist in <strong>der</strong> einfachen Form ohne elseif noch relativ leicht zu<br />

verstehen. Um zu beweisen, daß { pre} if Bedingung then Anweisung1 else Anweisung2 end { post}<br />

gilt, muß man sich beide Anweisungen einzeln ansehen. Anweisung1 wird ausgeführt, wenn Bedingung gilt<br />

(und natürlich auch pre), Anweisung2 wird ausgeführt, wenn Bedingung nicht gilt, also ¬Bedingung (und<br />

pre) wahr ist. Beide Voraussetzungen müssen jeweils die Gültigkeit <strong>der</strong> Nachbedingung post zur Folge haben.<br />

{ pre ∧Bedingung} Anweisung1 { post} , { pre ∧¬Bedingung} Anweisung2 { post}<br />

{ pre} if Bedingung then Anweisung1 else Anweisung2 end { post}<br />

Der Prädikatentransformer ergibt sich aus dem folgenden Zusatzargument. Die schwächste Vorbedingung für<br />

post hängt davon ab, ob vor Ausführung <strong>der</strong> Anweisung Bedingung gilt o<strong>der</strong> nicht. Im ersten Fall ist dies<br />

dann die schwächste Vorbedingung bezüglich Anweisung1 an<strong>der</strong>nfalls diejenige bezüglich Anweisung2. Dies<br />

läßt sich durch logische Implikationen leicht ausdrücken<br />

wp(Bedingung then Anweisung1 else Anweisung2 end, post)<br />

≡ Bedingung ⇒ wp(Anweisung1, post) ∧ ¬Bedingung ⇒ wp(Anweisung2, post) 25<br />

Läßt man den else Zweig aus, so vereinfacht sich die Regel, da die schwächste Vorbedingung von post unter<br />

einer leeren Anweisung (bei <strong>der</strong> gar nichts geschieht) natürlich wie<strong>der</strong> post selbst ist. Abbildung 4.9 faßt die<br />

Verifikationsregeln und Prädikatentransformer bedingter Anweisungen zusammen.<br />

{ pre ∧Bedingung} Anweisung1 { post} , { pre ∧ ¬Bedingung} Anweisung2 { post}<br />

{ pre} if Bedingung then Anweisung1 else Anweisung2 end { post}<br />

{ pre ∧Bedingung} Anweisung1 { post} , pre ∧¬Bedingung ⇒ post<br />

{ pre} if Bedingung then Anweisung1 end { post}<br />

wp(Bedingung then Anweisung1 else Anweisung2 end, post)<br />

≡ Bedingung ⇒ wp(Anweisung1, post) ∧ ¬Bedingung ⇒ wp(Anweisung2, post)<br />

wp(Bedingung then Anweisung1 end, post)<br />

≡ Bedingung ⇒ wp(Anweisung1, post) ∧ ¬Bedingung ⇒ post<br />

Abbildung 4.9: Verifikationsregeln und Prädikatentransformer für bedingte Anweisungen<br />

Etwas komplizierter wirkt die Verifikationsregel für die allgemeine bedingte Anweisung mit elseif (siehe Abbildung<br />

4.7). Dies liegt daran, daß jedes elseif eine weitere Verschachtelungsstufe eröffnet und man die obige<br />

Verifikationsregel mehrfach anwenden muß. Eine Regel für die allgemeine bedingte Anweisung enthält also für<br />

jeden elseif-Zweig eine weitere Prämisse. Im Zweig elseif Bedingungi then Anweisungi müssen alle bisher<br />

genannten Bedingungen falsch sein und Bedingungi wahr. Alles an<strong>der</strong>e ist genauso wie bisher.<br />

{ pre ∧Bedingung1 } Anweisung1 { post} ,<br />

{ pre ∧¬Bedingung1 ∧Bedingung2 } Anweisung2 { post} ,<br />

.<br />

{ pre ∧¬Bedingung1 ∧... ∧¬Bedingungn } Anweisungelse { post}<br />

{ pre} if Bedingung1 then Anweisung1 elseif ... else Anweisungelse end { post}<br />

Die allgemeine Fallunterscheidung läßt sich, wie oben illustriert, auf die allgemeine bedingte Anweisung<br />

zurückführen. Da die sich hieraus ergebende Verifikationsregel konzeptionell nichts neues bringt, aber noch<br />

einmal etwas komplizierter wird, verzichten wir auf die Angabe einer eigenen Regel.<br />

25 Logische Umformungen führen auch zu einer an<strong>der</strong>en häufig benutzten Beschreibungsform. Es reicht, daß entwe<strong>der</strong> Bedingung<br />

wahr ist und die Vorbedingung bezüglich Anweisung1 o<strong>der</strong> daß ¬Bedingung gilt und die Vorbedingung bezüglich Anweisung2:<br />

wp(Bedingung then Anweisung1 else Anweisung2 end , post)<br />

≡ Bedingung ∧ wp(Anweisung1, post) ∨ ¬Bedingung ∧ wp(Anweisung2, post)

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!