Union.MakeSourceCreate a disjoint union of two value abstractions
module V1 : Sig.Abstraction.Value.VALUEmodule V2 : Sig.Abstraction.Value.VALUE*****************************
Identifier of the value domain
Predicate of types abstracted by the value domain
Name of the value domain
Display name used in debug messages
val bottom : tLeast abstract element of the lattice.
val top : tGreatest abstract element of the lattice.
*********************
Partial order relation. subset a1 a2 tests whether a1 is related to (or included in) a2.
val widen : 'a Core.All.ctx -> t -> t -> twiden ctx a1 a2 computes an upper bound of a1 and a2 that ensures stabilization of ascending chains.
*********************
The forward semantics define how expressions are evaluated into abstract values
Forward evaluation of expressions
Create an avalue over-approximating a given abstract value
**********************
Backward semantics define how a refinement in the abstract value of an expression impact the abstract values of the sub-expressions
val backward :
('v, t) Abstraction.Value.value_man ->
Core.All.expr ->
t Abstraction.Value.vexpr ->
'v ->
t Abstraction.Value.vexprBackward evaluation of expressions. backward man e ve r refines the values ve of the sub-expressions such that the evaluation of the expression e is in r i.e., we filter the sub-values ve knowing that, after applying the evaluating the expression, the result is in r
Keep abstract values that represent a given truth value
val compare :
('v, t) Abstraction.Value.value_man ->
Core.All.operator ->
bool ->
Core.All.expr ->
t ->
Core.All.expr ->
t ->
t * tBackward evaluation of boolean comparisons. compare man op true e1 v1 e2 v2 returns (v1',v2') where:
**********************
Extended semantics define the evaluation of mixed-types expressions. When an expression is composed of sub-expressions with different types, several abstraction may cooperate to compute the evaluation. The previous transfer functions can't be used, because they are defined over one abstraction only.
Extend evaluation of expressions returning the global abstract value of e. Note that the type of e may not satisfy the predicate accept_type.
val backward_ext :
('v, t) Abstraction.Value.value_man ->
Core.All.expr ->
'v Abstraction.Value.vexpr ->
'v ->
'v Abstraction.Value.vexpr optionExtend backward evaluation of an heterogenous expression's sub-parts
val compare_ext :
('v, t) Abstraction.Value.value_man ->
Core.All.operator ->
bool ->
Core.All.expr ->
'v ->
Core.All.expr ->
'v ->
('v * 'v) optionExtend comparison between heterogenous expressions
***************************
Handler of queries
******************
Printer of an abstract element.