<!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>Temporal Logic Speci cation and Analysis for Model Transformations</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>S. Yassipour-Tehrani</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>K. Lano</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Dept of Informatics, King's College London</institution>
          ,
          <addr-line>Strand, London</addr-line>
          ,
          <country country="UK">UK</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>In this paper we outline an approach for using temporal logic specifications and model-checking tools to express and verify model transformation properties. Linear Temporal Logic (LTL) is used to express transformation semantics, and the SMV formalism is used to encode this semantics and to perform model checking. Model transformations may be defined in a large number of different languages such as ATL [6], QVT-R [13], QVT-O, ETL [7], and UML-RSDS [9]. In [11, 10] we have described work on the verification of transformations based on translations from MT languages into a semantic representation or intermediate language, and formal analysis upon this representation. This translation explicitly encodes some aspects of the computational model of the MT languages (such as the twophase execution of ATL transformations), however fine-grain temporal orderings (eg., that QVT-R relations quoted in the when clause of another relation should execute prior to the quoting relation [13]) are only implicitly expressed. Most declarative and hybrid transformation languages have a common execution semantics which consists of applying individual transformation rules to specific source model elements. The order of rule applications may be only partly constrained by the specification. This execution model fits well with the concepts of linear time temporal logic, which defines properties over sequences of states using the operators ⃝ (in the next state), ⋄ (in the current or some future state), 2 (in the current and all future states), (strictly in the past). For example, to express that some properties Inv are invariant throughout the transformation execution, given a precondition Asm, we could write:</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        Asm ⇒ 2Inv
Thus LTL is an appropriate formalism to enhance the approach of [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] with
detailed computation semantics.
      </p>
      <p>
        Temporal logic is also useful to define transformation requirements in a formal
but language-independent manner. This use of LTL accords with the KAOS
requirements engineering method [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ]. In KAOS, system goals are formalised
according to the pattern of behaviour they require. Four generic goal patterns
are identified by KAOS:
1. Achieve: G ⇒ ⋄Q – Q holds in some future state.
2. Cease: G ⇒ ⋄¬ Q – There will be some point in the future where Q does
not hold
3. Maintain: G ⇒ 2Q – Q holds in all future states
4. Avoid: G ⇒ 2¬ Q – Q will never hold in the future.
      </p>
      <p>
        Transformation postconditions Q are a special case of the Achieve pattern, where
Q remains true after it has been established: G ⇒ ⋄2Q . The Cease pattern
applies particularly for quality improvement requirements of refactoring
transformations: that at some stage in the transformation, an example of poor
structure/low quality in the model will be eliminated. The Maintain pattern applies
for transformation invariants. The Avoid pattern applies for safety requirements,
where the transformation (eg., for a safety-critical control functionality) must
never enter some hazardous states [
        <xref ref-type="bibr" rid="ref3 ref4">3, 4</xref>
        ].
      </p>
      <p>In Section 2 we identify how transformation semantics can be expressed in
LTL. In Section 3 we describe how this semantics can be represented in the
SMV/nuSMV formalism. In Section 4 we give a specific example of the approach
applied to the VOLT UML to RDB case study.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Transformation semantics and temporal logic</title>
      <p>A model transformation is typically specified by a finite collection of
transformation rules, r1, ..., rn which apply a source-target mapping or in-place source
model rewrite for source model elements which satisfy the enabling condition
en(ri ) of the rule1. The application of a rule r to specific elements p is written
as r (p). Logically, r (p) can be interpreted as an LTL proposition that the
application occurs at the present time. For simplicity in this paper we will assume
there is only one parameter or ‘pivot element’ s : Si for each rule ri . An
execution history of is then a sequence of rule applications, each of which can only
occur within its enabling condition (WithinEnabling ):
2(∀ s : Si · ri (s) ⇒ en(ri (s)))
2(∀ s : Si · en(r (s)) ⇒ ⋄r (s))
For separate-models transformations where enabled rules remain enabled until
they are applied, and are then disabled, there are the axioms:</p>
      <p>For some languages (such as QVT-R and ATL) there is a distinction between
top-level and subordinate rules: subordinate rules r can only occur if they are
invoked by another rule (InvokedRules):
2(r (s′) ⇒</p>
      <p>∨i ∃ s : Si · ri (s))
1 The enabling condition may include both positive and negative application
conditions.
where the disjunction ranges over all other rules ri which directly invoke r , this
disjunction is false if there are no such rules, so that r cannot occur in such a
case. At each step only one top-level rule application can occur (RuleExclusion):
2(∀ s; s′ : Si · ri (s) ∧ s′ ̸= s</p>
      <p>⇒ ¬ ri (s′))
for each top-level ri , and 2(∀ s : Si · ri (s) ⇒ ¬ (∃ s′ : Sj · rj (s′))) for each
top-level rule rj , i ̸= j .</p>
      <p>In QVT-R (separate-models mode) and ATL, a top relation cannot be
reapplied to the same model element (NoReapplication):
2(∀ s : Si · ri (s) ⇒</p>
      <p>⃝ 2¬ ri (s))
for all top-relations ri .</p>
      <p>To express that one rule r ′ always has priority over another rule r , we can
write (Priority ):
2(en(r ′(s)) ∧ en(r (s)) ⇒ ¬ r (s))</p>
      <p>
        The following conditions may be checked in order to verify a transformation
or to identify errors in its specification:
{ Any required invariant Inv is maintained throughout the transformation
execution: Asm ⇒ 2Inv
{ Any required overall postcondition must eventually be true (and remain
true): Asm ⇒ ⋄ 2Post
{ Non-triviality: that each top-level rule will eventually be applied: ⋄r (p)
Such properties can be checked for specific transformations using a LTL theorem
prover such as SPASS, or a model checker, such as SMV/nuSMV [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
3
      </p>
    </sec>
    <sec id="sec-3">
      <title>Encoding transformation semantics in SMV</title>
      <p>
        We utilise the SMV/nuSMV language and model checker to analyse temporal
properties of transformations. We select SMV because it is an established
formalism which supports LTL, and because there is already a mapping from UML
to SMV implemented in the UML-RSDS tools [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. SMV models systems in
modules, which may contain variables ranging over finite domains such as subranges
a..b of natural numbers and enumerated sets. The initial values of variables are
set by initialisation statements init (v ) := e. A next (v ) := e statement
identifies how the value of variable v changes in execution steps of the module. In the
UML to SMV encoding of [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], objects are modelled by integer object identities,
attributes and associations are represented as variables, and classes are
represented by modules parameterised by the object identity values (so that separate
copies of the variables exist for each object of the class). A specific numeric upper
bound must be given for the number of possible objects of each class. Models
of arbitrary size can be represented by varying this bound. A transformation
is modelled by modelling transformation execution steps as module execution
steps: the application of a particular rule to particular pivot instance(s). The
temporal logic operators are denoted in SMV by G (for 2), F (for ⋄), X (for
⃝) and O (for ).
      </p>
      <p>The structure of an SMV specification of a class diagram is as follows:</p>
      <sec id="sec-3-1">
        <title>MODULE main VAR</title>
      </sec>
      <sec id="sec-3-2">
        <title>C : Controller;</title>
      </sec>
      <sec id="sec-3-3">
        <title>MEntity1 : Entity(C,1); .... other object instances ....</title>
      </sec>
      <sec id="sec-3-4">
        <title>MODULE Controller VAR</title>
      </sec>
      <sec id="sec-3-5">
        <title>Entityid : 1..n; event : { createEntity, killEntity, event1, ..., eventn };</title>
      </sec>
      <sec id="sec-3-6">
        <title>MODULE Entity(C, id)</title>
        <p>VAR
alive : boolean;
... attributes of Entity ...</p>
      </sec>
      <sec id="sec-3-7">
        <title>DEFINE</title>
        <p>TcreateEntity := C.event = createEntity &amp; C.Entityid = id;
TkillEntity := C.event = killEntity &amp; C.Entityid = id;
Tevent1 := C.event = event1 &amp; C.Entityid = id &amp; alive = TRUE;
... transitions for each event ...</p>
      </sec>
      <sec id="sec-3-8">
        <title>ASSIGN init(alive) := FALSE; next(alive) := case</title>
      </sec>
      <sec id="sec-3-9">
        <title>TcreateEntity : TRUE;</title>
      </sec>
      <sec id="sec-3-10">
        <title>TkillEntity : FALSE;</title>
      </sec>
      <sec id="sec-3-11">
        <title>TRUE : alive; esac;</title>
        <p>Each class Entity is represented in a separate module, and each instance is
listed as a module instance in the main module. System events are listed in the
Controller, and the effect of these events on specific objects are defined in the
module specific to the class of that object. The value of the Controller variable
event in each execution step identifies which event occurs, and the value of the
appropriate Eid variable indicates which object of class E the event occurs on.
Associations r : A → B of 1-multiplicity are represented as attributes
r : 0..bcard
where bcard is the maximum permitted number of objects of B . Events to set
and unset this role are included. 0 represents the null object (for 0..1-multiplicity
roles). For *-multiplicity unordered roles r : A → Set(B ), an array representation
is used instead:
r : array 1..bcard of 0..1
with the presence/absence of a B element with identity value i being indicated
by r [i ] = 1 or r [i ] = 0. Operations to add and remove elements are provided. The
Controller Aid and Bid variables identify which links are being added/removed.</p>
        <p>For separate-model (mapping) model transformations, this representation is
extended as follows:
{ No killE or createE events for source model entities are included: the source
model is assumed to exist initially and its elements are read-only.
{ Both source model and target model entity types are represented by SMV
modules. Source entity attributes are defined as frozen variables (they
cannot be changed after initialisation). The transformation steps are defined as
controller events, with the effect of these steps being defined in one or more
target entity modules. Target entity modules have the modules of the source
entities they depend upon as parameters.</p>
        <p>In this encoding the axioms (RuleExclusion) and (InvokedRules) are true by
construction of the model, whilst (WithinEnabling) is a property which should
be assumed. (NoReapplication) is added as a logical assumption if the
transformation satisfies this semantics.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Example speci cation and analysis</title>
      <p>
        We consider the execution semantics and analysis of QVT-R, and specifically
analyse the case study transformation, from UML to relational databases, as
given in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]:
transformation uml2rdb(uml1 : SimpleUML, rdb1 : SimpleRDMS) {
top relation Package2Schema
{ checkonly domain uml1 p : Package { name = pn }
      </p>
      <p>enforce domain rdb1 s : Schema { name = pn }
}
}
}
}
top relation Class2Table
{ checkonly domain uml1 c : Class { namespace = p : Package {}, name = n };
enforce domain rdb1 t : Table { schema = s : Schema {}, name = n };
when { Package2Schema(p,s); }
where { Attribute2Column(c,t); }
relation Attribute2Column
{ checkonly domain uml1 c : Class { attribute =</p>
      <p>a : Attribute { name = an, type = typ : Type { name = tn } } };
enforce domain rdb1 t : Table { column =</p>
      <p>col : Column {name = an, coltype = tn} };</p>
      <p>A computation step of a QVT-R transformation consists of the application
of a top relation to specific model elements matching its source domains. The
application of non-top relations invoked (in a where clause) directly or indirectly
from this top relation application are included in the computation step.</p>
      <p>In contrast, a relation application in a when clause indicates that the
application must have occurred strictly prior to the current relation application:
indeed the previous application of the relation is part of the enabling condition
of the current relation (WhenCond ):
en(Class 2Table(c)) ⇒</p>
      <p>Package2Schema(c:namespace)</p>
      <p>An individual application of Package2Schema must achieve its specific
postcondition (PostDef ):</p>
      <sec id="sec-4-1">
        <title>Package2Schema(p) ⇒ ⃝ ∃ s : Schema · s:name = p:name</title>
        <p>Likewise for Class2Table and Attribute2Column. A desirable invariant of the
transformation is that the only schemas which exist are those that correspond
to a package: ∀ s : Schema · ∃ p : Package · s:name = p:name. There are similar
properties for tables and columns.</p>
        <p>Model-checking can identify errors in such specifications, using the LTL
semantics. For example, if the specifier had mistakenly written Attribute2Column
in the when clause of Class2Table, and Package2Schema in the where clause.
This would mean that Attribute2Column cannot occur (by axiom InvokedRules ),
and consequently that Class2Table cannot occur (by WhenCond ). This error
would be identified by the generation of a counter-example to the non-triviality
property (Section 2).</p>
        <p>In QVT-R, priorities between rules are typically enforced using flag variables
and specific conditions depending upon these in when clauses. Model-checking
can verify if such a scheme correctly achieves the required priority ordering.</p>
        <p>
          To map QVT-R to SMV, we first map QVT-R to UML-RSDS, using the
UML-RSDS tools [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ], and then use the UML to SMV translator to define the
basic SMV structure for the transformation. If a transformation rule r iterates
over s : Si and has the UML-RSDS form
        </p>
      </sec>
      <sec id="sec-4-2">
        <title>Ante ⇒ Tj →exists (t | TCond &amp; P )</title>
        <p>then the SMV module for Tj has a parameter of module type Si , and r is an
event of the Controller , and Si id is a Controller variable. An axiom asserts that
r (s) can only take place if Ante holds.</p>
        <p>The Tj module has a transition defined as</p>
        <p>Tr := C.event = r &amp; C.Siid = id
identifying that the application of r takes place on the Si object with id equal
to the current Tj object. The updates to features f of t defined in TCond , P are
then specified by next (f ) statements, using Tr as a condition, and next (alive) is
set to TRUE under condition Tr .</p>
        <p>The restrictions of SMV/nuSMV imply that only attributes and expressions
of the following kinds can be represented in SMV:
{ Booleans and boolean operations.
{ Integers and operations on integers within a bounded range.
{ Strings represented as elements of an enumerated type. String operations
cannot be represented.</p>
        <p>Currently the details of transformation steps are manually encoded in SMV.</p>
        <p>Part of the SMV specification for the example transformation, in a
configuration with one package and two classes, is:</p>
        <sec id="sec-4-2-1">
          <title>MODULE main VAR</title>
        </sec>
        <sec id="sec-4-2-2">
          <title>C : Controller;</title>
        </sec>
        <sec id="sec-4-2-3">
          <title>MPackage1 : Package(C,1);</title>
        </sec>
        <sec id="sec-4-2-4">
          <title>MClass1 : Class(C,1);</title>
        </sec>
        <sec id="sec-4-2-5">
          <title>MClass2 : Class(C,2);</title>
        </sec>
        <sec id="sec-4-2-6">
          <title>MSchema1 : Schema(C,MPackage1,1);</title>
        </sec>
        <sec id="sec-4-2-7">
          <title>MTable1 : Table(C,MClass1,1);</title>
        </sec>
        <sec id="sec-4-2-8">
          <title>MTable2 : Table(C,MClass2,2);</title>
        </sec>
        <sec id="sec-4-2-9">
          <title>MODULE Controller VAR</title>
        </sec>
        <sec id="sec-4-2-10">
          <title>Packageid : 1..1;</title>
          <p>Classid : 1..2;
Schemaid : 1..1;
Tableid : 1..2;
event : { Package2Schema, Class2Table };</p>
        </sec>
        <sec id="sec-4-2-11">
          <title>MODULE Package(C, id)</title>
        </sec>
        <sec id="sec-4-2-12">
          <title>FROZENVAR name : { string1, string2, string3 };</title>
        </sec>
        <sec id="sec-4-2-13">
          <title>MODULE Schema(C, P, id)</title>
          <p>VAR
alive : boolean;
name : { empty, string1, string2, string3 };</p>
        </sec>
        <sec id="sec-4-2-14">
          <title>DEFINE</title>
          <p>TPackage2Schema := C.event = Package2Schema &amp; C.Packageid = id;</p>
        </sec>
        <sec id="sec-4-2-15">
          <title>ASSIGN init(alive) := FALSE; next(alive) := case</title>
        </sec>
        <sec id="sec-4-2-16">
          <title>TPackage2Schema : TRUE;</title>
        </sec>
        <sec id="sec-4-2-17">
          <title>TRUE : alive;</title>
          <p>esac;
init(name) := empty;
next(name) :=
case</p>
        </sec>
        <sec id="sec-4-2-18">
          <title>TPackage2Schema : P.name;</title>
        </sec>
        <sec id="sec-4-2-19">
          <title>TRUE : name; esac;</title>
          <p>This represents the effect of the Package2Schema(p) event, as the creation
of a Schema instance and the setting of its name. The axioms (PostDef ) are
ensured by construction of this model, whilst the axioms (WhenCond ) need
to be assumed as conditions. For this transformation these axioms would be
expressed as assumptions:
2(C :event = Class2Table ∧ C :Classid = c ⇒</p>
          <p>(C :event = Package2Schema ∧ C :Packageid = MClassc:namespace))
asserted for each integer c from 1 up to the number of Class instances in the
source model. (NoReapplication) is expressed by assumptions
2(C :event = Class2Table ∧ C :Classid = c ⇒</p>
          <p>⃝2(C :event = Class2Table ⇒ C :Classid ̸= c))
for each class identity c, and similarly for the other top relations.</p>
          <p>The effect of the where clause of Class2Table is expressed in the Column
module, as the (simultaneous) creation and update of columns for each attribute
linked to the transformed class. The invariant that each existing schema
corresponds to a package can be verified in nuSMV as:
LTLSPEC G(MSchema1.alive = TRUE -&gt; MSchema1.name = MPackage1.name)
This could alternatively be expressed by an INVAR assertion.</p>
          <p>The results of counter-example analysis are presented as sequences of states
which directly correspond to traces of the transformation execution. These can
be readily understood in terms of the original model and transformation rules,
or could be processed into a graphical form. An example counterexample trace
is:
-- specification G ((C.event = Class2Table &amp; C.Classid = 1) -&gt;</p>
          <p>O(C.event = Package2Schema &amp; C.Packageid = MClass1.namespace)) is false
-- as demonstrated by the following execution sequence</p>
        </sec>
        <sec id="sec-4-2-20">
          <title>Trace Description: LTL Counterexample</title>
        </sec>
        <sec id="sec-4-2-21">
          <title>Trace Type: Counterexample</title>
          <p>-&gt; State: 1.1
&lt;</p>
          <p>C.Classid = 1
C.event = Class2Table
C.Tableid = 1
MPackage1.name = string1
MClass1.name = string1
.... details omitted ....</p>
          <p>MTable1.alive = FALSE
MTable1.name = empty
MSchema1.TPackage2Schema = FALSE
MTable1.TClass2Table = TRUE</p>
          <p>MTable2.TClass2Table = FALSE
-&gt; State: 1.2
&lt;</p>
          <p>C.event = Package2Schema
MTable1.alive = TRUE
MTable1.name = string1
MSchema1.TPackage2Schema = TRUE</p>
          <p>MTable1.TClass2Table = FALSE
...</p>
          <p>Validated properties are reported as true, for example:</p>
        </sec>
        <sec id="sec-4-2-22">
          <title>NuSMV &gt; read_model -i volt.smv</title>
        </sec>
        <sec id="sec-4-2-23">
          <title>NuSMV &gt; go</title>
          <p>-- specification G (MSchema1.alive = TRUE -&gt; MSchema1.name = MPackage1.name) is true</p>
        </sec>
        <sec id="sec-4-2-24">
          <title>NuSMV &gt;</title>
          <p>
            We tested the efficiency of the nuSMV analysis using source models of sizes
3 (1 package and 2 classes), 6 (1 package and 5 classes), 11 (1 package and
10 classes) and 21 (1 package and 20 classes), with the invariant property G
(MSchemai.alive = TRUE -&gt; MSchemai.name = MPackagei.name) being checked
for all classes and packages i . Table 1 shows the results.
Model checkers and satisfaction checkers such as Alloy and Z3 have been
applied to identify counter-examples to required transformation outcomes [
            <xref ref-type="bibr" rid="ref1 ref8">1, 8</xref>
            ].
Some temporal logic analysis (in ASK-CTL) is supported by the translation from
QVT-R to coloured Petri Nets in [
            <xref ref-type="bibr" rid="ref5">5</xref>
            ]. A manual translation from graph
transformations (in AGG) to the Bogor model checker is described in [
            <xref ref-type="bibr" rid="ref2">2</xref>
            ]. Model-checking
techniques for graph transformations are compared in [
            <xref ref-type="bibr" rid="ref14">14</xref>
            ]: a translation into
SPIN/Promela is compared with the GROOVE checker, which operates directly
upon graph transformations. The new contribution of this paper is to define a
general temporal logic semantics for MT languages, which can be specialised
to reflect the semantics of individual languages. The temporal logic semantics
enhances the existing translations from MT languages to T MM/UML-RSDS
by defining the permitted computation sequences of transformations. Analysis
in nuSMV provides an additional semantic analysis enabling proof and
counterexample detection for transformations. The nuSMV checker supports expression
of invariants, variants, time bounds between events and regular expression
constraints on transformation execution histories via our encoding [
            <xref ref-type="bibr" rid="ref12">12</xref>
            ].
6
          </p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Conclusions</title>
      <p>We have described an approach for the specification and analysis of model
transformations using linear temporal logic and the nuSMV model checker. This
approach has been implemented by a translation from UML-RSDS to nuSMV.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>K.</given-names>
            <surname>Anastasakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Bordbar</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Kuster</surname>
          </string-name>
          ,
          <source>Analysis of Model Transformations via Alloy</source>
          ,
          <year>Modevva 2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <given-names>L.</given-names>
            <surname>Baresi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Rafe</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Rahmani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Spoletini</surname>
          </string-name>
          ,
          <article-title>An efficient solution for model checking graph transformation systems</article-title>
          , ENTCS, May
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <given-names>B.</given-names>
            <surname>Becker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Beyer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Giese</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Klein</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Schilling</surname>
          </string-name>
          ,
          <article-title>Symbolic invariant verification for systems with dynamic structural adaption</article-title>
          ,
          <source>ICSE</source>
          <year>2006</year>
          , ACM Press.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>B.</given-names>
            <surname>Becker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Lambers</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Dyck</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Birth</surname>
          </string-name>
          ,
          <string-name>
            <given-names>H.</given-names>
            <surname>Giese</surname>
          </string-name>
          ,
          <article-title>Iterative development of consistency-preserving rule-based refactorings</article-title>
          ,
          <source>ICMT</source>
          <year>2011</year>
          , LNCS vol.
          <volume>6707</volume>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>E.</given-names>
            <surname>Guerra</surname>
          </string-name>
          , J. de Lara,
          <article-title>Colouring: execution, debug and analysis of QVT-Relations transformations through coloured Petri Nets</article-title>
          , SoSyM vol.
          <volume>13</volume>
          , no.
          <issue>4</issue>
          ,
          <string-name>
            <surname>Oct</surname>
          </string-name>
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Eclipsepedia</surname>
          </string-name>
          , ATL User Guide, http://wiki.eclipse.org/ATL/ User Guide -
          <source>The ATL Language</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>D.</given-names>
            <surname>Kolovos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Paige</surname>
          </string-name>
          ,
          <string-name>
            <given-names>F.</given-names>
            <surname>Polack</surname>
          </string-name>
          ,
          <article-title>The Epsilon Transformation Language</article-title>
          ,
          <source>in ICMT</source>
          <year>2008</year>
          , LNCS Vol.
          <volume>5063</volume>
          , pp.
          <fpage>46</fpage>
          -
          <lpage>60</lpage>
          , Springer-Verlag,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>K.</given-names>
            <surname>Lano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kolahdouz-Rahimi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Clark</surname>
          </string-name>
          ,
          <article-title>Comparing verification techniques for model transformations</article-title>
          , Modevva workshop,
          <year>MODELS 2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>K.</given-names>
            <surname>Lano</surname>
          </string-name>
          ,
          <article-title>The UML-RSDS Manual, www</article-title>
          .dcs.kcl.ac.uk/staff/kcl/uml2web/umlrsds.pdf,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <given-names>K.</given-names>
            <surname>Lano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kolahdouz-Rahimi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Clark</surname>
          </string-name>
          ,
          <article-title>Language-independent Model Transformation Verification</article-title>
          ,
          <string-name>
            <surname>VOLT</surname>
          </string-name>
          <year>2014</year>
          , York,
          <year>July 2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <given-names>K.</given-names>
            <surname>Lano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Kolahdouz-Rahimi</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Clark</surname>
          </string-name>
          ,
          <article-title>A framework for model transformation verification</article-title>
          ,
          <source>BCS FACS journal</source>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12. NuSMV, http://nusmv.fbk.eu,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13. OMG, MOF
          <volume>2</volume>
          .0 Query/View/Transformation Specification v1.
          <fpage>1</fpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <given-names>A.</given-names>
            <surname>Rensink</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schmidt</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Varro</surname>
          </string-name>
          ,
          <article-title>Model checking graph transformations: A comparison of two approaches</article-title>
          ,
          <source>ICGT</source>
          <year>2004</year>
          , LNCS 3256, pp.
          <fpage>226</fpage>
          -
          <lpage>241</lpage>
          ,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>A.</given-names>
            <surname>Tang</surname>
          </string-name>
          ,
          <article-title>A rationale-based model for architecture design reasoning</article-title>
          , Faculty of ICT, Swinburne University of Technology,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>