Module Domains.Numeric

Standard numeric domains, both for our classical and SSA programs. They all depend on a Single_value_abstraction.Sig.SingleValueAbstraction, used to represent values.

val set_nb_backwards_iter : int -> unit

Set the number of backwards iteration to perform when learning from an assumption.

Standard non-relational numeric domain in abstract interpration: each variable is mapped to an abstraction of their values. To keep the map small, variable with no value (Zs.top) are removed from the map.

Same as Classical, but performs a few additional simplifications (removing if 0, or x := e when expr_forwards state (x-e) is zero)

Non relational numeric abstraction for SSA. Unlike Classical, which only remembers abstractions for variables, this also remembers abstractions for sub-expressions, which is possible at a reasonable cost thanks to the static assignement properties of SSA.

Same as SSA, but performs a few additional simplifications (removing "if 0" branches).