module Skolem:sig..end
typetype_ =TypedSTerm.t
typeterm =TypedSTerm.t
typeform =TypedSTerm.t
type ctx
val create : ?prefix:string ->
?prop_prefix:string ->
?on_new:(ID.t -> type_ -> unit) -> unit -> ctxprefix : used to name skolem functions/constantsprop_prefix : used to name sub-formulas during CNFval fresh_sym : ctx:ctx -> ty:type_ -> ID.tval fresh_sym_with : ctx:ctx -> ty:type_ -> string -> ID.tval pop_new_symbols : ctx:ctx -> (ID.t * type_) listval skolem_form : ctx:ctx ->
(type_, term) Var.Subst.t ->
type_ -> form -> termskolem_form ~ctx subst ty f returns a term t made of a new symbol
applied to the free variables of f that do not occur in subst.
This term should replace some free variable in f that has type ty.
For instance, skolem_form ~ctx ΓΈ Y p(a, b, Y, X) will yield
something like sk42(X).
typepolarity =[ `Both | `Neg | `Pos ]
val pp_polarity : polarity CCFormat.printer
type definition = {
|
form : |
|
proxy : |
|
polarity : |
val define : ctx:ctx -> polarity:polarity -> form -> formrename_form ~ctx f returns a new predicate for f,
with the free variables of f as arguments.f.val pop_new_definitions : ctx:ctx -> definition listnew_definitions. The list can be obtained only once,
after which those definitions are not "new" anymore.
Will call remove_def so there is no risk of re-using a definition
with a new polarity.
exception Attr_skolem
val is_skolem : ID.t -> boolis_skolem id returns true iff id is a Skolem symbol