ISIS RR BIG-TR-2014-1 6
properties, examples of which include, among others, Presburger and bit vector arithmetic, or the theory of
arrays. The satisfiability modulo decidable first-order theories is established by SMT solvers like Z3 [39].
Model Checking
Model checking is an automatic theorem proving technique that proves a proposition valid by exploring
and evaluating all relevant – usually a subset of all possible – interpretations over the product of a set of
finite domains
D
1
× · · · × D
n
. The proposition is referred to as the specification and is usually formulated
in a temporal logic. Applied to the verification of hard- and software systems [
33
,
72
], the specification
expresses desired or undesired properties of the system and the interpretation corresponds to the valuation
of the system’s variables, whose values are drawn from domains
D
1
, · · · , D
n
. A distinct valuation of the
system’s variables identifies a state of the system and the set of all possible variable valuations that are
reachable from the system’s initial state is referred to as the state space of the system. The state space is
traditionally represented by a Kripke structure, but also by finite automata and linear transition systems (LTS).
A Kripke structure is a finite, directed graph whose nodes represent the states of the system. The nodes are
labeled with those atomic propositions that are true in that state. The edges of a Kripke structure represent
transitions between their source and their target node and are unlabeled. In contrast, automata and linear
transition systems label transitions with the system’s operations that trigger the state change. All of them
have in common that they describe execution paths of the system, which are defined as, possibly infinite,
sequences
ρ = s
1
s
2
s
3
. . .
of states. We say that a state
s
n
is reachable from the initial state
s
1
if there exists
a finite path ρ = s
0
. . . s
n
.
The specification is most commonly formulated either with Computation Tree Logic (CTL) [
31
] or
Linear Temporal Logic (LTL) [
119
]. Both share the same set of temporal operators, namely
X
(next),
F
(finally, also: eventually),
G
(globally), and
U
(until). In case of CTL, each occurrence of a temporal operator
must be preceded by a path quantifier, either
A
(on all paths) or
E
(on some paths), whereas LTL formulas are
implicitly all-quantified. Intuitively, the formulas
AX ϕ
,
AF ϕ
,
AG ϕ
, and
A ϕUψ
are satisfied if, along all paths
that start in the current state,
ϕ
holds in the next state, in some future state (including the current state), in all
future states (including the current state), and in all states until
ψ
holds eventually. It follows that a CTL
formula may explore multiple branches due to the requirement that every temporal operator is path-quantified,
while an LTL formula branches only once in the state where the evaluation starts.
Temporal formulas describe properties that the system should satisfy and can be categorized into safety,
and liveness properties.
1
Safety properties are characteristically specified by
AG ϕ
and describe invariants of
the system [
93
] that hold in every state on all paths. They assert that “nothing bad” ever happens. Liveness
properties test if “something good” happens eventually or repeatedly and are either of the form
F ϕ
or
GF ϕ
[
13
]. Moreover, reachability properties are used to test if there exists a path to a state that eventually
satisfies some condition ϕ. They are of the form EF ϕ [13].
To algorithmically verify a system with a model checker the user supplies both a representation of the
system and its specification as input. In its simplest form, the model checker first builds the state space of
the system and then evaluates the specification. If the specification is violated, the model checker returns a
counterexample trace that describes paths to states that falsify the specification. Otherwise, it informs the
user that the specification holds.
Model checking is applicable only to finite state representations of systems. The state space may, however,
become exorbitantly large, because it grows exponentially with every additional system variable. This
phenomenon is known as the state explosion problem. Reducing the number of states and improving the
1
Note that there exist two classification schemes, namely the safety-liveness [2] and the safety-progress classification [30].