specification and verification of object-oriented software
DESCRIPTION
Specification and Verification of Object-Oriented Software. K. Rustan M. Leino Research in Software Engineering ( RiSE ) Microsoft Research, Redmond, WA. part 2 International Summer School Marktoberdorf Marktoberdorf , Germany 8 August 2008. While loop with loop invariant. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/1.jpg)
Specification and Verification of Object-Oriented SoftwareK. Rustan M. LeinoResearch in Software Engineering (RiSE)Microsoft Research, Redmond, WA
part 2International Summer School MarktoberdorfMarktoberdorf, Germany8 August 2008
![Page 2: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/2.jpg)
While loop with loop invariantwhile E invariant J do S end
= assert J;havoc x; assume J;( assume E; S; assert J;
assume false assume ¬E)
where x denotes the assignment targets of S
“fast forward” to an arbitrary iteration of the loop
check that the loop invariant holds initially
check that the loop invariant is maintained by the loop body
![Page 3: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/3.jpg)
wp of whilewp( while E invariant J do S end, Q ) =
J (x J E wp(S, J) ) (x J ¬E Q )
assert J;havoc x; assume J;( assume E; S; assert J; assume false assume ¬E)
![Page 4: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/4.jpg)
wp calculation for whilewp(havoc x; assume J; assume E; S; assert J;
assume false, Q )= wp(havoc x; assume J; assume E; S; assert J,
false Q )= wp(havoc x; assume J; assume E; S; assert J,
true )= wp(havoc x; assume J; assume E; S, J true )= wp(havoc x; assume J; assume E; S, J )= wp(havoc x; assume J; assume E, wp(S, J) )= wp(havoc x, assume J, E wp(S, J) )= wp(havoc x, J (E wp(S, J)) )= wp(havoc x, J E wp(S, J) )= ( x J E wp(S, J))
![Page 5: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/5.jpg)
Loop terminationwhile E
invariant Jdecreases B
doS
end
= ? Homework
![Page 6: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/6.jpg)
Example: Mutual exclusionmonitor m { var x; invariant x ≤ y; }
acquire mrelease m
Homework
![Page 7: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/7.jpg)
ProceduresA procedure is a user-defined commandprocedure M(x, y, z) returns (r, s, t)
requires Pmodifies g, hensures Q
![Page 8: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/8.jpg)
Procedure exampleprocedure Inc(n) returns (b)
requires 0 ≤ nmodifies gensures g = old(g) + n b = (g
even)
![Page 9: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/9.jpg)
Procedure callsprocedure M(x, y, z) returns (r, s, t)
requires P modifies g, h ensures Qcall a, b, c := M(E, F, G)= x’ := E; y’ := F; z’ := G;
assert P’;g0 := g; h0 := h;havoc g, h, r’, s’, t’;assume Q’;a := r’; b := s’; c := t’where
• x’, y’, z’, r’, s’, t’, g0, h0 are fresh variables• P’ is P with x’,y’,z’ for x,y,z• Q’ is Q with x’,y’,z’,r’,s’,t’,g0,h0 for x,y,z,r,s,t,
old(g), old(h)
![Page 10: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/10.jpg)
Procedure implementationsprocedure M(x, y, z) returns (r, s, t)
requires P modifies g, h ensures Qimplementation M(x, y, z) returns (r, s, t) is S
correct if: assume P; g0 := g; h0 := h;
S; assert Q’is correct
where• g0, h0 are fresh variables• Q’ is Q with g0,h0 for old(g), old(h)
syntactically check that S assigns only to
g,h
![Page 11: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/11.jpg)
Translating a source language
![Page 12: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/12.jpg)
Translation functionsThe meaning of source statement S is given by Tr[[ S ]]
Tr : source-statement commandWhen defined, the meaning of a source expression E is given by Tr[[ E ]]
Tr : source-expression expressionIn a context permitted to read set of locations R, source expression E is defined whenDfR[[ E ]] holds
DfR : source-expression boolean expressionIf R is the universal set, drop the subscript R
![Page 13: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/13.jpg)
Example translationsTr[[ x := E ]] =
assert Df[[ E ]];x := Tr[[ E ]]
![Page 14: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/14.jpg)
Example translationsTr[[ x := E ]] = assert Df[[ E ]]; x := Tr[[ E ]]DfR[[ E / F ]] =
DfR[[ E ]] DfR[[ F ]] Tr[[ F ]] ≠ 0DfR[[ E.x ]] =
DfR[[ E ]] Tr[[ E ]] ≠ null ( Tr[[ E ]], x ) R
DfR[[ E && F ]] = DfR[[ E ]] (Tr[[ E ]] DfR[[ F ]])
![Page 15: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/15.jpg)
Object featuresclass C { var x: int; var y: C; … }
Idea: c.x is modeled as Heap[c, x]Details:
var Heapconst xconst y
![Page 16: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/16.jpg)
Object features, with typesclass C { var x: int; var y: C; … }Idea: c.x is modeled as Heap[c, x]Details:
type Reftype Fieldvar Heap: Ref Field ?const x: Fieldconst y: Field
![Page 17: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/17.jpg)
Object features, with typesclass C { var x: int; var y: C; … }Idea: c.x is modeled as Heap[c, x]Details:
type Ref;type Field ;var Heap: . Ref Field ;const x: Field int;const y: Field Ref;
Heap[c, x] has type int
![Page 18: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/18.jpg)
Object featuresclass C { var x: int; var y: C; … }Translation into Boogie:
type Ref;type Field ;type HeapType = [ Ref, Field ] ;var Heap: HeapType;const unique C.x: Field int;const unique C.y: Field Ref;
![Page 19: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/19.jpg)
Accessing the heapintroduce:
const null: Ref;DfR[[ E.x ]] =
DfR[[ E ]] Tr[[ E ]] ≠ null ( Tr[[ E ]], x ) R
Tr[[ E.x := F ]] =assert Df[[ E ]] Df[[ F ]] Tr[[ E ]]
≠ null;Heap[ Tr[[ E ]], x ] := Tr[[ F ]]
![Page 20: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/20.jpg)
Object creationintroduce:
const unique alloc: Field bool;Tr[[ c := new C ]] = havoc c;
assume c ≠ null ¬Heap[c, alloc];
Heap[c, alloc] := true
![Page 21: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/21.jpg)
Object creation, advancedintroduce:
const unique alloc: Field bool;Tr[[ c := new C ]] = havoc c;
assume c ≠ null ¬Heap[c, alloc];assume dtype(c) = C;assume Heap[c, x] = 0 Heap[c, y]
= null;Heap[c, alloc] := true
dynamic type
information
initialfield values
![Page 22: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/22.jpg)
FreshDfR[[ fresh(S) ]] =
DfR[[ S ]]Tr[[ fresh(S) ]] =
(o o Tr[[ S ]] o = null ¬old(Heap)[o,
alloc])
![Page 23: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/23.jpg)
Properties of the heap
introduce: axiom ( h: HeapType, o: Ref, f: Field
Ref o ≠ null h[o, alloc]h[o, f] = null h[ h[o,f], alloc ] );
![Page 24: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/24.jpg)
Properties of the heapintroduce:function IsHeap(HeapType) returns (bool);introduce:
axiom ( h: HeapType, o: Ref, f: Field Ref
IsHeap(h) o ≠ null h[o, alloc]h[o, f] = null h[ h[o,f], alloc ] );
introduce: assume IsHeap(Heap)after each Heap update; for example:Tr[[ E.x := F ]] =
assert …; Heap[…] := …;assume IsHeap(Heap)
![Page 25: Specification and Verification of Object-Oriented Software](https://reader035.vdocuments.net/reader035/viewer/2022062410/56816384550346895dd46845/html5/thumbnails/25.jpg)
DemoExample0.dfy