module type T_for_Cfg = 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.
val model_name : string
type
t_prop
val pretty : Format.formatter -> t_prop -> unit
val ptrue : t_prop
type
t_env
val new_env : unit -> t_env
val process_at_vars : t_env ->
Cil_types.logic_label -> t_prop -> t_prop
val quantify_at_vars : t_env ->
Cil_types.logic_label -> t_prop -> t_prop
val add_hyp : Db_types.kernel_function ->
t_env ->
WpAnnot.prop_kind ->
Cil_types.predicate Cil_types.named ->
t_prop -> t_prop
val add_goal : Db_types.kernel_function ->
t_env ->
WpAnnot.prop_kind ->
Cil_types.predicate Cil_types.named ->
t_prop -> t_prop
val assign : Cil_types.lval ->
Cil_types.exp -> t_prop -> t_prop
val return : Db_types.kernel_function ->
Cil_types.exp option -> t_prop -> t_prop
val test : Cil_types.exp ->
t_prop -> t_prop -> t_prop
val call : (Db_types.kernel_function ->
Cil_types.predicate Cil_types.named list *
Cil_types.predicate Cil_types.named list *
Cil_types.identified_term Cil_types.assigns list) ->
Cil_types.lval option ->
Cil_types.exp ->
Cil_types.exp list -> t_prop -> t_prop
val wp_loop : string ->
Cil_types.identified_term Cil_types.assigns list ->
t_prop -> t_prop
val quantif_locals : Db_types.kernel_function ->
t_prop -> t_prop
val close : Db_types.kernel_function ->
t_env -> t_prop -> t_prop
val add_goals : string -> Fol.decl list -> t_prop -> Fol.decl list
val add_glob_decls : Fol.decl list -> Fol.decl list