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.

fib(n:INTEGER):INTEGER is<br />

require n>0<br />

local i, fib 1, fib 2 : INTEGER<br />

do<br />

if n0} pre<br />

if n=1<br />

then { n>0 ∧n=1} n>0 ∧n=1 ⇒ 1=n!<br />

{ 1=n!}<br />

Result := 1<br />

{ Result=n!}<br />

else { n>0 ∧n=1} n>0 ∧ n=1 ⇒ n-1>0 ∧ n*(n-1)!=n!<br />

{ n-1>0 ∧ n*(n-1)!=n!} n-1>0 ⇒ fak berechnung(n-1)=(n-1)!<br />

{ n*fak berechnung(n-1)=n!}<br />

Result := n * fak berechnung(n-1)<br />

{ Result=n!}<br />

end { Result=n!} post<br />

end<br />

Dieser Beweis wäre natürlich völlig wertlos ohne den Nachweis <strong>der</strong> Terminierung, also <strong>der</strong> Aussage, daß<br />

alle Aufrufe irgendwann einmal ohne einen weiteren rekursiven Aufruf ein Ergebnis liefern müssen. Die<br />

Korrektheit von Ergebnissen, die – wie fak berechnung(1) – ohne Selbstreferenz bestimmt werden, ist<br />

natürlich schon im Beweis <strong>der</strong> partiellen Korrektheit enthalten.<br />

37 Es ist zwar durchaus möglich, die in Abbildung 4.15 aufgestellte Beweisvorschrift in Form einer formalen Verifikationsregel<br />

nie<strong>der</strong>zuschreiben. Dies aber würde einen erheblich aufwendigeren Formalismus erfor<strong>der</strong>n und zu einer für die Intuition kaum<br />

noch verständlichen Regel führen.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!