package goblint
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=20d5b7332a9f6072ab9ba86c4a53b898eaf681286c56a8805c41850bbf3ddf41
sha512=7c7685cfcd9aa866bc40e813df2bfcb3c79b3d40e615d8d6d0939c5798b9d70dd7f2ba87a741f5ba0ce891e9d254627207fb28057f1f2f6611e4e0d128fd6a71
doc/goblint.domain/DisjointDomain/index.html
Module DisjointDomain
Source
Abstract domains for collections of elements from disjoint unions of domains. Formally, the elements form a cofibered domain from a discrete category.
Elements are grouped into disjoint buckets by a congruence or/and a projection. All operations on elements are performed bucket-wise and must be bucket-closed.
Examples of such domains are path-sensitivity and address sets.
Sets
By projection
Buckets defined by projection. The module is the image (representative) of the projection function of_elt
.
module ProjectiveSet
(E : Printable.S)
(B : SetDomain.S with type elt = E.t)
(R : Representative with type elt = E.t) :
sig ... end
Set of elements E.t
grouped into buckets by R
, where each bucket is described by the set B
.
module ProjectiveSetPairwiseMeet
(E : Lattice.S)
(B : MayEqualSetDomain with type elt = E.t)
(R : Representative with type elt = E.t) :
SetDomain.S with type elt = E.t
By congruence
Buckets defined by congruence.
module PairwiseSet
(E : Printable.S)
(B : SetDomain.S with type elt = E.t)
(C : Congruence with type elt = E.t) :
SetDomain.S with type elt = E.t
Set of elements E.t
grouped into buckets by C
, where each bucket is described by the set B
.
Buckets defined by a coarse projection and a fine congruence. Congruent elements must have the same representative, but not vice versa (Representative
would then suffice).
module CombinedSet
(E : Printable.S)
(B : SetDomain.S with type elt = E.t)
(RC : RepresentativeCongruence with type elt = E.t) :
sig ... end
Set of elements E.t
grouped into buckets by RC
, where each bucket is described by the set B
.
Maps
Generalization of above sets into maps, whose key set behaves like above sets, but each element can also be associated with a value.
By projection
module ProjectiveMap
(E : Printable.S)
(V : Printable.S)
(B : MapDomain.S with type key = E.t and type value = V.t)
(R : Representative with type elt = E.t) :
MapDomain.S with type key = E.t and type value = B.value
Map of keys E.t
grouped into buckets by R
, where each bucket is described by the map B
with values V.t
.
By congruence
module PairwiseMap
(E : Printable.S)
(R : Printable.S)
(B : MapDomain.S with type key = E.t and type value = R.t)
(C : Congruence with type elt = E.t) :
MapDomain.S with type key = E.t and type value = B.value
Map of keys E.t
grouped into buckets by C
, where each bucket is described by the map B
with values R.t
.