package goblint
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=20d5b7332a9f6072ab9ba86c4a53b898eaf681286c56a8805c41850bbf3ddf41
sha512=7c7685cfcd9aa866bc40e813df2bfcb3c79b3d40e615d8d6d0939c5798b9d70dd7f2ba87a741f5ba0ce891e9d254627207fb28057f1f2f6611e4e0d128fd6a71
doc/goblint.domain/DisjointDomain/index.html
Module DisjointDomainSource
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 ... endSet 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.tBy 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.tSet 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 ... endSet 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.valueMap 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.valueMap of keys E.t grouped into buckets by C, where each bucket is described by the map B with values R.t.