Nonrelational.MakeSimple non-relational abstraction, maps terms to the numeric abstraction provided in SVA. This is for the case where there are no relations between the terms (besides equality).
module Terms :
Terms.Sig.TERMS
with type ('a, 'b) Relation.t = ('a, 'b) Terms.Relations.Equality.tmodule 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:
previous is the previous domain state and previous_tup the tuple of phi arguments;next is the next domain state obtained by joining execution of the function body and initial state and next_tup the phi arguments;bool is false if we know that the fixpoint is not reached yet, and true otherwise;res_tup is the terms corresponding to the phi function;returns a triple (context,bool) where:
context is the new domain state;bool is 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 boolean_pretty : t -> Format.formatter -> boolean -> unitval integer_pretty : t -> Format.formatter -> integer -> unitval binary_pretty :
size:Units.In_bits.t ->
t ->
Format.formatter ->
binary ->
unitval enum_pretty : t -> Format.formatter -> enum -> unitval pretty : 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).