formal specification and verificationi12pschmitt/fss/folien10/14po-print.pdf · we follow‘key...

34
www.kit.edu KIT – Universit¨ at des Landes Baden-W ¨ urttemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft Prof. P. H. Schmitt Winter 2010/2011 Formal Specification And Verification I NSTITUT F ¨ UR THEORETISCHE I NFORMATIK

Upload: others

Post on 03-Oct-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

www.kit.eduKIT – Universitat des Landes Baden-Wurttemberg undnationales Forschungszentrum in der Helmholtz-Gemeinschaft

Prof. P. H. SchmittWinter 2010/2011

Formal Specification And Verification

INSTITUT FUR THEORETISCHE INFORMATIK

Page 2: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Adapted from Slides byWolfgang Ahrendt & Reiner Hahnle

Chalmers University, Gothenburg, Swedenon

Software Engineering using Formal Methods

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 2 / 34

Page 3: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

This Part

making the connection between

JML

and

Dynamic Logic / KeY

I generating,I understanding,I and proving

DL proof obligations from JML specifications

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 3 / 34

Page 4: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Tutorial Example

we follow ‘KeY Quicktour for JML’ (cited below as [KQJ])

paper + sources:see ’KeY Quicktour’ on course page, under ’Links, Papers, andSoftware’

scenario: simple PayCard

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 4 / 34

Page 5: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Inspecting JML Specification

inspect quicktour/jml/paycard/PayCard.java

follow [KQJ, 2.2]

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 5 / 34

Page 6: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Nested Specification Cases

method charge() has nested specification case:

JAVA + JML@ public normal_behavior@ requires amount>0;@ {| requires amount+balance<limit && isValid()==true;@ ensures \result == true,@ ensures balance == amount + \old(balance);@ assignable balance;@@ also@@ requires amount + balance >= limit;@ ensures \result == false;@ ensures unsuccessfulOperations@ == \old(unsuccessfulOperations) + 1;@ assignable unsuccessfulOperations; |}

JAVA + JML

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 6 / 34

Page 7: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Nested Specification Cases

nested specification cases allow to factor out common preconditions

JAVA + JML@ public normal_behavior@ requires R;@ {|@ requires R1;@ ensures E1;@ assignable A1;@@ also@@ requires R2;@ ensures E2;@ assignable A2;@ |}

JAVA + JML

expands to ... (next page)Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 7 / 34

Page 8: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Nested Specification Cases

(previous page) ... expands to

JAVA + JML@ public normal_behavior@ requires R;@ requires R1;@ ensures E1;@ assignable A1;@@ also@@ public normal_behavior@ requires R;@ requires R2;@ ensures E2;@ assignable A2;

JAVA + JMLFormal Specification And Verification: Winter 2010/2011 14. Dezember 2010 8 / 34

Page 9: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Nested Specification Cases

JAVA + JML@ public normal_behavior@ requires amount>0;@ {| requires amount+balance<limit && isValid()==true;@ ensures \result == true;@ ensures balance == amount + \old(balance);@ assignable balance;@@ also@@ requires amount + balance >= limit;@ ensures \result == false;@ ensures unsuccessfulOperations@ == \old(unsuccessfulOperations) + 1;@ assignable unsuccessfulOperations; |}

JAVA + JMLexpands to ... (next page)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 9 / 34

Page 10: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Nested Specification Cases(previous page) ... expands to

JAVA + JML@ public normal_behavior@ requires amount>0;@ requires amount+balance<limit && isValid()==true;@ ensures \result == true;@ ensures balance == amount + \old(balance);@ assignable balance;@ also@ public normal_behavior@ requires amount>0;@ requires amount + balance >= limit;@ ensures \result == false;@ ensures unsuccessfulOperations@ == \old(unsuccessfulOperations) + 1;@ assignable unsuccessfulOperations;

JAVA + JML

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 10 / 34

Page 11: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

JML Feature II: assignable\nothing

method charge() has exceptional behavior case:

JAVA + JML@ public exceptional_behavior@ requires amount <= 0;@ assignable \nothing;

JAVA + JML

assignable \nothing prohibits side effects

difference to pure:I pure also prohibits non-terminationI assignable clause is local to specification case

(here: local to exceptional_behavior)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 11 / 34

Page 12: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Generating Proof Obligations (POs)

generate EnsuresPost PO for normal behavior of charge()

follow [KQJ, 3.1+3.2]

summary:I start KeY proverI in quicktour/jml, open paycardI select charge and EnsuresPostI inspect Assumed Invariants

assuming less invariants:I is fully soundI can compromise provability

sometimes invariants of other classes also needed (selectclass+inv.)

I select contract which modifies balance(in JML: modifies synonymous for assignable)

I Current Goal pane displays proof obligation as DL sequentFormal Specification And Verification: Winter 2010/2011 14. Dezember 2010 12 / 34

Page 13: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Generating Proof Obligations

for loading more proof obligations:re-open Proof Obligation Browser under Tools menu

generate EnsuresPost PO for normal behavior of isValid()

generate EnsuresPost PO for exceptional behavior of charge()

generate PreservesOwnInv PO for charge()

expressing that charge() preserves all invariants (of its own class)

follow [KQJ, 4.3.1+4.3.2]

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 13 / 34

Page 14: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating JML to POs in DL

in the following:

principles of translating JML to proof obligations in DL

I issues in translating arithmetic expressionsI translating this

I identifying the method’s implementationI translating boolean JML expressions to first-order logic formulasI translating preconditionsI translating class invariantsI translating postconditionsI storing \old fields prior to method invocationI storing actual parameters prior to method invocationI expressing that ’exceptions are (not) thrown’I putting everything together

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 14 / 34

Page 15: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating JML to POs in DL

WARNING:

following presentation isI incompleteI not fully preciseI simplifyingI omitting details/complicationsI deviating from exact implementation in KeY

aim of the following:

enable you to read/understand proof obligations

(notational remark: stick to ASCII syntax of KeY logic in this lecture)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 15 / 34

Page 16: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Issues on Translating ArithmeticExpressions

often:I KeY replaces arithmetic JAVA operators by generalized

operators,generic towards various integer semantics (JAVA, Math),example: “+” becomes “javaAddInt”

I KeY inserts casts like (jint),needed for type hierarchy among primitive types,example: “0” becomes “(jint)(0)”

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 16 / 34

Page 17: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating this

bothI explicitI implicit

this reference translated to selfe.g., given class

JAVA + JMLpublic class MyClass {...private int f;...

}

JAVA + JML

I f translated to self.fI this.f translated to self.f

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 17 / 34

Page 18: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Identifying the Method’sImplementation

JAVA’s dynamic dispatch selects a method’s implementation atruntime

for a method call m(args),KeY models selection of implementation from package.Class bym(args)@package.Class

example:

charge(x)@paycard.PayCardexecutes class paycard.PayCard’s implementation of method call

charge(x)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 18 / 34

Page 19: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Boolean JML Expressions

first-order logic treated fundamentally different in JML and KeY logic

JMLI formulas no separate syntactic categoryI instead:

JAVA’s boolean expressions extended with first-order concepts(i.p. quantifiers)

KeY logicI formulas and expressions completely separateI truth constants true, false are formulas,boolean constants TRUE, FALSE are expressions

I atomic formulas take expressions as arguments; e.g.:I x - y < 5I b = TRUE

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 19 / 34

Page 20: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

F Translates boolean JMLExpressions to Formulas

F(v) = v = TRUEF(f) = T (f) = TRUEF(m()) = T (m)() = TRUEF(!b 0) = !F(b 0)F(b 0 && b 1) = F(b 0) & F(b 1)F(b 0 || b 1) = F(b 0) | F(b 1)F(b 0 ==> b 1) = F(b 0) -> F(b 1)F(b 0 <==> b 1) = F(b 0) <-> F(b 1)F(e 0 == e 1) = E(e 0) = E(e 1)F(e 0 != e 1) = !E(e 0) = E(e 1)F(e 0 >= e 1) = E(e 0) >= E(e 1)

v/f/m() boolean variables/fields/pure methodsb 0, b 1 boolean JML expressions, e 0, e 1 JAVA expressionsT may add ‘self.’ or ‘@ClassName’ (see pp.17,18)E may add casts, transform operators (see p.16)Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 20 / 34

Page 21: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

F Translates boolean JMLExpressions to Formulas

F((\forall T x; e 0)) =\forall T x;!x=null -> F(e 0)

F((\exists T x; e 0)) =\exists T x;!x=null & F(e 0)

F((\forall T x; e 0; e 1))=\forall T x;!x=null & F(e 0)

-> F(e 1)

F((\exists T x; e 0; e 1))=\exists T x;!x=null & F(e 0) & F(e 1)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 21 / 34

Page 22: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating Preconditions

if selected contract Contr has preconditions

JAVA + JML@ requires b_1;@ ...@ requires b_n;

JAVA + JML

they are translated to

PRE(Contr)=

F(b_1) & ... & F(b_n)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 22 / 34

Page 23: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating Class Invariants

the invariant

JAVA + JMLclass C {...//@ invariant inv_i;...

}

JAVA + JML

is translated to

INV(inv_i)

=

\forall C o; ((o.<created> = TRUE & !o = null) ->{self:=o}F(inv_i))

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 23 / 34

Page 24: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating Postconditions

if selected contract Contr has postconditions

JAVA + JML@ ensures b_1;@ ...@ ensures b_n;

JAVA + JML

they are translated to

POST (Contr)=

F(b_1) & ... & F(b_n)

special treatment of expressions in post-condition: see next slide

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 24 / 34

Page 25: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Translating Expressions inPostconditions

below, we assume the following assignable clause

@ assignable <assignable_fields>;

translating expressions in postconditions (interesting cases only):

E(\result) = result

E(\old(e)) = Eold(e)

Eold defined like E , with the exception of:

Eold(e.f) = fAtPre(Eold(e))Eold(f) = fAtPre(self)

for f ∈ <assignable_fields>

‘fAtPre’ meant to refer to field ‘f’ in the pre-stateFormal Specification And Verification: Winter 2010/2011 14. Dezember 2010 25 / 34

Page 26: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Storing Pre-State of a Field

given an assignable field f of class C

JAVA + JMLclass C {...private T f;

}

JAVA + JML

translation of postcondition replaced f in \old(..) by fAtPre(p.25)left to do: store pre-state values of f in fAtPre

ST ORE(f)=

\for C o; fAtPre(o) := o.fnote: not a formula, but a quantified update

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 26 / 34

Page 27: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Storing Pre-State of All AssignableFields

if selected contract Contr has preconditions

@ assignable f_1, ..., f_n;

then pre-state of all assignable fields can be stored byone parallel update:

ST ORE(Contr)=

{ ST ORE(f_1) || ... || ST ORE(f_n) }

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 27 / 34

Page 28: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Expressing Normal Termination

how can you express in DL:method call m() will not throw an exception(if method body from class C in package p is invoked)

JAVA + JML\<{ exc = null;

try {m()@p.C;

} catch (java.lang.Throwable e) {exc = e;

}}\> exc = null

JAVA + JMLnote difference:I JAVA assignmentsI equation, i.e., formula (in KeY output format)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 28 / 34

Page 29: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Expressing Exceptional Termination

how can you express in DL:method call m() will throw an exception(if method body from class C in package p is invoked)

JAVA + JML\<{ exc = null;

try {m()@p.C;

} catch (java.lang.Throwable e) {exc = e;

}}\> !exc = null & <typing of exc>

JAVA + JML

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 29 / 34

Page 30: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

PO for Normal Behavior ContractPO for a normal behavior contract Contr for void method m(),with chosen assumed invariants inv_1, ..., inv_n

JAVA + JML==>

INV(inv_1)& ...& INV(inv_n)& PRE(Contr)

-> ST ORE(Contr)\<{ exc = null;

try {m()@p.C;

} catch (java.lang.Throwable e) {exc = e;

}}\> exc = null & POST (Contr)

JAVA + JMLFormal Specification And Verification: Winter 2010/2011 14. Dezember 2010 30 / 34

Page 31: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

PO for Normal Behavior AllowingNon-Termination

PO for a normal behavior contract Contr for method m(),where Contr has clause diverges true;

JAVA + JML==>INV(inv_1) & ... & INV(inv_n)

& PRE(Contr)-> ST ORE(Contr)

\[{ exc = null;try {m()@p.C;

} catch (java.lang.Throwable e) {exc = e;

}}\] exc = null & POST (Contr)

JAVA + JMLFormal Specification And Verification: Winter 2010/2011 14. Dezember 2010 31 / 34

Page 32: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

PO for Normal Behavior of Non-VoidMethod

PO for a normal behavior contract Contr for non-void method m(),

JAVA + JML==>INV(inv_1) & ... & INV(inv_n)

& PRE(Contr)-> ST ORE(Contr)

\<{ exc = null;try {result = m()@p.C;

} catch (java.lang.Throwable e) { exc = e; }}\> exc = null & POST (Contr)

JAVA + JML

recall: POST (Contr) translated \result to result (p.25)

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 32 / 34

Page 33: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

PO for Preserving Invariants

assume method m() has contracts Contr1, . . ., Contr j

PO stating that:Invariants inv_1, ..., inv_n are preserved

in all cases covered by a contract.

JAVA + JML==>

INV(inv_1) & ... & INV(inv_n)& ( PRE(Contr1) | ... | PRE(Contr1) )

-> \[{ exc = null;try {m()@p.C;

} catch (java.lang.Throwable e) { exc = e; }}\] INV(inv_1) & ... & INV(inv_n)

JAVA + JML

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 33 / 34

Page 34: Formal Specification And Verificationi12pschmitt/FSS/Folien10/14PO-print.pdf · we follow‘KeY Quicktour for JML’(cited below as [KQJ]) paper + sources: see ’KeY Quicktour’

Literature for this Lecture

EssentialKeY Quicktour see course page, under ’Links, Papers, and

Software’

Formal Specification And Verification: Winter 2010/2011 14. Dezember 2010 34 / 34