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.

Programmkonstruktion keine Rolle, da die Nachbedingung die Wirkung eines Programmstücks festlegt und<br />

damit im Programm “zurückgerechnet” wird. Die “Vorwärtsrechnung” von <strong>der</strong> Vorbedingung (zumeist true)<br />

zur Nachbedingung wirkt ziellos, da die Vorbedingung keine Information über das Ziel in sich trägt.<br />

Bei all diesen Überlegungen wurden die folgenden Regeln ohne weitere Begründung verwendet:<br />

pre ⇒ pre’, { pre’} instruction { post}<br />

{ pre} instruction { post}<br />

{ pre} instruction { post’} , post’ ⇒ post<br />

{ pre} instruction { post}<br />

Verstärkung <strong>der</strong> Vorbedingung (VV)<br />

Abschwächung <strong>der</strong> Nachbedingung (AN)<br />

Abbildung 4.1: Verstärkungs- und Abschwächungsregeln für Programmbeweise<br />

Die Verstärkung <strong>der</strong> Vorbedingung bzw. die Abschwächung <strong>der</strong> Nachbedingung erlaubt uns, einen Programmbeweis<br />

in folgen<strong>der</strong> Form zu beschreiben:<br />

Programm Zusicherungen Prämissen<br />

{ pre} pre ⇒ pre’<br />

{ pre’}<br />

instruction<br />

{ post’} post’ ⇒ post<br />

{ post}<br />

Vor je<strong>der</strong> und nach je<strong>der</strong> Anweisung instruction steht eine Reihe von Zusicherungen, die sich von oben nach<br />

unten jeweils abschwächen. Am rechten Rand wird zusätzlich angegeben, warum diese Abschwächung zulässig<br />

ist. Das Lesen (und meist das Erzeugen) des Programmbeweises erfolgt dann von unten nach oben. Folgt<br />

oberhalb einer Zusicherung wie<strong>der</strong> eine Zusicherung, so beschreiben die Anmerkungen <strong>der</strong> oberen Bedingung,<br />

warum diese Verschärfung zulässig ist. Folgt eine Instruktion, so ist <strong>der</strong>en Vorbedingung über die jeweilige<br />

Regel für diesen Instruktionstyp z.B. über die schwächste Vorbedingung nachzuweisen.<br />

Zwei weitere Regeln sind sinnvoll, falls die Prädikate zu kompliziert werden:<br />

{ pre} instruction { post} , { pre’} instruction { post}<br />

{ pre ∨ pre’} instruction { post}<br />

Kombination <strong>der</strong> Vorbedingungen<br />

{ pre} instruction { post} , { pre} instruction { post’}<br />

{ pre} instruction { post ∧ post’}<br />

Kombination <strong>der</strong> Nachbedingungen<br />

Abbildung 4.2: Regeln für die Kombination von Zusicherungen in Programmbeweisen<br />

Diese beiden Regeln erlauben es, ein Programm einzeln für Teilzusicherungen zu prüfen. Die erste Regel<br />

gibt an, daß bei mehreren alternativen Vorbedingungen (pre ∨ pre’), die zweite Regel, daß bei mehreren<br />

Anfor<strong>der</strong>ungen (post ∧ post’) <strong>der</strong> Beweis einzeln geführt werden kann.<br />

Wir wollen nun im folgenden Abschnitt für alle Programmkonstrukte <strong>der</strong> Sprache Eiffel weitere formale Regeln<br />

angeben, die uns sagen, wie die Korrektheit einer komplexeren Anweisung aus Eigenschaften ihrer Bestandteile<br />

abgeleitet werden kann. Diese Regeln reichen aber noch nicht aus, um ein Programm zu beweisen. Hinzu<br />

kommen müssen die Regeln aus den jeweiligen Anwendungsgebieten. Soll etwas numerisch berechnet werden,<br />

so benötigen wir natürlich die Regeln <strong>der</strong> Arithmetik mit dem zusätzlichen Wissen über die Eigenschaften<br />

<strong>der</strong> Funktionen, die verwendet und berechnet werden sollen: z.B. a>b ⇒ ggt(a-b,b) = ggt(a,b). Diese<br />

Regeln werden im folgenden als bekannt vorausgesetzt, ohne <strong>der</strong>en Kalkül explizit anzugeben.<br />

Als Schlußbemerkung wollen wir noch anfügen, daß alle bisherigen Verifikationsmechanismen ausschließlich für<br />

Programme mit Copy-Semantik entwickelt wurden. Die Regeln, die wir im folgenden angeben werden, können

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!