module Cnf:sig
..end
typeterm =
TypedSTerm.t
typeform =
TypedSTerm.t
typetype_ =
TypedSTerm.t
typelit =
term SLiteral.t
exception Error of string
exception NotCNF of form
val miniscope : ?distribute_exists:bool -> form -> form
distribute_exists
: see whether ?X:(p(X)|q(X)) should be
transformed into (?X: p(X) | ?X: q(X)). Default: false
type
options =
| |
DistributeExists |
(* |
if enabled, will distribute existential quantifiers over
disjunctions. This can make skolem symbols smaller (smaller arity) but
introduce more of them.
| *) |
| |
DisableRenaming |
(* |
disables formula renaming. Can re-introduce the worst-case
exponential behavior of CNF.
| *) |
| |
InitialProcessing of |
(* |
any processing, at the beginning, before CNF starts
| *) |
| |
PostNNF of |
(* |
any processing that keeps negation at leaves,
just after reduction to NNF. Its output
must not break the NNF form (negation at root only).
| *) |
| |
PostSkolem of |
(* |
transformation applied just after skolemization. It must not
break skolemization nor NNF (no quantifier, no non-leaf negation).
| *) |
typeclause =
lit list
val clause_to_fo : ?ctx:FOTerm.Conv.ctx -> clause -> FOTerm.t SLiteral.t list
type'a
f_statement =(term, term, type_, 'a) Statement.t
type'a
c_statement =(clause, term, type_, 'a) Statement.t
val pp_f_statement : 'a f_statement CCFormat.printer
val pp_c_statement : 'a c_statement CCFormat.printer
val is_clause : form -> bool
val is_cnf : form -> bool
val cnf_of : ?opts:options list ->
?ctx:Skolem.ctx ->
?neg_src:('a -> 'a) ->
?cnf_src:('a -> 'a) ->
'a f_statement -> 'a c_statement CCVector.ro_vector
val cnf_of_seq : ?opts:options list ->
?ctx:Skolem.ctx ->
?neg_src:('a -> 'a) ->
?cnf_src:('a -> 'a) ->
'a f_statement Sequence.t -> 'a c_statement CCVector.ro_vector
val type_declarations : 'a c_statement Sequence.t -> type_ ID.Map.t
val convert : StatementSrc.t c_statement Sequence.t ->
Statement.clause_t CCVector.ro_vector