1 / 15

Program verification

This section discusses the concepts of program correctness and verification, including formal specifications, axiomatic verification, and the challenges involved in implementing these methods.

samanthab
Download Presentation

Program verification

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Program verification Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Section 4.2.4

  2. Correctness Issues • Given Program P, what does it means? What is its Specification S • 1975-1980년대 말 • Given Specification S, develop Program P that implements that specification. • 현재 관심, automatic programming, graphic programming, software reuse, object oriented programming, … • Do Specification S and Program P perform the same function? • 1970년대

  3. Formal Specifications Every program can be represented by a flowchart: Fcn3 S1 Fcn2 P3 P1 S4 S3 Fcn4 P2 Fcn1 S2 • Signatures: function: domain  range • fun1: S1 and P1  S3 • fun2: S1 and not(P1)  S3 • fun3: S3 and not(P3)  S4 • fun4: S3 and P3  S4 • S2 and P2 = S4 • S2 and not(P2) = S3

  4. Formal specifications (continued) • A program is then some complex function C of its primitive components: C(fun1, fun2, fun3, fun4, p1, p2, p3):S1S4 • If we could derive these relationships formally, then we have a mathematical proof that given S1 we would HAVE to end with S4. • Problem: Such proofs are hard. • Note, however, that we are always showing the equivalence between a program and a given specification. The statement “Is this program correct?” makes no sense if the specification is not also given.

  5. Axiomatic verification Tony Hoare developed method in 1969. Each program statement obeys a formal axiomatic definition. Validation: Demonstrating that a program meets its specifications by testing the program against a series of data sets Verification: Demonstrating that a program meets its specifications by a formal argument based upon the structure of the program. Validation assumes an execution of the program; verification generally does not.

  6. Axioms for predicate logic {P1}S{P2} means that if P1 is true and S executes, then if S terminates, P2 will be true. A B if A is true then you can state that B is true. Axioms of logic: Composition {P}S1{Q},{Q}S2{R} [Combine statements] {P}S1;S2{R} Consequence1 {P}S{R}, RQ [Add postcondition] {P}S{Q} Consequence2 PR, {R}S{Q} [Add precondition] {P}S{Q}

  7. Axioms for statement types Conditional1 {P^B}S{Q}, P^not(B)Q {P}if B then S{Q} Conditional2 {P^B}S1{Q},{P^not(B)S2{Q} {P}if B then S1 else S2{Q} While {P^B}S{P} {P}while B do S{P ^ not(B)} where P is an invariant Assignment {P(e)}x:=e{P(x)} where P(x) is some predicate in x.

  8. Axiomatic program proof Given program: s1; s2; s3; s4; … sn and specifications P and Q: P is the precondition Q is the postcondition Show that {P}s1;…sn{Q} by showing: {P}s1{p1} {p1}s2{p2} … {pn-1}sn{Q} Repeated applications of composition yield: {P}s1; …; sn{Q}

  9. Example proof {B>=0} 1 X:=B 2 Y:=0 3 while X>0 do 4 begin 5 Y:= Y+A 6 X:= X-1 7 end {Y=AB} • That is, given B non-negative, show that when the program halts, Y=A*B.

  10. Proof outline General method is to work backwards. Look for loop invariant first: • Y is part of partial product, and X is count of what remains • So Y and X*A should be the product needed, i.e., invariant • Y+X*A = A*B is proposed invariant Try: (Y+X*A=A*B and X³0)

  11. Proof • Axiom of assignment(6): {(Y+(X-1)A=A*B and X-1>=0)} X:=X-1 {(Y+X*A=A*B and X>=0)} • Axiom of assignment(5): {((Y+A)+(X-1)A=A*B and X-1>=0)} Y:=Y+A {(Y+(X-1)*A=A*B and X-1>=0)} • Axiom of composition(5,6): {(Y+A)+(X-1)*A=A*B and X-1>=0)} Y:=Y+A; X:=X-1 {(Y+X*A=A*B and X>=0)} • Mathematical Theorem: Y+X*A=A*B and X>0 ((Y+A)+(X-1)*A=A*B and X-1>=0) • Axiom of consequence: {Y+X*A=A*B and X>0} Y:=Y+A; X:=X-1 {(Y+X*A=A*B and X>=0)} • Mathematical theorem: (Y+X*A=A*B and X>=0) and (X>0)  Y+X*A=A*B and X>0 • Axiom of consequence: {(Y+X*A=A*B and X>=0)and (X>0)} Y:=Y+A; X:=X-1 {(Y+X*A=A*B and X>=0)} [Call this **] • While axiom: ** {Y+X*A=A*B and X>=0}while X>0 do Y:=Y+A; X:=X-1 {(Y+X*A=A*B and X>=0) and not(X>0)}

  12. Proof (continued) • Mathematical theorem: (Y+X*A=A*B and X>=0) and not(X>0) (Y+X*A=A*B and X=0) Y=AB • Axiom of consequence: {Y+X*A=A*B and X>=0}while X>0 do Y:=Y+A; X:=X-1 {Y+A*B} • Axiom of assignment: {0+X*A=A*B and X>=0} Y:=0 {Y+X*A=A*B and X>=0} • Axiom of assignment: {0+B*A=A*B and B>=0} X:=B {0+X*A=A*B and X>=0)} • Axiom of composition: {0+B*A=A*B and B>=0} X:=B; Y:=0 {Y+X*A=A*B and X>=0)} • Mathematical theorem: (B>=0)  0+B*A=A*B and B>=0 • Axiom of consequence: {B>=0} X:=B; Y:=0{Y+X*A=A*B and X>=0)} • Composition: {B>=0} program {Y=A*B}

  13. Summary – Axiomatic verification Need to develop axioms for all language features. Can do it for simple arrays, procedure calls, parameters Difficult, even on small programs; very hard to scale up to larger programs Does not translate well to non-mathematical problems; extremely expensive to implement Hard to automate. Manual process leads to many errors. But Precise; clearly delineates the “what” with the “how” Basis for most other verification methods, including semiformal specification notations. For critical applications, it may be worth the cost.

  14. Algebraic Data Types Algebraic data type modeling • A stack of integer push : stack x element  stack pop : stack  stack top : stack  integer U {undefined} empty : stack  Boolean size : stack  integer newstack :  stack

  15. Algebraic Data Types (cont.) • Functions and constraints • pop(push(S,I))  S • pop(newstack)  stack_empty_error • top(push(S,I))  I • top(newstack)  stack_empty_error • empty(newstack)  true • empty(push(newstack,I))  false • size(newsatck)  0 • size(push(S,I))  size(S) + 1 • 만약 stack의 크기에 제한이 있다면 • size(S) is equal to limit_of_stack , push(S,I)  stack_full_error

More Related