Module type Mwp.S


module type S = sig .. end

include Mlogic.S
val update_at_label : frame -> Clabels.c_label -> D.F.pred -> D.F.pred
update_at_label frame l p binds free variables in p representing the state at label l to the current memory.

It updates the memory-map frame such that now the current memory in p becomes the memory state at label l.

val quantify_at_label : frame -> Clabels.c_label -> D.F.pred -> D.F.pred
quantify_at_label frame l p quantifies the free variables in p representing the state at label l to the current memory.

It generalize the goal up-to the state at label l.

val subst_lval : frame -> Ctypes.c_object -> loc -> value -> D.F.pred -> D.F.pred
subst_lval frame l te v p binds in p the free variables representing the value at location l in the current memory to the actual value v.

It updates the memory-map frame such that now the current memory in p has been updated by storing v at l.

val subst_result : frame -> value option -> D.F.pred -> D.F.pred
subst_result frame v p bind the free variable representing \result in to an actual value.

In some cases, we don't know how to compute the returned value, the function then have to behave like an 'havoc'.

It updates the memory-map frame such that the \result of the function has been bound to its value v by a return statement.

val subst_havoc : frame -> loc D.assigned -> D.havoc list
Binds the free variables in the wp representing the memory locations that live in zone. Actually, subst_havoc must no do the substitution it-self to avoid any variable capture un region. Rather, subst_havoc should returns the list of substitutions to be applied modulo alpha-conversion.

Assigns



assigns_goal frame L1 region L2 returns a predicates establishing the assigns clause region with dependencies depends.
val assigns_goal : frame ->
Clabels.c_label -> loc D.assigned list -> Clabels.c_label -> D.F.pred
val assigns_supported : bool

Assigns with Zones


type m_dzone 
type dzone = m_dzone D.F.term 
val tau_of_dzone : Formula.tau
val dzone_assigned : loc D.assigned -> dzone
val dzone_subset : dzone -> dzone -> D.F.pred
val dzone_union : dzone -> dzone -> dzone
val dzone_empty : unit -> dzone
val effect_supported : bool

Assigns with Region


type region 
val pp_region : Format.formatter -> region -> unit
val region_assigned : loc D.assigned -> region
val region_empty : unit -> region
val region_union : region -> region -> region
val region_included : region -> region -> D.F.pred
val region_separated : region -> region -> D.F.pred
val region_fingerprint : D.F.pool -> region -> D.F.var list * D.F.pred * region
val region_supported : bool
val local_scope : frame -> Cil_types.varinfo list -> Mcfg.scope -> D.F.pred -> D.F.pred
local_scope m l transforms the predicate p at the enter-point of a block or function that declares the local variables in the list. It is time to add hypotheses about those local variables.