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.

Um diese Bestandteile deutlich genug vom Programmtext abzugrenzen, hat sich eingebürgert, sie in geschweifte<br />

Klammern zu setzen. Bei einer einfachen Folge von Anweisungen sähe dann ein durch logische Bestandteile<br />

ergänztes Programm wie folgt aus<br />

.<br />

is -require<br />

pre<br />

do { pre}<br />

Anweisung1; { Aussage1}<br />

Anweisung2; { Aussage2}<br />

.<br />

Anweisungn<br />

ensure post<br />

end<br />

{ post}<br />

Aussage1 ist dabei zugleich die Nachbedingung von Anweisung1 als auch die Vorbedingung von Anweisung2.<br />

Ähnliches gilt für Aussage2, Aussage3 usw. pre ist als Vorbedingung <strong>der</strong> ganzen Routine insbeson<strong>der</strong>e<br />

auch Vorbedingung von Anweisung1, post als Nachbedingung <strong>der</strong> ganzen Routine auch Nachbedingung von<br />

Anweisungn. Wir haben bei dieser Vorgehensweise die Schreibweise des sogenannten Hoare-Kalküls verwendet.<br />

Definition 4.2.1 (Notation des Hoare-Kalküls)<br />

Die Schreibweise { pre} instruction { post} ,<br />

bezeichnet einen Satz des Kalküls für Programmbeweise.<br />

Er ist wahr genau dann, wenn pre eine Vorbedingung dafür ist, daß die Anweisung instruction<br />

terminiert und daß nach Ausführung von instruction die Aussage post gilt.<br />

Für die Aussagen pre und post sind Ausdrücke <strong>der</strong> Prädikatenlogik erlaubt, ergänzt um die Zusicherungssprache<br />

von Eiffel. instruction muß eine korrekte Eiffel Anweisung sein.<br />

{ pre} instruction { post} besagt also, daß die Berechnung <strong>der</strong> Anweisung instruction immer zu einem<br />

Ergebnis führt (terminiert) und daß im Anschluß daran die Aussage post gilt, vorausgesetzt, daß vor<br />

<strong>der</strong> Ausführung von instruction die Aussage pre gültig war. Ist dies nicht <strong>der</strong> Fall, so wird gemäß den<br />

üblichen Regeln <strong>der</strong> logischen Implikation überhaupt nichts gefor<strong>der</strong>t. Die Anweisung braucht nicht einmal<br />

zu terminieren. Die Anweisung instruction darf auch eine komplexere Anweisung (ein Compound gemäß <strong>der</strong><br />

Syntaxbeschreibung in Abschnitt 4.3.12.1) sein.<br />

Beispiel 4.2.2<br />

Ein einfacher wahrer Satz des Kalküls für Programmbeweise ist<br />

{ x=0 ∧ y≥4} x:=y+3; y:=y-4 { x≥5 ∧ y≥0}<br />

An diesem Beispiel sieht man, daß Vor- und Nachbedingungen nicht unbedingt “optimal” sein müssen.<br />

Nach Ausführung von x:=y+3 wissen wir nämlich sogar, daß x≥7 gilt. Die Nachbedingung ist also<br />

schwächer als das, was wir beweisen könnten, – o<strong>der</strong> die Vorbedingung ist stärker als das, was wir<br />

benötigen.<br />

Die Terminierungsbedingung in Definition 4.2.1 ist wichtig, weil es durchaus <strong>der</strong> Fall sein kann, daß die<br />

Berechnung von Anweisungen, die Schleifen enthalten, bei bestimmten Eingaben niemals endet. In diesem<br />

Fall kann man natürlich auch keine Nachbedingung mehr beweisen. Deswegen unterscheidet man auch zwei<br />

Formen von Korrektheit einer Anweisung mit Vorbedingung pre und Nachbedingung post. Verlangt man, daß<br />

{ pre} instruction { post} wahr ist im Sinne <strong>der</strong> Definition 4.2.1, so spricht man von totaler Korrektheit.<br />

Schwächt man die Definition dahingehend ab, daß aus <strong>der</strong> Vorbedingung pre nicht die Terminierung <strong>der</strong><br />

Anweisung folgen muß, und post nur gelten muß, wenn pre gilt und die Anweisung terminiert, dann spricht<br />

man von partieller Korrektheit.<br />

Da aus Terminierung und partieller Korrektheit die totale Korrektheit folgt, hat es sich für die Beweisführung<br />

als zweckmäßig herausgestellt, den Beweis <strong>der</strong> Terminierung von dem <strong>der</strong> partiellen Korrektheit zu trennen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!