Short version: Verification techniques analyze software (or hardware) for bugs: behaviors that are unwanted, often unexpected, and can cause an application to end up in an unworkable state, crash, or simply compute wrong results. This project develops a verification technique that exploits the fact that most software systems are designed over a variable number of resource instances. How do changes (especially incremental changes) of the instance parameter affect the behavior of the software?
More details: Many systems are naturally designed (consciously or not) over a variable number of certain resources, which can mean physical or logical entities. Examples of such resources include:
More concretely, suppose k
is an integral parameter
of the design. With the target property P
to be
verified in mind, we define a function O
mapping the
parameter to observations about the design of size k
, such that
knowledge of O(k)
enables a decision on whether P
holds of the
instance of size k
. For example, the "observation" could simply be
the set of states reachable in the system of size k
.
In general, we require of function O
that it be monotone: more
resources means more system behaviors (observations). This is
almost always the case provided the value of k
is not accessible
in the program defining a system instance's behavior. (If it is,
the dependence on k
can be arbitrary, making analysis against
unbounded k
in general impossible.)
We now analyze the system design for increasing values of k
. Due
to monotonicity of O
, consecutive observation sets O(k)
are in
some sort of ≤
relationship. This begs the question whether the
function O
converges at some parameter point k0
, i.e. whether it
stops increasing after reaching k0
. If so, the truth value of
property P
has stabilized, i.e. unless we have detected a
violation of P
up to this point, we have proved the property for
all parameter instances.