Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 07.05.19
Die Floyd-Hoare-Logik
Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019
11:27:22 2019-07-04 1 [23]
Fahrplan
IEinführung
IOperationale Semantik IDenotationale Semantik
IÄquivalenz der Operationalen und Denotationalen Semantik IDer Floyd-Hoare-Kalkül
IInvarianten und die Korrektheit des Floyd-Hoare-Kalküls IStrukturierte Datentypen
IVerifikationsbedingungen IVorwärts mit Floyd und Hoare IModellierung
ISpezifikation von Funktionen IReferenzen und Speichermodelle
IFunktionsaufrufe und das Framing-Problem IAusblick und Rückblick
Korrekte Software 2 [23]
Drei Semantiken — Eine Sicht
p = 1;
c := 1;
while (c <= n) { p= p * c;
c= c + 1;
}
Operational
Axiomatisch Denotational
Programm
Korrekte Software 3 [23]
Floyd-Hoare-Logik: Idee
IWas wird hier berechnet?p=n!
IWarum? Wie können wir das beweisen?
IWir berechnen symbolisch, welche Werte Variablen über den Programmverlauf annehmen.
p= 1 ; c= 1 ;
w h i l e ( c <= n ) { p = p ∗ c ; c = c + 1 ; }
IOperationale/denotionale Semantik nicht fürKorrektheitsbeweise geeignet: Ausdrücke werden zu groß, skaliert nicht.
IAbstraktionnötig.
IGrundidee:Zusicherungenüber den Zustand an bestimmten Punkten im Programmablauf.
Korrekte Software 4 [23]
Bob Floyd und Tony Hoare
Bildquelle: Stanford University
Robert Floyd 1936 – 2001
Bildquelle: Wikipedia
Sir Anthony Charles Richard Hoare
∗1934
Korrekte Software 5 [23]
Grundbausteine der Floyd-Hoare-Logik
IZusicherungenüber den Zustand IBeispiele:
I(B): Hier giltp=c= 1
I(D): Hier istcist um eines größer als der Wert voncan Punkt (C) IGesamtaussage: Wenn am Punkt(A)
der Wert vonn≥0, dann ist am Punkt (E)p=n!.
// (A) p= 1 ; c= 1 ; // (B)
w h i l e ( c <= n ) { p= p ∗ c ; // (C) c= c + 1 ; // (D) } // (E)
Korrekte Software 6 [23]
Grundbausteine der Floyd-Hoare-Logik
ILogische Variablen(zustandsfrei) undProgrammvariablen IZusicherungenmit logischen und Programmvariablen IFloyd-Hoare-Tripel{P}c{Q}
IVorbedingungP(Zusicherung) IProgrammc
INachbedingungQ(Zusicherung)
IFloyd-Hoare-Logik abstrahiert Programme durch logische Formeln.
Korrekte Software 7 [23]
Zusicherungen (Assertions)
IErweiterung vonAexpandBexpdurch
ILogischeVariablenVar v:=N,M,L,U,V,X,Y,Z IDefinierte Funktionen und Prädikate überAexp n!,Pn
i=1i, . . . IImplikation und Quantoren b1−→b2,∀v. .b,∃v. .b IFormal:
Aexpv a::= Z|Idt|Var|a1+a2|a1−a2|a1×a2
|f(e1, . . . ,en) Assn b::=
1|0|a1==a2|a1! =a2|a1<=a2
|!b|b1∧b2|b1||b2
|b1−→b2|p(e1, . . . ,en)|forallv;b|existsv;b Assn b::= true|false|a1=a2|a16=a2|a1≤a2
| ¬b|b1∧b2|b1∨b2
|b1−→b2|p(e1, . . . ,en)| ∀v. .b| ∃v. .b
Korrekte Software 8 [23]
Erfüllung von Zusicherungen
IWann gilt eine Zusicherungb∈Assnin einem Zustandσ?
IAuswertung (denotationale Semantik) ergibttrue IAber:was ist mit den logischen Variablen?
IBelegungder logischen Variablen:I:Var→Z ISemantik vonbunter der BelegungI:Bv[[b]]I,Av[[a]]I
Erfülltheit von Zusicherungen
b∈Assnist in Zustandσmit BelegungIerfüllt (σ|=Ib), gdw Bv[[b]]I(σ) =true
Korrekte Software 9 [23]
Floyd-Hoare-Tripel
Partielle Korrektheit (|={P}c{Q})
cistpartiell korrekt, wenn für alle Zuständeσ, diePerfüllen, gilt:
wenndie Ausführung voncmitσinσ0terminiert,dannerfülltσ0Q.
|={P}c{Q} ⇐⇒ ∀I.∀σ. σ|=IP∧ ∃σ0.(σ, σ0)∈ C[[c]] =⇒σ0|=IQ IGleiche Belegung der logischen Variablen fürPundQ.
Totale Korrektheit (|= [P]c[Q])
cisttotal korrekt, wenn für alle Zustandeσ, diePerfüllen, die Ausführung voncmitσinσ0terminiert, undσ0erfülltQ.
|= [P]c[Q]⇐⇒ ∀I.∀σ. σ|=IP=⇒ ∃σ0.(σ, σ0)∈ C[[c]]∧σ0|=IQ
Korrekte Software 10 [23]
Beispiele
IFolgendesgilt:
|={true}while(1){ } {true}
IFolgendes giltnicht:
|= [true]while(1){ }[true]
IFolgendegelten:
|={false}while(1){ } {true}
|= [false]while(1){ }[true]
Wegenex falso quodlibet:false=⇒φ
Korrekte Software 11 [23]
Regeln des Floyd-Hoare-Kalküls
IDer Floyd-Hoare-Kalkül erlaubt es, Zusicherungen der Form
` {P}c{Q}syntaktischherzuleiten.
IDerKalkülder Logik besteht aus sechs Regeln der Form
` {P1}c1{Q1}. . .` {Pn}cn{Qn}
` {P}c{Q}
IFür jedes Konstrukt der Programmiersprache gibt es eine Regel.
Korrekte Software 12 [23]
Regeln des Floyd-Hoare-Kalküls: Zuweisung
` {P[e/x]}x=e{P}
IEine Zuweisung x=e ändert den Zustand so dass an der Stellexjetzt der Wert vonesteht. Damitnachherdas PrädikatPgilt, muss also vorherdas Prädikat gelten, wenn wirxdurcheersetzen.
IEs ist völlig normal (aber dennoch falsch) zu denken, die Substitution gehöre eigentlich in die Nachbedingung.
IBeispiele:
@\ o n l y <2−>{\PCA{5 < 10 \ I f f ( x< 1 0 ) [ 5 / x ] } } @ x = 5
@\PCA{ x < 10}@
@\ o n l y <4−>{\PCA{ x< 9 \ I f f x+1 < 10}}@
x = x+ 1
@\ o n l y <3−>{\PCA{ x < 10}}@
Korrekte Software 13 [23]
Regeln des Floyd-Hoare-Kalküls: Fallunterscheidung
` {A∧b}c0{B} ` {A∧ ¬b}c1{B}
` {A}if(b)c0 elsec1{B}
IIn der Vorbedingung desif-Zweiges gilt die Bedingungb, und im else-Zweig gilt die Negation¬b.
IBeide Zweige müssem mit derselben Nachbedingung enden.
Korrekte Software 14 [23]
Regeln des Floyd-Hoare-Kalküls: Iteration
` {A∧b}c{A}
` {A}while(b)c{A∧ ¬b}
IIteration korrespondiert zuInduktion.
IBei (natürlicher) Induktion zeigen wir, dass diegleicheEigenschaftP für 0 gilt, und dass wenn sie fürP(n) gilt, daraus folgt, dass sie für P(n+ 1) gilt.
IAnalog dazu benötigen wir hier eineInvarianteA, die sowohlvorals auchnachdem Schleifenrumpf gilt.
IIn derVorbedingungdesSchleifenrumpfeskönnen wir die Schleifenbedingungbannehmen.
IDieVorbedingungderSchleifeist die InvarianteA, und die NachbedingungderSchleifeistAund die Negation der Schleifenbedingungb.
Korrekte Software 15 [23]
Regeln des Floyd-Hoare-Kalküls: Sequenzierung
` {A}c1{B} ` {B}c2{C}
` {A}c1;c2{C} IHier wird eine ZwischenzusicherungBbenötigt.
` {A} { } {A}
ITrivial.
Korrekte Software 16 [23]
Regeln des Floyd-Hoare-Kalküls: Weakening
A0=⇒A ` {A}c{B} B=⇒B0
` {A0}c{B0}
c
All possible program states
A c B
All possible program states B' A'
I|={A}c{B}: Ausführung voncstartet in Zustand, in demAgilt, und endet (ggf) in Zustand, in demBgilt.
IZustandsprädikate beschreiben Mengen von Zuständen:P⊆Qgdw.
P=⇒Q.
IWir könnenAzuA0einschränken (A0⊆AoderA0=⇒A), oderBzu B0vergrößern (B⊆B0oderB=⇒B0), und erhalten|={A0}c{B0}.
Korrekte Software 17 [23]
Überblick: die Regeln des Floyd-Hoare-Kalküls
` {P[e/x]}x=e{P}
` {A∧b}c0{B} ` {A∧ ¬b}c1{B}
` {A}if(b)c0 elsec1{B}
` {A∧b}c{A}
` {A}while(b)c{A∧ ¬b}
` {A} { } {A}
` {A}c1{B} ` {B}c2{C}
` {A}c1;c2{C}
A0=⇒A ` {A}c{B} B=⇒B0
` {A0}c{B0}
Korrekte Software 18 [23]
Einfache Beispiele
Seip:
z= x ; x= y ; y= z ;
Seiq:
i f ( x < y ) { z = x ; } e l s e { z= y ; } Zu zeigen:
Ipvertauschtxundy I` {x=X∧y=Y}
p
{x=Y∧y=X}
Zu zeigen:
Iqberechnet inzdas Minimum vonxundy
I` {true}
q
{z≤x∧z≤y}
Korrekte Software 19 [23]
Wie wir Floyd-Hoare-Beweise aufschreiben
//{P}
//{P1} x= e ; //{P2} //{P3} w h i l e ( x< n ) {
//{P3∧x<n}
//{P4} z= a ; //{P3} }
//{P3∧ ¬(x<n)}
//{Q}
IBeispiel zeigt:` {P}c{Q}
IProgramm wird mit gültigen Zusicherungen annotiert.
IVor einer Zeile steht die Vorbedingung, danach die Nachbedingung.
IImplizite Anwendung der Sequenzenregel.
IWeakening wird notiert durch mehrere Zusicherungen, und mussbewiesenwerden.
IIm Beispiel:P=⇒P1, P2=⇒P3,P3∧x<n=⇒P4, P3∧ ¬(x<n) =⇒Q.
Korrekte Software 20 [23]
Das einfache Beispiel in neuer Notation
//{x=X∧y=Y}
//{y=Y∧x=X}
z= x ;
//{y=Y∧z=X}
x= y ;
//{x=Y∧z=X}
y= z ;
//{x=Y∧y=X}
Korrekte Software 21 [23]
Das Fakultätsbeispiel
//{1 = 0!∧0≤n}
//{1 = (1−1)!∧1≤1∧1−1≤n}
p= 1 ;
//{p= (1−1)!∧1≤1∧1−1≤n}
c= 1 ;
//{p= (c−1)!∧1≤c∧c−1≤n}
w h i l e ( c<= n ) {
//{p= (c−1)!∧1≤c∧c−1≤n∧c≤n}
//{p∗c= (c−1)!∗c∧1≤c∧c≤n}
//{p∗c=c!∧1≤c∧c≤n}
//{p∗c= ((c+ 1)−1)!∧1≤c+ 1∧(c+ 1)−1≤n}
p= p∗c ;
//{p= ((c+ 1)−1)!∧1≤c+ 1∧(c+ 1)−1≤n}
c= c +1;
//{p= (c−1)!∧1≤c∧c−1≤n}
}
//{p= (c−1)!∧1≤c∧c−1≤n∧ ¬(c≤n)}
//{p= (c−1)!∧1≤c∧c−1≤n∧c>n}
//{p= (c−1)!∧1≤c∧c−1 =n}
//{p=n!}
Korrekte Software 22 [23]
Zusammenfassung Floyd-Hoare-Logik
IDie Logik abstrahiert über konkrete Systemzustände durch Zusicherungen(Hoare-Tripel{P}c{Q}).
IZusicherungen sind boolsche Ausdrücke, angereichert durch logische Variablen.
ISemantischeGültigkeitvon Hoare-Tripeln:|={P}c{Q}.
ISyntaktischeHerleitbarkeitvon Hoare-Tripeln:` {P}c{Q}
IZuweisungen werden durch Substitution modelliert, d.h. die Menge der gültigen Aussagen ändert sich.
IFür Iterationen wird eineInvariantebenötigt (dienichthergeleitet werden kann).
Korrekte Software 23 [23]