module CV: CfgWeakestPrecondition.Create
(
sig
include WpModel
val model : string
end
)
module F: WpModel.D.F
module D: WpModel.D
module E: Translate_expr.Create
(
WpModel
)
module L: Translate_prop.Create
(
WpModel
)
val predicate : L.env ->
Cil_types.predicate Cil_types.named -> WpModel.D.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.D.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 ; |
|
instances : L.instance list ; |
|
property : F.pred ; |
}
type
assigns_kind =
type
effect_assigns = {
}
type
region_assigns = {
}
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 merge : assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val pretty : Format.formatter -> 'a * property -> unit
val new_env : Kernel_function.t ->
F.pool * L.env
type
closing =
| |
Keep_opened |
| |
Apply_hints |
| |
Close_context |
type
assigns =
val pp_vars : Format.formatter -> Cil_types.varinfo list -> unit
val region_assigns : int -> D.F.pred
val region_included : WpModel.region ->
region_assigns ->
F.pred
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 ->
Cil_types.logic_label ->
assigns_kind *
property ->
t_prop
val merge_with : (D.F.pred ->
D.F.pred ->
F.pred) ->
assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val add_as_hyp : 'a ->
assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val add_as_goal : 'a ->
assigns_kind *
property ->
assigns_kind *
property ->
assigns_kind *
property
val add_hyp : D.F.pool * L.env ->
WpAnnot.prop_id ->
Cil_types.predicate Cil_types.named ->
assigns_kind *
property ->
t_prop
val add_goal : D.F.pool * L.env ->
WpAnnot.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
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 -> Formula.integer F.term
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 ->
(WpAnnot.prop_id * Cil_types.predicate Cil_types.named) 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.D.assigned list Wp_error.cc
val translate_assigned : L.env ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
WpModel.loc WpModel.D.assigned list Wp_error.cc
val assigned_of_assigns : L.env ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
WpModel.loc WpModel.D.assigned list option
val assigned_for_assigns_goal : WpAnnot.a_kind ->
Clabels.c_label ->
L.env ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
WpModel.loc WpModel.D.assigned list
val havoc_region : WpAnnot.a_kind ->
WpModel.frame ->
WpModel.loc WpModel.D.assigned list option ->
D.F.pred ->
D.F.pred
val assigns_method : unit -> Mcfg.assigns_method
val add_normal_assigns : D.F.pool * L.env ->
WpAnnot.prop_id ->
Cil_types.logic_label ->
WpAnnot.a_kind ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
assigns_kind *
property ->
t_prop
val add_effect_assigns : D.F.pool * L.env ->
WpAnnot.prop_id ->
Cil_types.logic_label ->
WpAnnot.a_kind ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
assigns_kind *
property ->
t_prop
val add_region_assigns : D.F.pool * L.env ->
WpAnnot.prop_id ->
Cil_types.logic_label ->
WpAnnot.a_kind ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
assigns_kind *
property ->
t_prop
val add_assigns : D.F.pool * L.env ->
WpAnnot.prop_id ->
Cil_types.logic_label ->
WpAnnot.a_kind ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
assigns_kind *
property ->
t_prop
val check_assigns : assigns_kind ->
WpModel.loc WpModel.D.assigned list option ->
D.F.pred ->
D.F.pred
val use_assigns : D.F.pool * L.env ->
WpAnnot.prop_id ->
WpAnnot.a_kind ->
(Cil_types.identified_term Cil_types.zone * 'a) list ->
assigns_kind *
property ->
t_prop
val call : L.env ->
get_pre:(Db_types.kernel_function ->
('a * Cil_types.predicate Cil_types.named) list) ->
get_post:(Db_types.kernel_function ->
('b * Cil_types.predicate Cil_types.named) list) ->
get_exits:(Db_types.kernel_function ->
('c * Cil_types.predicate Cil_types.named) list) ->
get_assigns:(Db_types.kernel_function ->
(Cil_types.identified_term Cil_types.zone * 'd) list) ->
Cil_types.stmt ->
Cil_types.lval option ->
Cil_types.exp ->
Cil_types.exp list ->
assigns_kind ->
F.pred ->
F.pred -> WpModel.D.F.pred * WpModel.D.F.pred
val call_normal : D.F.pool * L.env ->
get_pre:(Db_types.kernel_function ->
('a * Cil_types.predicate Cil_types.named) list) ->
get_post:(Db_types.kernel_function ->
('b * Cil_types.predicate Cil_types.named) list) ->
get_assigns:(Db_types.kernel_function ->
(Cil_types.identified_term Cil_types.zone * 'c) list) ->
Cil_types.stmt ->
Cil_types.lval option ->
Cil_types.exp ->
Cil_types.exp list ->
assigns_kind *
property ->
t_prop
val call_exit : D.F.pool * L.env ->
get_pre:(Db_types.kernel_function ->
('a * Cil_types.predicate Cil_types.named) list) ->
get_exits:(Db_types.kernel_function ->
('b * Cil_types.predicate Cil_types.named) list) ->
get_assigns:(Db_types.kernel_function ->
(Cil_types.identified_term Cil_types.zone * 'c) list) ->
Cil_types.stmt ->
Cil_types.exp ->
Cil_types.exp list ->
assigns_kind *
property ->
t_prop