Module Mvar.MC.MV


module MV: Mvar.MV(MO.M)

module MT: Mvar.MT(M)
module T: Translate.ToGfol(MT)
type t = M.t_data Fol.d_pred 
type t_exp = M.t_exp 
type t_pred = t 
val pretty : Format.formatter -> M.t_data Fol.d_term Fol.t_pred -> unit
val pretty_pred : Format.formatter -> M.t_data Fol.d_term Fol.t_pred -> unit
val abort : string -> 'a
val ptrue : 'a Fol.t_pred
val add_hyp : 'a Fol.t_pred -> 'a Fol.t_pred -> 'a Fol.t_pred
val add_goal : 'a Fol.t_pred -> 'a Fol.t_pred -> 'a Fol.t_pred
val pbot : 'a Fol.t_pred
val subst_vars : (Fol.variable -> M.t_data Fol.d_term option) ->
M.t_data Fol.d_pred -> M.t_data Fol.d_pred
exception Invalid_subst
val subst_var : Fol.variable ->
M.t_data Fol.d_term option -> M.t_data Fol.d_pred -> M.t_data Fol.d_pred
val mk_let : fresh:bool -> Fol.variable -> M.t_exp option -> M.t_pred -> M.t_pred
build forall v', v' = exp => p[v <- v'] Don't build a new variable v' if fresh=false (just use v) but be careful that in that case, v must not appear in exp !
Raises Calculus.InvalidModel if exp is None, v is in p and don't use bottom.
val mk_let_vi : Cil_types.varinfo -> M.t_exp option -> M.t_pred -> M.t_pred
val pred_forall_cv : M.t_data Fol.d_pred -> Cil_types.varinfo -> M.t_data Fol.d_pred
val mk_offset_update : (Cil_types.exp -> M.t_exp option) ->
MT.t_env option ->
M.t_exp ->
Cil_types.logic_type -> M.t_exp option -> Cil_types.offset -> M.t_exp option
build something like : mu (base, off -> e) If env, we don't want to have modifiable variables in off, so if there are some indexes idx, we build a \old(idx) term instead (and store it in env). This is used for //-let.