Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
Grundlagen der Informatik I “Programmierung”
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.