• Keine Ergebnisse gefunden

Modellierung und Spezifikation von Funktionen

N/A
N/A
Protected

Academic year: 2022

Aktie "Modellierung und Spezifikation von Funktionen"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 18.06.19 Spezifikation von Funktionen

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

11:27:30 2019-07-04 1 [28]

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

Funktionen & Prozeduren

IFunktionensind das zentrale Modularisierungskonzept von C IKleinste Einheit

INB. Prozeduren sind nur Funktionen vom Typvoid IIn objektorientierten Sprachen: Methoden

IFunktionen mit (implizitem) erstem Parameterthis

IWie behandeln wir Funktionen?

Korrekte Software 3 [28]

Modellierung und Spezifikation von Funktionen

Wir brauchen:

1 Von Anweisungen zu Funktionen: Deklarationen und Parameter 2 Semantik von Funktionsdefinitionen

3 Spezifikation von Funktionsdefinitionen 4 Beweisregeln für Funktionsdefinitionen 5 Semantik des Funktionsaufrufs 6 Beweisregeln für Funktionsaufrufe

Korrekte Software 4 [28]

Von Anweisungen zu Funktionen

IErweiterung unserer Kernsprache um Funktionsdefinition und Deklarationen:

FunDef::=FunHeader FunSpec+Blk FunHeader::=Type Idt(Decl)

Decl::=Type Idt Blk::={DeclStmt}

Type::=char|int|Struct|Array Struct::=struct Idt?{Decl+}

Array::=Type Idt[Aexp]

IAbstrakte Syntax

IGröße von Feldern:konstanterAusdruck IFunSpecwird später erläutert

Korrekte Software 5 [28]

Rückgaben

Neue Anweisungen: Return-Anweisung

Stmt s::=l=e|c1;c2| { } |if(b)c1 else c2

|while(b)//∗∗inv a∗/c|//∗∗{a}∗/

|return a?

Korrekte Software 6 [28]

Rückgabewerte

IProblem:returnbricht sequentiellen Kontrollfluss:

i f ( x == 0 ) r e t u r n −1;

y = y / x ; // Wird nicht immer erreicht ILösung 1: verbieten!

IMISRA-C (Guidelines for the use of the C language in critical systems):

Rule 14.7 (required)

A function shall have a single point of exit at the end of the function.

INicht immer möglich, unübersichtlicher Code . . .

ILösung 2: Erweiterung der Semantik von Σ*Σ zu Σ*(Σ + Σ×V)

Korrekte Software 7 [28]

Erweiterte Semantik

IDenotat einer Anweisung: Σ*(Σ∪Σ×V) Σ*(Σ∪Σ×VU) IAbbildung von Ausgangszustand Σ auf:

ISequentieller Folgezustand, oder IRückgabewert und Rückgabezustand;

IΣ und Σ×Vsinddisjunkt.

IWas ist mitvoid?

IErweiterte Werte:VU def=V+{∗}

IKomposition zweier Anweisungenf,g: Σ*(Σ∪Σ×VU):

gSf(σ)def= (

g(σ0) f(σ) =σ00,v) f(σ) = (σ0,v)

Korrekte Software 8 [28]

(2)

Semantik von Anweisungen

C[[.]] :Stmt→Σ*(Σ∪Σ×VU)

C[[x=e]] ={(σ, σ[a/l])|(σ,l)∈ L[[x]],(σ,a)∈ A[[e]]}

C[[c1;c2]] =C[[c2]]◦SC[[c1]] Komposition wie oben C[[{ }]] =IdΣ IdΣ:={(σ, σ)|σ∈Σ}

C[[if(b)c0 elsec1]] ={(σ, ρ0)|(σ,true)∈ B[[b]]∧(σ, ρ0)∈ C[[c0]]}

∪ {(σ, ρ0)|(σ,false)∈ B[[b]]∧(σ, ρ0)∈ C[[c1]]}

mitρ0∈Σ∪Σ×VU C[[return e]] ={(σ,(σ,a))|(σ,a)∈ A[[e]]}

C[[return]] ={(σ,(σ,∗))}

C[[while(b)c]] =fix(Γ)

Γ(ψ)=def{(σ, ρ0)|(σ,true)∈ B[[b]]∧(σ, ρ0)∈ψSC[[c]]}

∪ {(σ, σ)|(σ,false)∈ B[[b]]}

Korrekte Software 9 [28]

Semantik von Funktionsdefinitionen

Dfd[[.]] :FunDefVn*Σ*Σ×VU Das Denotat einer Funktion ist eine Anweisung, die über den tatsächlichen Werten für die Funktionsargumente parametriert ist.

Dfd[[f(t1p1,t2p2, . . . ,tnpn)blk]]v1, . . . ,vn=

{(σ,(σ0,v))|(σ[v1/p1, . . . ,vn/pn],(σ0,v))∈ Dblk[[blk]]}}

IDie Funktionsargumente sind lokale Deklarationen, die mit den Aufrufwerten initialisiert werden.

IInsbesondere können sie lokal in der Funktion verändert werden.

Korrekte Software 10 [28]

Semantik von Blöcken und Deklarationen

Blöcke bestehen aus Deklarationen und einer Anweisung.

Dblk[[.]] :Blk→Σ*(Σ×VU)

Dblk[[decls stmts]]def={(σ,(σ0,v))|(σ,(σ0,v))∈ C[[stmts]]}

IVonC[[stmts]] sind nurRückgabezuständeinteressant.

IKein „fall-through“

IWas passiert ohnereturnam Ende?

IKeine Initialisierungen, Deklarationen haben (noch) keine Semantik.

Korrekte Software 11 [28]

Spezifikation von Funktionen

IWirspezifizierenFunktionen durchVor-undNachbedingungen IÄhnlich den Hoare-Tripeln, aber vereinfachte Syntax

IBehavioural specification, angelehnt an JML, OCL, ACSL (Frama-C)

ISyntaktisch:

FunSpec::= /** preAssnpostAssn*/

Vorbedingung pre sp; Σ→B

Nachbedingung post sp; Σ×(Σ×VU)→B

\old(e) Wert voneimVorzustand

\ result Rückgabewertder Funktion

Korrekte Software 12 [28]

Beispiel: Fakultät

i n t f a c (i n t n ) /∗∗ p r e 0≤n;

p o s t \result==n! ;

∗/

{ i n t p ; i n t c ; p= 1 ; c= 1 ;

w h i l e ( c<= n ) /∗∗ i n v p== (c−1)!∧cn+ 1∧0<c ∗/ { p= p∗c ;

c= c +1;

} r e t u r n p ; }

Korrekte Software 13 [28]

Beispiel: Suche

i n t f i n d m a x (i n t a [ ] , i n t a _ l e n ) /∗∗ p r e \array(a,a_len)∧0<a_len;

p o s t ∀i.0i<a_len−→a[i]\result; ∗/

{

i n t x ; i n t j ; x= INT_MIN ; j= 0 ; w h i l e ( j < a _ l e n )

/∗∗ i n v (∀i.0i<j−→a[i]x)ja_len; ∗/

{

i f ( a [ j ]> x ) x= a [ j ] ; j= j +1;

} r e t u r n x ; }

Korrekte Software 14 [28]

Beispiel: Suche

i n t f i n d m a x (i n t a [ ] , i n t a _ l e n ) /∗∗ p r e 0<a_len;

p o s t \result= max(seq(a,a_len)) ; ∗/

{

i n t x ; i n t j ; x= INT_MIN ; j= 0 ; w h i l e ( j < a _ l e n )

/∗∗ i n v j>0−→x= max(Seq(a,j))∧ja_len; ∗/

{

i f ( a [ j ]> x ) x= a [ j ] ; j= j +1;

} r e t u r n x ; }

Korrekte Software 15 [28]

Semantik von Spezifikationen

IVorbedingung: Auswertung alsB[[sp]] Γ über dem Vorzustand INachbedingung: Erweiterung vonB[[.]] undA[[.]]

IAusdrücke können in Vor- oder Nachzustand ausgewertet werden.

I\resultkann nicht in Funktionen vom Typvoidauftreten.

Bsp[[.]] :EnvAssn*(Σ×(Σ×VU))→B Asp[[.]] :EnvAexpv*(Σ×(Σ×VU))→V

Bsp[[!b]] Γ ={((σ,(σ0,v)),true)|((σ,(σ0,v)),false)∈ Bsp[[b]]Γ}

∪ {((σ,(σ0,v)),false)|((σ,(σ0,v)),true)∈ Bsp[[b]]Γ}

. . .

Bsp[[\old(e)]] Γ ={((σ,(σ0,v)),b)|(σ,b)∈ B[[e]] Γ}

Asp[[\old(e)]] Γ ={((σ,(σ0,v)),a)|(σ,a)∈ A[[e]] Γ}

Asp[[\ result ]] Γ ={((σ,(σ,v)),v)}

Bsp[[preppostq]] Γ ={(σ,0,v))|σ∈ B[[p]] Γ∧(σ0,(σ,v))∈ Bsp[[p]] Γ}

Korrekte Software 16 [28]

(3)

Gültigkeit von Spezifikationen

IDie Semantik von Spezifikationen erlaubt uns die Definition der semantischen Gültigkeit.

preppostq|=fd

⇐⇒ ∀v1, . . . ,vn.Dfd[[fd]] Γv1. . .vn∈ Bsp[[preppostq]] Γ

IΓ enthält globale Definitionen, insbesondere andere Funktionen.

IWie passt das zu den Hoare-Tripeln|={P}c{Q}?

IWiebeweisenwir das? Erweiterungdes Hoare-Kalküls

Korrekte Software 17 [28]

Erweiterung des Floyd-Hoare-Kalküls

C[[.]] :Stmt→Σ*(Σ∪Σ×VU) Hoare-Tripel: zusätzliche Spezifikation fürRückgabewert.

Partielle Korrektheit (|={P}c{Q|QR})

cistpartiell korrekt, wenn für alle Zuständeσ, diePerfüllen:

Idie Ausführung voncmitσinσ0regulär terminiert, so dassσ0die SpezifikationQerfüllt,

Ioder die Ausführung voncinσ0mit dem Rückgabewertvterminiert, so dass (σ0,v) die RückgabespezifikationQRerfüllt.

Γ|={P}c{Q|QR} ⇐⇒

∀σ.(σ,true)∈ B[[P]] =⇒ ∃σ0.(σ, σ0)∈ C[[c]]∧(σ0,true)∈ B[[Q]]

∃σ0,v.(σ,(σ0,v))∈ C[[c]]∧((σ0,v),true)∈ B[[QR]]

Korrekte Software 18 [28]

Erweiterung des Floyd-Hoare-Kalküls: return

Γ` {Q}return{P|Q} Γ` {Q[e/\result]}return e{P|Q}

IBeireturnwird die RückgabespezifikationQzur Vorbedingung, die reguläre Nachfolgespezifikation wird ignoriert, da die Ausführung von returnkein Nachfolgezustand hat.

Ireturnohne Argument darf nur bei einer NachbedingungQauftreten, die kein\resultenthält.

IBeireturnmit Argument ersetzt der Rückgabewert den\resultin der Rückgabespezifikation.

Korrekte Software 19 [28]

Erweiterung des Floyd-Hoare-Kalküls: Spezifikation

P=⇒P0[yi/\old(yi)] Γ` {P0}c{false|Q}

Γ`f(x1, . . . ,xn)/** prePpostQ*/{ds c}

IDie Parameterxiwerden per Konvention nur alsxireferenziert, aber es ist immer der Wert imVorzustandgemeint (eigentlich\old(xi)).

IVariablen unterhalb von\old(y) werden bei der Substitution (Zuweisungsregel)nicht ersetzt!

I\old(y) wird beim Weakening von der VorbedingungPersetzt ISequentielle Nachbedingung voncistfalse

Korrekte Software 20 [28]

Zusammenfassung: Erweiterter Floyd-Hoare-Kalkül

Γ` {P} {} {P|QR}

Γ` {P}c1{R|QR} Γ` {R}c2{Q|QR} Γ` {P}c1;c2{Q|QR}

Γ` {Q[e/x]}x=e{Q|QR}

Γ` {P∧b}c{P|QR} Γ` {P}while(b)c{P∧ ¬b|QR} Γ` {P∧b}c1{Q|QR} Γ` {P∧ ¬b}c2{Q|QR}

Γ` {P}if(b)c1 elsec2{Q|QR} P−→P0 Γ` {P0}c{Q0|R0} Q0−→Q R0−→R

Γ` {P}c{Q|R}

Korrekte Software 21 [28]

Erweiterter Floyd-Hoare-Kalkül II

Γ` {Q}return{P|Q} Γ` {Q[e/\result]}return e{P|Q}

P=⇒P0[yi/\old(yi)] Γ` {P0}c{false|Q}

Γ`f(x1, . . . ,xn)/** prePpostQ*/{ds c}

Korrekte Software 22 [28]

Approximative schwächste Vorbedingung

IErweiterung zu awp(Γ,c,Q,QR) und wvc(Γ,c,Q,QR) analog zu der Erweiterung der Floyd-Hoare-Regeln.

IEs werden derKontextΓ und eineRückgabespezifikationQRbenötigt.

IEs gilt:

^wvc(Γ,c,Q,QR) =⇒Γ|={awp(c,Q,QR)}c{Q|QR}

IBerechnung vonawpundwvc:

awp(Γ,f(x1, . . . ,xn)/** prePpostQ*/{ds blk})def= awp(Γ0,blk,false,Q) wvc(Γ,f(x1, . . . ,xn)/** prePpostQ*/{ds blk})def=

{P=⇒awp(Γ0,blk,Q,Q)[yj/\old(yj)]} ∪wvc(Γ0,blk,false,Q) Γ0= Γ[fdef 7→ ∀x1, . . . ,xn.(P,Q)]

Korrekte Software 23 [28]

Approximative schwächste Vorbedingung (Revisited)

awp(Γ,{ },Q,QR) def= Q awp(Γ,l=e,Q,QR) def= P[e/l]

awp(Γ,c1;c2,Q,QR) def= awp(Γ,c1,awp(c2,Q,QR),QR) awp(Γ,if(b)c0 else c1,Q,QR) def= (b∧awp(Γ,c0,Q,QR))

∨(¬b∧awp(Γ,c1,Q,QR)) awp(Γ,//∗∗{q}∗/,Q,QR) def= q

awp(Γ,while(b)//∗∗ invi∗/c,QR)=defi

awp(Γ,return e,Q,QR) def= QR[e/\result]

awp(Γ,return,Q,QR) def= QR

Korrekte Software 24 [28]

(4)

Approximative Verifikationsbedingungen (Revisited)

wvc(Γ,{ },Q,QR) =def ∅ wvc(Γ,x=e,Q,QR) =def

wvc(Γ,c1;c2,Q,QR) =def wvc(Γ,c1,awp(c2,Q,QR),QR)

∪wvc(Γ,c2,Q,QR)

wvc(Γ,if(b)c1 elsec2,Q,QR) =def wvc(Γ,c1,Q,QR)∪wvc(Γ,c2,Q,QR) wvc(Γ,//∗∗{q}∗/,Q,QR) =def {q=⇒Q}

wvc(Γ,while(b)//∗∗inv i∗/c,Q,QR) def= wvc(Γ,c,i,QR)

∪ {i∧b=⇒awp(Γ,c,i,QR)}

∪ {i∧ ¬b=⇒Q}

wvc(Γ,return e,Q,QR) =def

Korrekte Software 25 [28]

Beispiel: Fakultät

1 i n t f a c (i n t n ) 2 /∗∗ p r e 0≤n; 3 p o s t \result==n! ; 4 ∗/

5 { 6 i n t p ; 7 i n t c ; 8

9 p= 1 ; 10 c= 1 ;

11 w h i l e ( 1 ) /∗∗ i n v p== (c−1)!∗/ { 12 i f ( c == n ) r e t u r n p ;

13 p= p∗c ;

14 c= c +1;

15 }

16 }

Korrekte Software 26 [28]

Beispiel: Fakultät (berichtigt)

1 i n t f a c (i n t n ) 2 /∗∗ p r e 0≤n; 3 p o s t \result==n! ; 4 ∗/

5 { 6 i n t p ; 7 i n t c ; 8 9 p= 1 ; 10 c= 0 ;

11 w h i l e ( 1 ) /∗∗ i n v p==c! ∗/ { 12 i f ( c == n ) r e t u r n p ;

13 c= c +1;

14 p= p∗c ;

15 }

16 }

Korrekte Software 27 [28]

Zusammenfassung

IFunktionen sindzentrales Modularisierungskonzept IWir müssen Funktionenmodularverifizieren können IErweiterung derSemantik:

ISemantik von Deklarationen und Parameter — straightforward ISemantik vonRückgabewerten— Erweiterung der Semantik IErweiterung derSpezifikationen:

ISpezifikation von Funktionen:Vor-/Nachzustandstatt logischer Variablen IErweiterung des Hoare-Kalküls:

IEnvironment, um andere Funktionen zu nutzen IGesonderte Nachbedingung für Rückgabewert/Endzustand IEs fehlt:FunktionsaufrufundParameterübergabe

Korrekte Software 28 [28]

Referenzen

ÄHNLICHE DOKUMENTE

Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 19.06.18: Funktionen und Prozeduren. Serge Autexier, Christoph Lüth Universität Bremen

I return ohne Argument darf nur bei einer Nachbedingung Q auftreten, die kein \result enthält. I Bei return mit Argument ersetzt der Rückgabewert den \result in

Korrekte Software: Grundlagen und Methoden Vorlesung 11 vom 19.06.18: Funktionen und Prozeduren.. Serge Autexier, Christoph Lüth Universität Bremen

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe

Serge Autexier Christoph Lüth Korrekte Software: Grundlagen und Methoden SoSe

Korrekte Software: Grundlagen und Methoden Vorlesung 6 vom 14.05.17: Korrektheit der Floyd-Hoare-Logik. Serge Autexier, Christoph Lüth Universität Bremen

Korrekte Software: Grundlagen und Methoden Vorlesung 1 vom 06.04.17: Einführung.. Serge Autexier, Christoph Lüth Universität Bremen