<!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>Modular transformation from AF3 to nuXmv</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Sudeep Kanav, Vincent Aravantinos fortiss GmbH Guerickestr.</institution>
          <addr-line>25 80805 Munich</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>-AutoFOCUS3 (AF3) [1] supports formal verification of its models using the nuXmv [2] model checker. This requires a model transformation from AF3 to nuXmv models. In this paper we present this behavior transformation. It is a two way transformation between a high-level and a low-level model involving intricate cases typical of behavior transformations whose solutions can therefore be beneficial to the community.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>I. INTRODUCTION</title>
      <p>Model driven Engineering (MDE) allows us to model the
system: its requirements, behavior, target platform, and
generate code out of this model which can be deployed on the
system. The behavior model of the system can be used for
early verification, thus detecting bugs at an early stage of
development, thereby saving time and money.</p>
      <p>One way to perform verification is using formal methods,
which are useful when we need high assurance, but are hard
to use. They are however difficult to integrate with MDE tools
because it requires a behavior transformation from a high-level
MDE model to a low-level model of the formal analysis tool.</p>
      <p>
        AutoFOCUS3 (AF3) [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], is an MDE tool which supports
formal verification of its models. We use the nuXmv [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]
(successor of NuSMV [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]) model checker for formal analyses.
We transform AF3 models to nuXmv models, run model
checking on them, interpret the result, and simulate the model
checker trace, if available.
      </p>
      <p>In this paper we present the details of this model
transformation. We believe this is useful to the community because
it points out pitfalls that one typically encounters while
developing a bi-directional transformation from a high-level to
a low-level model and shows how to circumvent them. Most
importantly, we designed the transformation to be modular,
extensible and to maximize reuse: the reuse aspect is particularly
put to practice with the reverse transformation.</p>
      <p>This work deals with 1) transformation between a high level
model and a low level model, 2) two way transformation: from
AF3 to nuXmv and vice versa, 3) transformation of a high
level model which can model both events and messages. Note
finally that we have applied this solution to an industrial use
case.</p>
      <p>
        This transformation is a complete rebuild of the one
informally presented in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] covering a larger fragment, fixing
important limitations of the previous transformation and
designed in a modular manner.
      </p>
      <p>The paper is structured as follows: Section II presents AF3
and nuXmv, Section III describes our transformation, Section
IV describes a use case, Section V considers the related work,
and Section VI concludes this paper.</p>
      <p>
        In this section we give an overview of AF3 [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and provide
a brief introduction to the concepts needed to understand the
paper. We then give an introduction to nuXmv [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], and lastly
we list down the challenges which make this solution useful
and non trivial.
      </p>
      <sec id="sec-1-1">
        <title>A. AutoFOCUS3 introduction</title>
        <p>
          AutoFOCUS3 [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] is a model-based development tool for
embedded systems, which provides support for most
development phases: requirements engineering, software architecture,
hardware architecture, as well as mapping between the artifacts
of these various phases. C and Java code can be generated
from the developed model after the architecture and behavior
are fully defined.
        </p>
        <p>Fig. 1. Component architecture in AutoFOCUS3</p>
        <p>This paper concerns the software architecture, whose
following characteristics are essential for formal verification:
Component-based: Software architecture in AF3 is a
hierarchy of components communicating with each other
through typed channels (Fig. 1) which are connected
to ports. Ports, which can be input or output, form the
interface of the component. Each port carries values of a
defined type (no objects: only booleans, integers, doubles,
enumerations, or combinations thereof). Channels in AF3
are statically fixed.</p>
        <p>Atomic components, if implemented, contain a behavior
specification modeled by a state machine or code
expressed in a very simple language.1</p>
      </sec>
      <sec id="sec-1-2">
        <title>Formal execution semantics: The semantics of compo</title>
        <p>
          nents is formally defined according to the FOCUS model
of computation [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ], i.e., a global clock is assumed and all
components are (in a nutshell) synchronously executed.
One can then simulate their component architecture in
AF3 according to these semantics.
        </p>
      </sec>
      <sec id="sec-1-3">
        <title>B. nuXmv</title>
        <p>
          nuXmv [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] is a symbolic model checker. We now describe
the features which we use for the formal verification of an
AF3 component.
        </p>
        <p>In nuXmv, a system is modeled as a finite state machine
(FSM) described in terms of variables and constraints.
Variables, which can be state variables or input variables, can
have different values in different states. Constraints are used
to describe 1) transition relations: how a state machine evolves
during execution, 2) initial state, 3) invariants. It also supports
hierarchical descriptions.</p>
        <p>Three types of specifications are supported: LTL, CTL, and
INVAR (invariants). The definition of the FSM, specifications,
and declarations (input variables, state variables, constants, and
define) are encapsulated in a module declaration.</p>
        <p>A module can be then instantiated inside another module.
Every nuXmv program must contain a main module. The main
module does not have any parameters and is the entry point
of the nuXmv model.</p>
      </sec>
      <sec id="sec-1-4">
        <title>C. A non-trivial transformation</title>
        <p>The transformation from AF3 to nuXmv models is not
trivial as it transforms a model at a high level of abstraction
to one at a lower level of abstraction. We now describe
some AF3-specific notions which make the transformation
challenging.</p>
        <p>NoVal: AF3 allows to model situations where a channel is
not carrying a value. This is required when modeling events,
e.g., a user pressing the brake in a car. We could also see
it as a null value. This situation is modeled using a special
constant called NoVal which belongs to every port type and
symbolizes the absence of an event in the current tick. This is
problematic because a boolean type port in AF3 can then have
three values: true; f alse; and N oV al, whereas in the model
checker a boolean value can be only true or f alse. This is
analogously true for ports of other types.</p>
        <p>Causality: AF3 allows to specify the causality of a
component as strong or weak. In a strongly causal components output
1Note that behavior can also be expressed using tables, but this feature is
deprecated at the moment.
ports are updated in the next clock tick, whereas in a weakly
causal component output ports are updated in the same tick.</p>
        <p>The strongly causal components can be seen as Moore
machines: the output of the current tick is only dependent
on the state and not on the input, input can only influence
the output of the next tick (we can also see it as input only
changing the state, which in turn affects the output). Weakly
causal components can be interpreted as Mealy machines:
output is dependent on both the state and the input.</p>
        <p>As nuXmv does not have the notion of strong and weak
causality this needs to be additionally handled.</p>
        <p>User defined functions: AF3 also supports the use of
functions defined by the user in a Data Dictionary. These functions
are stateless and use the same simple language which can
be used to define a component’s behavior. These are not
part of the transformed component’s tree, but are contained
in a separate subtree. Note that we do not describe this
transformation in the paper.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>III. TRANSFORMATION DESCRIPTION</title>
      <p>We decompose the transformation in small step
transformations. These transformations are then executed sequentially:
the output of the first transformation is the input of the next.
We denote the sequential composition by ”;”: applying T1; T2
on I means that first T1 is applied on I, and then T2 is applied
on its output.</p>
      <p>
        This decomposition allows the small step transformations
(or blocks) to be reused in different contexts, e.g., for the
reverse transformation (which was not possible in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]). The
transformations are implemented in Java.
      </p>
      <p>
        As a running example, we consider a component C, with
input port ip which is a boolean array of size 2, and a boolean
output port op which is true if both values are equal in the
input array. The behavior of the component is specified using
a code specification:
i f ( i p [ 0 ] = = i p [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] )
f op : = t r u e ; g
      </p>
      <p>It is a strongly causal component, which means that the
output values are updated on the next tick.</p>
      <p>At the top level, transformation of an AF3 model to a
nuXmv model T is a chain of 2 transformations 1)
normalization of the model, 2) transformation to nuXmv:
T = TNorm; TnuXmv
(1)</p>
      <p>Fig 2 shows this chain in a pictorial form. From now on we
describe chains using only the ”;” operator.</p>
      <sec id="sec-2-1">
        <title>A. Transformation normalizing the project</title>
        <p>This transformation takes an AF3 model and transforms it
into a normalized AF3 model, which is easier to transform to
a nuXmv model. It is a chain of 5 transformations:
TNormalize = TNames; TCodeSpec; TNoV al
(2)
; TP roductT ypes; TCausality
Note that (1) and (2) will be reused in Section III-C.</p>
        <p>
          1) Name transformation: TName changes the names of the
artifacts by appending their internal id, and removing white
spaces and special characters. The references to these elements
are also transformed. The example is then transformed to:
i f ( i p 4 0 [ 0 ] = = i p 4 0 [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] )
f op 24 : = t r u e ; g
2) Code specification to state automaton: TCodeSpec turns
a behavior of an atomic component, in case it is specified as
a code specification, into a state automaton.
        </p>
        <p>A code specification in AF3 is stateless, so it is transformed
to an automaton with a single state, where each if (and else)
block is converted to a transition. TCodeSpec is again a chain
of 2 transformations:</p>
        <p>TCodeSpec = TNormalizeCodeSpec; TT oAutomaton
TNormalizeCodeSpec outputs a code specification which is
behaviorally equivalent to the input and in a normalized
form from which we can do a canonical transformation to
a state automaton, and TT oAutomaton performs this canonical
transformation.</p>
        <p>
          Applying TNormalizeCodeSpec on the above code
specification results in the following code specification:
i f ( i p 4 0 [ 0 ] = = i p 4 0 [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] ) f
op 24 : = t r u e ;
r e t u r n ; g
e l s e f
r e t u r n ; g
        </p>
        <p>Note the addition of the empty else block modeled to obtain
a canonical transformation to an automaton.</p>
        <p>Fig. 3 shows the result of applying TT oAutomaton to the
above code specification. Note that the transition for the else
block (lower half in the figure) has no action. The semantics of
this automaton and the initial code specification are equivalent.</p>
        <p>The output of this transformation satisfies the property: All
the components are specified using a state automaton. In case
the input already satisfies this property the transformation
behaves as the identity transformation.</p>
        <p>3) NoVal resolution: As described in Section II-C, AF3
ports can have one more value: NoVal, than the corresponding
type in the model checker.</p>
        <p>To take this discrepancy into account, for each port p
we add a boolean port p P RESEN T whose value denotes
whether the port is carrying a value or not. This also requires
that we change the behavior of the state automaton. This
transformation is also a chain of 2 transformations:</p>
        <p>TNoV al = TUpdateT ransitions; TResolveNoV al
TUpdateT ransitions: If a port is not explicitly assigned a value
in a transition it should carry NoVal. This transformation
makes this step explicit, i.e., we transform the transitions to
explicitly assign NoVal to ports which are not assigned a value.</p>
        <p>TResolveNoV al: This transformation adds the PRESENT port
and updates the transitions such that for every port p which is
assigned a value, p P RESEN T is assigned true, otherwise
p P RESEN T is assigned false (in this case p is assigned a
default value of the type). The guards of the transitions are
also transformed accordingly. This is done to ensure that after
this transformation no NoVal can flow through the model.</p>
        <p>The absence of a value is interpreted using the value of the</p>
      </sec>
      <sec id="sec-2-2">
        <title>PRESENT port.</title>
        <p>TArray is again a chain of two transformations:
1) TT oStructT ype: transforms array types to structure types
by creating a structure member for each element of the
array. This transformation also changes the type of the
array variables to the corresponding structure type. It is to
be noted that after this transformation the model could be
inconsistent, as the expressions involving the ports would
still be array expressions but the port type has changed
to the Structure type.
2) TT oStructExpression: transforms array expressions to
structure expressions. It converts an array access to a
structure access, and also transforms the array constants
to structure constants.</p>
        <p>Fig. 5 shows the result of applying TArray on the automaton
in Fig. 4.</p>
        <p>The output of this transformation satisfies the following
property: The model does not contain arrays.</p>
        <p>TF latten flattens the structures, i.e., 1) creates a variable
definition for each member of a structure variable definition,
2) converts the expressions involving structure variable to
semantically equivalent flattened expressions. It is defined as
a chain of three transformations:
1) TF lattenExpression: flattens the structure expressions,
e.g., an expression x == y, will be converted to a
conjunction of a list of equality expressions of the form
x:f ieldi == y:f ieldi.
2) TT oNonStructExpressions: replaces the flattened
expression with member access to the corresponding variable
created for the structure member. The model is
inconsistent after this transformation.
3) TflattenV ariableDefinitions: flattens a variable definition,
i.e., creates a variable for each member of a structure
variable.</p>
        <p>The output of this transformation satisfies the property: The
model does not contain structures.</p>
        <p>
          Note that the decomposition in modular transformations
enables the handling of nested arrays and structures in an easy
manner, a feature which was not supported in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ].
        </p>
      </sec>
      <sec id="sec-2-3">
        <title>5) Causality transformation: As described in subsection</title>
        <p>II-C, AF3 supports two kinds of causalities: strong and weak.
We convert the strongly causal components to weakly causal
components and add a delay, which can be seen as
transforming a Moore machine to a Mealy machine. This allows us to
reuse the transformation of a weakly causal atomic component
to the model checker.</p>
        <p>The approach is as follows: 1) add a state variable for every
output port, 2) assign each of these state variables the value
which was assigned to the corresponding output port, and 3)
assign the values of these state variables to output ports.</p>
        <p>Fig. 7 shows the result of applying TCausality on the
automaton in Fig. 6.</p>
      </sec>
      <sec id="sec-2-4">
        <title>After the execution of this transformation all the components are weakly causal.</title>
        <p>Once this chain of transformations is executed our AF3
model is considered normalized. It has the following
properties:
1) All variable, component, transition, function, etc. names
are unique.
2) All atomic components are specified as state automata.
3) All ports carry a value.
4) The model contains only simple types, i.e., no arrays or
structures.
5) All components are weakly causal.</p>
        <p>The normalized component can be transformed to a nuXmv
module in an easier way. Note that it is still not a canonical
transformation.</p>
      </sec>
      <sec id="sec-2-5">
        <title>B. Transformation to NuXmv</title>
        <p>The second top level transformation TnuXmv transforms
a normalized AF3 model to a nuXmv model. The first step
generates a nuXmv model, and the second one is a
model-totext transformation which is straightforward and therefore not
discussed in this paper.</p>
        <p>NuXmv</p>
        <p>Module</p>
        <p>Module parameter
Define (a named expression)</p>
        <p>State variable
Not transformed explicitly</p>
        <p>Define (a named expression)
1) transition (T RAN S) constraint</p>
        <p>for state variable
2) case statement for output ports</p>
        <p>TABLE I</p>
        <p>MAPPING OF AF3 AND NUXMV ELEMENTS</p>
        <p>This transformation seems counterintuitive, but it was
designed this way as the intuitive transformation is erroneous
in the case of non-deterministic automata. As an example,
consider a component with a boolean output port o and
behavior expressed as the state automaton given in Fig. 8.
There is a non-determinism between T 1 and T 2. Intuitively,
this automaton would be transformed to:
DEFINE o : = c a s e
( s = s 1 ) &amp; TRUE : TRUE ;
( s = s 1 ) &amp; TRUE : FALSE ;
e s a c ;
T1</p>
        <p>T2
TRANS ( s = s 1 &amp; TRUE )
TRANS ( s = s 1 &amp; TRUE )
&gt; n e x t ( s ) = s 2 ;
&gt; n e x t ( s ) = s 3 ;</p>
        <p>
          Here, although the next state of the automaton might be
s3 (i.e., T 2 is executed), o will be always assigned T RU E
(corresponding to the case T 1) as it is the first satisfying
case. This kind of description leads to outputs being updated
incorrectly in case of non-determinism, which precisely was
a bug in [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ].
        </p>
        <p>Modeling the chosen transition explicitly instead of
inferring it from the change in state enables us to solve this issue.
Instead of modeling the automaton as evolution of states,
we model it as a sequence of transitions. Our transformation
specifies the automaton in Fig. 8 as:
DEFINE o : = c a s e
( t = T1 ) : TRUE ;
( t = T2 ) : FALSE ;
e s a c ;</p>
        <p>Here, outputs are updated correctly depending on which
transition is taken. Note that the transition is initialized with
dummy val; it is necessary as there is no initial transition of
a state automaton.</p>
        <p>We now briefly describe the technicalities of this
transformation. Let us consider a state automaton with states S ,
transitions T , where each transition consists of a guard and
a set of actions fT 2 T = (Tguard; Tactions)g, each action
is of the form v := e. Sin T , and Sout T denote the
set of incoming and outgoing transitions for the state S 2 S .
t is a nuXmv variable representing the transition chosen for
execution. Now we describe the module specification.</p>
        <p>We generate the following sets of transition constraints:
fT RAN S t 2 Sin ! next(t) 2 Sout jS 2 Sg
fT RAN S t = T ! execute(Tactions)j T : T g
execute(tactions)</p>
        <p>fnext(v) := e j (v := e) 2 Tactionsg</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>We generate the following set of invariants:</title>
      <p>fI N V AR t = T ! Tguard j T : T g</p>
      <p>An output port op transformed to a define op0 is assigned a
value given by a case expression with cases</p>
      <p>ft = T ! Tactions[op0]:valueg
where Tactions[op0]:value represents the value assigned to op0
in the transition actions for the transition T .</p>
      <p>We also initialize the automaton with INIT constraint, with
initial values of the state variables.</p>
      <sec id="sec-3-1">
        <title>C. Counterexample transformation</title>
        <p>The user needs to observe a trace returned by the model
checker in AF3. A counterexample trace is a sequence of
trace steps at the nuXmv level: each trace step assigns a
value to every variable of the analysed nuXmv module. For
usability, we need however to express this trace back in a
sequence at the AF3 level: we should assign values to AF3
ports. Consequently, we should transform nuXmv variables
back to AF3 variables. Intuitively, we should reuse the
forward transformation to ensure that both transformations are
always coherent. Both transformations go however in opposite
directions, so it is not possible to use the same transformation
trivially.</p>
        <p>We actually need on one hand to transform AF3 ports into
nuXmv variables (to reuse the transformation), and on the
other hand to transform nuXmv valuations into AF3 ones (to
lift the results back at the user level). To do so, we introduce a
symbolic operator [e] denoting the evaluation of an expression
e in (a given step of) the trace. The concrete evaluation of this
operator is trivial for nuXmv variables, e.g., evaluating [ip40]
is as simple as reading its value in the trace. Our objective is
however to find out the concrete evaluation of this operator
for AF3 ports, e.g., [ip]. We therefore need to express the
evaluation of an AF3 port in terms of the (trivial) evaluation
of a nuXmv variable. This can be achieved simply by applying
the following subsequence of the original transformation to
this epxression:</p>
        <p>TCE = TName; TNoV al; TP roductT ypes</p>
        <p>Note that not all transformations are necessary here, e.g.,
the transformation TCodeSpec (Section III-A2) is irrelevant for
the counterexample interpretations as this transformation deals
only with representation of the component’s behavior. We
therefore do not use it in our counterexample transformation.
However, the transformation TNoV al (Section III-A3) changes
the behavior of the component and affects how the port values
are interpreted, and therefore is a part of the composition
chain.</p>
      </sec>
      <sec id="sec-3-2">
        <title>D. Specifications</title>
        <p>We support LTL formulas in the form of verification
patterns, and also LTL contracts in the form of assume-guarantee
expressions. Here as well we reuse a part of the chain T (eqn.
1, 2) for transforming specifications.</p>
        <p>TSpec = TNames; TNoV al; TP roductT ypes; TnuXmv</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>As an example, a specification is transformed to</title>
      <p>Always (op 6= N oV al &amp;&amp; op)
G(op 24 P RESEN T &amp; op 24)</p>
    </sec>
    <sec id="sec-5">
      <title>IV. USE CASE</title>
      <p>
        As a case study we successfully ran various formal
verification checks: state reachability, non-determinism, port bound
violation checks, on a model of a pick and place unit (PPU)2
[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] presented in Fig. 9. A PPU picks a work piece from one
place and places it at another place, as shown in Fig. 9:
1) Stack: Input storage of work pieces.
2) Ramp: Output storage for work pieces.
      </p>
    </sec>
    <sec id="sec-6">
      <title>2www.ppu-demonstrator.org</title>
    </sec>
    <sec id="sec-7">
      <title>3) Stamp: Used to stamp work pieces.</title>
      <p>4) Crane: Used for picking and placing work pieces between
above 3 stations.</p>
      <p>Work pieces can be metallic or black plastic. The PPU picks
up the work piece from the stack and processes it. The crane
picks up a work piece from the stack. If the work piece is
black plastic it is transported to the ramp, if it is metallic then
it is transported to the stamp: where it is stamped, and then
the stamped piece is transported to the ramp by the crane.</p>
      <p>The PPU model in AF3 is a big model which uses a
wide range of features provided by AF3: both strong and
weak causalities, product types, user defined functions, code
specifications, state automatons. We checked state
reachability, non-determinism and ports’ bound violation on this
model. We found that in particular stamp automaton was
nondeterministic.</p>
      <p>
        The closest related work to our approach is the older
implementation of formal verification support for AutoFOCUS3
[
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Our solution is modular, of a better quality (fixed known
bugs), supporting more features: product types, user defined
functions, support for different causalities, and better support
for counterexample simulation.
      </p>
      <p>
        mbeddr [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] also supports formal verification using CBMC3
on the generated C code, however, it is not a high-level to
low-level transformation, as the input to CBMC is C code.
      </p>
      <p>Simulink Design Verifier4, Scade Suite5, Dezine6 are
professional tools which support formal analyses requiring a
behavioral transformation but their details are not public for
comparison.</p>
      <p>
        The work [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] describes a two step transformation from
Scade to SMT for the purpose of verification. The first
step transforms a Scade model to an intermediary language
(called LAMA) program, and second step transforms a LAMA
program to SMT. This transformation is not modular and does
      </p>
    </sec>
    <sec id="sec-8">
      <title>3http://www.cprover.org/cbmc/</title>
      <p>4https://www.mathworks.com/
5http://www.esterel-technologies.com/
6http://www.verum.com/
not supports reverse transformation (note in addition that this
is a master thesis written in German).</p>
      <p>
        A transformation from a DSL to Event-B [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] is described
in [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ]. This transformation targets a DSL, whereas AF3 is
more general and has a wider area of application. Secondly,
this transformation does not support reverse transformation,
instead the DSL program is simulated in a simulator for
Event
      </p>
      <p>The GEMOC7 initiative aims at the conceptual globalization
of modeling languages. They target the automated processing
of heterogeneous modeling languages, and provide framework
for coordinated execution. Even though dealing with execution
semantics at different levels of abstraction, the approach used
to solve the problem is not based on model transformation and
therefore not relevant for our work.</p>
    </sec>
    <sec id="sec-9">
      <title>VI. CONCLUSION</title>
      <p>We have implemented the transformation of AutoFOCUS3
models to nuXmv models. We have used this transformation
to apply formal verification on model of a pick and place unit.</p>
      <p>This complex transformation provides new insights on what
is required by a model transformation such that it can be
reused with ease. In fact, systematizing model transformation
reuse is one of our future work which would be useful for the
community. Secondly, we plan work on reasoning about the
model transformations: find a set of properties we can verify,
and find (or define if needed) a language suitable to express
such properties.</p>
      <p>
        Acknowledgments. This work builds on top of the work
done by Daniel Ratiu who implemented the original
transformation of [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>V.</given-names>
            <surname>Aravantinos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Voss</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Teufl</surname>
          </string-name>
          ,
          <string-name>
            <surname>F.</surname>
          </string-name>
          <article-title>Ho¨lzl, and B</article-title>
          . Scha¨tz, “
          <article-title>AutoFOCUS 3: Tooling concepts for seamless, model-based development of embedded systems,” in ACES-MB&amp;</article-title>
          <string-name>
            <surname>WUCOR@ MoDELS</surname>
          </string-name>
          ,
          <year>2015</year>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>26</lpage>
          . [Online]. Available: http://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>1508</volume>
          /paper4.pdf
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>R.</given-names>
            <surname>Cavada</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Cimatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Dorigatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Griggio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mariotti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Micheli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mover</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Roveri</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Tonetta</surname>
          </string-name>
          , “The nuXmv Symbolic Model Checker,” in CAV,
          <year>2014</year>
          , pp.
          <fpage>334</fpage>
          -
          <lpage>342</lpage>
          . [Online]. Available: http://dx.doi.
          <source>org/10.1007/978-3-319-08867-9 22</source>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>A.</given-names>
            <surname>Cimatti</surname>
          </string-name>
          ,
          <string-name>
            <given-names>E. M.</given-names>
            <surname>Clarke</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Giunchiglia</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Roveri</surname>
          </string-name>
          , “
          <article-title>NUSMV: A new symbolic model verifier</article-title>
          ,” in CAV,
          <year>1999</year>
          , pp.
          <fpage>495</fpage>
          -
          <lpage>499</lpage>
          . [Online]. Available: http://dx.doi.
          <source>org/10.1007/3-540-48683-6 44</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>A.</given-names>
            <surname>Campetelli</surname>
          </string-name>
          ,
          <string-name>
            <surname>F.</surname>
          </string-name>
          <article-title>Ho¨lzl, and</article-title>
          <string-name>
            <given-names>P.</given-names>
            <surname>Neubeck</surname>
          </string-name>
          , “
          <article-title>User-friendly model checking integration in model-based development</article-title>
          ,” in CAINE,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>M.</given-names>
            <surname>Broy</surname>
          </string-name>
          and
          <string-name>
            <given-names>K.</given-names>
            <surname>Stølen</surname>
          </string-name>
          ,
          <source>Specification and Development of Interactive Systems: Focus on Streams, Interfaces, and Refinement</source>
          . Springer New York,
          <year>2001</year>
          . [Online]. Available: https://books.google.de/books? id=A13SBNBSUIsC
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>B.</given-names>
            <surname>Vogel-Heuser</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Legat</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Folmer</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Feldmann</surname>
          </string-name>
          , “
          <article-title>Researching evolution in industrial plant automation: Scenarios and documentation of the pick and place unit,” Technische Universita¨t Mu¨nchen</article-title>
          ,
          <source>Tech. Rep.</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>M.</given-names>
            <surname>Voelter</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Ratiu</surname>
          </string-name>
          ,
          <string-name>
            <surname>B.</surname>
          </string-name>
          <article-title>Scha¨tz, and</article-title>
          <string-name>
            <given-names>B.</given-names>
            <surname>Kolb</surname>
          </string-name>
          , “
          <article-title>mbeddr: an extensible c-based programming language and IDE for embedded systems</article-title>
          ,” in SPLASH,
          <year>2012</year>
          , pp.
          <fpage>121</fpage>
          -
          <lpage>140</lpage>
          . [Online]. Available: http://doi.acm.
          <source>org/10</source>
          .1145/2384716.2384767
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>H.</given-names>
            <surname>Basold</surname>
          </string-name>
          , “
          <article-title>Transformation von scade-modellen zur smt-basierten verifikation</article-title>
          ,
          <source>” CoRR</source>
          , vol.
          <source>abs/1403.2752</source>
          ,
          <year>2014</year>
          . [Online]. Available: http://arxiv.org/abs/1403.2752
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>J.-R.</given-names>
            <surname>Abrial</surname>
          </string-name>
          ,
          <article-title>Modeling in Event-B: system and software engineering</article-title>
          . Cambridge University Press,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>U.</given-names>
            <surname>Tikhonova</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Manders</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Brand</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Andova</surname>
          </string-name>
          , and T. Verhoeff, “
          <article-title>Applying model transformation and Event-B for specifying an industrial DSL</article-title>
          ,” pp.
          <fpage>41</fpage>
          -
          <lpage>50</lpage>
          . [Online]. Available: http://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>1069</volume>
          /07-paper.pdf
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>