A modular library for CDCL(T) SMT solvers, with [wip] proof generation.
Find a file
2015-03-03 16:54:28 +01: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
old moved smt folder to old 2014-11-14 11:58:43 +01:00
sat Added some convenience functions in pure sat solver 2015-02-18 16:45:36 +01:00
smt Updated README + some more doc 2015-03-03 16:54:28 +01:00
solver Updated README + some more doc 2015-03-03 16:54:28 +01:00
tests Faster iterating over subterms 2014-12-18 15:34:01 +01:00
util [bugfix] some late unsat conflicts were not handled correctly 2015-02-09 17:25:58 +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 Progressing. Conflict clause computing is broken 2014-12-15 17:09:01 +01:00
.ocp-indent Everything has now been properly indented with ocp-indent. 2014-10-31 16:40:59 +01:00
_tags Made sat atom type private 2015-02-18 16:32:18 +01:00
LICENSE update of license 2014-10-29 13:42:53 +01:00
Makefile small details 2015-02-09 11:46:52 +01:00
META missing files now installed 2014-10-29 14:21:49 +01:00
msat.mlpack Made sat atom type private 2015-02-18 16:32:18 +01:00
msat.odocl Updated README + some more doc 2015-03-03 16:54:28 +01:00
opam don't run tests in opam file 2015-02-09 15:38:29 +01:00
README.md Updated README + some more doc 2015-03-03 16:54:28 +01:00
TODO.md TODO Update 2014-11-18 17:26:02 +01: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

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 creted from integers *)

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

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

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

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