• Keine Ergebnisse gefunden

Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 07.05.19

N/A
N/A
Protected

Academic year: 2022

Aktie "Korrekte Software: Grundlagen und Methoden Vorlesung 5 vom 07.05.19"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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|a1a2|a1×a2

|f(e1, . . . ,en) Assn b::=

1|0|a1==a2|a1! =a2|a1<=a2

|!b|b1b2|b1||b2

|b1−→b2|p(e1, . . . ,en)|forallv;b|existsv;b Assn b::= true|false|a1=a2|a16=a2|a1a2

| ¬b|b1b2|b1b2

|b1−→b2|p(e1, . . . ,en)| ∀v. .b| ∃v. .b

Korrekte Software 8 [23]

(2)

Erfüllung von Zusicherungen

IWann gilt eine ZusicherungbAssnin 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

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 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]

(3)

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:PQgdw.

P=⇒Q.

IWir könnenAzuA0einschränken (A0AoderA0=⇒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=Xy=Y}

p

{x=Yy=X}

Zu zeigen:

Iqberechnet inzdas Minimum vonxundy

I` {true}

q

{z≤xzy}

Korrekte Software 19 [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,P3x<n=⇒P4, P3∧ ¬(x<n) =⇒Q.

Korrekte Software 20 [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 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≤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 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]

Referenzen

ÄHNLICHE DOKUMENTE

Serge Autexier, Christoph Lüth Universität Bremen Sommersemester 2019. 11:27:18 2019-07-04

Zu zeigen ist, dass sowohl w also auch if (b) {c; w} else { } zu dem selben Programmzustand auswerten oder beide zu

[r]

3 Beweise innerhalb der Schleife

aber mit erheblichen Konsequenzen: Substitution. Korrekte Software

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

−→ Genauere Unterscheidung in der Semantik Kontrollstrukturen:. I switch −→ Ist im allgemeinen Fall

I Die (operationale) Semantik einer imperativen Sprache wie C0 ist ein Zustandsübergang: das System hat einen impliziten Zustand, der durch Zuweisung von Werten an Adressen