Domain_sig.Minimal_No_Boolean
This signature is useful when we don't have any new flow-sensitive state and just need all the things on the top of the stack to stay the same.
include With_Context
val root_context : unit -> Context.t
val context_pretty : Stdlib.Format.formatter -> Context.t -> unit
include With_Assume with module Context := Context and type boolean := boolean
Corresponds to the creation of a new basic block, accessible only if the condition is met. None means bottom.
Because the transfer functions imperatively change the context, they cannot use assume, that returns a new context. Temporarily, we provide this instead (it should be applied only to fresh symbolic variables and not modify the set of valuations of the other symbolic variables. In particular, the condition must never make the context bottom).
The good long-term solution would be to make every transfer function return a new Context.t option, viewing the context as some state monad.
include With_Nondet with module Context := Context
val typed_nondet2 :
Context.t ->
Context.t ->
'a Context.in_tuple ->
Context.t * 'a Context.out_tuple
val nondet_same_context :
Context.t ->
'a Context.in_tuple ->
'a Context.out_tuple
include With_Fixpoint_Computation with module Context := Context
val typed_fixpoint_step :
init:Context.t ->
arg:Context.t ->
body:Context.t ->
(bool * 'a Context.in_tuple) ->
bool * (close:bool -> 'a Context.out_tuple * Context.t)