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.
Set the number of backwards iteration to perform when learning from an assumption.
module Classical
(Zs : Single_value_abstraction.Sig.SingleValueAbstraction) :
sig ... end
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.
module ClassicalQuery
(Zs : Single_value_abstraction.Sig.SingleValueAbstraction) :
sig ... end
Same as Classical
, but performs a few additional simplifications (removing if 0
, or x := e
when expr_forwards state (x-e)
is zero)
module SSA
(Zs : Single_value_abstraction.Sig.SingleValueAbstraction) :
sig ... end
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.
module SSAQuery
(Zs : Single_value_abstraction.Sig.SingleValueAbstraction) :
sig ... end
Same as SSA
, but performs a few additional simplifications (removing "if 0" branches).