Module type Sig.With_Fixpoint_Computation
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.