Satisfiability Modulo Bounded Checking

  title={Satisfiability Modulo Bounded Checking},
  author={Simon Cruanes},
We describe a new approach to find models for a computational higher-order logic with datatypes. The goal is to find counterexamples for conjectures stated in proof assistants. The technique builds on narrowing [14] but relies on a tight integration with a SAT solver to analyze conflicts precisely, eliminate sets of choices that lead to failures, and sometimes prove unsatisfiability. The architecture is reminiscent of that of an SMT solver. We present the rules of the calculus, an… 

Datatypes with Shared Selectors (Technical Report)

Evidence that the use of shared selectors improves state-of-the-art SMT-based approaches for datatype constraints is shown.

Datatypes with Shared Selectors

It is shown that the satisfiability problem for the traditional theory of algebraic datatypes can be reduced to problems where selectors are mapped to shared symbols based on a transformation provided in this paper.

Tests and proofs for custom data generators

This paper shows testing techniques to check properties of custom data generators for these structures of permutations and rooted maps, and proposes an extension of QuickChick with bounded exhaustive testing based on generators developed inside Coq, but also on correct-by-construction generators developed with Why3.

Higher-order demand-driven symbolic evaluation

DDSE is defined, a novel SBE which operates on a functional as opposed to imperative language; furthermore, it is defined as a natural extension of a backwards-executing interpreter and a test generation algorithm for this toy language is defined.



Model Finding for Recursive Functions in SMT

A translation that reduces axioms specifying a large class of recursive functions, including terminating functions, to universally quantified formulas for which these techniques are applicable is introduced.

Satisfiability Modulo Recursive Programs

The system, Leon, verified detailed correctness properties for functional data structure implementations, as well as syntax tree manipulations, and was found to be fast for both finding counterexamples and finding correctness proofs, and to scale to larger programs than alternative techniques.

An Abstract Decision Procedure for Satisfiability in the Theory of Recursive Data Types

Splitting on Demand in SAT Modulo Theories

This paper argues that it is more convenient to delegate these case splits to the DPLL engine instead, and formalizes and proves it correct in an extension of Abstract DPLL Modulo Theories, a framework for modeling and reasoning about lazy algorithms for SMT.

A Decision Procedure for (Co)datatypes in SMT Solvers

A decision procedure that combines reasoning about datatypes and codatatypes is presented that decides universal problems and is composable via the Nelson–Oppen method.

New Techniques that Improve MACE-style Finite Model Finding

A new method for finding finite models of unsorted first-order logic clause sets by using 4 novel techniques: term definitions, which reduce the number of variables in flattened clauses, incremental SAT, which enables reuse of search information between consecutive model sizes, static symmetry reduction, and sort inference, which allows the symmetry reduction to be applied at a finer grain.

A needed narrowing strategy

A notion of a needed narrowing step that is sound and complete for a large class of rewrite systems, is optimal w.r.t. the cost measure that counts the number of distinct steps of a derivation, computes only independent unifiers, and is efficiently implemented by pattern matching.

Property Directed Generation of First-Order Test Data

It is claimed that some program verification problems can be handled by systematic generation without the need of writing custom generators, and that some problems, for which writing generators is not a solution and random testing fails, are still simple enough for systematic generation.

Smallcheck and lazy smallcheck: automatic exhaustive testing for small values

This paper describes two Haskell libraries for property-based testing that use type-based generators to obtain test-sets of finite values for which properties are checked, and report any counter-examples found.

A unified computation model for functional and logic programming

A new computation model which combines the operational principles of functional languages (reduction), logic languages, and integrated functional logic languages (residuation and narrowing) and is a suitable basis for future declarative programming languages.