Hardcaml_verify_kernel.CnfData structure for creating CNF formulae.
Literals are mapped to integer indexes internally so they can be easily converted to DIMACs format for input to a SAT solver, and a model constructed from the output.
module Literal : sig ... endA literal is an input bit to the CNF. They are constructed with the vector and bit functions, negated with (~:) and managed as a group within a Disjunction.t.
module Disjunction : sig ... endA collection of literals which are OR'd together.
module Conjunction : sig ... endA collection of disjunctions which are AND'd together.
val sexp_of_t : t -> Sexplib0.Sexp.tval create : Conjunction.t -> tCreate CNF from a Conjunction.t.
val fold : t -> init:'a -> f:( 'a -> Disjunction.t -> 'a ) -> 'aFold over each disjunction in CNF
val iter : t -> f:( Disjunction.t -> Base.unit ) -> Base.unitIter over each disjunction in CNF
Get an integer representing the literal. It is negative if the literal is negated. Returns None if the literal is not in the CNF.
val number_of_variables : t -> Base.intTotal number of variables in the CNF
val number_of_clauses : t -> Base.intTotal number of clauses in the CNF.
module type Model = sig ... endmodule Model_with_bits : sig ... endmodule Model_with_vectors : sig ... end