module WpFroms:This file groups functions needed to check the fonctional dependenciessig
..end
Build xi = Init (i) /\ ...
forall inputs part of the assigns property.
val mk_linfo_type : Cil_types.logic_type option * Cil_types.logic_type list ->
Cil_types.logic_type
in_types
and return an out_type
result (None
for a predicate)val make_logic_info : string ->
Cil_types.logic_type option * Cil_types.logic_type list ->
Cil_types.logic_info
logic_info
with fname
and the signature given by
(out_type, in_types)
(see WpFroms.mk_linfo_type
)
TODO: should be Cil_const.make_logic_info when it be finished.val get_linfo_cpt : int Pervasives.ref
logic_info
for the given name and signature.
Build and register it if it doesn't exist yet.
Notice that the returned logic_info
can have a different name than
the asked one because we cannot create several function with same input
signature and different output type.
TODO: the detection to know if we have to build a new name or not could be
enhanced.
val get_linfo : string ->
Cil_types.logic_type option * Cil_types.logic_type list ->
Cil_types.logic_info
val get_implicit_fun : Kernel_function.t ->
Cil_types.kinstr ->
('a, 'b) Cil_types.behavior ->
int ->
Cil_types.logic_type * Cil_types.logic_type list -> Cil_types.logic_info
val get_pred_linfo : Cil_types.logic_type -> Cil_types.logic_info
val get_init_linfo : Cil_types.logic_type -> Cil_types.logic_info
val mk_assign_post : Cil_types.termination_kind ->
Cil_types.identified_term Cil_types.zone * 'a ->
Cil_types.identified_predicate option
P(output)
Build P(out)
where out
is the left part of the assigns property.
Process \result
and \exit_status
according to termination_kind
.
val mk_assign_pre : 'a * Cil_types.identified_term Cil_types.zone list ->
Cil_types.identified_predicate
xi = Init (i) /\ ...
forall inputs.
Build xi = Init (i) /\ ...
forall inputs part of the assigns property.
val build_bhv_assumes : (Cil_types.identified_predicate, 'a) Cil_types.behavior ->
Cil_types.predicate Cil_types.named
val build_fimpl_call : Kernel_function.t ->
Cil_types.kinstr ->
('a, 'b) Cil_types.behavior ->
int ->
Cil_types.term ->
Cil_types.identified_term Cil_types.zone list ->
Cil_types.predicate Cil_types.named
val post_of_assigns_in_spec : Kernel_function.t ->
Cil_types.kinstr ->
('a, Cil_types.identified_predicate, Cil_types.identified_term)
Cil_types.spec ->
Cil_types.termination_kind ->
((Cil_types.identified_predicate, Cil_types.identified_term)
Cil_types.behavior * Cil_types.identified_predicate)
list
out_i = implicit_fun_i (inputs)
for each out_i \from inputs
assigns property of the behavior.
implicit_fun_i
is the implicit fonction for the output.
kf
and ki
give information to know there the specification comes from
in order to build the names for the implicit functions.
termination_kind
is used to filter \result
and \exit_status
when needed.