sig
  module F : S
  type context
  type bindings
  val closed : Formula.Logic.bindings
  val close : Formula.Logic.bindings -> F.pred -> F.pred
  val push :
    string -> F.pool -> Formula.Logic.bindings -> Formula.Logic.context
  val pop : string -> Formula.Logic.context -> Formula.Logic.bindings
  val kill : string -> Formula.Logic.context -> unit
  val flush : string -> Formula.Logic.context -> F.pred -> F.pred
  val term_such_that : Formula.tau -> ('F.term -> F.pred) -> 'F.term
  val forall : F.var list -> F.pred -> F.pred
  val exists : F.var list -> F.pred -> F.pred
  val subst : F.var -> 'F.term -> F.pred -> F.pred
  val fresh : string -> Formula.kind -> F.var
  val alpha : F.var -> F.var option
  val pool : unit -> F.pool
  val vkind_of_var : F.var -> Formula.kind
  val has_context_vars : F.var list -> F.pred -> bool
  val has_type : F.abstract -> Cil_types.logic_type -> F.pred
  val is_comp : Cil_types.compinfo -> F.abstract -> F.pred
  val is_array : Ctypes.arrayinfo -> F.abstract -> F.pred
  val apply : (F.var * F.var) list -> 'F.term -> 'F.term
  val havoc_static : F.havoc list -> F.pred -> F.pred
  val havoc_inductive : F.havoc list -> F.pred -> F.pred
end