• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 03.05.18: Die Floyd-Hoare-Logik

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 03.05.18: Die Floyd-Hoare-Logik"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 03.05.18: Die Floyd-Hoare-Logik

Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2018

11:50:50 2018-06-05 1 [23]

Fahrplan

I Einführung

I Operationale Semantik I Denotationale Semantik

I Äquivalenz der Operationalen und Denotationalen Semantik I Die Floyd-Hoare-Logik

I Invarianten und die Korrektheit des Floyd-Hoare-Kalküls I Strukturierte Datentypen

I Modellierung und Spezifikation I Verifikationsbedingungen I Vorwärts mit Floyd und Hoare I Funktionen und Prozeduren I Referenzen

I Ausblick 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 ; }

I Operationale/denotionale Semantik nicht fürKorrektheitsbeweise geeignet: Ausdrücke werden zu groß, skaliert nicht.

I Abstraktionnötig.

I Grundidee: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

I Zusicherungenüber den Zustand I Beispiele:

I (B): Hier giltp=c= 1

I (D): Hier istcist um eines größer als der Wert voncan Punkt (C) I Gesamtaussage: 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

I Logische Variablen(zustandsfrei) undProgrammvariablen

I Zusicherungenmit logischen und Programmvariablen I Floyd-Hoare-Tripel{P}c{Q}

I VorbedingungP(Zusicherung)

I Programmc

I NachbedingungQ(Zusicherung)

I Floyd-Hoare-Logik abstrahiert Programme durch logische Formeln.

Korrekte Software 7 [23]

Zusicherungen (Assertions)

I Erweiterung vonAexpandBexpdurch

ILogischeVariablenVar v:=N,M,L,U,V,X,Y,Z

IDefinierte Funktionen und Prädikate überAexp n!,Pn i=1i, . . .

IImplikation und Quantoren b1b2,forallv.b,existsv.b I Formal:

Aexpv a::= Z|Idt|Var|a1+a2|a1a2|a1×a2

|f(e1, . . . ,en)

Assn b::= 1|0|a1==a2|a1! =a2|a1<=a2

|!b|b1&&b2|b1||b2

|b1b2|p(e1, . . . ,en)|forallv;b|existsv;b

Korrekte Software 8 [23]

(2)

Erfüllung von Zusicherungen

I Wann gilt eine ZusicherungbAssnin einem Zustandσ?

I Auswertung (denotationale Semantik) ergibttrue

I Aber:was ist mit den logischen Variablen?

I Belegungder logischen Variablen:I:VarT I Semantik vonbunter der BelegungI:Bv[[b]]I,Av[[a]]I Erfülltheit von Zusicherungen

bAssnist 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 I Gleiche 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 I Folgendesgilt:|={1}while(1){ } {1}

I Folgendes giltnicht:|= [1]while(1){ }[1]

Korrekte Software 10 [23]

Regeln der Floyd-Hoare-Logik

I Die Floyd-Hoare-Logik erlaubt es, Zusicherungen der Form

` {P}c{Q}syntaktischherzuleiten.

I DerKalkülder Logik besteht aus sechs Regeln der Form

` {P1}c1{Q1}. . .` {Pn}cn{Qn}

` {P}c{Q}

I Für jedes Konstrukt der Programmiersprache gibt es eine Regel.

Korrekte Software 11 [23]

Regeln des Floyd-Hoare-Kalküls: Zuweisung

` {P[e/x]}x=e{P}

I Eine 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.

I Es ist völlig normal (aber dennoch falsch) zu denken, die Substitution gehöre eigentlich in die Nachbedingung.

I Beispiele:

{5<10⇐⇒(x<10)[5/x]}

x = 5 {x<10}

{x<9⇐⇒x+ 1<10}

x = x+ 1 {x<10}

Korrekte Software 12 [23]

Regeln des Floyd-Hoare-Kalküls: Fallunterscheidung

` {A&&b}c0{B} ` {A&&¬b}c1{B}

` {A}if(b)c0 elsec1{B}

I In der Vorbedingung desif-Zweiges gilt die Bedingungb, und im else-Zweig gilt die Negation¬b.

I Beide Zweige müssem mit derselben Nachbedingung enden.

Korrekte Software 13 [23]

Regeln des Floyd-Hoare-Kalküls: Iteration

` {A∧b}c{A}

` {A}while(b)c{A∧ ¬b}

I Iteration korrespondiert zuInduktion.

I Bei (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.

I Analog dazu benötigen wir hier eineInvarianteA, die sowohlvorals auchnachdem Schleifenrumpf gilt.

I In derVorbedingungdesSchleifenrumpfeskönnen wir die Schleifenbedingungbannehmen.

I DieVorbedingungderSchleifeist die InvarianteA, und die NachbedingungderSchleifeistAund die Negation der Schleifenbedingungb.

Korrekte Software 14 [23]

Regeln des Floyd-Hoare-Kalküls: Sequenzierung

` {A}c1{B} ` {B}c2{C}

` {A}c1;c2{C}

I Hier wird eine ZwischenzusicherungBbenötigt.

` {A} { } {A}

I Trivial.

Korrekte Software 15 [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.

I Zustandsprädikate beschreiben Mengen von Zuständen:PQgdw.

P=⇒Q.

I Wir könnenAzuA0einschränken (A0AoderA0=⇒A), oderBzu B0vergrößern (B⊆B0oderB=⇒B0), und erhalten|={A0}c{B0}.

Korrekte Software 16 [23]

(3)

Ü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 17 [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:

I pvertauschtxundy I ` {x=Xy=Y}

p

{x=Yy=X}

Zu zeigen:

Iqberechnet inzdas Minimum vonxundy

I` {true}

q

{z≤xzy}

Korrekte Software 18 [23]

Wie wir Floyd-Hoare-Beweise aufschreiben

//{P}

//{P1} x= e ; //{P2} //{P3} w h i l e ( x< n ) {

//{P3x<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 19 [23]

Das einfache Beispiel in neuer Notation

//{x=Xy=Y}

//{y=Yx=X}

z= x ;

//{y=Yz=X}

x= y ;

//{x=Yz=X}

y= z ;

//{x=Yy=X}

Korrekte Software 20 [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≤cc−1≤n}

w h i l e ( c<= n ) {

//{p= (c−1)!∧1≤cc−1≤ncn}

//{p∗c= (c−1)!∗c∧1≤ccn}

//{p∗c=c!∧1≤ccn}

//{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≤cc−1≤n}

}

//{p= (c−1)!∧1≤cc−1≤n∧ ¬(c≤n)}

//{p= (c−1)!∧1≤cc−1≤nc>n}

//{p= (c−1)!∧1≤cc−1 =n}

//{p=n!}

Korrekte Software 21 [23]

Das Fakultätsbeispiel (Quellcode)

/∗∗ { 1 == f a c t o r i a l ( 0 ) && 0 <= n } ∗/

/∗∗ { 1 == f a c t o r i a l (1− 1 ) && 1 <= 1 && 1−1 <= n } ∗/

p= 1 ;

/∗∗ { p == f a c t o r i a l (1− 1 ) && 1 <= 1 && 1−1 <= n } ∗/

c= 1 ;

/∗∗ { p == f a c t o r i a l ( c− 1 ) && 1 <= c && c−1 <= n } ∗/

w h i l e ( c<= n ) {

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 <= n && c <= n } ∗/

/∗∗ { p∗c == f a c t o r i a l ( c−1)∗ c && 1 <= c && c <= n } ∗/

/∗∗ { p∗c == f a c t o r i a l ( c ) && 1 <= c && c <= n } ∗/

/∗∗ { p∗c == f a c t o r i a l ( ( c+1)− 1 ) && 1 <= c+1 && ( c+1)−1 <= n } ∗/

p= p∗c ;

/∗∗ { p == f a c t o r i a l ( ( c +1)−1) && 1<= c+1 && ( c+1)−1 <= n } ∗/

c= c +1;

/∗∗ { p == f a c t o r i a l ( c−1) && 1 <= c && c−1 <= n } ∗/

}

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 <= n && f a c t o r i a l ( c <= n ) } ∗/

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 <= n && c > n } ∗/

/∗∗ { p == f a c t o r i a l ( c−1) && 1<= c && c−1 == n } ∗/

/∗∗ { p == f a c t o r i a l ( n ) } ∗/

Korrekte Software 22 [23]

Zusammenfassung Floyd-Hoare-Logik

I Die Logik abstrahiert über konkrete Systemzustände durch Zusicherungen(Hoare-Tripel{P}c{Q}).

I Zusicherungen sind boolsche Ausdrücke, angereichert durch logische Variablen.

I SemantischeGültigkeitvon Hoare-Tripeln:|={P}c{Q}.

I SyntaktischeHerleitbarkeitvon Hoare-Tripeln:` {P}c{Q}

I Zuweisungen werden durch Substitution modelliert, d.h. die Menge der gültigen Aussagen ändert sich.

I Für Iterationen wird eineInvariantebenötigt (dienichthergeleitet werden kann).

Korrekte Software 23 [23]

Referenzen

ÄHNLICHE DOKUMENTE

I Rückwärtsberechnung ist einfacher zu handhaben, erzeugt aber (tendenziell sehr)

[r]

I Wenn wir eine gültige Zusicherung nicht herleiten können, liegt das nur daran, dass wir eine Beweisverpflichtung nicht beweisen können.. I Logik erster Stufe ist unvollständig,

Korrekte Software: Grundlagen und Methoden Vorlesung 10 vom 12.06.18: Vorwärts mit Floyd und Hoare.. Serge Autexier,

I Rückwärtsberechnung ist einfacher zu handhaben, erzeugt aber (tendenziell sehr) große Terme.. Korrekte Software

I Axiomatische Semantik beschreibt die Bedeutung eines Programmes durch Beweisregeln, mit welchem sich gültige Eigenschaften herleiten lassen.. Das prominenteste Beispiel hierzu ist

I Wenn wir eine gültige Zusicherung nicht herleiten können, liegt das nur daran, dass wir eine Beweisverpflichtung nicht beweisen können. I Logik erster Stufe ist unvollständig,

I Wir annotieren daher die Invarianten an Schleifen, und können dann die schwächste Vorbedingung und Verifikationsbedingungen.