Difference Bound Matrices are a data structure that are used to represent certain kinds of convex-polygons called Zones.
Suppose
$\forall x \in Z, c_i \prec \pi_i(x) \prec d_i$ $\forall x \in Z, c_{ij} \prec \pi_i(x) \prec \pi_j(x) + d_{ij}$
where
A zone can be represented as a Difference Bound Matrix (DBM)
These data structures occur in the context of Timed Automata, where reachable sets of clock valuations are usually a (finite) union of zones.
Some common queries on DBMs are:
- Checking if a point is in the zone
- Checking if a zone is (non)empty
- Checking if a zone satisfies a guard (normally of the form,
$\forall x \in Z, \pi_i(x) \prec d_i$ ) - Checking if
$Z_1 \subseteq Z_2$
Some common operations on DBMs are:
- Constraining via a new guard
- Taking the intersection of two zones
- Letting time elapse, i.e, removing the upper bounds
$\pi_i(x) \prec d_i$ - Resetting, i.e, forcing the constraint
$\pi_i(x) = k_i$
Other implementations:
Some resources: