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.

Beispiel 4.3.5 (Funktionsaufrufe in Anweisungen)<br />

• Die Funktion sqr habe als formales Argument x, als Vorbedingung x>5 und als Nachbedingung Result>25.<br />

Die Nachbedingung <strong>der</strong> Anweisung y:=sqr(y) sei y>20. Dann führt folgende Argumentationskette zu<br />

einer Vorbedingung:<br />

Programm Zusicherungen Prämissen<br />

{ y>5} y>5 ⇒ sqr(y)>25<br />

{ sqr(y)>25} sqr(y)>25 ⇒ sqr(y)>20<br />

{ sqr(y)>20}<br />

y:=sqr(y)<br />

{ y>20}<br />

• Die Funktion dbl pos habe als formales Argument x, als Vorbedingung x>0 und als Nachbedingung<br />

Result=2x. Die Prozedur r habe als formales Argument x, als Vorbedingung x>10 und als Nachbedingung<br />

b>2x. Die Nachbedingung <strong>der</strong> Anweisung a.r(dbl pos(6)) sei a.b>20. Dann führt folgende<br />

Argumentationskette zu einer Vorbedingung:<br />

Programm Zusicherungen Prämissen<br />

{ } true ⇒ 6>0 (Arithmetik)<br />

{ 6>0} 6>0 ⇒ dbl pos(6)=2*6<br />

{ dbl pos(6)=12} dbl pos(6)=12 ∧ 12>10 ⇒ dbl pos(6)>10 (Arithmetik)<br />

{ dbl pos(6)>10}<br />

a.r(dbl pos(6))<br />

{ a.b>2*dbl pos(6)} dbl pos(6)=12 ∧ a.b>2*dbl pos(6) ⇒ a.b>24<br />

{ a.b>24} a.b>24 ⇒ a.b>20<br />

{ a.b>20}<br />

Eine weitere Formalisierung würde versuchen, die angegebenen Prämissen, soweit sie nicht auf reiner Arithmetik<br />

beruhen, um den Namen <strong>der</strong> zugehörigen logischen Regel zu ergänzen. Auf diese Art erhält man einen<br />

Beweis, <strong>der</strong> maschinell geprüft werden kann.<br />

4.3.3 Zusammengesetzte Anweisungen<br />

Folgen von Anweisungen haben wir bereits ausgiebig benutzt. Sie ermöglichen, einen komplexen Ablauf in<br />

eine Serie Einzelschritte zu zerlegen, die hintereinan<strong>der</strong> ausgeführt werden. Die Syntax hierfür ist einfach: die<br />

Folge wird – durch Semikolon getrennt (optional, aber empfehlenswert) – hintereinan<strong>der</strong>geschrieben.<br />

Anweisung1 ;...; Anweisungn<br />

Die Bedeutung dieser Folge von Anweisungen ist naheliegend. Zuerst wird Anweisung1 ausgeführt, danach<br />

Anweisung2 usw. bis schließlich Anweisungn ausgeführt ist.<br />

Für eine mathematische Charakterisierung solcher Folgen von Anweisungen ist es hilfreich zu wissen, daß<br />

jede einzelne Anweisung wie<strong>der</strong>um beliebig komplex sein darf, insbeson<strong>der</strong>e also auch eine weiterere Folge von<br />

Anweisungen. Dies erlaubt es, jede Folge von Anweisungen als Komposition zweier Anweisungen auszudrücken<br />

und mit einer einzigen Verifikationsregel für Anweisungsfolgen auszukommen (die bei längeren Folgen dann<br />

mehrmals angewandt werden muß). Die Regel ist verhältnismäßig einfach, da sie genau die intuitive Vorstellung<br />

des Zusammensetzens von Anweisungen beschreibt.<br />

Ist pre eine Vorbedingung von p für eine Instruktion Anweisung1 (also eine Vorbedingung dafür,<br />

daß p nach Ausführung von Anweisung1 gilt,) und p seinerseits eine Vorbedingung von post für<br />

Anweisung2, dann ist pre eine Vorbedingung von post für die zusammengesetzte Instruktion.<br />

Man beachte, daß diese Regel – im Gegensatz zu den Regeln für Wertzuweisungen und Prozeduraufrufe – zwei<br />

gültige (abgeleitete) Sätze als Prämissen benötigt, um einen neuen gültigen Satz des Hoare-Kalküls abzuleiten.<br />

Die schwächste Vorbedingung wp für eine zusammengesetzte Instruktion ergibt sich entsprechend durch eine<br />

Komposition <strong>der</strong> einzelnen schwächsten Vorbedingungen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!