meta smt
play

meta SMT http://www.informatik.uni-bremen.de/agra/eng/metasmt.php 1 - PowerPoint PPT Presentation

metaSMT: Focus On Your Application Not On Solver Integration Finn Haedicke , Stefan Frehse, Grschwin Fey, Daniel Groe, Rolf Drechsler Group of Computer Architecture, University of Bremen, Germany DIFTS 2011 meta SMT


  1. metaSMT: Focus On Your Application Not On Solver Integration Finn Haedicke , Stefan Frehse, Görschwin Fey, Daniel Große, Rolf Drechsler Group of Computer Architecture, University of Bremen, Germany DIFTS 2011 meta SMT http://www.informatik.uni-bremen.de/agra/eng/metasmt.php 1

  2. Outline Motivation Initial Example Design Goals Architecture Syntax Contexts APIs Evaluation Summary Features Conclusions 2

  3. Motivation ◮ Decision procedures are an important aspect of formal methods. 3

  4. Motivation ◮ Decision procedures are an important aspect of formal methods. ◮ Many SAT and SMT solvers are available and increasingly powerful 3

  5. Motivation ◮ Decision procedures are an important aspect of formal methods. ◮ Many SAT and SMT solvers are available and increasingly powerful ◮ Programming formal algorithms can be hard 3

  6. Motivation ◮ Decision procedures are an important aspect of formal methods. ◮ Many SAT and SMT solvers are available and increasingly powerful ◮ Programming formal algorithms can be hard ◮ . . . even without integrating solvers. 3

  7. Motivation ◮ Decision procedures are an important aspect of formal methods. ◮ Many SAT and SMT solvers are available and increasingly powerful ◮ Programming formal algorithms can be hard ◮ . . . even without integrating solvers. ⇒ Framework to easily integrate advanved reasoning engines ◮ metaSMT framework for Solver Integration ◮ Domain Specific Language for SMT expression in C++ ◮ No algorithm changes when switching solvers 3

  8. Example: Integer Factorization / Prime Test Example ◮ Find a valid factorization of an integer r = 1234567 ◮ Solve r = a × b ∧ a � = 1 ∧ b � = 1 or prove its unsatisfiability ◮ All variables are bit-vector integers: r, a, b ∈ { 0 , . . . , 2 n − 1 } ◮ Easy to formulate as SMT-Lib instance 4

  9. Example: Integer Factorization / Prime Test (2) SMT-Lib 2.0 1 ; declare variables 2 ( declare − fun a ( ) ( _ BitVec 32)) 3 ( declare − fun b ( ) ( _ BitVec 32)) 4 ; assert a ∗ b == r (1234567) 5 ( assertion (= 6 ( bvmul 7 ( ( _ zero_extend 32) a ) 8 ( ( _ zero_extend 32) b ) ) 9 ( _ bv1234567 64 ) 10 ) ) 11 ; a and be must not be 1 12 ( assertion 13 ( not (= a ( _ bv1 3 2 ) ) ) ) 14 ( assertion 15 ( not (= b ( _ bv1 3 2 ) ) ) ) 16 17 ( check − sat ) 18 ( get − value ( a ) ) 19 ( get − value ( b ) ) 5

  10. Example: Integer Factorization / Prime Test (2) SMT-Lib 2.0 metaSMT (C++) 1 ; declare variables 1 2 ( declare − fun a ( ) ( _ BitVec 32)) 2 b i t v e c t o r a=new_bitvector (bw) ; 3 ( declare − fun b ( ) ( _ BitVec 32)) 3 b i t v e c t o r b=new_bitvector (bw) ; 4 ; assert a ∗ b == r (1234567) 4 5 ( assertion (= 5 assertion ( ctx , equal ( 6 ( bvmul 6 bvmul ( 7 ( ( _ zero_extend 32) a ) 7 zero_extend (bw, a ) , 8 ( ( _ zero_extend 32) b ) ) 8 zero_extend (bw ,b ) ) , 9 ( _ bv1234567 64 ) 9 bvuint (1234567 , 2 ∗ bw) 10 ) ) 10 ) ) ; 11 ; a and be must not be 1 11 12 ( assertion 12 assertion ( ctx , 13 ( not (= a ( _ bv1 3 2 ) ) ) ) 13 nequal (a , bvuint (1 ,bw) ) ) ; 14 ( assertion 14 assertion ( ctx , 15 ( not (= b ( _ bv1 3 2 ) ) ) ) 15 nequal (b , bvuint (1 ,bw) ) ) ; 16 16 17 ( check − sat ) 17 i f ( solve ( ctx ) ) 18 ( get − value ( a ) ) 18 read_value ( ctx , a ) , 19 ( get − value ( b ) ) 19 read_value ( ctx , b ) ; 5

  11. Example: Integer Factorization / Prime Test (2) SMT-Lib 2.0 Boolector API 1 ; declare variables 1 BtorExp ∗ a , b ; 2 ( declare − fun a ( ) ( _ BitVec 32)) 2 a = boolector_var ( btor , bw, "a" ) ; 3 ( declare − fun b ( ) ( _ BitVec 32)) 3 b = boolector_var ( btor , bw, "b" ) ; 4 ; assert a ∗ b == r (1234567) 4 5 ( assertion (= 5 boolector_assert ( btor , boolector_eq ( btor , 6 ( bvmul 6 boolector_mul ( btor , 7 ( ( _ zero_extend 32) a ) 7 boolector_uext ( btor , a , bw) , 8 ( ( _ zero_extend 32) b ) ) 8 boolector_uext ( btor , b , bw) ) , 9 ( _ bv1234567 64 ) 9 boolector_unsigned_int ( btor , 1234567, 2 ∗ bw) 10 ) ) 10 ) ) ; 11 ; a and be must not be 1 11 12 ( assertion 12 boolector_assert ( btor , boolector_ne ( btor , a , 13 ( not (= a ( _ bv1 3 2 ) ) ) ) 13 boolector_unsigned_int ( btor , 1 , bw) ) ) ; 14 ( assertion 14 boolector_assert ( btor , boolector_ne ( btor , b , 15 ( not (= b ( _ bv1 3 2 ) ) ) ) 15 boolector_unsigned_int ( btor , 1 , bw) ) ) ; 16 16 17 ( check − sat ) 17 i f ( boolector_sat ( btor ) == BOOLECTOR_SAT ) 18 ( get − value ( a ) ) 18 boolector_bv_assignment ( _btor , a ) , 19 ( get − value ( b ) ) 19 boolector_bv_assignment ( _btor , b ) ; 5

  12. Example: Integer Factorization / Prime Test (2) SMT-Lib 2.0 Boolector API 1 ; declare variables 1 BtorExp ∗ a , b ; 2 ( declare − fun a ( ) ( _ BitVec 32)) 2 a = boolector_var ( btor , bw, "a" ) ; 3 ( declare − fun b ( ) ( _ BitVec 32)) 3 b = boolector_var ( btor , bw, "b" ) ; 4 ; assert a ∗ b == r (1234567) 4 5 ( assertion (= 5 boolector_assert ( btor , boolector_eq ( btor , 6 ( bvmul 6 boolector_mul ( btor , 7 ( ( _ zero_extend 32) a ) This example has memory leaks. 7 boolector_uext ( btor , a , bw) , 8 ( ( _ zero_extend 32) b ) ) 8 boolector_uext ( btor , b , bw) ) , Boolector requires explicit release of 9 ( _ bv1234567 64 ) 9 boolector_unsigned_int ( btor , 1234567, 2 ∗ bw) expressions. 10 ) ) 10 ) ) ; 11 ; a and be must not be 1 11 12 ( assertion 12 boolector_assert ( btor , boolector_ne ( btor , a , 13 ( not (= a ( _ bv1 3 2 ) ) ) ) 13 boolector_unsigned_int ( btor , 1 , bw) ) ) ; 14 ( assertion 14 boolector_assert ( btor , boolector_ne ( btor , b , 15 ( not (= b ( _ bv1 3 2 ) ) ) ) 15 boolector_unsigned_int ( btor , 1 , bw) ) ) ; 16 16 17 ( check − sat ) 17 i f ( boolector_sat ( btor ) == BOOLECTOR_SAT ) 18 ( get − value ( a ) ) 18 boolector_bv_assignment ( _btor , a ) , 19 ( get − value ( b ) ) 19 boolector_bv_assignment ( _btor , b ) ; 5

  13. Example: Integer Factorization / Prime Test (2) SMT-Lib 2.0 Boolector API 1 ; declare variables 1 BtorExp ∗ a , b ; 2 ( declare − fun a ( ) ( _ BitVec 32)) 2 a = boolector_var ( btor , bw, "a" ) ; 3 ( declare − fun b ( ) ( _ BitVec 32)) 3 b = boolector_var ( btor , bw, "b" ) ; 4 ; assert a ∗ b == r (1234567) 4 Solver State 5 ( assertion (= 5 boolector_assert ( btor , boolector_eq ( btor , Every (partial) expression 6 ( bvmul 6 boolector_mul ( btor , 7 ( ( _ zero_extend 32) a ) needs solver state 7 boolector_uext ( btor , a , bw) , 8 ( ( _ zero_extend 32) b ) ) 8 boolector_uext ( btor , b , bw) ) , 9 ( _ bv1234567 64 ) 9 boolector_unsigned_int ( btor , 1234567, 2 ∗ bw) 10 ) ) boolector_eq(btor, ...) 10 ) ) ; 11 ; a and be must not be 1 11 sword.addOperator(...) 12 ( assertion 12 boolector_assert ( btor , boolector_ne ( btor , a , 13 Z3_mk_eq(z3, ...) ( not (= a ( _ bv1 3 2 ) ) ) ) 13 boolector_unsigned_int ( btor , 1 , bw) ) ) ; 14 ( assertion 14 boolector_assert ( btor , boolector_ne ( btor , b , 15 ( not (= b ( _ bv1 3 2 ) ) ) ) 15 boolector_unsigned_int ( btor , 1 , bw) ) ) ; 16 16 17 ( check − sat ) 17 i f ( boolector_sat ( btor ) == BOOLECTOR_SAT ) 18 ( get − value ( a ) ) 18 boolector_bv_assignment ( _btor , a ) , 19 ( get − value ( b ) ) 19 boolector_bv_assignment ( _btor , b ) ; 5

  14. Example: Integer Factorization / Prime Test (2) SMT-Lib 2.0 metaSMT 1 ; declare variables 1 2 ( declare − fun a ( ) ( _ BitVec 32)) 2 b i t v e c t o r a=new_bitvector (bw) ; 3 ( declare − fun b ( ) ( _ BitVec 32)) 3 b i t v e c t o r b=new_bitvector (bw) ; 4 ; assert a ∗ b == r (1234567) 4 Solver State 5 ( assertion (= 5 assertion ( ctx , equal ( Every (partial) expression 6 ( bvmul 6 bvmul ( 7 ( ( _ zero_extend 32) a ) 7 zero_extend (bw, a ) , needs solver state 8 ( ( _ zero_extend 32) b ) ) 8 zero_extend (bw ,b ) ) , 9 ( _ bv1234567 64 ) 9 bvuint (1234567 , 2 ∗ bw) 10 ) ) 10 ) ) ; boolector_eq(btor, ...) 11 ; a and be must not be 1 11 sword.addOperator(...) 12 ( assertion 12 assertion ( ctx , 13 Z3_mk_eq(z3, ...) ( not (= a ( _ bv1 3 2 ) ) ) ) 13 nequal (a , bvuint (1 ,bw) ) ) ; 14 ( assertion 14 assertion ( ctx , 15 ( not (= b ( _ bv1 3 2 ) ) ) ) 15 nequal (b , bvuint (1 ,bw) ) ) ; 16 16 17 ( check − sat ) 17 i f ( solve ( ctx ) ) 18 ( get − value ( a ) ) 18 read_value ( ctx , a ) , 19 ( get − value ( b ) ) 19 read_value ( ctx , b ) ; 5

  15. Problems so far ◮ Solver specific API or SMT-file handling. ◮ Series of API calls instead of clear SMT expressions. ◮ Different APIs or SMT compliance issues for different solvers. 6

  16. Design Goals metaSMT . . . ◮ . . . provides an unified interface to different SMT solvers. ◮ . . . uses C/C++ interface of the solvers where available. ◮ . . . makes common/repetitive tasks easy. ◮ . . . is extensible with new logics, solvers and APIs. ◮ . . . is customizable for a specific purpose. 7

  17. Architecture F RONTEND (C++) ◮ Three layer architecture QF_BV Array Core ◮ Frontend: input languages M IDDLE - END ◮ Middle-End: Transformation, GraphSolver DirectSolver BitBlast representation, APIs and SAT_Aiger Groups SAT_Clause optimization. ◮ Backend: Solvers, formal B ACKEND engines SWORD Z3 MiniSAT CUDD ◮ Context ⇒ a metaSMT Boolector PicoSAT AIGER configuration Solver API 8

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend