Parameter Make._
module Terms = TermsType for elements of the abstract domain. The interface is persistent but the implementation can be imperative.
type binary = Operator.Function_symbol.binary Terms.tRepresent binary, integer and boolean dimensions/variables in the abstract domain.
type integer = Operator.Function_symbol.integer Terms.ttype boolean = Operator.Function_symbol.boolean Terms.ttype enum = Operator.Function_symbol.enum Terms.tval top : tmodule Integer_Query : sig ... endProjection to a non-relational basis.
module Query : sig ... endval nondet :
doma:t ->
tupa:Terms.any Immutable_array.t ->
domb:t ->
tupb:Terms.any Immutable_array.t ->
tupres:Terms.any Immutable_array.t ->
tval widened_fixpoint_step :
previous:t ->
previous_tup:Terms.any Immutable_array.t ->
next:t ->
next_tup:Terms.any Immutable_array.t ->
bool ->
res_tup:Terms.any Immutable_array.t ->
t * boolwidened_fixpoint_step ~previous ~previous_tup ~next ~next_tup bool ~res_tup where:
previousis the previous domain state andprevious_tupthe tuple of phi arguments;nextis the next domain state obtained by joining execution of the function body and initial state andnext_tupthe phi arguments;boolis false if we know that the fixpoint is not reached yet, and true otherwise;res_tupis the terms corresponding to the phi function;
returns a triple (context,bool) where:
contextis the new domain state;boolis true if the fixpoint is reached, and false if not reached or we don't know.
val binary_empty : size:Units.In_bits.t -> t -> binary -> tval binary_unknown : size:Units.In_bits.t -> t -> binary -> tmodule Domain_Arity : sig ... endmodule Boolean_Forward :
Operator.BOOLEAN_FORWARD
with module Arity := Domain_Arity
and type boolean := booleanmodule Integer_Forward :
Operator.INTEGER_FORWARD
with module Arity := Domain_Arity
and type boolean := boolean
and type integer := integermodule Binary_Forward :
Operator.BINARY_FORWARD
with module Arity := Domain_Arity
and type boolean := boolean
and type binary := binarymodule Enum_Forward :
Operator.ENUM_FORWARD
with module Arity := Domain_Arity
and type boolean := boolean
and type enum := enumval binary_pretty :
size:Units.In_bits.t ->
t ->
Stdlib.Format.formatter ->
binary ->
unitval pretty : Stdlib.Format.formatter -> t -> unitval fixpoint_step :
lvl:int ->
iteration:int ->
t ->
actuals:Terms.any Immutable_array.t ->
t ->
args:Terms.any Immutable_array.t ->
t ->
finals:Terms.any Immutable_array.t ->
bool * (close:bool -> Terms.any Immutable_array.t -> t)Tells if fixpoint is reached, and prepare to write the new values. The returned pair (bool,function) allows to decide whether we should end the fixpoint computation; the function represents a continuation, and the boolean tells whether the fixpoint is reached (if yes, we can close, but we don't have to).