functor (F : Formula.S->
  sig
    module F :
      sig
        type 'a term = 'F.term
        type pred = F.pred
        val e_int : int -> Formula.integer term
        val e_call :
          string -> Formula.abstract term list -> Formula.abstract term
        val p_call : string -> Formula.abstract term list -> pred
        val wrap : 'a term -> Formula.abstract term
        val unwrap : Formula.abstract term -> 'a term
        val e_true : Formula.boolean term
        val e_false : Formula.boolean term
        val e_int : int -> Formula.integer term
        val e_float : float -> Formula.real term
        val e_icst : string -> Formula.integer term
        val e_rcst : string -> Formula.real term
        val e_int64 : int64 -> Formula.integer term
        val e_ineg : Formula.integer term -> Formula.integer term
        val e_rneg : Formula.real term -> Formula.real term
        val e_iop :
          Formula.integer_op ->
          Formula.integer term ->
          Formula.integer term -> Formula.integer term
        val e_rop :
          Formula.real_op ->
          Formula.real term -> Formula.real term -> Formula.real term
        val e_icmp :
          Formula.cmp_op ->
          Formula.integer term ->
          Formula.integer term -> Formula.boolean term
        val e_rcmp :
          Formula.cmp_op ->
          Formula.real term -> Formula.real term -> Formula.boolean term
        val p_icmp :
          Formula.cmp_op ->
          Formula.integer term -> Formula.integer term -> pred
        val p_rcmp :
          Formula.cmp_op -> Formula.real term -> Formula.real term -> pred
        val e_bnot : Formula.integer term -> Formula.integer term
        val e_band :
          Formula.integer term ->
          Formula.integer term -> Formula.integer term
        val e_bor :
          Formula.integer term ->
          Formula.integer term -> Formula.integer term
        val e_bxor :
          Formula.integer term ->
          Formula.integer term -> Formula.integer term
        val e_lshift :
          Formula.integer term ->
          Formula.integer term -> Formula.integer term
        val e_rshift :
          Formula.integer term ->
          Formula.integer term -> Formula.integer term
        val integer_of_real : Formula.real term -> Formula.integer term
        val real_of_integer : Formula.integer term -> Formula.real term
        val e_bool : Formula.boolean term -> Formula.integer term
        val e_not : Formula.boolean term -> Formula.boolean term
        val e_and :
          Formula.boolean term ->
          Formula.boolean term -> Formula.boolean term
        val e_or :
          Formula.boolean term ->
          Formula.boolean term -> Formula.boolean term
        val e_cond : Formula.boolean term -> 'a term -> 'a term -> 'a term
        val p_cond : Formula.boolean term -> pred -> pred -> pred
        val p_true : pred
        val p_false : pred
        val p_bool : Formula.boolean term -> pred
        val p_and : pred -> pred -> pred
        val p_or : pred -> pred -> pred
        val p_xor : pred -> pred -> pred
        val p_not : pred -> pred
        val p_implies : pred -> pred -> pred
        val p_iff : pred -> pred -> pred
        val p_eq : 'a term -> 'a term -> pred
        val p_neq : 'a term -> 'a term -> pred
        val p_conj : pred list -> pred
        val p_disj : pred list -> pred
        val p_named : string -> pred -> pred
        val is_true : pred -> bool
        val is_false : pred -> bool
        val huge_term : int -> 'a term -> bool
        val huge_pred : int -> pred -> bool
        type var = F.var
        type pool = F.pool
        val pool : unit -> pool
        val fresh : pool -> string -> Formula.kind -> var
        val freshen : pool -> var -> var
        val var : var -> 'a term
        val eq_var : var -> var -> bool
        val name_of_var : var -> string
        val tau_of_var : var -> Formula.tau
        val kind_of_var : var -> Formula.kind
        val term_has_var : var list -> 'a term -> bool
        val pred_has_var : var list -> pred -> bool
        val term_closed : 'a term -> bool
        val pred_closed : pred -> bool
        val p_forall : var list -> pred -> pred
        val p_exists : var list -> pred -> pred
        val p_subst : (var -> var option) -> var -> 'a term -> pred -> pred
        val e_subst :
          (var -> var option) -> var -> 'a term -> 'b term -> 'b term
        val e_rename : (var * var) list -> 'a term -> 'a term
        val equal_terms : 'a term -> 'a term -> bool
        type alpha = F.alpha
        val empty_alpha : alpha
        val fold_alpha : (var -> var -> '-> 'a) -> alpha -> '-> 'a
        val p_more_alpha_cv : alpha -> pred -> alpha * pred
        val p_alpha_cv : pred -> var list * pred
        val pp_var : Format.formatter -> var -> unit
        val pp_term : Format.formatter -> 'a term -> unit
        val pp_pred : Format.formatter -> pred -> unit
        val pp_decl : Format.formatter -> pred Formula.declaration -> unit
        val pp_goal : Format.formatter -> string -> pred -> unit
      end
    type abstract = Formula.abstract Datalib.Create.F.term
    type format = Formula.m_format Datalib.Create.F.term
    type record = Formula.m_array Datalib.Create.F.term
    type urecord = Formula.m_array Datalib.Create.F.term
    type array = Formula.m_array Datalib.Create.F.term
    type set = Formula.m_set Datalib.Create.F.term
    type name = Formula.integer Datalib.Create.F.term
    type pointer = Formula.m_pointer Datalib.Create.F.term
    type integer = Formula.integer Datalib.Create.F.term
    type real = Formula.real Datalib.Create.F.term
    type boolean = Formula.boolean Datalib.Create.F.term
    type interval = {
      inf : Datalib.Create.integer option;
      sup : Datalib.Create.integer option;
    }
    val pp_interval : Format.formatter -> Datalib.Create.interval -> unit
    type 'a assigned =
        Aloc of Ctypes.c_object * 'a
      | Arange of Ctypes.c_object * 'a * Datalib.Create.interval
    val p_app0 : string -> Datalib.Create.F.pred
    val p_app1 : string -> 'Datalib.Create.F.term -> Datalib.Create.F.pred
    val p_app2 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> Datalib.Create.F.pred
    val p_app3 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> Datalib.Create.F.pred
    val p_app4 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> Datalib.Create.F.pred
    val p_app5 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> Datalib.Create.F.pred
    val e_app0 : string -> 'Datalib.Create.F.term
    val e_app1 :
      string -> 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val e_app2 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val e_app3 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val e_app4 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val e_app5 :
      string ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val modulo :
      Ctypes.c_int -> 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val guard :
      Ctypes.c_int -> 'Datalib.Create.F.term -> Datalib.Create.F.pred
    val i_convert :
      Ctypes.c_int ->
      Ctypes.c_int -> 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val round :
      Ctypes.c_float -> 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val f_guard :
      Ctypes.c_float -> 'Datalib.Create.F.term -> Datalib.Create.F.pred
    val f_convert :
      Ctypes.c_float ->
      Ctypes.c_float -> 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val part_of_item : 'Formula.item -> int
    module Dset :
      sig
        type elt = F.pred Formula.declaration
        type t
        val empty : t
        val is_empty : t -> bool
        val mem : elt -> t -> bool
        val add : elt -> t -> t
        val singleton : elt -> t
        val remove : elt -> t -> t
        val union : t -> t -> t
        val inter : t -> t -> t
        val diff : t -> t -> t
        val compare : t -> t -> int
        val equal : t -> t -> bool
        val subset : t -> t -> bool
        val iter : (elt -> unit) -> t -> unit
        val fold : (elt -> '-> 'a) -> t -> '-> 'a
        val for_all : (elt -> bool) -> t -> bool
        val exists : (elt -> bool) -> t -> bool
        val filter : (elt -> bool) -> t -> t
        val partition : (elt -> bool) -> t -> t * t
        val cardinal : t -> int
        val elements : t -> elt list
        val min_elt : t -> elt
        val max_elt : t -> elt
        val choose : t -> elt
        val split : elt -> t -> t * bool * t
      end
    val gindex : (string, Datalib.Create.Dset.elt) Hashtbl.t
    val gsection : Datalib.Create.Dset.t Datalib.Create.array
    val gfresh : (string, int Pervasives.ref) Hashtbl.t
    val fresh_name : string -> string -> string
    val s_index : Formula.section -> int
    val gclear : (unit -> unit) list Pervasives.ref
    val clear : unit -> unit
    val on_clear : (unit -> unit) -> unit
    val locked : bool Pervasives.ref
    val add_declaration : Datalib.Create.Dset.elt -> unit
    val iter : Formula.section -> (Datalib.Create.Dset.elt -> unit) -> unit
    val iter_all : (Datalib.Create.Dset.elt -> unit) -> unit
    val gdummy : int Pervasives.ref
    val dummy : unit -> Datalib.Create.F.pred
    module type Identifiable =
      sig
        type t
        module H : Hashtbl.S
        val index : Datalib.Create.Identifiable.t -> H.key
        val prefix : string
        val basename : Datalib.Create.Identifiable.t -> string
        val location : Datalib.Create.Identifiable.t -> Log.source option
        val pp_title :
          Format.formatter -> Datalib.Create.Identifiable.t -> unit
        val pp_descr :
          Format.formatter -> Datalib.Create.Identifiable.t -> unit
      end
    module type Registry =
      sig
        type t
        val define : Datalib.Create.Registry.t -> unit
        val get_definition :
          Datalib.Create.Registry.t ->
          Datalib.Create.F.pred Formula.declaration
        val on_definition :
          (Datalib.Create.Registry.t ->
           Datalib.Create.F.pred Formula.declaration -> unit) ->
          unit
      end
    module type Declarator =
      sig
        type t
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
        val clear : unit -> unit
        val section : Formula.section
        val declare : t -> string -> Datalib.Create.F.pred Formula.item
      end
    module Register :
      functor (D : Declarator->
        sig
          type t = D.t
          val define : t -> unit
          val get_definition : t -> F.pred Formula.declaration
          val on_definition :
            (t -> F.pred Formula.declaration -> unit) -> unit
        end
    val gindexref : int Pervasives.ref
    module type Indexed =
      sig
        type t
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
        val get_ind : t -> Datalib.Create.integer
      end
    module Dindex :
      functor (I : Identifiable->
        sig
          type t = I.t
          val define : t -> unit
          val get_definition : t -> F.pred Formula.declaration
          val on_definition :
            (t -> F.pred Formula.declaration -> unit) -> unit
          val get_ind : t -> integer
        end
    val pp_dim : Format.formatter -> Cil_types.typ -> unit
    val pp_ctype : bool -> Format.formatter -> Cil_types.typ -> unit
    module Varinfo :
      sig
        type t = Cil_types.varinfo
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module Varaddr :
      sig
        type t = Cil_types.varinfo
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module Fieldinfo :
      sig
        type t = Cil_types.fieldinfo
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module Compinfo :
      sig
        type t = Cil_types.compinfo
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module Arrayinfo :
      sig
        type t = Ctypes.arrayinfo
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module LTypeinfo :
      sig
        type t = Cil_types.logic_type
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module Logicvar :
      sig
        type t = Cil_types.logic_var
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module LTinfo :
      sig
        type t = Cil_types.logic_type_info
        val compare :
          Cil_types.logic_type_info -> Cil_types.logic_type_info -> int
        val hash : Cil_types.logic_type_info -> int
        val equal :
          Cil_types.logic_type_info -> Cil_types.logic_type_info -> bool
      end
    module LTinfoId :
      sig
        type t = Cil_types.logic_type_info
        module H : Hashtbl.S
        val index : t -> H.key
        val prefix : string
        val basename : t -> string
        val location : t -> Log.source option
        val pp_title : Format.formatter -> t -> unit
        val pp_descr : Format.formatter -> t -> unit
      end
    module ADTDecl :
      sig
        type t = Cil_types.logic_type_info
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
      end
    val tau_of_object : Ctypes.c_object -> Formula.tau
    val tau_of_ctype : Cil_types.typ -> Formula.tau
    val tau_of_logic_type : Cil_types.logic_type -> Formula.tau
    module Findex :
      sig
        type t = Fieldinfo.t
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
        val get_ind : t -> integer
      end
    module Xindex :
      sig
        type t = Varinfo.t
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
        val get_ind : t -> integer
      end
    module Tindex :
      sig
        type t = Compinfo.t
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
        val get_ind : t -> integer
      end
    module Aindex :
      sig
        type t = Varaddr.t
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
        val get_ind : t -> integer
      end
    module LTindex :
      sig
        type t = LTypeinfo.t
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
        val get_ind : t -> integer
      end
    val pp_kind : Format.formatter -> Mdata.kind -> unit
    val empty : Formula.m_set Datalib.Create.F.term
    val singleton : 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val union :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val unions :
      Formula.m_set Datalib.Create.F.term list ->
      Formula.m_set Datalib.Create.F.term
    val inter :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val remove :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val add_set :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val mult_set :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val neg_set : 'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val loc_range :
      Formula.integer Datalib.Create.F.term ->
      Formula.integer Datalib.Create.F.term ->
      Formula.m_set Datalib.Create.F.term
    val range_inf :
      Formula.integer Datalib.Create.F.term ->
      Formula.m_set Datalib.Create.F.term
    val range_sup :
      Formula.integer Datalib.Create.F.term ->
      Formula.m_set Datalib.Create.F.term
    val integers : Formula.m_set Datalib.Create.F.term
    val set_of_list :
      'Datalib.Create.F.term list -> Formula.m_set Datalib.Create.F.term
    val interval :
      Datalib.Create.interval -> Formula.m_set Datalib.Create.F.term
    val get_range_index :
      'Datalib.Create.F.term ->
      Datalib.Create.interval -> 'Datalib.Create.F.term
    val set_range_index :
      'Datalib.Create.F.term ->
      Datalib.Create.interval -> 'Datalib.Create.F.term
    val lt_pointer :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.m_pointer Datalib.Create.F.term -> Datalib.Create.F.pred
    val le_pointer :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.m_pointer Datalib.Create.F.term -> Datalib.Create.F.pred
    val minus_pointer :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.integer Datalib.Create.F.term
    val equal_pointer_bool :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.boolean Datalib.Create.F.term
    val lt_pointer_bool :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.boolean Datalib.Create.F.term
    val le_pointer_bool :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.boolean Datalib.Create.F.term
    val null : Formula.m_pointer Datalib.Create.F.term
    val is_null :
      Formula.m_pointer Datalib.Create.F.term ->
      Formula.boolean Datalib.Create.F.term
    val int_format : Datalib.Create.format
    val real_format : Datalib.Create.format
    val pointer_format : Datalib.Create.format
    val record_format : Datalib.Create.format
    val urecord_format : Datalib.Create.format
    val array_format : Datalib.Create.format -> Datalib.Create.format
    val access :
      '_a Datalib.Create.F.term ->
      '_b Datalib.Create.F.term -> '_c Datalib.Create.F.term
    val has_type_int :
      Ctypes.c_int -> 'Datalib.Create.F.term -> Datalib.Create.F.pred
    val has_type :
      'Datalib.Create.F.term ->
      Cil_types.logic_type -> Datalib.Create.F.pred
    class type hint =
      object
        method capture : Datalib.Create.F.var list -> unit
        method has_var : Datalib.Create.F.var list -> bool
        method pretty : Format.formatter -> unit
        method subst :
          Datalib.Create.F.var ->
          Formula.abstract Datalib.Create.F.term -> unit
      end
    type bindings = Datalib.Create.binding list
    and binding =
        Forall of Datalib.Create.F.var list
      | Exists of Datalib.Create.F.var list
      | Any of Datalib.Create.F.var * Datalib.Create.F.pred
      | Let of Datalib.Create.F.var * Formula.abstract Datalib.Create.F.term
    val pp_binding : Format.formatter -> Datalib.Create.binding -> unit
    type context = {
      pool : Datalib.Create.F.pool;
      hints : Datalib.Create.hint list;
      mutable bindings : Datalib.Create.bindings;
    }
    val closed : Datalib.Create.bindings
    val context : Datalib.Create.context list Pervasives.ref
    val occur_check :
      Datalib.Create.F.var -> Datalib.Create.F.var list -> unit
    val capture :
      < capture : Datalib.Create.F.var list -> unit;
        subst : Datalib.Create.F.var ->
                Formula.abstract Datalib.Create.F.term -> unit;
        .. >
      list -> Datalib.Create.binding list -> unit
    val pp_vkind : Format.formatter -> Mdata.vkind -> unit
    val guards_with :
      (Datalib.Create.F.pred -> '-> 'a) ->
      '-> Datalib.Create.F.var list -> 'a
    val sub :
      Datalib.Create.F.var ->
      Datalib.Create.F.var list -> Datalib.Create.F.var list
    val some_alpha :
      Datalib.Create.F.pool ->
      Datalib.Create.F.var -> Datalib.Create.F.var option
    val apply_bindings :
      (F.var -> F.var option) -> binding list -> F.pred -> F.pred
    val alpha : Datalib.Create.F.var -> Datalib.Create.F.var option
    val do_subst :
      Datalib.Create.F.var ->
      'Datalib.Create.F.term ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val do_forall :
      Datalib.Create.F.var list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val do_exists :
      Datalib.Create.F.var list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val has_var :
      Datalib.Create.F.var list ->
      Datalib.Create.binding list ->
      < has_var : Datalib.Create.F.var list -> bool; .. > list -> bool
    val forall :
      Datalib.Create.F.var list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val exists :
      Datalib.Create.F.var list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val fresh : string -> Mdata.vkind -> Datalib.Create.F.var
    val pool : unit -> Datalib.Create.F.pool
    val vkind_of_var : Datalib.Create.F.var -> Mdata.vkind
    val term_such_that :
      Formula.tau ->
      ('Datalib.Create.F.term -> Datalib.Create.F.pred) ->
      'Datalib.Create.F.term
    val subst_in_bindings :
      Datalib.Create.context ->
      Datalib.Create.F.var ->
      Formula.abstract Datalib.Create.F.term ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val subst :
      Datalib.Create.F.var ->
      'Datalib.Create.F.term ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val close :
      Datalib.Create.binding list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val has_vars : Datalib.Create.F.var list -> Datalib.Create.F.pred -> bool
    val push :
      string ->
      Datalib.Create.F.pool ->
      Datalib.Create.bindings ->
      Datalib.Create.hint list -> Datalib.Create.context
    val pop : string -> Datalib.Create.context -> Datalib.Create.bindings
    val flush :
      string ->
      Datalib.Create.context ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val kill : string -> Datalib.Create.context -> unit
    type substitution = (Datalib.Create.F.var * Datalib.Create.F.var) list
    val pp_sigma :
      Format.formatter ->
      (Datalib.Create.F.var * Datalib.Create.F.var) list -> unit
    val pp_bindings :
      Format.formatter ->
      (Datalib.Create.F.var * 'Datalib.Create.F.term) list -> unit
    type havoc =
        Fresh of Datalib.Create.F.var
      | Update of Datalib.Create.F.var *
          (Datalib.Create.substitution ->
           Formula.abstract Datalib.Create.F.term)
    val freshen : Datalib.Create.F.var -> Datalib.Create.F.var
    val apply :
      (Datalib.Create.F.var * Datalib.Create.F.var) list ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val domain :
      Datalib.Create.F.var list ->
      Datalib.Create.F.var list ->
      Datalib.Create.havoc list ->
      Datalib.Create.F.var list * Datalib.Create.F.var list
    val reverse :
      (Datalib.Create.F.var * Datalib.Create.F.var) list ->
      (Datalib.Create.F.var * Datalib.Create.F.var) list
    val freshen_sigma :
      Datalib.Create.F.var ->
      (Datalib.Create.F.var * Datalib.Create.F.var) list ->
      (Datalib.Create.F.var * Datalib.Create.F.var) list
    val compute_bindings :
      (Datalib.Create.F.var * Formula.abstract Datalib.Create.F.term) list ->
      (Datalib.Create.F.var * Datalib.Create.F.var) list ->
      Datalib.Create.substitution ->
      Datalib.Create.havoc list ->
      (Datalib.Create.F.var * Formula.abstract Datalib.Create.F.term) list *
      Datalib.Create.substitution
    val apply_bindings :
      (Datalib.Create.F.var * 'Datalib.Create.F.term) list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val rename :
      (Datalib.Create.F.var * Datalib.Create.F.var) list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val fixpoint :
      ('a * Datalib.Create.F.var) list ->
      ('b * Datalib.Create.F.var) list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val havoc_inductive :
      Datalib.Create.havoc list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val havoc_static :
      Datalib.Create.havoc list ->
      Datalib.Create.F.pred -> Datalib.Create.F.pred
    val tau_of_object : Ctypes.c_object -> Formula.tau
    val format_of_object : Ctypes.c_object -> Datalib.Create.format
    val acc_field :
      'Datalib.Create.F.term ->
      Datalib.Create.Findex.t -> 'Datalib.Create.F.term
    val upd_field :
      'Datalib.Create.F.term ->
      Datalib.Create.Findex.t ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val acc_index :
      Formula.m_array Datalib.Create.F.term ->
      Formula.integer Datalib.Create.F.term ->
      Formula.abstract Datalib.Create.F.term
    val upd_index :
      Formula.m_array Datalib.Create.F.term ->
      Formula.integer Datalib.Create.F.term ->
      Formula.abstract Datalib.Create.F.term ->
      Formula.m_array Datalib.Create.F.term
    val encode :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val decode :
      'Datalib.Create.F.term ->
      'Datalib.Create.F.term -> 'Datalib.Create.F.term
    val equal_rec :
      (Ctypes.c_object ->
       Formula.abstract Datalib.Create.F.term ->
       Formula.abstract Datalib.Create.F.term -> Datalib.Create.F.pred)
      Pervasives.ref
    val eq_record_definition :
      Cil_types.compinfo -> string -> Datalib.Create.F.pred
    val eq_array_definition :
      Ctypes.arrayinfo -> string -> Datalib.Create.F.pred
    module RecEqName :
      sig
        type t = Cil_types.compinfo
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
      end
    module RecEqDef :
      sig
        type t = Cil_types.compinfo
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
      end
    module ArrEqName :
      sig
        type t = Ctypes.arrayinfo
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
      end
    module ArrEqDef :
      sig
        type t = Ctypes.arrayinfo
        val define : t -> unit
        val get_definition : t -> F.pred Formula.declaration
        val on_definition : (t -> F.pred Formula.declaration -> unit) -> unit
      end
    val eq_record :
      Datalib.Create.RecEqDef.t ->
      Datalib.Create.record -> Datalib.Create.record -> Datalib.Create.F.pred
    val eq_array :
      Datalib.Create.ArrEqDef.t ->
      Datalib.Create.array -> Datalib.Create.array -> Datalib.Create.F.pred
    val equal :
      Ctypes.c_object ->
      Formula.abstract Datalib.Create.F.term ->
      Formula.abstract Datalib.Create.F.term -> Datalib.Create.F.pred
  end