Value.ProductSourceReduced product of value abstractions.
This combiner implements a reduced product between ๐ value abstractions ๐ฑโ, ..., ๐ฑโ. Each abstraction ๐ฑแตข represent values of types ๐แตข, such that: โ j โ i: ๐แตข โฉ ๐โฑผ โ โ . The types represented by the combiner is ๐โ โฉ ... โฉ ๐โ.
The reduced is represented with a cartesian product. The concretization of a product of values is the intersection of the concretizations: ฮณ(vโ,...,vโ) = ฮณโ(vโ) โฉ ... โฉ ฮณโ(vโ).
The reduced product is parameterized by a set of reduction rules ฯโ, ..., ฯโ. Each reduction rule is applied after each transfer function. Note that reduction rules can access to all abstractions and can reduce many values at the same time.
module MakeValuePair
(V1 : Sig.Abstraction.Value.VALUE)
(V2 : Sig.Abstraction.Value.VALUE) :
Sig.Abstraction.Value.VALUE with type t = V1.t * V2.tCreate a pair of two value abstractions.
module Make
(V : Sig.Abstraction.Value.VALUE)
(R : sig ... end) :
Sig.Abstraction.Value.VALUE with type t = V.tCreate a reduced product from an n-tuple value abstraction and a list of reduction rules.
val make :
(module Sig.Abstraction.Value.VALUE) list ->
(module Sig.Reduction.Value.VALUE_REDUCTION) list ->
(module Sig.Abstraction.Value.VALUE)Create a reduced product from a list of value abstractions and a list of reduction rules.