Module type Mcfg.S


module type S = sig .. end
This is what is really needed to propagate something through the CFG. Usually, the propagated thing should be a predicate, but it can be more sophisticated like lists of predicates, or maybe a structure to keep hypotheses and goals separated. Moreover, proof obligations may also need to be handeled.

type t_prop 
val pretty : Format.formatter -> t_prop -> unit
val merge : t_prop -> t_prop -> t_prop
val empty : t_prop
type t_env 
val new_env : Db_types.kernel_function -> t_env
val add_axiom : WpAnnot.prop_id ->
string ->
Cil_types.logic_label list -> Cil_types.predicate Cil_types.named -> unit
val add_hyp : t_env ->
WpAnnot.prop_id ->
Cil_types.predicate Cil_types.named -> t_prop -> t_prop
val add_goal : t_env ->
WpAnnot.prop_id ->
Cil_types.predicate Cil_types.named -> t_prop -> t_prop
val add_as_hyp : t_env -> t_prop -> t_prop -> t_prop
add_as_hyp env h p add h as hypothesis in p (h => p)
val add_as_goal : t_env -> t_prop -> t_prop -> t_prop
add_as_goal env g p add g as goal to p (g /\ p)
val add_assigns : t_env ->
WpAnnot.prop_id ->
Cil_types.logic_label ->
WpAnnot.a_kind ->
Cil_types.identified_term Cil_types.assigns list ->
t_prop -> t_prop
val use_assigns : t_env ->
WpAnnot.prop_id ->
WpAnnot.a_kind ->
Cil_types.identified_term Cil_types.assigns list ->
t_prop -> t_prop
val assigns_method : unit -> Mcfg.assigns_method
val label : t_env -> Cil_types.logic_label -> t_prop -> t_prop
val assign : t_env ->
Cil_types.lval -> Cil_types.exp -> t_prop -> t_prop
val return : t_env -> Cil_types.exp option -> t_prop -> t_prop
val test : t_env ->
Cil_types.exp -> t_prop -> t_prop -> t_prop
val switch : t_env ->
Cil_types.exp ->
(Cil_types.exp list * t_prop) list -> t_prop -> t_prop
val call_normal : t_env ->
get_pre:(Db_types.kernel_function ->
(WpAnnot.prop_id * Cil_types.predicate Cil_types.named) list) ->
get_post:(Db_types.kernel_function ->
(WpAnnot.prop_id * Cil_types.predicate Cil_types.named) list) ->
get_assigns:(Db_types.kernel_function ->
Cil_types.identified_term Cil_types.assigns list) ->
Cil_types.stmt ->
Cil_types.lval option ->
Cil_types.exp -> Cil_types.exp list -> t_prop -> t_prop
val call_exit : t_env ->
get_pre:(Db_types.kernel_function ->
(WpAnnot.prop_id * Cil_types.predicate Cil_types.named) list) ->
get_exits:(Db_types.kernel_function ->
(WpAnnot.prop_id * Cil_types.predicate Cil_types.named) list) ->
get_assigns:(Db_types.kernel_function ->
Cil_types.identified_term Cil_types.assigns list) ->
Cil_types.stmt ->
Cil_types.exp -> Cil_types.exp list -> t_prop -> t_prop
val scope : t_env ->
Cil_types.varinfo list -> Mcfg.scope -> t_prop -> t_prop
val build_prop_of_from : t_env -> WpAnnot.t_id_pred list -> t_prop -> t_prop
build p => alpha(p) for functional dependencies verification.
val close : t_env -> t_prop -> t_prop