{1 mSAT} {2 License} This code is free, under the {{:https://github.com/c-cube/cdcl/blob/master/LICENSE}Apache 2.0 license}. {2 Contents} An ocaml library to implement CDCL(T) solvers. Most modules in CDCL actually define functors. These functors usually take one or two arguments, usually an implementation of Terms and formulas used, and an implementation of the theory used during solving. {4 Solver creation} The following modules allow to easily create a SAT or SMT solver (remark: a SAT solver is simply an SMT solver with an empty theory). {!modules: CDCL } Finally, mSAT also provides an implementation of Tseitin's CNF conversion: {!modules: CDCL_tseitin } {4 Proof Management} CDCL solvers are able to provide detailed proofs when an unsat state is reached. To do so, it require the provided theory to give proofs of the tautologies it gives the solver. These proofs will be called lemmas. The type of lemmas is defined by the theory and can very well be [unit]. In this context a proof is a resolution tree, whose conclusion (i.e. root) is the empty clause, effectively allowing to deduce [false] from the hypotheses. A resolution tree is a binary tree whose nodes are clauses. Inner nodes' clauses are obtained by performing resolution between the two clauses of the children nodes, while leafs of the tree are either hypotheses, or tautologies (i.e. conflicts returned by the theory). {!modules: CDCL__Res CDCL__Res_intf } Backends for exporting proofs to different formats: {!modules: Dot Coq Dedukti Backend_intf } {4 Internal modules} WARNING: for advanced users only ! These modules expose a lot of unsafe functions that must be used with care to not break the required invariants. Additionally, these interfaces are not part of the main API and so are subject to a lot more breaking changes than the safe modules above. {!modules: Dimacs Internal External Solver_types Solver_types_intf } {2 Index} {!indexlist}