A modular library for CDCL(T) SMT solvers, with [wip] proof generation.
Find a file
Guillaume Bury 2613926ab1 First changes for better persistent proofs
This commit ensures that clauses now contain
all necessary information to construct the proof
graph (without relying on propagation reasons).
2016-01-21 00:06:41 +01:00
backend Res now includes solver type 2015-10-02 13:30:32 +02:00
bench Small update to bench/makefile 2014-11-20 20:18:45 +01:00
docs added minisat paper 2014-11-03 23:28:27 +01:00
sat A bit of restructuring to have cleaner dependencies between fonctors 2015-07-21 19:20:40 +02:00
smt ocp-indent all the files, for the greater good! 2015-11-25 10:04:01 +01:00
solver First changes for better persistent proofs 2016-01-21 00:06:41 +01:00
tests First changes for better persistent proofs 2016-01-21 00:06:41 +01:00
util Merge branch 'master' into push_pop 2015-11-27 14:53:41 +01:00
.gitignore Sat Solver is broken. 2014-11-01 02:12:17 +01:00
.header copyright header in .header; authors in opam file 2014-11-04 17:59:58 +01:00
.merlin Changed internal representation of proofs 2015-07-09 16:29:57 +02:00
.ocp-indent Everything has now been properly indented with ocp-indent. 2014-10-31 16:40:59 +01:00
_tags Fix for when the solver becomes unsat during if_sat 2015-12-11 09:08:10 +01:00
LICENSE update of license 2014-10-29 13:42:53 +01:00
Makefile Fix for when the solver becomes unsat during if_sat 2015-12-11 09:08:10 +01:00
META missing files now installed 2014-10-29 14:21:49 +01:00
msat.mlpack Better dot backend 2015-07-28 23:23:05 +02:00
msat.odocl A bit of restructuring to have cleaner dependencies between fonctors 2015-07-21 19:20:40 +02:00
opam Added package name to opam file 2015-11-30 15:49:53 +01:00
README.md small changes to the readme 2015-11-25 09:55:23 +01:00
TODO.md A bit of restructuring to have cleaner dependencies between fonctors 2015-07-21 19:20:40 +02:00

MSAT

MSAT is an OCaml library that features a modular SAT-solver and some extensions (including SMT). This is work in progress.

It derives from Alt-Ergo Zero.

This program is distributed under the Apache Software License version 2.0. See the enclosed file LICENSE.

USAGE

Sat Solver

A ready-to-use SAT solver is available in the Sat module. It can be used as shown in the following code :

    (* Module initialization *)
    module F = Msat.Sat.Tseitin
    module Sat = Msat.Sat.Make(Msat.Log)

    (* We create here two distinct atoms *)
    let a = Sat.new_atom () (* A 'new_atom' is always distinct from any other atom *)
    let b = Sat.make 1      (* Atoms can be created from integers *)

    (* Let's create some formulas *)
    let p = F.make_atom a
    let q = F.make_atom b
    let r = F.make_and [p; q]
    let s = F.make_or [F.make_not p; F.make_not q]

    (* We can try and check the satisfiability of the given formulas *)
    Sat.assume (F.make_cnf r)
    let _ = Sat.solve ()        (* Should return Sat.Sat *)

    (* The Sat solver has an incremental mutable state, so we still have
     * the formula 'r' in our assumptions *)
    Sat.assume (F.make_cnf s)
    let _ = Sat.solve ()        (* Should return Sat.Unsat *)

Generic SAT/SMT Solver

A modular implementation of the SMT algorithm can be found in the Msat.Solver module, as a functor which takes three modules :

  • A log module for debug output

  • A representation of formulas (which implements the Formula_intf.S signature)

  • A theory (which implements the Theory_intf.S signature) to check consistence of assertions.

INSTALLATION

Via opam

Once the package is on opam, just opam install msat. For the development version, use:

opam pin add msat https://github.com/Gbury/mSAT.git

Manual installation

You will need ocamlfind. The command is:

make install