symbolic computation and theorem proving in program
play

Symbolic Computation and Theorem Proving in Program Analysis Laura - PowerPoint PPT Presentation

Symbolic Computation and Theorem Proving in Program Analysis Laura Kov acs Chalmers Specification Program Loop Assertions Verification Conditions Proving Proving Specification Program Loop Assertions Theorem Proving Computer Algebra


  1. Symbolic Computation and Theorem Proving in Program Analysis Laura Kov´ acs Chalmers

  2. Specification Program Loop Assertions Verification Conditions Proving Proving

  3. Specification Program Loop Assertions Theorem Proving Computer Algebra Verification Conditions Proving Proving

  4. Assertion Synthesis — Example: Array Partition Program Loop Assertions Polynomial Equalities and Inequalities, Quantified FO properties a = b + c a := 0 ; b := 0 ; c := 0 ; while ( a < N ) do a ≥ 0 ∧ b ≥ 0 ∧ c ≥ 0 if A [ a ] ≥ 0 a ≤ N ∨ N ≤ 0 then B [ b ] := A [ a ]; b := b + 1 else C [ c ] := A [ a ]; c := c + 1 ; a := a + 1 ; ( ∀ p )( p ≥ b → B [ p ] = B 0 [ p ]) end do ( ∀ p )( 0 ≤ p < b → B [ p ] ≥ 0 ∧ ( ∃ i )( 0 ≤ i < a ∧ A [ a ] = B [ p ]))

  5. Assertion Synthesis — Example: Array Partition Program Loop Assertions Polynomial Equalities and Inequalities, Quantified FO properties a = b + c a := 0 ; b := 0 ; c := 0 ; while ( a < N ) do a ≥ 0 ∧ b ≥ 0 ∧ c ≥ 0 if A [ a ] ≥ 0 a ≤ N ∨ N ≤ 0 then B [ b ] := A [ a ]; b := b + 1 else C [ c ] := A [ a ]; c := c + 1 ; a := a + 1 ; ( ∀ p )( p ≥ b → B [ p ] = B 0 [ p ]) end do ( ∀ p )( 0 ≤ p < b → B [ p ] ≥ 0 ∧ ( ∃ i )( 0 ≤ i < a ∧ A [ a ] = B [ p ]))

  6. Our Approach Loop Assertions

  7. Our Approach Extend language with extra symbols: Loop Loop Properties Assertions loop cnt, array update predicates

  8. Our Approach: S YMBOL E LIMINATION Extend language with extra symbols: Eliminate symbols Loop Loop Properties Assertions loop cnt, array update predicates

  9. Our Approach: S YMBOL E LIMINATION Gr¨ obner Basis Recurrence Solving Extend language with extra symbols: Eliminate symbols Loop Loop Properties Assertions loop cnt, array update predicates Monotonicity Properties of Scalars Array Update Properties Consequence Finding

  10. Outline Part 1: Weakest Precondition for Program Analysis and Verification Part 2: Polynomial Invariant Generation (TACAS’08, LPAR’10) Part 3: Quantified Invariant Generation (FASE’09, MICAI’11) Part 4: Invariants, Interpolants and Symbol Elimination (CADE’09, POPL ’12, APLAS’12)

  11. Part 3: Quantified Invariant Generation Symbol Elimination by First-Order Theorem Proving Quantified Invariant Example Quantified Invariant Generation by Symbol Elimination Symbol Elimination in the Vampire First-Order Theorem Prover Conclusions

  12. Outline Quantified Invariant Example Quantified Invariant Generation by Symbol Elimination Symbol Elimination in the Vampire First-Order Theorem Prover Conclusions

  13. Example: Array Partition partition.c A : -1 -3 -1 -5 -8 -0 -2 a := 0; b := 0; c := 0; a = 0 while ( a ≤ k ) do if A [ a ] ≥ 0 B : - * - * - * - * - * - * - * then B [ b ] := A [ a ] ; b := b + 1; b = 0 else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; C : - * - * - * - * - * - * - * end do c = 0

  14. Example: Array Partition partition.c A : -1 -3 -1 -5 -8 -0 -2 a := 0; b := 0; c := 0; a = 7 while ( a ≤ k ) do if A [ a ] ≥ 0 B : -1 -3 -8 -0 - * - * - * then B [ b ] := A [ a ] ; b := b + 1; b = 4 else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; C : -1 -5 -2 - * - * - * - * end do c = 3

  15. Example: Array Partition partition.c A : -1 -3 -1 -5 -8 -0 -2 a := 0; b := 0; c := 0; a = 7 while ( a ≤ k ) do if A [ a ] ≥ 0 B : -1 -3 -8 -0 - * - * - * then B [ b ] := A [ a ] ; b := b + 1; b = 4 else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; C : -1 -5 -2 - * - * - * - * end do c = 3 Invariants with ∀ ∃ ◮ Each of B [ 0 ] , . . . , B [ b − 1 ] is non-negative and equal to one of A [ 0 ] , . . . , A [ a − 1 ] . ( ∀ p )( 0 ≤ p < b → B [ p ] ≥ 0 ∧ ( ∃ i )( 0 ≤ i < a ∧ A [ i ] = B [ p ]))

  16. Example: Array Partition partition.c A : -1 -3 -1 -5 -8 -0 -2 a := 0; b := 0; c := 0; a = 7 while ( a ≤ k ) do if A [ a ] ≥ 0 B : -1 -3 -8 -0 - * - * - * then B [ b ] := A [ a ] ; b := b + 1; b = 4 else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; C : -1 -5 -2 - * - * - * - * end do c = 3 Invariants with ∀ ∃ ◮ Each of B [ 0 ] , . . . , B [ b − 1 ] is non-negative and equal to one of A [ 0 ] , . . . , A [ a − 1 ] . ( ∀ p )( 0 ≤ p < b → B [ p ] ≥ 0 ∧ ( ∃ i )( 0 ≤ i < a ∧ A [ i ] = B [ p ]))

  17. Example: Array Partition partition.c A : -1 -3 -1 -5 -8 -0 -2 a := 0; b := 0; c := 0; a = 7 while ( a ≤ k ) do if A [ a ] ≥ 0 B : -1 -3 -8 -0 - * - * - * then B [ b ] := A [ a ] ; b := b + 1; b = 4 else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; C : -1 -5 -2 - * - * - * - * end do c = 3 Invariants with ∀ ∃ ◮ Each of B [ 0 ] , . . . , B [ b − 1 ] is non-negative and equal to one of A [ 0 ] , . . . , A [ a − 1 ] . ◮ Each of C [ 0 ] , . . . , C [ c − 1 ] is negative and equal to one of A [ 0 ] , . . . , A [ a − 1 ] . Invariants with ∀ ◮ For every p ≥ b , the value of B [ p ] is equal to its initial value. ◮ For every p ≥ c , the value of C [ p ] is equal to its initial value.

  18. Example: Array Partition - Some Experiments a := 0; b := 0; c := 0; while ( a ≤ k ) do if A [ a ] ≥ 0 then B [ b ] := A [ a ] ; b := b + 1; else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; end do 1. B doesn’t change at positions after final value of b (1 s ): ∀ p ( p ≥ b → B [ p ] = B 0 [ p ]) 2. Each B [ 0 ] , . . . , B [ b − 1 ] is a positive value in { A [ 0 ] , . . . , A [ a − 1 ] } (1 s ): ∀ p ( b > p ∧ p ≥ 0 → B [ p ] ≥ 0 ∧ ∃ k ( a > k ∧ k ≥ 0 ∧ A [ k ] = B [ p ])

  19. Outline Quantified Invariant Example Quantified Invariant Generation by Symbol Elimination Symbol Elimination in the Vampire First-Order Theorem Prover Conclusions

  20. Overview of the Method ◮ Given loop L ; ◮ Extend L to L ′ ; ◮ Extract a set P of loop properties in L ′ ; ◮ Generate loop property p in L s.t. P → p .

  21. Overview of the Method ◮ Given loop L ; ◮ Extend L to L ′ ; ◮ Extract a set P of loop properties in L ′ ; ◮ Generate loop property p in L s.t. P → p .

  22. Overview of the Method ◮ Given loop L ; ◮ Extend L to L ′ ; ◮ Extract a set P of loop properties in L ′ ; ◮ Generate loop property p in L s.t. P → p . ← Symbol elimination!

  23. a := 0; b := 0; c := 0; while ( a ≤ k ) do if A [ a ] ≥ 0 Invariant Generation - The Method then B [ b ] := A [ a ] ; b := b + 1; else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; 1. Extend the language L to L ′ : end do ( ∀ i )( i ∈ iter ⇔ 0 ≤ i ∧ i < n ) ◮ variables as functions of n : v ( i ) with 0 ≤ i < n upd B ( i , p ) ⇔ i ∈ iter ∧ p = b ( i ) ∧ A [ a ( i ) ] ≥ 0 ◮ predicates as loop properties: upd B ( i , p , x ) ⇔ upd B ( i , p ) ∧ x = A [ a ( i ) ] iter , upd V ( i , p ) , upd V ( i , p , x ) a = b + c , a ≥ 0 , b ≥ 0 , c ≥ 0 ( ∀ i ∈ iter )( a ( i + 1 ) > a ( i ) ) ( ∀ i ∈ iter )( b ( i + 1 ) = b ( i ) ∨ b ( i + 1 ) = b ( i ) + 1 ) ( ∀ i ∈ iter )( a ( i ) = a ( 0 ) + i ) ( ∀ j , k ∈ iter )( k ≥ j → b ( k ) ≥ b ( j ) ) ( ∀ j , k ∈ iter )( k ≥ j → b ( j ) + k ≥ b ( k ) + j ) ( ∀ p )( b ( 0 ) ≤ p < b ( n ) → ( ∃ i ∈ iter )( b ( i ) = p ∧ A [ a ( i ) ] ≥ 0 )) ( ∀ i ) ¬ upd B ( i , p ) → B ( n ) [ p ] = B ( 0 ) [ p ] upd B ( i , p , x ) ∧ ( ∀ j > i ) ¬ upd B ( j , p ) → B ( n ) [ p ]= x ( ∀ i ∈ iter )( A [ a ( i ) ] ≥ 0 → B ( i + 1 ) [ b ( i ) ] = A [ a ( i ) ] ∧ b ( i + 1 ) = b ( i ) + 1 ∧ c ( i + 1 ) = c ( i ) )

  24. a := 0; b := 0; c := 0; while ( a ≤ k ) do if A [ a ] ≥ 0 Invariant Generation - The Method then B [ b ] := A [ a ] ; b := b + 1; else C [ c ] := A [ a ] ; c := c + 1; a := a + 1; 1. Extend the language L to L ′ : end do ( ∀ i )( i ∈ iter ⇔ 0 ≤ i ∧ i < n ) ◮ variables as functions of n : v ( i ) with 0 ≤ i < n upd B ( i , p ) ⇔ i ∈ iter ∧ p = b ( i ) ∧ A [ a ( i ) ] ≥ 0 ◮ predicates as loop properties: upd B ( i , p , x ) ⇔ upd B ( i , p ) ∧ x = A [ a ( i ) ] iter , upd V ( i , p ) , upd V ( i , p , x ) a = b + c , a ≥ 0 , b ≥ 0 , c ≥ 0 - upd V ( i , p ) : at iteration i , V is updated at position p ; ( ∀ i ∈ iter )( a ( i + 1 ) > a ( i ) ) ( ∀ i ∈ iter )( b ( i + 1 ) = b ( i ) ∨ b ( i + 1 ) = b ( i ) + 1 ) - upd V ( i , p , x ) : at iteration i , V is updated at position p by value x . ( ∀ i ∈ iter )( a ( i ) = a ( 0 ) + i ) ( ∀ j , k ∈ iter )( k ≥ j → b ( k ) ≥ b ( j ) ) ( ∀ j , k ∈ iter )( k ≥ j → b ( j ) + k ≥ b ( k ) + j ) ( ∀ p )( b ( 0 ) ≤ p < b ( n ) → ( ∃ i ∈ iter )( b ( i ) = p ∧ A [ a ( i ) ] ≥ 0 )) ( ∀ i ) ¬ upd B ( i , p ) → B ( n ) [ p ] = B ( 0 ) [ p ] upd B ( i , p , x ) ∧ ( ∀ j > i ) ¬ upd B ( j , p ) → B ( n ) [ p ]= x ( ∀ i ∈ iter )( A [ a ( i ) ] ≥ 0 → B ( i + 1 ) [ b ( i ) ] = A [ a ( i ) ] ∧ b ( i + 1 ) = b ( i ) + 1 ∧ c ( i + 1 ) = c ( i ) )

Recommend


More recommend