Module type NonRelational.Domain


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')).