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.

Init ≡ Result := 1 ; n := 1<br />

Dies ist tatsächlich eine korrekte Intialisierung, denn durch Rückwärtsargumetation von <strong>der</strong> Nachbedingung<br />

erhält man folgende Argumentationskette<br />

Programm Zusicherungen Prämissen<br />

Result := 1<br />

n := 1<br />

{ arg>0} arg>0 ⇒ 1≤arg ⇒ 1=1! ∧1≤arg<br />

{ 1=1! ∧ 1≤arg}<br />

{ Result=1! ∧ 1≤arg}<br />

{ Result=n! ∧ n≤arg}<br />

In <strong>der</strong> Schleifenanweisung wollen wir den Wert n um Eins erhöhen und müssen, um die Invariante<br />

wie<strong>der</strong> zu erfüllen, entsprechend das Resultat wie<strong>der</strong> mit n multiplizieren<br />

Anweisung ≡ n := n+1; Result := Result*n<br />

Auch die Schleifeninitialisierung ist korrekt, da wir schon aus Beispiel 4.3.6 auf Seite 151 wissen, daß die<br />

Bedingung Result=n! invariant gegenüber Anweisung ist. Auch hier liefert ein Rückwärtsargumetieren<br />

den vollständigen Beweis:<br />

Programm Zusicherungen Prämissen<br />

n := n+1<br />

{ Result=n! ∧ n0 ⇒ arg-1≥0<br />

{ arg-1≥0}<br />

{ arg-1≥0}<br />

{ arg-n≥0}<br />

Die zweite Bedingung wird vor dem Beweis vereinfacht zu:<br />

{ arg-n>0 ∧ arg-n=x} n := n+1; Result := Result*n { arg-n≥0 ∧ arg-n

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!