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 mk_let : fresh:bool -> Fol.variable -> t_exp -> t_pred -> t_pred
val add_decl_hyp : Cil_types.logic_var -> t_pred -> t_pred
val visit_exp_in_data : ('a -> t_exp -> 'a) -> 'a -> t_data -> 'a
val fol : t_data Fol.d_pred -> Fol.predicate
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
val mk_minus_pointer : 'a Fol.d_term -> 'a Fol.d_term -> 'a Fol.d_term
type t_env =
MT(M).t_env = {
env_at : (string, Fol.variable * M.t_exp) Hashtbl.t;
}
val new_env : unit -> t_env
val term_at :
t_env ->
Cil_types.logic_label -> M.t_exp -> Fol.pure_type -> 'a Fol.d_term
val get_at_vars :
remove:bool ->
t_env -> Cil_types.logic_label -> (Fol.variable * M.t_exp) list
val pred_forall :
fresh:bool -> Fol.variable -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
end