A modular library for CDCL(T) SMT solvers, with [wip] proof generation.
Find a file
Guillaume Bury b5d816fbac Typo in doc
2017-01-17 12:26:12 +01:00
articles Documentation update 2016-12-01 15:35:15 +01:00
doc Fixed title in doc page 2017-01-12 13:41:05 +01:00
src Typo in doc 2017-01-17 12:26:12 +01:00
tests Removed module alias for SAT expressions 2016-12-02 15:49:49 +01:00
.gitignore Documentation update 2016-12-01 15:35:15 +01:00
.header copyright header in .header; authors in opam file 2014-11-04 17:59:58 +01:00
.merlin [WIP] All is setup, remains to have real theories 2016-09-16 15:49:33 +02:00
.ocp-indent Everything has now been properly indented with ocp-indent. 2014-10-31 16:40:59 +01:00
.travis.yml [travis] Only build the bin for tests 2016-11-17 00:19:40 +01:00
_tags Added Sat module to the lib. Updated README 2016-12-01 18:55:58 +01:00
LICENSE update of license 2014-10-29 13:42:53 +01:00
Makefile update doc by merging everything into one dir 2016-11-21 15:02:35 +01:00
META wip: make SMT great again 2016-08-16 17:20:48 +02:00
myocamlbuild.ml Documentation update 2016-12-01 15:35:15 +01:00
opam Propagation reasons are now far more explicit 2016-04-15 12:09:23 +02:00
README.md Readme update 2016-12-26 12:24:07 +01:00
TODO.md A bit of restructuring to have cleaner dependencies between fonctors 2015-07-21 19:20:40 +02:00
VERSION Documentation update 2016-12-01 15:35:15 +01:00

MSAT Build Status

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

It derives from Alt-Ergo Zero.

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

Documentation

See https://gbury.github.io/mSAT/

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 and ocamlbuild. The command is:

make install

USAGE

Generic SAT/SMT Solver

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

  • 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.

  • A dummy empty module to ensure generativity of the solver (solver modules heavily relies on side effects to their internal state)

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 Sat = Msat.Sat.Make()
    module F = Msat.Tseitin.Make(Msat.Sat.Expr)

    (* We create here two distinct atoms *)
    let a = Msat.Sat.Expr.fresh ()    (* A 'new_atom' is always distinct from any other atom *)
    let b = Msat.Sat.Expr.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 _) *)