course announcement software reliability methods –spring 06, tu th 9:30am-11:00am –instructors:...

51
Course announcement Software Reliability Methods Spring 06, Tu Th 9:30am-11:00am Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner • Topics: Model checking Program analysis Type systems Theorem proving

Post on 21-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Course announcement

• Software Reliability Methods– Spring 06, Tu Th 9:30am-11:00am– Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner

• Topics:– Model checking– Program analysis– Type systems– Theorem proving

Page 2: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Administrative stuff

• On Tuesday– very brief overview of loop invariant inference– constructive logic– conclusion

• A week from today– final project presentations– from 11 to 11:50 (because of prospective student

lunch, which I have to attend)

Page 3: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Inductionless induction

• Technique introduced by Musser in 1980 for proving properties of inductive structures

• Latter became known as inductionless induction, because it allows one to prove, without using induction, properties that look as though they would require induction

Page 4: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Inductionless induction

• The general idea is to prove statements by consistency checking– add the statement to be proven as an axiom to the

base theory, and see if the resulting theory is consistent.

– If it is, then conclude that the statement holds; if it doesn’t, then conclude that the statement doesn’t hold

• This approach is not sound in general, but it works in restricted cases

Page 5: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Inductionless induction

• Musser showed that this approach works for equality theories in the following sense:– if (1) A is a set of equality axioms about some

abstract data type, one is which are booleans (with true and false)

– (2) these abstract data types are fully specified by A (exact definition not important here, but essentially this guarantees a certain form of modularity between the defined types)

– (3) A [ {t 1 = t2 } is consisten, then A ² t1 = t2

so why are we seeing this today with rewrite systems, and not next class, with induction?

Page 6: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Use Knuth-Bendix

• Show that A [ { t1 = t2 } consistent or inconsistent using the Knuth-Bendix completion procedure

• Suppose A has already been converted to a canonical rewrite system (using Knuth-Bendix, for example), and that A has been shown to fully specify the abstract data types it mentions (there are automatic ways of doing this)

• To attempt to prove t1 = t2, one adds either t1 ! t2 or t2 ! t1 to the system, and then we run Knuth-Bendix

Page 7: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Three possible outcomes

• If the completion procedure finishes with a rewrite system that does not contain the rule true ! false, then t1 = t2 is entailed by A

• If the completion procedure finishes with a rewrite system that contains the rule true ! false, then t1 = t2 is not entailed by A

• If the completion procedure fails or runs forever, nothing can be concluded

Page 8: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Example

• Types:– x : character, s : string, s’ : string– null : string (empty string)– s::x : string (s with character x added at the end)– x::s : string (s with character x added to the front)– s + s’ : string (concatentation of s and s’)– isNull(s) : boolean

Page 9: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Example

• Axioms (axioms for booleans not shown)(s = s) = true(null = s::x) = false(s::x = null) = false(s::x = s’::x’) = (x = x’) and (s = s’)x::null = null::xx::(s::x’) = (x::s)::x’null + s = s(s::x’) + s’ = s + (x’::s’)isnull(null) = trueisnull(s::x) = false

Page 10: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Example

• Show: s + (s’::x) = (s+s’)::x

• One would usually prove this by induction on the size of s

• Using inductionless induction:– add s + (s’::x) ! (s+s’)::x as a rewrite rule– Knuth-Bendix doesn’t add any new rules (trust me…)– So s + (s’::x) = (s+s’)::x holds

Page 11: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Example

• Try to show: s :: null = null

• Add s :: null ! null

• Critical pair with: (s::x = null) ! false

Page 12: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Example

• Try to show: s :: null = null

• Add s :: null ! null

• Critical pair with: (s::x = null) ! false

• In this case, Knuth-Bendix derives true ! false: s + null = null does not hold

Page 13: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Going back to techniques

Proof-system search ( ` )

Interpretation search ( ² ) Quantifiers

Equality

Decisionprocedures

Induction

Cross-cutting aspectsMain search strategy

• E-graph• Rewrite rules

Communication between decision procedures and between prover and decision procedures

•DPLL•Backtracking•Incremental

SAT

Matching

• Natural deduction

• Sequents• Tactics &

Tacticals• Resolution

Today

Page 14: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Induction

• Is just another way of proving universal quantifiers

• Important technique for proving properties of inductively defined structures, such as recursive data structures, recursive programs, and derivations

Page 15: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Principle of induction

• Induction over natural numbers

P(0) 8 i:Nat P(i) ) P(i+1)

8 i:Nat . P(i)

Page 16: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Principle of induction

• More generally: well-founded induction

• Well founded order: for every non-empty subset, there is a minimal element (an element such that no other element is smaller than it)

• Equivalently: there are no infinite descending chains

[8 i < j . P(i)] ) P(j) (<, N) is a well-founded order

8 i:N . P(i)

Page 17: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Principle of induction

• Structural induction: well-founded induction where the induction is done on the structure of (usually syntactic) structure of elements of N

Page 18: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Automating induction

• Automating induction is hard– not many theorem provers do it automatically

• Difficulties– determine when to apply induction– determine what variables to apply induction on– derive a strong enough hypothesis

Page 19: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Induction in ACL2

• Similarity between recursive definitions and induction

• A recursive function calls itself with arguments that are “smaller” (by some measure) than the original arguments

• A proof of P(x) by induction consists of proving P(x) by assuming that P holds for terms “smaller” (by some measure) than x

Page 20: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Induction in ACL2

• ACL2 proves theorems about recursive functions, and so the similarity mentioned leads to a scheme for applying induction

• Suppose that a formula P to be proven contains a call to a function f that is defined recursively, and suppose each recursive call drives down the measure

• Then we can apply induction on the structure of the recursive definition of f

Page 21: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Simple example

(sum N) = (IF (<= N 0)

0

(sum (- N 1)))

(defthm (IMPLIES (>= N 0)

(= (sum N)

(/ (* N (+ N 1)) 2))))

Page 22: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Two parts

• First part: identify possible measures– done when a recursive function is defined

• Second part: apply induction during a proof– use the analysis done during the first part to guide the

application

Page 23: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Identifying measures

• Suppose we have (f x1 … xn) = body, where the body contains recursive calls to f.

• We are looking for a measure function m that satisfies the following:– for every sub-term of the form (f y1 … yn), we must

have (r (m y1 … yn) (m x1 … xn))

– where r is a well-founded relation

Page 24: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Example

(funny-fact n i) =

(IF (<= n 0)

1

(IF (= i 0) (* n (funny-fact (- n 1) i))

(IF (> i 0) (* n (funny-fact (- n i) i))

(* n (funny-fact (+ n i) i))))))

Page 25: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Refine: identifying measures

• Suppose we have (f x1 … xn) = body, where the body contains recursive calls to f.

• We are looking for a measure function m that satisfies the following:– for every sub-term of the form (f y1 … yn), we must

have:(IMPLIES (AND t1 … tk) (r (m y1 … yn) (m x1 … xn)))

– where r is a well-founded relation

Page 26: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Build the “machine” for a function

case test recursive calls

1 (funny-fact (- n 1) i)

2 (funny-fact (- n i) i)

3 (funny-fact (+ n i) i)

(funny-fact n i) =

(IF (<= n 0)

1

(IF (= i 0) (* n (funny-fact (- n 1) i))

(IF (> i 0) (* n (funny-fact (- n i) i))

(* n (funny-fact (+ n i) i))))))

Page 27: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Build the “machine” for a function

case test recursive calls

1 (AND (NOT (<= n 0)) (= i 0))

(funny-fact (- n 1) i)

2 (AND (NOT (<= n 0)) (NOT (= i 0) (> i 0))

(funny-fact (- n i) i)

3 (AND (NOT (<= n 0)) (NOT (= i 0) (NOT (> i 0) (< i 0))

(funny-fact (+ n i) i)

(funny-fact n i) =

(IF (<= n 0)

1

(IF (= i 0) (* n (funny-fact (- n 1) i))

(IF (> i 0) (* n (funny-fact (- n i) i))

(* n (funny-fact (+ n i) i))))))

Page 28: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Use machine to test measure

• For example, for case 3:

(IMPLIES (AND (NOT (<= n 0)) (NOT (= i 0) (NOT (> i 0) (< i 0)) (< (+ n i) n))

Page 29: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

How do you guess measure?

• Rely on lemmas that have been labeled with the “induction” hint

• These so-called induction lemmas state under what conditions certain measures decrease

• For example:

(IMPLIES (is-cons-cell X)

(< (length (cdr X) (length X)))

Page 30: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

How do you guess measure?

• Suppose we have a function append:

(append L1 L2) =

(IF (is-cons-cell L1)

(cons (car L1) (append (cdr L1) L2))

L2))

(IMPLIES (is-cons-cell X)

(< (length (cdr X) (length X)))

case test recursive calls

1

Page 31: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

How do you guess measure?

• Suppose we have a function append:

(append L1 L2) =

(IF (is-cons-cell L1)

(cons (car L1) (append (cdr L1) L2))

L2))

(IMPLIES (is-cons-cell X)

(< (length (cdr X) (length X)))

case test recursive calls

1 (is-cons-cell L1) (append (cdr L1) L2))

Table and induction lemma immediately point out that length works as the measure and < works as the order

Page 32: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Another example

(ACK M N) = (IF (= M 0)

(+ N 1)

(IF (= N 0)

(ACK (- M 1) 1)

(ACK (- M 1) (ACK M (- N 1)))))

case test recursive calls

1

2

Page 33: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Another example

(ACK M N) = (IF (= M 0)

(+ N 1)

(IF (= N 0)

(ACK (- M 1) 1)

(ACK (- M 1) (ACK M (- N 1)))))

case test recursive calls

1 (AND (NOT (= M 0)) (= N 0))

(ACK (- M 1) 1)

2 (AND (NOT (= M 0)) (NOT (= N 0)))

(ACK (- M 1) (ACK M (- N 1)))(ACK M (- N 1))

Measure?

Page 34: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Another example

• Lexicographical order of (M, N)

(LEX-< (cons (- M 1) N)

(cons M N))

(LEX-< (cons (- M 1) (ACK ...))

(cons M N))

(LEX-< (cons M (- N 1))

(cons M N))

Page 35: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

First part summary

• When the function is defined, try to find measure

• Use induction lemmas to guide search

• Also allow programmer to provide the measure

• Once a measure has been found, the function is “admitted”

• As a side benefit, guarantees termination

Page 36: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Second part: applying induction

• Suppose term (f t1 … tn) appears in the goal G

• Assume t1 … tn are all variables– if they are not, things get more complicated

• Assume “machine” for f looks like this:

case test recursive calls

1 q1 r11 ... r1

h1

2 q2 r21 ... r2

h2

… … …k qk rk

1 ... rkhk

Also, assume ih is subst

such that ih applied to

(f t1 … tn) gives rih

Page 37: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Second part: applying induction

case test recursive calls

1 q1 r11 ... r1

h1

2 q2 r21 ... r2

h2

… … …k qk rk

1 ... rkhk

Also, assume ih is subst

such that ih applied to

(f t1 … tn) gives rih

Goal G with sub-term (f t1 … tn)

Page 38: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Second part: applying induction

case test recursive calls

1 q1 r11 ... r1

h1

2 q2 r21 ... r2

h2

… … …k qk rk

1 ... rkhk

Also, assume ih is subst

such that ih applied to

(f t1 … tn) gives rih

Goal G with sub-term (f t1 … tn)

Page 39: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Simple example from before

(sum N) = (IF (<= N 0)

0

(sum (- N 1)))

(defthm (IMPLIES (>= N 0)

(= (sum N)

(/ (* N (+ N 1)) 2))))

case test recursive calls

1 =

G

Page 40: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Simple example from before

(sum N) = (IF (<= N 0)

0

(sum (- N 1)))

(defthm (IMPLIES (>= N 0)

(= (sum N)

(/ (* N (+ N 1)) 2))))

case test recursive calls

1 (NOT (= N 0)) (sum (- N 1)))

(IMPLIES (AND G[N ! (- N 1)] (NOT (= N 0))) G)

= [ N ! (- N 1)]

(IMPLIES (= N 0) G)

G

Page 41: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Strengthening

• It is often advantageous, and sometimes even necessary to strengthen a conjecture before attempting an inductive proof

• ACL2 does this with a generalization process, which runs before induction is applied

• Tries to replace certain non-variable terms by fresh variables, which are implicitly universally quantified

Page 42: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Strengthening example

• Suppose we want to prove (all free vars universally quantified):(append (reverse A) nil) = (reverse A)

• This conjecture is generalized– by replacing (reverse A) with L

(append L nil) = L

Page 43: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Strengthening gone wrong

• The problem with generalization is that the generalized conjecture may be “too strong”– and in fact may not hold even though the original

conjecture did!

• Example:(= (sum (fib N))

(/ (* (fib N) (+ (fib N) 1)) 2))))

Page 44: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Strengthening gone wrong

• The problem with generalization is that the generalized conjecture may be “too strong”– and in fact may not hold even though the original

conjecture did!

• Example:(= (sum (fib N))

(/ (* (fib N) (+ (fib N) 1)) 2))))

• Generalize:(= (sum M)

(/ (* M (+ M 1)) 2))))

This does not hold! We need to know that M is positive!

Page 45: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Strengthening fixed

• The generalization process constrains the newly introduced variables using theorems that have been labeled “generalize” by the user

• In the previous case, the following theorem could be used: (>= (fib N) 0)

• Once this theorem has been proven and labeled “generalize”, subsequent generalizations of (fib N) to M will include the hypothesis (>= M 0). – Generalized conjecture in example becomes:

(IMPLIES (>= M 0)

(= (sum M) (/ (* M (+ M 1)) 2))))

Page 46: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Induction in ACL2: summary

• The three difficulties, again

• When to apply induction– as a last resort

• What variables to apply induction on– analyze function at definition time to find decreasing

measures

• How to strengthen induction hypothesis– replace certain terms with fresh vars

Page 47: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Similar ideas, but elsewhere

• Using recursive definitions to drive the application of induction appears in other theorem provers, for example Twelf

• Twelf is a theorem prover based on the LF logical framework, which can be used to encode logics, programming languages, and deductive systems

• Properties of such systems can then be proven by induction

Page 48: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Natural deduction

` A ` B

` A Æ B

` A Æ B

` A

` A Æ B

` B

` B

` A ) B

` A ` A ) B

` B

` A

ÆI ÆE1 ÆE2

Assume

(I )E

` A

` A Ç B ÇI1

` B

` A Ç B ÇI2

` A Ç B

` C ÇE

` C ` C

Page 49: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Proving properties of derivations

• Say we want to prove a property:– for every derivation D, P(D) holds

Page 50: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Proving properties of derivations

• Say we want to prove a property:– for every derivation D, P(D) holds

Page 51: Course announcement Software Reliability Methods –Spring 06, Tu Th 9:30am-11:00am –Instructors: Ingolf Krueger, Ranjit Jhala, Sorin Lerner Topics: –Model

Twelf

• Twelf can performs these kinds of proofs automatically

• The application of induction is interspersed with case splitting and the backward application of Twelf’s sequent inference rules