functor (M : Mm_sig->
  sig
    val model_name : string
    type t_data = M.t_data
    type t_exp = t_data Fol.d_term
    type t_pred = t_data Fol.d_pred
    val prop_in_data : (t_exp -> t_exp) -> t_data -> t_exp
    val eq_data : t_data -> t_data -> bool
    val pp_data : Format.formatter -> t_data -> unit
    val mk_cvar_addr : Cil_types.varinfo -> t_exp
    val mk_lvar_addr : Cil_types.logic_var -> t_exp
    val mk_cvar : Cil_types.varinfo -> t_exp
    val mk_lvar : Cil_types.logic_var -> t_exp
    val mk_field_access : t_exp -> Cil_types.fieldinfo -> t_exp
    val mk_index_access : t_exp -> Cil_types.logic_type -> t_exp -> t_exp
    val mk_field_shift : t_exp -> Cil_types.fieldinfo -> t_exp
    val mk_index_shift : t_exp -> Cil_types.logic_type -> t_exp -> t_exp
    val mk_shift_pointer : t_exp -> Cil_types.logic_type -> t_exp -> t_exp
    val mk_access_pointer : t_exp -> Cil_types.logic_type -> t_exp
    val mk_field_update : t_exp -> Cil_types.fieldinfo -> t_exp -> t_exp
    val mk_index_update : t_exp -> t_exp -> t_exp -> t_exp
    val expr_cast : Cil_types.typ -> t_exp -> t_exp
    val mem_update : t_exp -> Cil_types.logic_type -> t_exp -> t_exp -> t_exp
    val subst_res_var :
      Cil_types.logic_var -> Cil_types.logic_var -> t_pred -> t_pred
    val fol : t_data Fol.d_pred -> Fol.predicate
    val abort : string -> 'a
    type t_env = (string, Fol.variable) Hashtbl.t
    val new_env : unit -> ('a, 'b) Hashtbl.t
    val cur_mem_var : Fol.variable lazy_t
    val cur_mem : 'Fol.d_term lazy_t
    val fresh_mem : unit -> Fol.variable
    val mk_minus_pointer : 'Fol.d_term -> 'Fol.d_term -> 'Fol.d_term
    val subst_exp_mem :
      Fol.variable ->
      Fol.variable -> M.t_data Fol.d_term -> M.t_data Fol.d_term
    val subst_pred_mem :
      Fol.variable ->
      Fol.variable -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
    val forall_mem :
      Fol.variable -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
    val get_label_mem :
      (string, Fol.variable) Hashtbl.t ->
      Cil_types.logic_label -> Fol.variable
    val term_at :
      (string, Fol.variable) Hashtbl.t ->
      Cil_types.logic_label ->
      M.t_data Fol.d_term -> '-> M.t_data Fol.d_term
    val forall_addr_cvar :
      bool -> Cil_types.varinfo -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
    val forall_lv :
      fresh:bool ->
      Cil_types.logic_var -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
    val pred_forall :
      fresh:bool ->
      Fol.variable -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
    val pp_exp : Format.formatter -> M.t_data Fol.d_term -> unit
    val pp_pred : Format.formatter -> M.t_data Fol.d_term Fol.t_pred -> unit
  end