Module type 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.tOpens a new context, corresponding to the initial scope.
val context_pretty : Stdlib.Format.formatter -> Context.t -> unitDumps what is known about the current context: useful for debugging.
Guards
Joining variables together.
include With_Nondet with module Context := Context
val typed_nondet2 :
Context.t ->
Context.t ->
'a Context.in_tuple ->
Context.t * 'a Context.out_tupleThis joins two basic blocks and returns a new basic block. The Context.in_tuple and Context.out_tuple corresponds to the phi operations in SSA.
val nondet_same_context :
Context.t ->
'a Context.in_tuple ->
'a Context.out_tupleAdditionally, one may compute a non-deterministic choice between two values in the same basic block
It can be seen as equivalent as calling typed_nondet2 by passing the same context twice, which would return the same context.
Fixpoint computation.
include With_Fixpoint_Computation with module Context := Context
Opening a new context can also be seen as opening a new scope: new variables can be introduced, but variables of the parent scope can still be seen.
val typed_fixpoint_step :
iteration:int ->
init:Context.t ->
arg:Context.t ->
body:Context.t ->
(bool * 'a Context.in_tuple) ->
bool * (close:bool -> 'a Context.out_tuple * Context.t)Fixpoint step is a combination of inclusion checking + widening.
Also takes a boolean and a tuple of values which is the result of the evaluation of the body (the end of the loop).
Internally, it stores the arguments of the mu.
val widened_fixpoint_step :
widening_id:Widening_Id.t ->
previous:Context.t ->
next:Context.t ->
(bool * 'a Context.in_tuple) ->
Context.t * bool * 'a Context.out_tuplewidened_fixpoint_step ~previous ~next (bool,in_tuple) where:
widening_idis a unique representation of the widening point;previousis the previous domain state;nextis the next domain state obtained after execution of the function body;boolis false if we know that the fixpoint is not reached yet, and true otherwise;in_tupleis the argument of the SSA phi function;
returns a triple (context,bool,out_tuple) where:
contextis the new domain state;boolis true if the fixpoint is reached, and false if not reached or we don't know;out_tupleis the result of the SSA phi function.