Interval Analysis and Widening
Interval analysis domain, for each program point, maps each program variable to an interval.
Interval bounds may be
and
. Interval
represents no constraints.
Analysis domain has elements
where
denotes the set of such intervals.
How to interpret a command
for some operation
?
What does the lattice of intervals look like?
Height of lattice of one interval for 64-bit integers:
If we have
variables in program and
program points, height of lattice for the analysis domain is
times larger.
For unbounded integers, lattice is unbounded.
How to guarantee termination?
Widening technique: if we do not seem to be converging, make a “jump”.
Finite set of “jump points”
(e.g. set of all integer constants in the program)
In fixpoint computation, compose
with function
Approaches:
- always apply widening (we will assume this)
- iterate a few times with
only (without using
), if not a fixpoint at this program point, then widen.- this is not monotonic: if you start at fixpoint, it converges, if start below, can jump over fixpoint
Standard iteration:
Widening:
Here,
for all
by definition of
Narrowing: after finding fixpoint of
, apply
to improve precision.
Observation: if
and
are
-continuous functions and
for all
, then narrowing will improve the result, that is, if
and
, then
and
