module type Domain = sig
.. end
Module type of non relational domains.
type
t
Type of abstract values.
val fprint : Format.formatter -> t -> unit
Prints an abstract value.
Lattice Structure
val order : t -> t -> bool
Order on type t
. t
with this order must be a lattice.
val top : t
val bottom : t
Infimums of the lattice.
val join : t -> t -> t
val meet : t -> t -> t
Least upper bound and greatest lower bound of the lattice.
val widening : t -> t -> t
Widening to ensure termination of the analyses.
Abstract Operators
val sem_itv : int -> int -> t
sem_itv n1 n2
returns an abstraction
t
of the interval [n1, n2]:
[n1, n2] \subseteq \gamma(t).
Semantics of four basic arithmetic operations.
val sem_plus : t -> t -> t
val sem_minus : t -> t -> t
val sem_times : t -> t -> t
val sem_div : t -> t -> t
sem_plus t1 t2
returns a
t'
such that:
{ n1 + n2 | n1 \in \gamma(t1), n2 \in \gamma(t2) } \subseteq \gamma(t').
Abstract operator for guard "> 0".
val sem_guard : t -> t
sem_guard t
returns a
t'
such that:
{ n \in \gamma(t) | n > 0 } \subseteq \gamma(t').
Backward semantics, useful only for complicated guards.
val backsem_plus : t ->
t ->
t -> t * t
val backsem_minus : t ->
t ->
t -> t * t
val backsem_times : t ->
t ->
t -> t * t
val backsem_div : t ->
t ->
t -> t * t
backsem_plus t1 t2 t
returns a pair
(t1', t2')
such that:
\forall n1 n2 : Z,
(n1 \in \gamma(t1) /\ n2 \in \gamma(t2) /\ n1+n2 \in \gamma(t))
-> (n1 \in \gamma(t1') /\ n2 \in \gamma(t2')).