<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Interactive Verification of Concurrent Systems using Symbolic Execution</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Michael Balser</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Simon Ba¨umler</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Wolfgang Reif</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Gerhard Schellhorn</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>University of Augsburg</institution>
        </aff>
      </contrib-group>
      <fpage>92</fpage>
      <lpage>102</lpage>
      <abstract>
        <p>This paper presents an interactive proof method for the verification of temporal properties of concurrent systems based on symbolic execution. Symbolic execution is a well known and very intuitive strategy for the verification of sequential programs. We have carried over this approach to the interactive verification of arbitrary linear temporal logic properties of (infinite state) parallel programs. The resulting proof method is very intuitive to apply and can be automated to a large extent. It smoothly combines first order reasoning with reasoning in temporal logic. The proof method has been implemented in the interactive verification environment KIV and has been used in several case studies.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1 Introduction</title>
      <p>
        Compared to sequential programs, both the design and the verification of concurrent systems is more
difficult, mainly because the control flow is more complex. Particularly, for reactive systems, not only
the final result of execution but the sequence of output over time is relevant for system behavior. Finding
errors by means of testing strategies is limited, because, especially for interleaved systems, an
exponential amount of possible executions must be considered. The execution is nondeterministic, making
it difficult to reproduce errors. An alternative to testing is the use of formal methods to specify and
verify concurrent systems with mathematical rigor. Automatic methods – especially model checking –
have been applied successfully to discover flaws in the design and implementation of systems. Starting
from systems with finite state spaces of manageable size, research in model checking aims at mastering
ever more complex state spaces and to reduce infinite state systems by abstraction. In general, systems
must be manually abstracted to ensure that formal analysis terminates. An alternative approach to large
or infinite state spaces are interactive proof calculi. They directly address the problem of infinite state
spaces. Here, the challenge is to achieve a high degree of automation. Existing interactive calculi to
reason in temporal logic about concurrent systems are generally difficult to apply. The strategy of symbolic
execution, on the other hand, has been successfully applied to the interactive verification of sequential
programs (e.g. Dynamic Logic [
        <xref ref-type="bibr" rid="ref11 ref9">9, 11</xref>
        ]). Symbolic execution gives intuitive proofs with a high degree of
automation.
      </p>
      <p>
        Combining Dynamic Logic and temporal logic has already been investigated, e.g. Process Logic [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]
and Concurrent Dynamic Logic [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] and more recently [
        <xref ref-type="bibr" rid="ref10 ref8">8, 10</xref>
        ]. These works focus on combinations of
logic, while we are interested in an interactive proof method based on symbolic execution. Symbolic
execution of parallel programs has been investigated in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], however, this approach has been restricted to
the verification of pre/post conditions. Other approaches are often restricted to the verification of certain
types of temporal properties. Our approach presents an interactive proof method to verify arbitrary
temporal properties for parallel programs with the strategy of symbolic execution and thus promises to
be intuitive and highly automatic.
      </p>
      <p>
        Our logic is based on Interval Temporal Logic (ITL) [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. The chop operator ! ; " of ITL corresponds
to sequential composition and programs are just a special case of temporal formulas. In addition, we have
defined an interleaving operator ! ! " to interleave arbitrary temporal formulas. Our logic explicitly
considers arbitrary environment steps after each system transition, which is similar to Temporal Logic of
Actions (TLA) [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. This ensures that systems are compositional and proofs can be decomposed. In total,
we have defined a compositional logic which includes a rich programming language with interleaved
parallel processes similar to the one of STeP [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Important for interactive proofs, system descriptions
need not be translated to flat transition systems. The calculus directly reasons about programs.
      </p>
      <p>
        A short overview of our logic is given in Section 2. The calculus for symbolic execution is described
in Section 3. The strategy has been implemented in KIV (see Section 4). Section 6 concludes. For more
details on the logic and calculus, especially on induction and double primed variables to decompose
proofs, we refer to [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Logic</title>
      <p>
        Similar to [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], we have defined a first order interval temporal logic with static variables a, dynamic
variables A, functions f , and predicates p. Let v be a static (i.e. constants - written in small letters) or
dynamic variable. Then, the syntax of (a subset of) our logic is defined
e ::=
! ::=
a | A | A! | A!! | f (e1, . . . , en)
      </p>
      <p>p(e1, . . . , en) | ¬ ! | !1 ∧ !2 | ∃ v. !
| step | !1; !2 | ! ∗
| %A1, . . . , An&amp; | !1 !&lt; !2
Dynamic variables can be primed and double primed. It is possible to quantify both static and dynamic
variables. The chop operator !1; !2 directly corresponds to the sequential composition of programs.
The star operator !∗ is similar to a loop. We have added an operator %A1, . . . , An&amp; to define an explicit
frame assumption. Furthermore, operator !1 !&lt; !2 can be used to interleave two “processes”. The basic
operator !&lt; gives precedence to the left process, i.e., a transition of !1 is executed first.</p>
      <p>State: #0
# !
0
#1
# !
1
#2
# !
2
#3
# !
3
#4
Interval I:
= system transition
= environment transition</p>
      <p>In ITL, an interval is considered to be a finite or infinite sequence of states, where a state is a mapping
from variables to their values. In our setting, we introduce additional intermediate states #i! to distinguish
between system and environment transitions. For intuition, compare the following to Figure 1. Let
n ∈ N$. An interval</p>
      <p>I = (#0,#0! ,#1, . . . ,#n!−1,#n)
consists of an initial state #0, and a finite or infinite and possibly empty sequence of transitions (#i!,#i+1)in=−01.
In the intermediate states #i! the values of the variables after a system transition are stored. The
following states #i+1 reflect the states after an environment transition. In this manner, system and environment
transitions alternate. An empty interval consists only of an initial state #0.
Given an interval I, variables are evaluated as follows:</p>
      <p>Static and unprimed dynamic variables are evaluated in the initial state. Primed variables are
evaluated in #0! and double primed variables in #1. In the last state, i.e. if I is empty, the value of a primed or
double primed variable is equal to the unprimed variable. It is assumed that after a system has terminated,
the variables do not change.</p>
      <p>
        The semantics of the standard ITL operators can be carried over one-to-one to our notion of an
interval, and is therefore omitted here. In [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], however, assignments only restrict the assigned variables,
whereas program assignments leave all other dynamic variables unchanged. This is known as a frame
assumption. In our logic, we have defined an explicit frame assumption %A1, . . . , An&amp; which states that a
system transition leaves all but a selection of dynamic variables unchanged.
      </p>
      <p>I |= %A1, . . . , An&amp;
iff</p>
      <p>#0! (A) = #0(A) for all A )∈ {A1, . . . , An}</p>
      <sec id="sec-2-1">
        <title>Details on frame assumptions can be found in [2].</title>
        <p>The interleaving operator ! !&lt; " interleaves arbitrary formulas ! and " . The two formulas represent
sets of intervals. We have therefore defined the semantics of ! !&lt; " relative to the interleaving [[I1 !&lt; I2]]
of two concrete intervals I1 and I2.</p>
        <p>I |= ! !&lt; "
iff there exist I1, I2</p>
        <p>with I ∈ [[I1 !&lt; I2]] and I1 |= ! and I2 |= "
For nonempty intervals I1 = (#0,#0! ,#1, . . . ), and I2 = (%0,%0! ,%1, . . . ), interleaving of intervals adheres to
the following recursive equations.</p>
        <p>
          [[I1 !&lt; I2]] =
 (#0,#0! ) ⊕ [[(#1, . . . ) ! I2]], if I1 is not blocked
 (%0,%0! ) ⊕ [[(#1, . . . ) ! (%1, . . . )]], if I1 is blocked, #0 = %0
 0/, otherwise
[[I1 " I2]] = [[I1 !&lt; I2]] ∪ [[I2 !&lt; I1]]
Interval I1 is blocked, if #0! (blk) )= #0(blk) for a special dynamic variable blk. The system transition
toggles the variable to signal that the process is currently blocked (see await statement below). If I1
is not blocked, then the first transition of I1 is executed and the system continues with interleaving the
remaining interval with I2. (Function ⊕ prefixes all of the intervals of a given set with the two additional
states.) If I1 is blocked, then a transition of I2 is executed instead. However, the blocked transition of I1
is also consumed. A detailed definition of the semantics can be found in [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ].
        </p>
        <p>Additional common logical operators can be defined as abbreviations. A list of frequently used
abbreviations is contained in Table 1, where most of the abbreviations are common in ITL. The next
operator comes in two flavors. The strong next ◦ ! requires that there is a next step satisfying ! , the
weak next • ! only states that if there is a next step, it must satisfy ! .</p>
        <p>As can be seen in Table 1, the standard constructs for sequential programs can be derived. Executing
an assignment requires exactly one step. The value of e is “assigned” to the primed value of A. Other
variables are unchanged (%A&amp;). Note that for conditionals and loops, the condition " evaluates in a single
more :≡
last :≡
inf :≡
finite :≡
step; true
¬ more
true; false
¬ inf
A := e :≡</p>
        <p>skip :≡
if " then !1 else !2 ≡
while " do ! :≡
var A in ! :≡</p>
        <p>bskip :≡
await ! do " :≡
await ! :≡
! ! " :≡
! ! :≡
" ! :≡
◦ ! :≡
• ! :≡
finite; !
¬ ! ¬ !
step; !
¬ ◦ ¬ !
A! = e ∧ %A&amp; ∧ step
%&amp; ∧ step
" ∧ (skip; !1) ∨ ¬ " ∧ (skip; !2)
((" ∧ (skip; ! ))∗ ∧ " (last → ¬ " )); skip
" A! = A ∧ ∃ A. ! ∧ " A!! = A!
blk! )= blk ∧ %blk&amp; ∧ step
((¬ ! ∧ bskip)∗ ∧ " (last → ! )); "
await ! do skip
! !&lt; " ∨ " !&lt; !
step. For local variable definitions, the local variable is quantified (∃ A), in addition, the environment
cannot access the local variable (" A!! = A!). The global value of the variable is unchanged (" A! = A).</p>
        <p>Parallel programs communicate using shared variables. In order to synchronize execution, the
operator await " do ! can be used. A special dynamic variable blk is used to mark whether a parallel program
is blocked. The await operator behaves like a loop waiting for the condition to be satisfied. While the
operator waits, no variable is changed except for variable blk which is toggled. In other words, a process
guarded with an await operator actively waits for the environment to satisfy its condition. Immediately
after condition " is satisfied, construct ! is executed.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Calculus</title>
      <p>Our proof method is based on a sequent calculus with calculus rules of the following form:
Rules are applied bottom-up. Rule name refines a given conclusion &amp; 0 ' with n premises &amp;i 0 'i. We
also rely heavily on rewriting with theorems of the form ! ↔ " . These allow to replace instances of !
with instances of " anywhere in a sequent.
3.1</p>
      <sec id="sec-3-1">
        <title>Normal form</title>
        <p>Our proof strategy is symbolic execution of temporal formulas, parallel programs being just a special
case thereof. In Dynamic Logic, the leading assignment of a DL formula 2v := e;( 3 ! is executed as
follows:
The sequential composition is normalized and is replaced with a succession of diamond operators.
Afterwards, the assignment is “executed” to compute the strongest postcondition &amp;vv0 , v = evv0 (The substitution
&amp;vv0 means that variable v is replaced with variable v0 in &amp;). In our setting, we normalize all the temporal
&amp;vv0 , v = evv0 0 2( 3 ! asg r
&amp; 0 2v := e3 2( 3 !
&amp; 0 2v := e;( 3 !</p>
        <p>normalize
! , &amp; 0 ' " , &amp; 0 '
! ∨ " , &amp; 0 '
dis l</p>
        <p>!aa0 , &amp; 0 '
∃ a. ! , &amp; 0 '
%Aa,,Aa,!a,A!! 0
% , last 0
lst (a ∈/ free(% ))
%Aa,1A,a!,2A,A!! ,!
% , ◦ ! 0
ex l (a0 ∈/ free(! ) \ {a} ∪ free(&amp;, '))</p>
        <p>stp (a1, a2 ∈/ free(% ,! ))
formulas of a given sequent by rewriting the formulas to a so called normal form which separates the
possible first transitions and the corresponding temporal formulas describing the system in the next state.
Afterwards, an overall step for the whole sequent is executed (see below). More formally, a program (or
temporal formula) is rewritten to a formula of the following type</p>
        <p>% ∧ ◦ !
where % is a predicate logic formula that describes a transition as a relation between unprimed, primed
and double primed variables while ! describes what happens in the rest of the interval. A program
may also terminate, i.e., under certain conditions, the current state may be the last. Furthermore, the
next transition can be nondeterministic, i.e., different %i with corresponding !i may exist describing the
possible transitions and corresponding next steps. Finally, there may exist a link between the transition
%i and system !i which cannot be expressed as a relation between unprimed, primed, and double primed
variables in the transition alone. This link is captured in existentially quantified static variables ai which
occur in both %i and !i. The general pattern to separate the first transitions of a given temporal formula is
%0 ∧ last ∨
% n</p>
        <p>i=1(∃ ai. %i ∧ ◦ !i) .</p>
        <sec id="sec-3-1-1">
          <title>We will refer to this general pattern as normal form.</title>
          <p>3.2</p>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>Executing an overall step</title>
        <p>Assume that the antecedent of a sequent has been rewritten to normal form. Further assume – to keep it
simple – that the succedent is empty. (This can be assumed as formulas in the succedent are equivalent
to negated formulas in the antecedent. Furthermore, several formulas in the antecedent can be combined
to a single normal form.)
With the two rules dis l and ex l of Table 2, disjunction and quantification can be eliminated. For the
remaining premises,
%0 ∧ last ∨
% n</p>
        <p>i=1(∃ ai. %i ∧ ◦ !i) 0
%0 ∧ last 0
%i ∧ ◦ !i 0
the two rules lst and stp can be applied. If execution terminates, all free dynamic variables A – no matter,
if they are unprimed, primed or double primed – are replaced by fresh static variables a. The result is a
formula in pure predicate logic with static variables only, which can be proven with standard first order
reasoning. Rule stp advances a step in the trace. The values of the dynamic variables A and A! in the old
state are stored in fresh static variables a1 and a2. Double primed variables are unprimed variables in the
next state. Finally, the leading next operators are discarded. The proof method now continues with the
execution of !i.
alw:
ev:
" !
! !
↔
↔
! ∧ • " !
! ∨ ◦ ! !
The idea of symbolic execution can be applied to formulas of temporal logic. For example, operator
" ! is similar to a loop in a programming language: formula ! is executed in every step. An appropriate
rewrite rule is alw of Table 3. Formula ! must hold now, and in the next step " ! holds again. To arrive at
a formula in normal form, the first conjunct of the resulting formula ! ∧ • " ! must be further rewritten.
The rewrite rule above corresponds to the recursive definition of " ! . Other temporal operators can be
executed similarly.
3.4</p>
      </sec>
      <sec id="sec-3-3">
        <title>Executing sequential composition</title>
        <p>The execution of sequential composition of programs ! ; " is more complicated as we cannot give a
simple equivalence which rewrites a composition to normal form. The problem is that the first formula
! could take an unknown number of steps to execute. Only after ! has terminated, we continue with
executing " .</p>
        <p>Rules for the execution of ! ; " are given in Table 4. In order to execute composition, the idea is to
first rewrite formula ! to normal form
&amp;</p>
        <p>'
%0 ∧ last ∨ % (∃ ai. %i ∧ ◦ !i) ; "
The first sub-formula ! can be rewritten with rule chp lem of Table4. If it is valid that !1 implies !2, then
!1; " also implies !2; " . (This rule is a so-called congruence rule.) After rewriting the first sub-formula
to normal form, we rewrite the composition operator. According to rules chp dis and chp ex, composition
distributes over disjunction and existential quantification. If we apply these rules to the formula above,
we receive a number of cases</p>
        <p>(%0 ∧ last);" ∨ % ∃ ai,0. (%i,0 ∧ ◦ !i,0); "
In the first case, program ! terminates, in the other cases, the program takes a step %i and continues with
program !i. Rules chp lst and chp stp can be used to further rewrite the composition. Dynamic variables
A stutter in the last step, and therefore the primed and double primed variables A! and A!! of % are replaced
by the corresponding unprimed variables if the first sub-formula terminates. The two rules give
%0AA,!A,A!! ∧ " ∨ % ∃ ai,0. %i,0 ∧ ◦ (!i,0; " )
0 !1 → !2
0 !1 !&lt; " → !2 !&lt; "</p>
        <p>ilvl lem
ilvl dis: (!1 ∨ !2) !&lt; " ↔ !1 !&lt; " ∨ !2 !&lt; "
ilvl ex: (∃ a. ! ) !&lt; " ↔ ∃ a0. !aa0 !&lt; "</p>
        <p>a0 fresh with respect to (free(! ) \ {a}) ∪ free(" )
ilvl lst: (% ∧ last) !&lt; " ↔ %AA!,,AA!! ∧ "
ilvl stp: (% ∧ ¬ blocked ∧ ◦ ! ) !&lt; "</p>
        <p>↔ ∃ a2. (%Aa!2! ∧ ¬ blocked ∧ ◦ ((A = a2 ∧ ! ) ! " ))
ilvl blk: (% ∧ blocked ∧ ◦ ! ) !&lt; "</p>
        <p>↔ ∃ a2,1. (∃ a1. %Aa!1,,Aa!2!,1 ) ∧ (A = a2,1 ∧ ! ) !b&lt; "
In the first case, ! has terminated and we still need to execute " to arrive with a formula in normal
form. In the other cases, we have successfully separated the formula into the first transition %i,0 and the
corresponding rest of the program !i,0; " .
As with sequential composition, the interleaving of programs cannot be executed directly, but the
subformulas need to be rewritten to normal form first. The basic operator for interleaving is the left
interleaving operator ! !&lt; " which gives precedence to the left process. In order to execute !&lt;, the first
sub-formula must be rewritten to normal form before the operator itself can be rewritten.</p>
        <p>For left interleaving, the rules of Table 5 are similar to the rules for sequential composition.
Congruence rule ilvl lem makes it possible to rewrite the first sub-formula to normal form. Similar to chop,
left interleaving also distributes over disjunction (ilvl dis) and existential quantifiers (ilvl ex). If the first
formula terminates, execution continues with the second (ilvl lst). This is similar to rule chp lst.
Otherwise, execution depends on the first process being blocked. If it is not blocked, rule ilvl stp executes the
transition and continues with interleaving the remaining ! with " . Note that the double primed variables
of % are replaced by static variables a2 which must be equal to the unprimed variables the next time
a transition of the first process is executed. This is to establish the environment transition of the first
process as a relation which also includes transitions of the second. If the first process is blocked, then
rule ilvl blk executes the blocked transition; the process actively waits while being blocked. However,
the primed variables of % are replaced by static variables a1: the blocked transition of the first process
does not contribute to the transition of the overall interleaving. Instead, a transition of the other process
is executed.
ilvlb dis: " !b&lt; (!1 ∨ !2) ↔ " !b&lt; !1 ∨ " !b&lt; !2
ilvlb ex: " !b&lt; (∃ a. ! ) ↔ ∃ a0. " !b&lt; !aa0</p>
        <p>a0 fresh with respect to (free(! ) \ {a}) ∪ free(" )
ilvlb lst: " !b&lt; (% ∧ last) ↔ false
ilvlb stp: " !b&lt; (% ∧ ◦ ! ) ↔ ∃ a2,2. %Aa!2!,2 ∧ ◦ (" ! (A = a2,2 ∧ ! ))
use as Proof Lemma
X = 1,Y = 2, (( ! ) ) 0
X = 1, (( ! Y := 2;) ) 0</p>
        <p>X = 1,Y = 2, (( ! ) ) 0</p>
        <p>Y = 2, (X := 1;( ! ) ) 0</p>
        <p>X := 1;( ! Y := 2;) 0</p>
        <p>The situation where the first process is blocked and it remains to execute a transition of the second
process is represented by a derived operator ! !b&lt; " which is defined
! !b&lt; "
:≡</p>
        <p>(blocked ∧ ◦ ! ) !&lt; "
and for which the rules of Table 6 are applicable. Again, the rules are very similar to the rules above.
A congruence rule ilvlb lem ensures that the second sub-formula can be rewritten to normal form. With
rules ilvlb dis and ilvlb ex, the operator distributes over disjunction and existential quantification. If the
second process terminates, ilvlb lst is applicable, otherwise ilvlb stp can be applied.</p>
        <p>
          Similar rules have been defined for all the operators of our logic [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]. In summary, every temporal
formula can be rewritten to normal form, an overall step can be executed, and the process of symbolic
execution can be repeated.
3.6
        </p>
      </sec>
      <sec id="sec-3-4">
        <title>Induction and Proof Lemmas</title>
        <p>To prove programs with loops, an inductive argument is necessary. Just as for sequential progams, we
use well-founded and structural induction over datatypes. A specific rule for temporal induction over the
interval is unnecessary: if a liveness property ! ! is known, the equivalence</p>
        <p>! ! ↔ ∃N. N!! = N − 1 until (N = 0 ∧ ! )
can be used to induce over the number of steps N it takes to reach the first state satisfying ! . To prove a
safety property such a liveness property can be derived by using the equivalence " ! ↔ ¬ ! ¬ ! . The
proof is then by contradiction, assuming there is a number N of steps, after which ! is violated.</p>
        <p>
          Execution of interleaved programs often leads to the same sequent occurring in different branches of
the proof tree. Normally, the user would specify a lemma which can be applied to all these sequents. To
simplify this, we allow that a premise of the proof tree can automatically used as lemma to close another
goal. An example is shown in Figure 2. This generalisation of proof trees to (acyclic) proof graphs
allows the dynamic construction of verification diagrams [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ].
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4 Implementation</title>
      <p>
        The interactive proof method has been implemented in KIV [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], an interactive theorem prover which
is available at [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. KIV supports algebraic specifications, predicate logic, dynamic logic, and higher
order logic. Especially, reasoning in predicate logic and dynamic logic is very elaborate. Support for
concurrent systems and temporal logic has been added. Considerable effort has been spent to ensure
that the calculus rules are automatically applied to a large extent. Almost all of the rules are invertible
ensuring that, if the conclusion is provable, the resulting premises remain valid. The overall strategy is
• to symbolically execute a given proof obligation,
• to simplify the PL formulas describing the current state,
• to combine premises with the same sequent, and
• to use induction, if a system loop has been executed.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Verification in KIV</title>
    </sec>
    <sec id="sec-6">
      <title>Conclusion</title>
      <p>We have successfully carried over the strategy of symbolic execution to verify arbitrary temporal
properties for concurrent systems. The proof method is based on symbolic execution, sequencing, and
induction. How to symbolically execute arbitrary temporal formulas – parallel programs being just a special
case thereof – has been explained in this paper.</p>
      <p>
        Our proof method is easily extendable to other temporal operators. For every operator, a set of rules
must be provided to rewrite the operator to normal form. With rules similar to the ones of Tables 4
and 5, we support in KIV operators for Dijkstra’s choice, synchronous parallel execution, and interrupts.
Furthermore, we have integrated STATEMATE state charts [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] as well as UML state charts [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] as
alternative formalisms to define concurrent systems. For all of our extensions, the strategy of sequencing and
induction has remained unchanged and arbitrary temporal formulas can be verified.
      </p>
      <p>
        Using double primed variables, we have defined a compositional semantics for every operator
including interleaving of formulas. This allowed us to find a suitable assumption-guarantee theorem to
apply compositonal reasoning [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. This technique is very important to verify large case studies.
      </p>
      <p>
        The implementation in KIV has shown that symbolic execution can be automated to a large extent.
We have applied the strategy to small and medium size case studies. Currently, the strategy is applied in a
European project called Protocure to verify medical guidelines which can be seen as yet another form of
concurrent system [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Overall, we believe that the strategy has the potential to make interactive proofs
in (linear) temporal logic in general more intuitive and automatic.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>K.R.</given-names>
            <surname>Apt</surname>
          </string-name>
          and
          <string-name>
            <given-names>E.-R.</given-names>
            <surname>Olderog</surname>
          </string-name>
          .
          <source>Verification of Sequential and Concurrent Programs</source>
          . Springer-Verlag,
          <year>1991</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>M.</given-names>
            <surname>Balser</surname>
          </string-name>
          .
          <article-title>Verifying Concurrent System with Symbolic Execution - Temporal Reasoning is Symbolic Execution with a Little Induction</article-title>
          .
          <source>PhD thesis</source>
          , University of Augsburg, Augsburg, Germany,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Balser</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Thums</surname>
          </string-name>
          .
          <article-title>Interactive verification of statecharts</article-title>
          .
          <source>In Integration of Software Specification Techniques (INT'02)</source>
          ,
          <year>2002</year>
          . http://tfs.cs.tu-berlin.de/~mgr/int02/proceedings.html.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Michael</given-names>
            <surname>Balser</surname>
          </string-name>
          , Wolfgang Reif, Gerhard Schellhorn, Kurt Stenzel, and
          <string-name>
            <given-names>Andreas</given-names>
            <surname>Thums</surname>
          </string-name>
          .
          <article-title>Formal system development with KIV</article-title>
          . In T. Maibaum, editor, Fundamental Approaches to Software Engineering. Springer LNCS 1783,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>S.</given-names>
            <surname>Ba</surname>
          </string-name>
          ¨umler,
          <string-name>
            <given-names>M.</given-names>
            <surname>Balser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Knapp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Reif</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Thums</surname>
          </string-name>
          .
          <article-title>Interactive verification of uml state machines</article-title>
          .
          <source>In Formal Methods and Software Engineering</source>
          , number 3308 in LNCS. Springer,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Simon</given-names>
            <surname>Ba</surname>
          </string-name>
          ¨umler, Florian Nafz,
          <string-name>
            <given-names>Michael</given-names>
            <surname>Balser</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Wolfgang</given-names>
            <surname>Reif</surname>
          </string-name>
          .
          <article-title>Compositional proofs with symbolic execution</article-title>
          .
          <source>In Bernhard Beckert and Gerwin Klein</source>
          , editors,
          <source>Proceedings of the 5th International Verification Workshop</source>
          , volume
          <volume>372</volume>
          of Ceur Workshop Proceedings,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>N.</given-names>
            <surname>Bjørner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Brown</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Colon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Finkbeiner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Manna</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Sipma</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Uribe</surname>
          </string-name>
          .
          <article-title>Verifying temporal properties of reactive systems: A step tutorial</article-title>
          .
          <source>In Formal Methods in System Design</source>
          , pages
          <fpage>227</fpage>
          -
          <lpage>270</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>D.</given-names>
            <surname>Harel</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Peleg</surname>
          </string-name>
          .
          <article-title>Process logic with regular formulas</article-title>
          .
          <source>Theoretical Computer Science</source>
          ,
          <volume>38</volume>
          :
          <fpage>307</fpage>
          -
          <lpage>322</lpage>
          ,
          <year>1985</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>David</given-names>
            <surname>Harel</surname>
          </string-name>
          .
          <article-title>Dynamic logic</article-title>
          . In D. Gabbay and F. Guenther, editors,
          <source>Handbook of Philosophical Logic</source>
          , volume
          <volume>2</volume>
          , pages
          <fpage>496</fpage>
          -
          <lpage>604</lpage>
          . Reidel,
          <year>1984</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>David</given-names>
            <surname>Harel</surname>
          </string-name>
          and
          <string-name>
            <given-names>Eli</given-names>
            <surname>Singerman</surname>
          </string-name>
          .
          <article-title>Computation path logic: An expressive, yet elementary, process logic</article-title>
          .
          <source>Annals of Pure and Applied Logic</source>
          , pages
          <fpage>167</fpage>
          -
          <lpage>186</lpage>
          ,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>M.</given-names>
            <surname>Heisel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            <surname>Reif</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Stephan</surname>
          </string-name>
          .
          <article-title>A Dynamic Logic for Program Verification</article-title>
          . In A. Meyer and M. Taitslin, editors,
          <source>Logical Foundations of Computer Science, LNCS 363</source>
          , pages
          <fpage>134</fpage>
          -
          <lpage>145</lpage>
          , Berlin,
          <year>1989</year>
          . Logic at Botik, Pereslavl-Zalessky, Russia, Springer.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <article-title>KIV homepage</article-title>
          . http://www.informatik.uni-augsburg.de/swt/kiv.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>L.</given-names>
            <surname>Lamport</surname>
          </string-name>
          .
          <article-title>The temporal logic of actions</article-title>
          .
          <source>ACM Transactions on Programming Languages and Systems</source>
          ,
          <volume>16</volume>
          (
          <issue>3</issue>
          ):
          <fpage>872</fpage>
          -
          <lpage>923</lpage>
          , May
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Balser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Schmitt</surname>
          </string-name>
          , and
          <string-name>
            <given-names>W.</given-names>
            <surname>Reif</surname>
          </string-name>
          .
          <article-title>Verification of medical guidelines with KIV</article-title>
          .
          <source>In Proceedings of Workshop on AI techniques in healthcare: evidence-based guidelines and protocols (ECAI'06)</source>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>B.</given-names>
            <surname>Moszkowski</surname>
          </string-name>
          .
          <article-title>A temporal logic for multilevel reasoning about hardware</article-title>
          .
          <source>IEEE Computer</source>
          ,
          <volume>18</volume>
          (
          <issue>2</issue>
          ):
          <fpage>10</fpage>
          -
          <lpage>19</lpage>
          ,
          <year>1985</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>D.</given-names>
            <surname>Peleg</surname>
          </string-name>
          .
          <article-title>Concurrent dynamic logic</article-title>
          .
          <source>J. ACM</source>
          ,
          <volume>34</volume>
          (
          <issue>2</issue>
          ):
          <fpage>450</fpage>
          -
          <lpage>479</lpage>
          ,
          <year>1987</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>R.</given-names>
            <surname>Sherman</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Pnueli</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Harel</surname>
          </string-name>
          .
          <article-title>Is the interesting part of process logic uninteresting?: a translation from pl to pdl</article-title>
          .
          <source>In POPL '82: Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages</source>
          , pages
          <fpage>347</fpage>
          -
          <lpage>360</lpage>
          , New York, NY, USA,
          <year>1982</year>
          . ACM Press.
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>Henny</given-names>
            <surname>Sipma</surname>
          </string-name>
          .
          <article-title>Diagram-based verification of reactive, real-time and hybrid systems</article-title>
          .
          <source>PhD thesis</source>
          , Stanford University,
          <year>1999</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>