sig
type fvar = Caveat_fol.fvar
type data =
Caveat_fol.data = private
D1null
| D1base of data
| D1addr of Cil_types.varinfo * Formula.tau
| D1var of (Cil_types.varinfo * Clabels.c_label) option * fvar
| D1depl of data * epath
| D1shift of data * dterm
| D1proj of data * epath
| D1indir of data
| D1mu of data * epath * dterm option
| D1muRange of data * dterm
| D1muI of data * dterm option * dterm option
| D1muIrange of data * dterm
and epath =
Caveat_fol.epath =
Pfield of Cil_types.fieldinfo
| Pidx of dterm
and dterm = data Fol.d_term
val eq_data : data -> data -> bool
val eq_var : fvar -> fvar -> bool
val pp_data : Format.formatter -> data -> unit
val pp_var : Format.formatter -> fvar -> unit
type 'a term = dterm
type pred = dterm Fol.t_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 = fvar
type pool = unit
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 = Caveat_fol.alpha
val empty_alpha : alpha
val fold_alpha : (var -> var -> 'a -> 'a) -> alpha -> 'a -> '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
val ctype_of_fvar : fvar -> Cil_types.typ option
val data_of_cvar_at_l :
fvar Cil_datatype.Varinfo.Hashtbl.t ->
Clabels.c_label ->
Cil_types.varinfo -> (Cil_types.varinfo -> Formula.tau) -> data
val fvar_of_cvar_at :
create:bool ->
fvar Cil_datatype.Varinfo.Hashtbl.t ->
Clabels.c_label ->
Cil_types.varinfo -> (Cil_types.varinfo -> Formula.tau) -> fvar
val addr : Cil_types.varinfo -> Formula.tau -> data
val null : data
val base : data -> data
val shift_field : data -> Cil_types.fieldinfo -> data
val shift_index : data -> dterm -> data
val shift_epath : data -> epath -> data
val shift_pointer : data -> dterm -> data
val proj : data -> epath -> dterm
val indir :
fvar Cil_datatype.Varinfo.Hashtbl.t -> Clabels.c_label -> data -> dterm
val mk_mu : data -> epath -> dterm option -> data
val mk_mu_range : data -> dterm -> data
val mk_mu_sh_indir : data -> dterm option -> dterm option -> data
val mk_mu_range_indir : data -> dterm -> data
val addr_of_data : data -> data
val term_of_var : fvar -> dterm
val term_of_data : data -> dterm
val data_of_term : dterm -> data
val visit_data_in_pred :
all:bool -> (('a -> dterm -> 'a) -> 'a -> data -> 'a) -> 'a -> pred -> 'a
val subst_data_in_pred : (data -> data) -> pred -> pred
end