sig
  val model_name : string
  type 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
end