sound reasoning about integral data types with a reusable
play

Sound Reasoning about Integral Data Types with a Reusable SMT Solver - PowerPoint PPT Presentation

Sound Reasoning about Integral Data Types with a Reusable SMT Solver Interface R egis Blanc Viktor Kuncak Laboratory for Automated Reasoning and Analysis Ecole Polytechnique F ed erale de Lausanne June 13, 2015 The Leon


  1. Sound Reasoning about Integral Data Types with a Reusable SMT Solver Interface R´ egis Blanc Viktor Kuncak Laboratory for Automated Reasoning and Analysis ´ Ecole Polytechnique F´ ed´ erale de Lausanne June 13, 2015

  2. The Leon Verification System ◮ Verifier for the Scala language. ◮ Support a well-defined subset of Scala. ◮ A functional core language. ◮ Many imperative extensions. ◮ Some ways to express non-determinism. ◮ Complete for finding counterexamples. ◮ Big project from the LARA group at EPFL, with contributions from many present (and past) members. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 1

  3. Contracts Specifications can be defined using contracts. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 2

  4. Contracts Specifications can be defined using contracts. ◮ Postconditions def abs(n: Int): Int = { if(n <= 0) -n else n } ensuring(res => res >= 0) R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 2

  5. Contracts Specifications can be defined using contracts. ◮ Postconditions def abs(n: Int): Int = { if(n <= 0) -n else n } ensuring(res => res >= 0) ◮ Preconditions def fact(n: Int): Int = { require(n >= 0) if(n == 0) 1 else n * fact(n-1) } R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 2

  6. Contracts Specifications can be defined using contracts. ◮ Postconditions def abs(n: Int): Int = { if(n <= 0) -n else n } ensuring(res => res >= 0) ◮ Preconditions def fact(n: Int): Int = { require(n >= 0) if(n == 0) 1 else n * fact(n-1) } The implementation and specification languages are the same. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 2

  7. Architecture of Leon Scala Report Program Scala Core Code Compiler Transformations Algorithm R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 3

  8. Demo R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 4

  9. Int and BigInt Int Primitive integer type: bit-vector semantics BigInt Library type: mathematical integer semantics ◮ Mathematical reasoning is usually easier with integers. ◮ Most programs use Int instead of BigInt. ◮ Easy to ignore the bounded nature of Int. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 5

  10. A Closer Look at Leon Unrolling Scala Report Program Scala Core Code Compiler Transformations Algorithm Functional Approximated Approximation Function Core Language Formula Loop Lifting R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 6

  11. SMT Solver Satis fi able Map Input Formula SMT Solver Proof of Unsatis fi ability R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 7

  12. SMT Solver Theories Any mathematical theory with a well defined axiomatization. Of interest to programming languages: Int Mathematical, unbounded, integers: Corresponds to Scala BigInt . BitVector Fixed, finite-size, bit-vectors: Correspond to Scala Int . ADT Algebraic data types. Models a subset of case classes functionalities. Array Map from one type to another. Models Scala Array and Map . UF Uninterpreted functions. Helps with abstractions. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 8

  13. Many Alternative Implementations ◮ With so many theories, support varies from solver to solver. ◮ State-of-the-art algorithms: ongoing research. ◮ Good to remain as solver-agnostic as possible. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 9

  14. SMT-LIB Interface ◮ With so many theories, support varies from solver to solver. ◮ State-of-the-art algorithms: ongoing research. ◮ Good to remain as solver-agnostic as possible. “ SMT-LIB is an international initiative aimed at facilitating research and development in Satisfiability Modulo Theories (SMT)” http://www.smtlib.org ◮ Text-based format to standardize communication with SMT solvers. ◮ Similar to a programming language, but declarative. Syntax based on Lisp. ◮ Large library of benchmarks. Enable organization of the annual SMT-COMP competition. ◮ Good support in existing solvers, including Z3 and CVC4. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 9

  15. Leon: Integration with SMT Solvers ◮ Leon abstracts away the backend solver. ◮ One of the implementation generate SMT-LIB commands: get many different solvers essentially for “free” ◮ The SMT-LIB interface is exposed in a stand-alone Scala module. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 10

  16. Leon: Integration with SMT Solvers ◮ Leon abstracts away the backend solver. ◮ One of the implementation generate SMT-LIB commands: get many different solvers essentially for “free” ◮ The SMT-LIB interface is exposed in a stand-alone Scala module. scala-smtlib is a lightweight abstraction on top of the SMT-LIB standard. https://github.com/regb/scala-smtlib ◮ Simple, type-safe, communication with SMT solvers. ◮ Support for the latest SMT-LIB 2.5 standard. ◮ Include a fully complient parser (not used in Leon) that can help building applications with SMT-LIB as input. R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 10

  17. Conclusion Extensions to the Leon system ◮ Sound reasoning about integral data types: Int and BigInt . ◮ Solver-agnostic backend with the help of an open-source SMT-LIB Scala library. Work in progress Optimization of BigInt ◮ When writing program, BigInt is often closer to the expected meaning than Int . ◮ However can often be two order of magnitude slower. ◮ Why not proving bounds statically on code using BigInt and compiling to equivalent and faster Int . R´ egis Blanc, Viktor Kuncak (LARA, EPFL) Integral Data Types and Reusable SMT Solver June 2015 11

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