mirror of
https://github.com/c-cube/sidekick.git
synced 2025-12-13 14:30:33 -05:00
75 lines
1.9 KiB
Text
75 lines
1.9 KiB
Text
{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}
|