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
val to_int_literal : t -> Literal.t -> Base.int Base.optionGet an integer representing the literal. It is negative if the literal is negated. Returns None if the literal is not in the CNF.
module type Model = sig ... endmodule Model_with_bits : sig ... endmodule Model_with_vectors : sig ... end