module type T_no_call = sig
.. end
val model_name : string
type
t_exp
type of the propagated predicate
type
t = t_exp Fol.t_pred
type
t_env
The environment can contain whatever is needed. It is for instance used
to deal with the \at and \old expressions.
val new_env : unit -> t_env
val replace_at_vars : t_env ->
Cil_types.logic_label -> t -> t
examine the label and look for it in env
.
If an expression has been stored for a variable at this label,
substitute it in the propagated object.
ie substitute \at(x,L) by x for the statement label L.
Be careful that this operation can remove the label from env
!
so if quantify_at_vars
is needed : do it before...
val quantify_at_vars : t_env ->
Cil_types.logic_label -> t -> t
see replace_at_vars
: same but quantify instead of substitute.
val assign : Cil_types.lval -> Cil_types.exp -> t -> t
val return : Db_types.kernel_function ->
Cil_types.exp option -> t -> t
val test : Cil_types.exp ->
t -> t -> t
val quantif_locals : Db_types.kernel_function -> t -> t
val quantify_loop_assigns : Cil_types.identified_term Cil_types.assigns list ->
t -> t option
quantify the object over the assigns list in order to move it before loop.
If the list is empty or if the model doesn't know how to interpret it,
this function returns None.
do whatever is necessary on a postcondition before propagation
from the END program point of the function kf
.
For instance, a parameter 'a' in a postcondition doesn't have the
same meaning that 'a' in an assert at END.
TODO : should be t_pred -> t_pred
val close : t_env ->
Db_types.kernel_function -> t -> t
the computation is over : finish (do formals, add hypotheses, ...
val fol : t -> Fol.predicate
val pretty : Format.formatter -> t -> unit
type
t_pred = t
type of the simple predicates result of translate
for instance
val pretty_pred : Format.formatter -> t_pred -> unit
val translate : Db_types.kernel_function ->
t_env ->
Cil_types.predicate Cil_types.named -> t_pred
Translate a predicate in order to add it as a goal or and hypothesis
val add_glob_decls : Fol.decl list -> Fol.decl list