<!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>Automated Formal Verification of PLC Programs Written in IL</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Olivera Pavlovic</string-name>
          <email>Olivera.Jovanovic@siemens.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ralf Pinger</string-name>
          <email>Ralf.Pinger@siemens.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Maik Kollmann</string-name>
          <email>M.Kollmann@tu-bs.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Brunswick Technical University, Institute of Information Systems</institution>
          ,
          <addr-line>Mu ̈hlenpfordtstrasse 23, D-38106 Brunswick</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Siemens Transportation Systems</institution>
          ,
          <addr-line>Ackerstrasse 22, D-38126 Brunswick</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <fpage>152</fpage>
      <lpage>163</lpage>
      <abstract>
        <p>Providing proof of correctness is of the utmost importance for safety-critical systems, many of which are based on Programmable Logic Controllers (PLCs). One widely used programming language for PLCs is Instruction List (IL). This paper presents a tool for the fully automated transformation of IL programs into models of the NuSMV (New Symbolic Model Verifier) model checker. For this, the tool needs a metadescription of the IL language. This broadens the scope of the software and allows the tool be used for programs written in many other low-level languages as well. Its application is demonstrated using a typical IL program, at the same time providing insights into the proposed automation of the process of formal verification of PLC programs. This automatic verification should provide a powerful analysis method with a wide industrial application.</p>
      </abstract>
      <kwd-group>
        <kwd>automated verification</kwd>
        <kwd>model checking</kwd>
        <kwd>NuSMV (New Symbolic Model Verifier)</kwd>
        <kwd>Programmable Logic Controller (PLC)</kwd>
        <kwd>Instruction List (IL)</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>be found in [CCL+00]. Further research on the topic was published in [PPKE07],
which examines in more depth the handling of PLC hardware by the formal
verification of IL programs. For this, a specific PLC is selected, although the same
principles can be applied to any PLC. We present an enhancement of the works
cited above describing how function calls can be handled by the PLC verification
and presenting a tool for the fully automated transformation of IL programs into
the NuSMV models. By applying the tool to a typical IL program, we
demonstrate its successful application and show how the process of formal verification
of PLC programs can be automated. Based on the lessons learnt from the tool,
we also propose an improvement in the verificaton method.</p>
      <p>The rest of the paper is structured as follows: Section 2 briefly reviews the
method/formalism of model checking. In Section 3 the structure of an IL
program is outlined and a detailed description of a behavioural model of the program
also given. Section 4 presents the tool developed for the transformation of IL
programs into NuSMV models. In Section 5 a case study illustrates the
verification of IL programs. Finally, conclusions are drawn and plans for the future
proposed.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Model Checking</title>
      <p>Automated verification techniques such as model checking have become a
standard for proving the correctness of state-based systems. Model checking is the
process of checking whether a given model M satisfies a given logical formula ϕ.
Model checking tools such as SPIN [Hol97] and SMV/NuSMV [McM96,CCB+02]
incorporate the ability to illustrate that a model does not satisfy a checking
condition using a textual, tabular or sequence chart-like representation of the
relevant states.</p>
      <p>The model M has to be translated into the input language of a model
checking tool. For this, a state transition system can be used, which defines a kind of
non-deterministic finite state machine representing the behaviour of a system.
The transition system can be represented by a graph whose nodes represent
the states of the system and whose edges represent state transitions. A state
transition system is defined as follows.</p>
      <p>Definition 1. State transition system</p>
      <p>A system T = (S, S0, →) with
– S: a non-empty set of states,
– S0 ⊆ S: a non-empty set of initial states,
– →⊆ S × S: a transition relation which is defined for all s ∈ S
is called a state transition system.</p>
      <p>In the sections below we will limit ourselves to transition systems and
temporal logic formulas, which are both suitable for capturing the behaviour of
our programs and representing typical checking conditions. The model checking
problem can be stated as follows: Let a checking condition be given by a
temporal logic formula ϕ, and a model M with an initial state s, then it must be
decided</p>
      <p>M, s |= ϕ.</p>
      <p>If M is finite, the model checking is reduced to a graph search. In our case, Linear
Temporal Logic (LTL) [Pnu77] is suitable for the encoding of the properties. LTL
is a subset of CTL∗ with modalities referring to time (cf. [HR00,CGP00]). The
syntax of the LTL formula is given by the following Backus-Naur-Form (BNF)
definition:</p>
      <p>ϕ ::= ⊥ | ⊤ | p | (¬ϕ) | (ϕ ∧ ϕ) | (ϕ U ϕ) | (G ϕ) | (F ϕ) | (X ϕ).</p>
      <p>In addition to the propositional logic operators and predicates p, the
temporal operators X, F, G and U are interpreted as follows:
– X ϕ : ϕ must hold at the next state.
– F ϕ : ϕ must hold at some f uture state.
– G ϕ : ϕ must hold at the current state and all future state (globally).
– ψ U ϕ : ϕ holds at the current or a future state, and ψ must hold up until
this point. From this point, ψ no longer needs to hold.</p>
      <p>LTL formulas are evaluated for a certain path π of states. If we let π = s1 → s2 →
. . . be a path of states, then πi is the suffix starting at si: πi = si → si+1 → . . ..
All temporal logic operators can be related to path expressions, e.g. the
nextoperator’s semantics are given by π |= Xφ iff π2 |= φ.</p>
      <p>Techniques based on Bu¨chi automata have been implemented in SPIN to
check if a system meets its specifications. This is done by synthesising an
automaton which generates all possible models of the given specification and then
checking if the given system refines this most general automaton. SMV and
NuSMV employ tableau-based model checking in order to evaluate whether a
given LTL formula ϕLT L holds. They were originally symbolic model checking
tools relying on binary decision diagrams. The set of states satisfying a CTL
formula ϕCT L is computed as the BDD representation of a fixed point of a function.
If all the initial system states are in this set, ϕCT L is a system property.
3</p>
    </sec>
    <sec id="sec-3">
      <title>PLCs</title>
      <p>As already stated, PLCs are a special type of computer based on sensors and
actuators able to control, monitor and influence a particular process. There
are many standard tools for the configuration of PLCs, depending on the PLC
product family. In these tools, the PLC programming languages standardised in
[IEC93] are usually given different names to those in the IEC standard. Thus,
the tool used for this study supports, among others, the Statement List (STL)
programming language. STL corresponds in its expressiveness one to one to IL,
having instructions with the same functionality. The syntax of the two languages
differs, however. In the remainder of this paper the designation IL will be used
to cover both IL and STL.
3.1</p>
      <sec id="sec-3-1">
        <title>IL Program</title>
        <p>An IL program can consist of a number of modules. Each of the modules and
the main program contain variable declarations plus a program body. For the
purpose of verification, we shall consider the program body as a limited set of
lines of code executed in a defined sequence. Let us consider a program P having
maxpc lines of code and n modules P1, . . . , Pn each having maxpcı, ı = 1, . . . , n
lines of code. The program P can then be represented as follows:
P = {(, statement) |  = 1, . . . , maxpc} ∪ [ Pı, where
ı≤n</p>
        <p>Pı = {(ı, statementı ) | ı = 1, . . . , maxpcı}, for all ı = 1, . . . , n
where statement (statementı ) designates the statement at line  (ı) of P (Pı).
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Behavioural Model of an IL Program</title>
        <p>The behavioural model of an IL program P can be represented using a state
transition system T = (S, S0, →), where S is a set of states, S0 ⊆ S a non-empty
set of initial states and → a transition relation. S, S0 and → are constructed as
follows:
Set of states S. The set of states S = SS × SH × SP C with
SS - a set of states of software-specific variables. Software-specific variables are
variables defined within the program P. Although IL supports a wide range of
data types (relating to its hardware-like nature), in this paper only Booleans and
bounded integers are discussed. Let us consider the main program, P, with nP
variables and each module Pı with nPı variables, then SS = SSP ×SSP1 ×. . .×SSPn
where SSP = SPvar1 × . . . × SPvarnP and SPvar is a domain of the variable var
for  = 1, . . . , nP . For example, for a Boolean variable var, SPvar = {true,
f alse}. The sets SSPı are defined analogously to SSP .
SH - a set of states of hardware-specific variables. Depending on the PLC family,
various types of CPU register are required for the processing of IL statements.
Some of the registers are not important for the verification of IL programs
([PPKE07]). For this reason, only the following registers are considered here:
three status bits, two accumulators and a nesting stack (used to save certain
items of information before a nesting statement is processed). These registers
are represented in the behavioural model of an IL program by hardware-specific
variables. The set of states of hardware-specific variables SH is constructed as
follows. SH = SHP × SHP1 × . . . × SHPn where the sets in the product correspond
to sets of hardware-specific variables of P, P1, . . . , Pn respectively. Because
these sets are equivalent, it is sufficient to define one of them, e.g. SHP . SHP
= HPStatusBits × HPAccumulators × HPNestingStack and HPStatusBits = HPRLO ×
HPOR × HPF C (HPRLO, HPOR and HPF C are domains of status bits RLO,
OR and F C, that is {true, f alse}) and HPAccumulators = HPACC1 × HPACC2
(HPACC1 and HPACC2 are accumulator domains). If we let HPNestingStack have
l layers, then HPNestingStack = HPStack1 × . . . × HPStackl. Each of these stacks
contains information to be pushed into the stack before opening a new nesting
operation. These are the status bits RLO and OR, and the identifier of the
operation before nesting. Thus, HPStack = HPRLO × HPOR × HPOperation,
 = 1, . . . , l, where HPOperation is a domain of operation identifiers.
SP C - a set of states of program counters. The program counter of each of the
program modules together form the set SP C. Thus, SP C = {1, . . . , maxpc} ×
{1, . . . , maxpc1} × . . . × {1, . . . , maxpcn}.</p>
        <p>Set of initial states S0. S0 ⊆ S, or more precisely S0 = SS0 × SH0 × SP C0
with SS0 ⊆ SS , SH0 ⊆ SH and SP C0 ⊆ SP C. Sets SS0 and SS may differ merely
in the ranges of the variables which can have predifined values for P. Only
for this kind of variable can initial values be restricted. For all other
softwarespecific variables, all possible values have to be considered from the very
beginning of verification. The initial values of the hardware-specific variables are
predefined and identical for each P and Pı, ı = 1, . . . , n. These variables are
initialised with all Booleans being set to f alse and all integers to 0. Thus,
SH0 is defined by SH0 = Q SHP0, SHP0 = HPStatusBits0 × HPAccumulators0 ×
ı≤n+1
HPNestingStack0, HPStatusBits0 = {f alse, f alse, f alse}, HPAccumulators0 = {0, 0}
and HPNestingStack0 = Q{f alse, f alse, 0}.</p>
        <p>ı≤l
Transition relation →. →⊆ S × S describes how the state of the model
changes after the execution of each statement. These changes are reflected in
the fact that new values are assigned to the software and hardware variables,
and the program counter. After each statement, the program counter is given a
new value, pointing to the next statement to be executed. Only one
softwarespecific variable, which at the same time is the statement argument, can be
changed by a single statement. On the other hand, one statement can change
a number of hardware-specific variables. For more details of, how the transition
relation and behavioural model are constructed, see [PPKE07].
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Automated Transformation of IL Programs</title>
      <p>The automated transformation of IL programs described in [PPKE07] was
developed as a part of a masters thesis [Fen07]. As shown in Fig.1, besides the program
to be transformed, the software also needs a description of the IL language. This
description is supplied in an IL metafile (cf. Fig.2). The result of the automated
transformation of the IL program is a corresponding NuSMV model. In some
cases it is possible to reduce the state space of the resulting NuSMV model by
manual optimisation. More details of the above steps are given in the sections
below. On the basis of the NuSMV model and specification being proven, the
next step in the verification is performed by the NuSMV model checker.</p>
      <p>IL metafile</p>
      <p>IL program
Transformer</p>
      <p>NuSMV model
Optional adjustment of</p>
      <p>range of variables
Specification</p>
      <p>NuSMV model</p>
      <p>NuSMV
OK!</p>
      <p>Not OK!</p>
      <p>Fig. 1. Transformation process
4.1</p>
      <sec id="sec-4-1">
        <title>Metafile</title>
        <p>The metadescription of the IL language is defined in a simple text file with
a special format (metafile). Part of the contents of the IL metafile is shown in
Fig.2. This simple description of the language makes the software more universal
and allows us to use it for the transformation of programs written in a number
of other low-level languages as well, provided a metadescription of the language.</p>
        <p>As shown in Fig.2, the system hardware variables must be described at the
beginning of the metadescription. This is done using identifier, type, initial value
triples. For example, RLO,0,0 means that the status bit RLO is a Boolean
(type 0) and has the initial value 0, and ACC1,1,0 means that ACC1 is an
integer (type 1) with the initial value 0. In the second part of the metafile,
the IL statements are described. There are four types: 0-statements - with an
argument, 1-statements - with a nesting operation, 2-statements - with an effect
on the program counter, and 3-statements - with no argument. Accordingly, the
conjunction A argument is of type 0 and described by</p>
        <p>A, 0,if (F C = 1){RLO := OR||RLO&amp;&amp; ARG );}</p>
        <p>else{RLO := ARG ; F C := 1;}</p>
        <p>This means: if FC is true, the RLO bit is set to OR ||(RLO &amp;&amp; argument),
otherwise RLO is set to argument and FC is set to true.</p>
        <p>[variables]
RLO,0,0
OR,0,0
FC,0,0
ACC1,1,0
ACC2,1,0
...[meta]
A,0,if(FC=1){RLO:=OR||(RLO&amp;&amp; ARG );}else{RLO:= ARG ;FC:=1;}
JU,2,PC:= ARG ;
+I,3,ACC1:=ACC2+ACC1;
*I,3,ACC1:=ACC2*ACC1;
&gt;I,3,if(ACC2&gt;ACC1){RLO:=1;OR:=0;FC:=1;}else{RLO:=0;OR:=0;FC:=1;}
&lt;I,3,if(ACC2&lt;ACC1){RLO:=1;OR:=0;FC:=1;}else{RLO:=0;OR:=0;FC:=1;}
...</p>
      </sec>
      <sec id="sec-4-2">
        <title>Manual Optimisation of the NuSMV Model</title>
        <p>In some cases the NuSMV model resulting from the transformation of the IL
program will have an optimisation facility. The model optimisation is optional
and has to be performed manually. An illustration of this will now be given. Let
us consider some integer variables in an IL program having a restricted range of
integer values. Despite the limitation of the variables, a whole range of integers
is reserved for them. These variables do not need the entire range of integers in
the corresponding NuSMV model, and problems may result due the excessive
size of the model’s state space. Provided the ranges of the variables are known,
they can be adjusted accordingly and the space requirement reduced.
5</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Case Study</title>
      <p>This section takes a closer look at the process of formal verification of IL
programs already described. An IL program and the corresponding NuSMV model
are presented. To show the behavioural equivalence between the IL program and
its NuSMV model, the method proposed in [PH07] can be applied. The most
complex issue in the verification process turns out to be the implementation of
a function call. We have therefore chosen to demonstrate how this is done on
the basis of a sample IL program. For more about IL programming [Gie03] and
[Sie04] should be consulted.
5.1</p>
      <sec id="sec-5-1">
        <title>IL Program</title>
        <p>An outline of the program considered here (DemonstrateFormByte) is shown in
Fig.3. This simple IL program demonstrates the call of the function FormByte
which takes 8 bits as input (Bit0, Bit1,. . . , Bit7) and combines them into one
byte (Byte).
5.2</p>
      </sec>
      <sec id="sec-5-2">
        <title>NuSMV Model</title>
        <p>A NuSMV program consists of several modules. There must be one module with
the name main and no formal parameters ([CCB+02]). Accordingly, the IL
program is implemented by the main module in NuSMV and the function called by
a further module, which is instantiated in the main module (cf. Fig.4). For more
information about how IL statements are transformed into NuSMV model, see
[PPKE07].</p>
        <p>Let us consider the transitions given in Fig.4. The program
DemonstrateFormByte has 2 lines, in the first of which the function FormByte is called. This
call is implemented in the NuSMV model by saying in the main module that
if program counter is equal to 1 and FormByte has not finished executing, the
program counter of the main module does not change its value. Only when
FormByte has finished its execution may the main module program counter increment
its value.
//Program "DemonstrateFormByte"
//8 boolean and 1 integer variables
//program body
CALL "FormByte" (</p>
        <p>InputBit0 := Bit0, InputBit1 := Bit1, InputBit2 := Bit2,
InputBit3 := Bit3, InputBit4 := Bit4, InputBit5 := Bit5,</p>
        <p>InputBit6 := Bit6, InputBit7 := Bit7, OutputByte := Byte);
//Function "FormByte"
//input: 8 booleans (InputBit0,...,InputBit7)
//output: 1 integer (OutputByte)
//1 temporary variable (Value) which keeps temporary result
//function body</p>
        <p>L 0; //Initialise the temporary result
T Value; //Value=0
AN InputBit0; //Check if Bit0 is set
JC BIT1; //if not jump to BIT1
L 1; //Adjust the temporary result by 2**0</p>
        <p>T Value; //Value=1
BIT1: AN InputBit1; //Check if Bit1 is set</p>
        <p>JC BIT2; //if not jump to BIT2
L Value; //Adjust the temporary result by 2**1
L 2;
+I ;
T Value; //Value=Value+2
...</p>
        <p>Fig. 4. An outline of the NuSMV model corresponding to the IL program DemonstrateFormByte
5.3</p>
      </sec>
      <sec id="sec-5-3">
        <title>Specification and Verification Results</title>
        <p>To prove the correctness of the NuSMV model we need to check if the byte
value obtained corresponds to the eight bits supplied. This property can be
represented by the following LTL formula:</p>
        <p>Unfortunately, proving this property by the method described is inefficient.
It took over eight hours to do so. The ultimate aim of this work study, however,
is to apply the proving technique to far more complex case studies. Hence, the
approach needed to be improved. How this was done, is described in the next
section.
The reason for the inefficiency of the verification lay in the enormous number
of transitions which had to be considered by the NuSMV model checker when
instantiating a new module in a main module. More precisely, all the variables
that formed the state space of the module FormByte ware also part of the state
space of the main module. These variables are, however, of no importance before
and after the module FormByte is referenced in the main module (hereafter this
situation will to be referred to as module FormByte is not active).</p>
        <p>Considering the above, a constraint was required in the main module with
the meaning: “if the FormByte module is not active, the model checker only
checks the states in which the FormByte variables are set to their initial
values”. This could be achieved by means of the following invariant:
INVAR (PC!=1 -&gt; (CALL FormByte.PC=1 | CALL FormByte.PC=64) &amp;
CALL FormByte.Bit0=0 &amp; CALL FormByte.Bit1=0 &amp; CALL FormByte.Bit2=0 &amp;
CALL FormByte.Bit3=0 &amp; CALL FormByte.Bit4=0 &amp; CALL FormByte.Bit5=0 &amp;
CALL FormByte.Bit6=0 &amp; CALL FormByte.Bit7=0 &amp; CALL FormByte.Byte=0 &amp;
CALL FormByte.Value=0 &amp; CALL FormByte.RLO=0 &amp; CALL FormByte.OR=0 &amp;
CALL FormByte.ACC1=0 &amp; CALL FormByte.ACC2=0)</p>
        <p>Besides the addition of this invariant to the main module, some changes to
FormByte were necessery. In order to enable the FormByte variables to have
their initial values when the module was inactive, some new transitions had
to be added. These transitions needed to set the variables to the predefined
values once execution of the FormByte function had terminated. For this, the
FormByte program counter was incremented by 1. Additionally, for each variable
a new transition was formed, which set the variable to its initial value.</p>
        <p>By adding this invariant to the model we succeeded proving the relevant
property in 113.8 seconds, a vast improvement on the previous result. Thus the
changes described brought about a marked improvement in our method.
6</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Conclusion and Future Work</title>
      <p>The safety demands of many systems based on PLC are considerable. The formal
verification of the PLC software is thus of great importance. The verification
method demonstrated in this paper is a powerful instrument for analysing
safetyrelated software.</p>
      <p>An approach was presented for the automated transformation of IL programs
into NuSMV models. This is supported by a tool, which was also described. The
efficiency and convenience of the tool were demonstrated by means of a case
study. Because the transformation can be automated, the approach has the
potential for a wide application in industry.</p>
      <p>Although the approach is stable there is, however, still scope for
improvement. While the tool was being developed aspects for optimisation were
identified and appropriate features implemented directly; others are due to be
incorporated in the near future (the invariant described in the previous section, for
example, is to be automatically added to the NuSMV model). The aim of the
project is to efficiently verify PLC software of as high a complexity as possible.
In order to achieve this goal we will need to continue refining the technique.
Thus, the development of the approach itself and the accompanying tool are
ongoing. Further work in this field should provide a suitable set of reduction
methods which will allow the state explosion problem, arising from the growing
model size, to be resolved.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [CCB+02]
          <string-name>
            <surname>Roberto</surname>
            <given-names>Cavada</given-names>
          </string-name>
          , Alessandro Cimatti, Marco Benedetti, Emanuele Olivetti, Marco Pistore, Marco Roveri, and Roberto Sebastiani.
          <article-title>NuSMV: a new symbolic model checker</article-title>
          . http://nusmv.itc.it/,
          <year>2002</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [CCL+00]
          <string-name>
            <given-names>G.</given-names>
            <surname>Canet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Couffin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.-J.</given-names>
            <surname>Lesage</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Petit</surname>
          </string-name>
          , and
          <string-name>
            <given-names>P.</given-names>
            <surname>Schnoebelen</surname>
          </string-name>
          .
          <article-title>Towards the automatic verification of PLC programs written in Instruction List</article-title>
          .
          <source>In Proc. IEEE Int. Conf. Systems, Man and Cybernetics</source>
          (SMC'
          <year>2000</year>
          ), Nashville,
          <string-name>
            <surname>TN</surname>
          </string-name>
          , USA, Oct.
          <year>2000</year>
          , pages
          <fpage>2449</fpage>
          -
          <lpage>2454</lpage>
          ,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <surname>[CGP00] Edmund M. Clarke</surname>
          </string-name>
          , Orna Grumberg, and
          <string-name>
            <surname>Doran</surname>
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Peled</surname>
          </string-name>
          . Model Checking. MIT Press,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [Fen07]
          <string-name>
            <given-names>G.</given-names>
            <surname>Fendoglu</surname>
          </string-name>
          .
          <article-title>U¨berfu¨hrung eines AWL-Modells in ein NuSMV-Modell</article-title>
          .
          <source>Masters thesis. Technische Universit¨at Braunschweig</source>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [Fig06]
          <string-name>
            <given-names>C.</given-names>
            <surname>Figura</surname>
          </string-name>
          . U¨
          <article-title>berdeckungstests fu¨r fehlersichere Funktionspl¨ane auf Basis einer geeigneten U¨ berfu¨hrung</article-title>
          .
          <source>Master thesis</source>
          . Martin-Luther-Universit¨at,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [Gie03]
          <string-name>
            <given-names>Walter</given-names>
            <surname>Giessler. SIMATIC S7 SPS-Einsatzprojektierung</surname>
          </string-name>
          und
          <article-title>-programmierung</article-title>
          . VDE Verlag GMBH,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <surname>[Hol97] Gerard</surname>
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Holzmann</surname>
          </string-name>
          .
          <article-title>The Model Checker SPIN</article-title>
          .
          <source>In IEEE Transactions on Software Engineering</source>
          , volume
          <volume>23</volume>
          , pages
          <fpage>279</fpage>
          -
          <lpage>295</lpage>
          ,
          <year>1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <surname>[HR00] Michael</surname>
            <given-names>R. A.</given-names>
          </string-name>
          <string-name>
            <surname>Huth</surname>
            and
            <given-names>Mark D.</given-names>
          </string-name>
          <string-name>
            <surname>Ryan</surname>
          </string-name>
          .
          <source>Logic in Computer Science - Modelling and Reasoning about Systems</source>
          . Cambridge University Press,
          <year>2000</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <source>[IEC93] IEC. International Electrotechnical Commission Standard 61131-3</source>
          , Programmable controllers - Part 3,
          <year>1993</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <surname>[McM96] Kenneth L. McMillan. Symbolic Model Checking</surname>
          </string-name>
          . Kluwer Academic Publishers, second edition,
          <year>1996</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [PH07]
          <string-name>
            <given-names>J.</given-names>
            <surname>Peleska</surname>
          </string-name>
          and
          <string-name>
            <given-names>E.</given-names>
            <surname>Haxthausen.</surname>
          </string-name>
          <article-title>Object Code Verification for Safety-Critical Railway Control Systems</article-title>
          . In E. Schnieder and G. Tarnai, editors,
          <source>Proc. of the 6th Symposium on Formal Methods for Automation and Safety in Railway and Automotive Systems (FORMS/FORMAT</source>
          <year>2007</year>
          ). GZVB,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [Pnu77]
          <string-name>
            <given-names>Amir</given-names>
            <surname>Pnueli</surname>
          </string-name>
          .
          <article-title>The temporal logic of programs</article-title>
          .
          <source>In Proceedings of 18th Annual Symposium on Foundations of Computer Science</source>
          , pages
          <fpage>46</fpage>
          -
          <lpage>57</lpage>
          . IEEE,
          <year>1977</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [PPKE07]
          <string-name>
            <given-names>O.</given-names>
            <surname>Pavlovic</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Pinger</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Kollmann</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H. D.</given-names>
            <surname>Ehrich</surname>
          </string-name>
          .
          <article-title>Principles of Formal Verification of Interlocking Software</article-title>
          . In E. Schnieder and G. Tarnai, editors,
          <source>Proc. of the 6th Symposium on Formal Methods for Automation and Safety in Railway and Automotive Systems (FORMS/FORMAT</source>
          <year>2007</year>
          ). GZVB,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [Sie04]
          <article-title>Siemens. SIMATIC Anweisungsliste (AWL) fuer S7-300/400</article-title>
          .
          <string-name>
            <surname>Referenzhandbuch (SIMATIC Instruction List for</surname>
          </string-name>
          S7-
          <volume>300</volume>
          /400. Reference Manual),
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>