Module CfgProof.Create.CV


module CV: CfgWeakestPrecondition.Create(sig
include WpModel
val model : string
end)

module F: WpModel.F
module D: WpModel.L
module E: Translate_expr.Create(WpModel)
module L: Translate_prop.Create(WpModel)
val predicate : L.env ->
Cil_types.predicate Cil_types.named -> WpModel.F.pred Wp_error.cc
val expr : WpModel.mem -> Cil_types.exp -> WpModel.value Wp_error.cc
val addr : WpModel.mem -> Cil_types.lval -> WpModel.loc Wp_error.cc
val cond : WpModel.mem -> Cil_types.exp -> WpModel.F.pred Wp_error.cc
val cast : Cil_types.typ -> Cil_types.typ -> WpModel.value -> WpModel.value Wp_error.cc
type t_env = F.pool * L.env 
type t_prop = assigns_kind *
property

type property = {
   bindings : D.bindings;
   property : F.pred;
}
type assigns_kind =
| NoAssigns
| EffectAssigns of effect_assigns

type effect_assigns = {
   a_pid : WpPropId.prop_id;
   a_label : Clabels.c_label;
   a_effect : F.var;
   a_locals : F.var;
}
val empty : assigns_kind *
property
val zip : 'a * property ->
D.F.pred
val merge_assigns : assigns_kind ->
assigns_kind ->
assigns_kind
val merge_property : (D.F.pred ->
D.F.pred ->
F.pred) ->
property ->
property ->
property
val is_empty : 'a * property -> bool
val merge : assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val pretty : Format.formatter -> 'a * property -> unit
val new_env : ?lvars:Cil_types.logic_var list ->
Kernel_function.t ->
F.pool * L.env

type closing =
| Keep_opened
| Close_context

type assigns =
| Keep_assigns
| Clear_assigns
| Label_assigns of Clabels.c_label
| Goal_assigns of assigns_kind Pervasives.ref
val pp_vars : Format.formatter -> Cil_types.varinfo list -> unit
val close_property : string ->
D.context ->
F.pred ->
closing ->
property
exception Failed
val on_context : D.F.pool * L.env ->
string ->
assigns_kind *
property ->
closing ->
assigns ->
(L.env ->
assigns_kind ->
F.pred -> F.pred) ->
t_prop
val label : D.F.pool * L.env ->
Clabels.c_label ->
assigns_kind *
property ->
t_prop
val tag : string ->
'a * property ->
'a * property
val merge_with : (D.F.pred ->
D.F.pred ->
F.pred) ->
assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val add_hyp : D.F.pool * L.env ->
WpPropId.prop_id * Cil_types.predicate Cil_types.named ->
assigns_kind *
property ->
t_prop
val add_goal : D.F.pool * L.env ->
WpPropId.prop_id * Cil_types.predicate Cil_types.named ->
assigns_kind *
property ->
t_prop
val add_axiom : 'a ->
string ->
Cil_types.logic_label list -> Cil_types.predicate Cil_types.named -> unit
exception SkipInit
val compute_init_loc : WpModel.mem -> Cil_types.lval -> WpModel.loc
val compute_init_value : WpModel.mem -> Cil_types.exp -> WpModel.value
val init_value : D.F.pool * L.env ->
Cil_types.lval ->
Cil_types.typ ->
Cil_types.exp option ->
assigns_kind *
property ->
t_prop
val init_range : D.F.pool * L.env ->
Cil_types.lval ->
Cil_types.typ ->
int64 ->
int64 ->
assigns_kind *
property ->
t_prop
val assign : D.F.pool * L.env ->
Cil_types.lval ->
Cil_types.exp ->
assigns_kind *
property ->
t_prop
val return : D.F.pool * L.env ->
Cil_types.exp option ->
assigns_kind *
property ->
t_prop
val test : D.F.pool * L.env ->
Cil_types.exp ->
assigns_kind *
property ->
assigns_kind *
property ->
t_prop
val case_of_exp : WpModel.mem -> Cil_types.exp -> F.integer
val switch : D.F.pool * L.env ->
Cil_types.exp ->
(Cil_types.exp list *
(assigns_kind *
property))
list ->
assigns_kind *
property ->
t_prop
val scope : D.F.pool * L.env ->
Cil_types.varinfo list ->
Mcfg.scope ->
assigns_kind *
property ->
t_prop
val build_prop_of_from : D.F.pool * L.env ->
WpPropId.pred_info list ->
assigns_kind *
property ->
t_prop
val close : D.F.pool * L.env ->
assigns_kind *
property ->
t_prop
val translate_assigned_targets : L.env ->
Cil_types.term list -> WpModel.loc WpModel.F.assigned list Wp_error.cc
val translate_assigned : L.env ->
(Cil_types.identified_term * 'a) list ->
WpModel.loc WpModel.F.assigned list Wp_error.cc

type assigned =
| A_everything
| A_region of WpModel.loc F.assigned list
val assigned_of_assigns : L.env ->
Cil_types.identified_term Cil_types.assigns ->
assigned
val assigned_for_assigns_goal : WpPropId.a_kind ->
Clabels.c_label ->
L.env ->
(Cil_types.identified_term * 'a) list -> WpModel.loc WpModel.F.assigned list
val havoc_region : WpPropId.a_kind ->
WpModel.mem ->
assigned ->
D.F.pred ->
D.F.pred
val assigns_method : unit -> Mcfg.assigns_method
val add_normal_assigns : D.F.pool * L.env ->
WpPropId.prop_id ->
Cil_types.logic_label ->
WpPropId.a_kind ->
(Cil_types.identified_term * 'a) list ->
assigns_kind *
property ->
t_prop
val add_effect_assigns : D.F.pool * L.env ->
WpPropId.prop_id ->
Cil_types.logic_label ->
WpPropId.a_kind ->
(Cil_types.identified_term * 'a) list ->
assigns_kind *
property ->
t_prop
val add_assigns : D.F.pool * L.env ->
WpPropId.prop_id * WpPropId.assigns_desc ->
assigns_kind *
property ->
t_prop
val check_assigns : WpModel.mem ->
assigns_kind ->
assigned ->
F.pred -> F.pred
val use_assigns : D.F.pool * L.env ->
WpPropId.prop_id option ->
WpPropId.assigns_desc ->
assigns_kind *
property ->
t_prop

type callenv = {
   callsite : Clabels.c_label;
   m_pre : WpModel.mem;
   m_post : WpModel.mem;
   v_args : WpModel.value list;
}
val callenv : L.env ->
Cil_types.stmt -> Cil_types.exp list -> callenv
val do_prop : L.env ->
string ->
Cil_types.predicate Cil_types.named -> F.pred
val do_properties : L.env ->
string ->
('a * Cil_types.predicate Cil_types.named) list ->
F.pred
val do_hypothesis : L.env ->
string ->
('a * Cil_types.predicate Cil_types.named) list ->
F.pred -> F.pred
val do_return : callenv ->
Kernel_function.t ->
Cil_types.lval option ->
WpModel.F.pred ->
WpModel.F.pred * D.F.var option
val call_goal_precond : D.F.pool * L.env ->
Cil_types.stmt ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
assigns_kind *
property ->
t_prop
val add_dependencies : Property.t list -> unit
val call_normal_only : D.F.pool * L.env ->
Cil_types.stmt ->
Cil_types.lval option ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
post:('b * Cil_types.predicate Cil_types.named) list ->
assigns:Cil_types.identified_term Cil_types.assigns ->
p_post:assigns_kind *
property ->
t_prop
val call_exit_only : D.F.pool * L.env ->
Cil_types.stmt ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
pexit:('b * Cil_types.predicate Cil_types.named) list ->
assigns:Cil_types.identified_term Cil_types.assigns ->
p_exit:assigns_kind *
property ->
t_prop
val call : D.F.pool * L.env ->
Cil_types.stmt ->
Cil_types.lval option ->
Kernel_function.t ->
Cil_types.exp list ->
pre:('a * Cil_types.predicate Cil_types.named) list ->
post:('b * Cil_types.predicate Cil_types.named) list ->
pexit:('c * Cil_types.predicate Cil_types.named) list ->
assigns:Cil_types.identified_term Cil_types.assigns ->
p_post:t_prop ->
p_exit:t_prop ->
assigns_kind *
property