<!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>Tool Paper: A Lightweight Formal Encoding of a Constraint Language for DSMLs</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Arnaud Dieumegard</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Marc Pantel</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Guillaume Babin</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Martin Carton</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IRIT ENSEEIHT Universit ́e de Toulouse France</institution>
        </aff>
      </contrib-group>
      <fpage>89</fpage>
      <lpage>104</lpage>
      <abstract>
        <p>Domain Specific Modeling Languages (dsmls) plays a key role in the development of Safety Critical Systems to model system requirements and implementation. They often need to integrate property and query sub-languages. As a standardized modeling language, ocl can play a key role in their definition as they can rely both on its concepts and textual syntax which are well known in the Model Driven Engineering community. For example, most dsmls are defined using mof for their abstract syntax and ocl for their static semantics as a metamodeling dsml. OCLinEcore in the Eclipse platform is an example of such a metamodeling dsml integrating ocl as a language component in order to benefit from its property and query facilities. dsmls for Safety Critical Systems usually provide formal model verification activities for checking models completeness or consistency, and implementation correctness with respect to requirements. This contribution describes a framework to ease the definition of such formal verification tools by relying on a common translation from a subset of ocl to the Why3 verification toolset. This subset was selected to ease efficient automated verification. This framework is illustrated using a block specification language for data flow languages where a subset of ocl is used as a component language.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Domain Specific Modeling Languages (dsmls) are used in many domains where
their capabilities were shown to be very useful for assistance in system and
software engineering activities like requirements analysis, design, automated
generation, validation or verification. The critical system and software industry is
one of the domains where they have been used for many years. This has
allowed to achieve better quality and safety of the products without having their
development cost following exponentially the curve of the systems complexity.</p>
      <p>Beside the obvious advantages of relying on dsml’s for the formalization
of requirements and design elements, and the automation or simplification of
these activities, it remains difficult to convince at the certification level on their
correctness. Formal methods have been used in this purpose and as such have
been proven as being formidable allies, especially for the verification and
validation tasks. In the recent upgrade to level C of aeronautics standards DO-178,
both technologies were introduced as DO-331 for Model Driven Engineering and
DO-333 for Formal Methods. Both documents advocate dsmls use but their
combined use given in DO-333 looks more promising that the lone use of dsmls
in DO-331. Both documents advocate a precise, complete and non-ambiguous
specification of dsmls.</p>
      <p>Their specification usually relies first on the model based definition of their
concepts using a dsml such as the omg Meta Object Facility (mof). These
metamodels are usually completed with static semantics expressed with
constraint languages such as the omg Object Constraint Language (ocl) that
provides first order logic and model navigation construct. It allows specifying the
static properties of the dsml itself and its concepts. Many formal specifications
of both mof and ocl have been conducted to assess their properties, validate
the standards and participate in the verification of their implementation. These
specifications may also provide formal verification tools for models expressed
with these languages. However, this was usually not their main purpose and
thus these tools do not usually behave well on the scalability side. This
contribution targets a more scalable verification dedicated encoding of a subset of ocl
in the Why3 verification toolset that can be reused in different dsmls. These
dsmls rely on this subset of ocl as a component language. One key change is
that the data part of ocl must be adapted to fit the host language.</p>
      <p>The Why and WhyML languages are two complementary languages used
for formal software verification. The first one is a high level specification language
and the second one a powerful programming language (WhyML). In this setting,
programs written using the latter are relying on the formal definitions for types,
theories and functions prototypes defined with the former. The Why3 toolset
provides a harness for the manipulation of both specifications and programs
and also for their translation in order to be verified either automatically using
smt solvers or manually using proof assistants like Coq, PVS or Isabelle.
The Why3 toolset is very powerful in the sense that it allows to benefit from
the combined strengths of each managed smt solver and if necessary to rely on
manual verification for proofs that may be too difficult to achieve automatically.</p>
      <p>
        By providing a formalisation of a subset of the ocl in the Why3 toolset, we
target to build a framework allowing to ease the formal verification of dsmls
implementations and instances. In order to do so, we propose a formal
specification and implementation of a lightweight version of the ocl language. dsmls
specification, expressed using for example mof compliant metamodels and ocl
constraints, or their instances can then be translated to the Why language and
be automatically and formally verified. Such verification can ensure the
correctness of the dsml specification, assess the conformance of its instances, or verify
complex properties on the instances. We have applied this approach for the
verification of correctness properties over the instances of a data flow languages
specification dsml [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>This contribution first pictures our use case and its verification in Section 2.
We then provide in Section 3 our lightweight formal encoding of the selected
subset of ocl using the Why and WhyML languages. We refer to it as lightweight
as it does not covers the whole ocl in order to have a better verification
automation and scalability. We will additionally discuss the coverage of the ocl
specification. We compare our approach to already existing ones in Section 4.
We finally conclude and detail some of our perspectives in Section 5.
2</p>
    </sec>
    <sec id="sec-2">
      <title>OCL as a DSML Component</title>
      <p>As an Object Constraint Language, ocl has been mainly used to define
properties to be verified on class instances in uml. It thus includes first order logic and
query facilities over class instances and its data part is strongly related to the
uml one. In the omg mda proposal, dsmls were first defined as simplified class
diagrams in the mof subset of uml. ocl has then been used to model the static
semantics of the dsml elements. Nowadays, most omg standards rely both on
mof and ocl as specification languages.</p>
      <p>
        These ones are thus now widely known in the software engineering domain.
They can then be used as a language component to be included directly in the
dsml [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] to allow the dsml user to model constraints and queries with a well
known and standard notation. omg already enforces the reuse of its languages
like ocl in the qvt standard. Other dsmls have integrated ocl as a language
component like the use of tocl for the specification of common behavioral
requirements for emf dsml models in[
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] or for execution trace matching in the
feverel dsml [
        <xref ref-type="bibr" rid="ref20">20</xref>
        ], the Event Constraint Language (ecl) which allows to
derive ccsl constraints from emf dsml models [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], the Behavioral Coordination
Operator Language which allows to specify executable model coordination
operators[
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. These dsmls metamodels combine several metamodel components
including the ocl one that relies on identifier to connect to the elements in the
other metamodel components. In the usual integration of ocl in uml or mof,
the ocl expressions are written in contexts that provides the identifiers from the
uml/mof part of the dsml and the data part of ocl is mapped to their data
parts. The identifiers can then be used in the ocl expressions like the names
of classes, attributes, methods and parameters. ocl itself can define identifiers
that bind stronger than the ones from the context. A similar approach is used
to connect ocl with other parts in the dsml metamodel. One key point is to
connect also the ocl data part with the dsml one.
2.1
      </p>
      <p>General approach for the verification of DSMLs
Formalisation of a dsml in order to conduct formal verification activities starts
with the formalisation of the dsml structural elements and their properties. It is
usually achieved by expressing the dsml structure, and its static semantics (the
metamodel and its ocl constraints) with the formalism targeted for the
verification. Two approaches are commonly used in that purpose: on the one hand,
modeling the dsml in the formal verification platform including the model
creation facilities and then building and verifying models directly in such a platform
(a kind of denotational semantics); and on the other hand, providing a
transformation from the dsml to the verification platform that is applied on each
model for verification (a kind of translational semantics). The first one builds
the formal model at the language level, whereas the second one works at the
instance level. In both cases, the writing (either being manual or automated) of
the formal representation is parametrized by the dsml data specification (i.e.
the data that are expressed in the models and verified by the constraints).</p>
      <p>If the dsml relies on an additional language such as ocl as a component to
express properties, it is then also required to translate those properties into the
verification formalism. This work can be leveraged by first providing a
formalisation for the ocl component language and then relying on this formalisation
for the automatic translation of the other parts of the dsml.</p>
      <p>
        Many dsml also include a definition for their execution semantics. This
definition can be directly embedded in the dsml definition[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]; it can also be defined
externally or can be provided using third party component action languages such
as alf1. The execution semantics should also be expressed using the verification
formalism and the associated formal verification platform. This provides an
execution semantics formal specification. This one can be manually or automatically
translated into the formal verification platform.
      </p>
      <p>Finally, the verification of a dsml is based on the expression of properties
to be verified. These properties are either written directly using the verification
formalism or automatically generated from the dsml instances. The second
approach is preferred as it increase the efficiency of the verification and also eases
the verification for the dsml user.</p>
      <p>In the following, we illustrate the verification of a dsml through the example
of the verification of the BlockLibrary dsml. This dsml allows using a
limited subset of ocl as a component language. BlockLibrary dsml instances
are translated as Why3 theories. ocl expressions are translated to Why3
expressions relying on the pre-existing formalisation of the restricted version of
the language. Finally, high level properties are automatically generated from the
dsml instances as Why3 goals to be discharged through the Why toolset.
2.2</p>
      <p>
        The BlockLibrary DSML structural specification
The BlockLibrary dsml [
        <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
        ] aims at the specification of the structure and
semantics of data flow atomic blocks such as the ones at the core of the Simulink
or Scade languages. This dsml allows to specify the inherent variability of these
blocks structure and semantics. The structural specification part of the dsml is
inspired from the concepts of software product lines combined with the object
oriented concept of inheritance in order to handle the highly variable nature
of the blocks specification. Data types can be attached to blocks specification
components (inputs, outputs, parameters and memories). The components are
specified with constraints describing their allowed values (specified using a subset
of ocl). The semantics of the blocks is expressed with a simple action language
that relies on the same subset of ocl to express pre/post-conditions, variants
and invariants.
      </p>
      <sec id="sec-2-1">
        <title>1 http://www.omg.org/spec/ALF/Current</title>
        <p>The two main concerns in the dsml are the use of ocl as a language
component for the specification of the dsml data and action constraints and the
variability management that allows combining parts of the blocks specification
into multiple block configurations.
2.3</p>
        <p>Verification of BlockLibrary instances with Why3
A significant part of the effort in this case study has been focused on the
formalisation of the dsml constructs as Why theories to conduct formal proofs of
the model completeness, consistency and correctness using the Why3 platform.
A block specification using the BlockLibrary dsml We provide in Figure
1 a simplified specification for the Delay block written using the BlockLibrary
dsml. The Delay block outputs the value provided as its first input and delays
its value by a certain number of clock ticks. The number of clock ticks is either
provided as a parameter of the block or as an additional input. The values of
the output of the block for the first clock ticks cannot be computed from the
inputs of the block and should thus be provided as either a parameter or as an
additional input of the block. The block allows for scalar, vectors and matrix
values. The specification provided here is limited to the handling of scalar values
and the initial condition can only be provided as a parameter of the block.</p>
        <p>A block specification is contained in a blocktype element bundled in a
Library construct. The data types used in the specification are declared in the
Library. The variant constructs contains the specification for a block
structural elements: input (in) and output (out) ports, parameters and memories.
For each declaration of a structural element, it is possible to specify its default
value and some additional constraints using our subset of the ocl language. We
provide such a constraint in line 20, where we specify that the Delay parameter
can only have a positive value.</p>
        <p>Each variant can extend, in an object oriented way, other variant
constructs by relying on the extends construct. This composition is done through
two n-ary operators that can be applied on variant constructs: allof and
oneof. The former specifies mandatory compositions whereas the former specify
alternative compositions. These operators are inspired from the software product
line approach for the specification of features hierarchies.</p>
        <p>The mode constructs allows for the specification of the blocks semantics
variation points. They thus provide an implementation for one or more variant
constructs. The previously presented composition language can be used in this
purpose. Each mode construct must provide a definition for the compute
semantics of the block variation point (lines 57 to 61). It may also provide the optional
semantics for the init and update computation phases for the specified block.
The blocks semantics are provided using a custom simple action language: the
BlockLibrary action language (bal). A mode and its implemented variant
make a set of block configurations. This set is extracted from the composition
of variant elements through the allof and oneof constructs.
library Lib {
type signed realInt TInt32 of 32 bits
type realDouble TDouble
5 type array TArrayDouble of TDouble
blocktype DelayBlock {
variant InputScalar {
in data Input : TDouble
out data Output : TDouble
}
variant ICScalar {</p>
        <p>parameter IC : TDouble default 0.0
}
variant ICVector {</p>
        <p>parameter IC : TArrayDouble
}
variant InternalDelay {
parameter Delay : TInt32 {</p>
        <p>invariant ocl { Delay . value &gt; 0 }
}
variant ExternalDelay {
in data Delay : TInt32 {</p>
        <p>invariant ocl { Delay . value &gt; 0 }
}
variant ListDelay_Scalar extends allof (
oneof ( InternalDelay , ExternalDelay ) ,</p>
        <p>InputScalar , ICVector
) {
invariant ocl { Delay . value &gt; 1 }
invariant ocl {</p>
        <p>IC . value . size () = Delay . value
}
memory Mem {
datatype auto ocl { Input . value }
length auto ocl { DelayUpperBound . value }
}
variant Delay_Scalar extends allof (
oneof ( InternalDelay , ExternalDelay ) ,</p>
        <p>InputScalar , ICScalar
) {
invariant ocl { Delay . value = 1 }
memory Mem {
datatype auto ocl { Input . value }
length auto ocl {1}
55
60
65
70
75
80
85
90
mode DelayMode_Simple implements Delay_Scalar</p>
        <p>{
init init_Delay_Simple bal {
postcondition ocl {</p>
        <p>Mem . value = IC . value }</p>
        <p>Mem . value = IC . value ;
}
compute compute_Delay_Simple bal {
postcondition ocl {</p>
        <p>Output . value = Mem . value }</p>
        <p>Output . value = Mem . value ;
}
update update_Delay_Simple bal {
postcondition ocl {</p>
        <p>Mem . value = Input . value }</p>
        <p>Mem . value = Input . value ;
}
}
mode DelayMode_List implements</p>
        <p>ListDelay_Scalar {
init init_Delay_List bal {
postcondition ocl {</p>
        <p>Mem . value = IC . value }</p>
        <p>Mem . value = IC . value ;
}
compute compute_Delay_List bal {
postcondition ocl {</p>
        <p>Output . value = Mem . value -&gt; first () }</p>
        <p>Output . value = Mem . value [0];
}
update update_Delay_List bal {
postcondition ocl { Mem . value =</p>
        <p>Mem . value
-&gt; excluding ( Mem . value -&gt; first () )
-&gt; append ( Input . value )
}
for ( var i =0; i &lt; Mem . value -&gt; size () -1;
i = i +1) {</p>
        <p>Mem . value [i] = Mem . value [i +1];
}</p>
        <p>Mem . value [ Delay . value -1] = Input . value ;
}}
}</p>
        <p>}</p>
        <p>
          The lack of space prevents us to detail further this dsml and we refer the
reader to our papers[
          <xref ref-type="bibr" rid="ref10 ref9">9, 10</xref>
          ], the related thesis work 2, and the website3 for
additional informations.
        </p>
        <p>BlockLibrary specification verification A transformation translates
BlockLibrary instances to Why theories; ocl-like constraints to predicates relying</p>
      </sec>
      <sec id="sec-2-2">
        <title>2 http://www.dieumegard.net/thesis/Thesis-Arnaud Dieumegard.pdf</title>
      </sec>
      <sec id="sec-2-3">
        <title>3 http://block-library.enseeiht.fr</title>
        <p>on a lightweight formalisation of the subset of ocl detailed in Section 3; and
semantics specification (specified using the action language) to WhyML
functions.</p>
        <p>In addition to this translation of the BlockLibrary specification,
properties are generated to assess: the completeness (are all possible configurations of
a block given in the specification ?) and the disjointness (are all possible
configurations of a block expressed only once in the specification ?) of all the
BlockLibrary dsml block specifications. The verification of these two properties is
done automatically by smt solvers in a few tenth of a second for rather simple
blocks specification to up to a few seconds for mode complex ones containing up
to a thousand different configurations for a block.</p>
        <p>The most important lesson learned from this experiment was that as soon
as the dsml constructs, their attached constraints, and the ocl component
expressions are translated to Why, it is straightforward to write or generate
high level properties to be verified using the Why and WhyML languages.</p>
        <p>The following section summarizes the Why model of the specific subset of
the ocl that was necessary for our dsml use case where a subset of the ocl is
used as a dsml component.
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>OCL Formalisation Using the Why Toolset</title>
      <p>ocl is a formal language for querying model elements and expressing model
properties. It relies on first order logic and model traversal operators. It is
guaranteed to be side-effect free and as such cannot modify the model it is applied
to. The Why language is more expressive than ocl and can thus be used to
encode any ocl construct.</p>
      <p>We provide here some details on our formal specification of our specific
subset of ocl in Why. It is important to keep in mind that the main objective
of the BlockLibrary dsml is to allow for the formal specification of blocks.
As such, we enforce the block specifier to provide strictly typed elements. The
consequences of this limitation is impacting the subset of the ocl to be
handled. It is indeed not required to handle type manipulation operations such as
oclIsKindOf or oclAsType among others.</p>
      <p>We will go through the support for some of the ocl constructs; the limitations
we selected; and the translation strategies in order to go from ocl constructs to
Why constructs. As we will not provide the complete details about our
translation, we invite the interested reader to refer to our website4 for additional
informations.
3.1</p>
      <p>OCL standard data types and collections
ocl is built on a simple set of types called primitive data types. The Why3
standard library provides a formalisation for primitive data types that largely
covers the needs for the mapping of the ocl ones.</p>
      <sec id="sec-3-1">
        <title>4 http://block-library.enseeiht.fr/html</title>
        <p>ocl primitive values can be gathered in collections that differs regarding
their ability to handle multiple occurrences of the same value (Bag, Sequence)
or not (Set, OrderedSet ) and if these values are ordered (Sequence, OrderedSet )
or not (Bag, Set ).</p>
        <p>In the Why standard library, collections can be modeled as lists allowing
multiple occurrences of the same unordered value. This makes them a direct
translation for Bag collections. The standard library also provides the support
for Arrays that would directly map to the Sequence collection and Sets for Set
collection in ocl.</p>
        <p>In our implementation of ocl, we do not take into account the type of the
collections and only provide support for Bag collections as lists. This allows to
simplify their management in our implementation as it removes the side effects
on the collection management operations such as that elements are not
automatically removed from the collections as multiple occurrences are allowed. We
defined a Why theory called OCLCollectionOperation containing the definition
for some basic list accessors and operations. The other three kinds of ocl
collections will be implemented in a similar way in a near future with no specific
issues expected.</p>
        <p>We decided not to support messaging related constructs and tuples
constructs. Messaging is related to uml sequence and state machine diagrams which
was out of the scope of our case study. Tuples are also missing in our
implementation and could be implemented on a first approximation by relying on record
types in Why.
3.2</p>
        <p>OCL operations translation strategy
ocl defines multiple operations that are to be applied either on primitive values –
referred to as standard language operations – or on collection values – referred to
as collection and iteration operations. Some of these operations are not supposed
to be used on Bag collections and explicit conversions between collections types
must be done. We do not enforce this currently in our implementation of ocl
as we provide only one type of collection.</p>
        <p>The translation of ocl expressions to the Why language can be done
using two strategies. First, operations can be translated to basic first order logic
expressions and thus can directly be used in Why. Second, the definition for
the operations can be axiomatized using Why function declarations and ocl
constraints are translated as expressions using these functions. In our work, we
rely on a combination of the two. The list getter is used for simple collection
accesses, standard type operations have been defined as functions in Why, simple
collections operations are directly mapped to their logical expression equivalent.</p>
        <p>This approach has the advantages of easing the translation work as the
semantics of ocl standard types operations is already defined and thus avoid to
generate too complex expressions. This has the pleasant side effect of easing the
transformation verification activities as the translation itself is simpler.</p>
        <p>In the following, we provide the mapping between the source ocl constructs
and operations and the target Why predicates, functions and expressions.
3.3</p>
        <p>OCL standard library operations
In ocl expressions, operations can be applied on primitive ocl types. These
operations are classical handling of primitive data types and are gathered in the
ocl standard library. They have already been formalized in the Why library.
We thus rely on their formalisation for our translation.</p>
        <p>We did not currently implement the transformation for the div and mod
operations on ocl Double elements. The div operation is of particular interest
as its behavior in ocl and in Why are not the same. Indeed where the ocl
implementation of div applied to any number and 0 (division by zero) returns
the null value, the Why version is simply not defined and rejected by the formal
verification toolset. The management of specific values like null and invalid is
not done and is a chosen limitation of our work to simplify the formal models
and reduce the verification costs by avoiding three value logics (True, False and
invalid ). We give later more details regarding the related restrictions.</p>
        <p>Boolean ocl expressions are implemented using boolean expressions in Why.
xor operator has been implemented with and, or and not operators. Numeric
operations have been implemented using the standard Why arithmetic theories
and their operators. Finally relational operators are also based on standard Why
constructs.
3.4</p>
        <p>Collection operations
As previously mentioned, there are four types of ocl collections. We only
considered the use of the bag collections in our case study. In our handling of ocl
collection operations, we do not handle ocl generic nature nor subtyping of
elements. If the same operation is to be expressed on different types, it is then
developed separately for each different type. Whereas this may seem to be a
limited way of handling this problem, in practice, our supported restriction of
ocl makes this easier as only a few operations needs to be encoded several
times. Both kind of polymorphism could be handled by synthesizing sum types
representing the allowed set of types for an operation and appropriate pattern
matching that mimics late binding at a higher verification cost.</p>
        <p>
          Our partial handling of ocl collections has an impact on the translation
provided for some collection operations. The append and including operations
have the same implementations and so are subOrderedSet and subSequence.
According to the ocl specification, some collections operations are not allowed on
bag collections: append, at, first, indexOf, indexAt, last, prepend, subOrderedSet,
subSequence. We decided to allow their use in our implementation of ocl. This
is a significant drift from the ocl standard but it has the advantage of greatly
simplifying the translation mechanism without restraining the expressiveness of
the language. This restriction could be enforced easily at the static semantics
level. The formalisation of the usual ocl collections is of additional complexity
as studied by Mentr´e et Al [
          <xref ref-type="bibr" rid="ref16">16</xref>
          ] but was not of primary interest for our current
work so we decided not to address the related issues.
        </p>
        <p>Each of these functions are defined through a set of axioms specifying their
context of use: on which element type they are defined; what restrictions are
required for their definitions; and the result of their computation according to
the provided input values. The restrictions on their parameters are used to avoid
the invalid value. The effort needed in order to achieve the complete verification
remains important but is highly lightened by the use of smt solvers to automate
the verification.
3.5</p>
        <p>Logical property assessment iteration operations
Iteration operations are the main operations used on ocl collections. They allow
to assess a logical property verification on: every element of a list (forAll), at
least one element of a list (exists), exactly one element of a list (one). They can
also express the uniqueness of the result of the application of a function on every
element of a list (isUnique). All these operations returns a boolean value.</p>
        <p>In Table 1, we provide the translation for the forAll, exists, one and isUnique
ocl operations on collections. Unlike the previous translations, we do not rely
on predefined functions but we rather map these operations to simple first order
logic expressions. Regarding the translation of the condition expression: exp, the
defined ocl iterators: it, it1 and it2 are mapped to a call to the position of the
element in the collection via the list getter operator. In practice, references to it
or it1 are replaced by a[i] and references to it2 are replaced by a[j] in exp. This
is expressed using the function application: [a/b]c that substitute a to b in c.
ocl expression</p>
        <p>Target Why code
a→forAll(it: DT | exp) ∀ i: int. 0 ≤ i &lt; length a → [a[i]/it]exp
a→forAll(it1, it2: DT | exp) ∀ i j: int. 0 ≤ i &lt; length a ∧ 0 ≤ j &lt; length a → [a[i]/it1,a[j]/it2]exp
a→exists(it: DT | exp) ∃ i: int. 0 ≤ i &lt; length a ∧ [a[i]/it]exp
a→exists(it1, it2: DT | exp) ∃ i j: int. 0 ≤ i &lt; length a ∧ 0 ≤ j &lt; length a ∧ [a[i]/it1,a[j]/it2]exp
a→one(it: DT | exp)</p>
        <p>∃ i: int. 0 ≤ i &lt; length a ∧ [a[i]/it]exp ∧
(∀ j: int. 0 ≤ j &lt; length a ∧ j &lt;&gt; i → [a[i]/it]exp &lt;&gt; [a[j]/it]exp)
a→isUnique(it: DT | exp)
Iteration operations also allow extracting values from a collection: according to
the satisfaction (select) or not (reject) of a property; or by applying a treatment
on every element of a list (collect). Value extraction operations are more complex
to model as they do not only provide a single boolean value as output, they
actually compute a list of elements.</p>
        <p>Iteration operations semantics Iteration operations apply on collections and
compute filtering of the collection values and/or mapping of functions on the
collection values. We decide thus to represent a collection as the hc, p, f i tuple.
Its semantics is provided in (1).</p>
        <p>Jhc, p, f iK = {f (v)|v ∈ c, p(v)} (1)</p>
        <p>According to the previous notation, we define the initial value of a collection
as in (2) where &gt; is the predicate returning true and id the identity relation.
(2)
c = {v1, ..., vn} = hc, &gt;, idi</p>
        <p>The definition of iteration operations is hence specified as in (3). From these
definitions, we extract the implementations for iteration operations using the
Why language. We provide in the following two possible implementations.
hc, p, f i →
hc, p, f i →
hc, p, f i →
hc, p, f i →
select(e|ϕ) =
reject(e|ϕ) =
any(e|ϕ) =
collect(g) =</p>
        <p>hc, p ∧ [f /e]ϕ, f i
hc, p ∧ ¬[f /e]ϕ, f i
hc, p, f i → select(e|ϕ) → f irst()</p>
        <p>(3)
hc, p, f ◦ gi
Iteration operations as first order logic constructs Providing an
implementation for iteration operations can be done using first order logic constructs.
It is then required to generate a different function for each iteration operation
call and then to write a call to the generated function in the translated ocl
operation code.</p>
        <p>Using first order logic to provide an implementation for iteration operations
is quite straightforward. Nevertheless, the implementation and verification of
the generation process might be quite complex. Indeed the generated code
complexity might increase when complex expressions are used in the body of the
iteration operation.</p>
        <p>Iteration operations as higher order logic construct An alternative
approach for the implementation of iteration operations is to rely on higher order
logic to represent the operations in Why. An example of such formalisation is
provided in Listing 1.1 for the select iteration operation. The select function in
Why takes two arguments, the first one is the collection on which the operation
is applied and the second one is the predicate that must be used in order to select
the elements of the collection. In addition to the function definition, we provide a
set of lemmas verified with the Why3 platform generating proof obligations
discharged using smt solvers and proof assistants. In the case of the select function,
part of the lemmas are verified using smt solvers and others have been verified
using the Coq proof assistant. We provide in Figure 2 a report generated with
the Why3 toolset for these verifications. The verification effort required for the
verification of the iteration operations (writing of the specification and achieving
the proof) is rather similar to the one needed for the verification of collection
operations. Details regarding the formalisation and the proofs for the other ocl
collection operations is provided in the first author PhD thesis work 5, and our
website6.</p>
      </sec>
      <sec id="sec-3-2">
        <title>5 http://www.dieumegard.net/thesis/Thesis-Arnaud Dieumegard.pdf</title>
      </sec>
      <sec id="sec-3-3">
        <title>6 http://block-library.enseeiht.fr</title>
        <p>In order to use the iteration expressions, one must provide a body containing
the condition or the operation to apply on each element of the collection. The
condition body of the reject, select and anyAs operations is translated as an
inlined predicate whereas the function body of the collect operation is translated
as an in-lined function. In-lined predicates and functions are provided as the
second argument of their respective WhyML function call. Contrary to the first
order operations, there is no need here to keep track of the variables used in
the iteration operation as the in-lined nature of the function call makes their
definition directly available.
function select (l: list oclType ) (p: HO . pred oclType ) : list oclType =
match l with
| Nil -&gt; Nil
| Cons hd tl -&gt; if p hd then Cons hd ( select tl p)</p>
        <p>else select tl p
end</p>
        <p>Additional restrictions on the support of the OCL language
In the previous sections, we gave the translation rules for a subset of the ocl
language. ocl provides a well known syntax for software engineers. In addition,
this subset of the language eases and secures the constraints writing process
relying on first order logic by including only well known and standard functions
and operations on classical data types.</p>
        <p>
          A major restriction in our implementation of the ocl language is the absence
of the specific invalid and null values. This is related to the binding to the data
part of the dsml and to the formal verification introduced by the Why3 toolset.
The invalid value is used for the modeling the failure of an operation, we advocate
that if such an operation is equipped with pre-conditions then the invalid value
can never be an output of the operation and is thus not necessary. This value
is also used when ocl is bound to uml or mof to model optional attributes
or references that are not defined in the model instances. We advocate that an
empty collection is also a good model for this case. Regarding the null value, it
is used in order to model an object that does not exists. Once again this should
not happen in a formalisation of the language but it could be handled by relying
on an option type. Adding the support for these specific values will have a strong
impact on the Why implementation of the ocl constructs. Indeed, these specific
values will need to be taken into account in the implementation of all functions
and on the related proofs. There are technical difficulties in implementing these
values as shown by [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] but it is possible to overcome most of them.
        </p>
        <p>The limitations we applied on the formalisation of ocl have the advantage
of providing a simpler, well defined subset of the language enforcing the dsml
developer to rely mostly on common knowledge ocl constructs and thus avoid
the problems related to the use of more complex constructs such as the
closure operator. These operators may cause some misunderstandings; make the
specification more obscure; and make its verification more complex.</p>
        <p>
          The subset of ocl we currently handle could be extended if required by the
integration to other dsmls as shown by [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ]. We will try to keep it as limited as
possible.
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Related Works</title>
      <p>Many works in the literature target the formal verification of dsmls. We will
only focus on those where the ocl language is used either in the dsml
specification and/or as a language component part of the dsml; and is included in
the verification process. Most of the formal dsml verification processes including
ocl are related to its use in the context of uml specifications.</p>
      <p>
        Our approach is close to the one proposed in the hol/ocl project[
        <xref ref-type="bibr" rid="ref2 ref3">3, 2</xref>
        ].
Its authors target the formal verification of uml specifications including ocl
constraints and contracts by providing a bridge to the hol/ocl whose formal
foundations relies on the Isabelle proof environment. This work is specifically
remarkable by its coverage of ocl and has highly contributed to the ocl
community by providing formal specifications for the language that raised numerous
legitimate questions regarding the semantics of ocl operations and constructs
leading to the clarification of the standard. Our work takes a different angle and
aims at the verification of dsmls in general whereas the hol/ocl one is focused
on uml. We also differ by our use of the Why3 toolset instead of Isabelle.
Both toolsets allows for the use of smt solvers for the automatic verification of
properties but Why3 can be used as a bridge to many more different solvers
and proof assistants including Isabelle. Why3 also benefits from its simpler
high level syntax. It is our belief that by relying on the Why3 toolset, a wider
range of users will be able to actually perform formal verifications of properties
as the Why and WhyML languages are simpler to apprehend than Isabelle.
Our work targets a significantly smaller coverage of the ocl standard that allows
avoiding key semantics issues like the invalid and null values. This has not been
a limiting issue for our use up to now. However, we are far from the completeness
of the hol/ocl project and we do not plan to reach it.
      </p>
      <p>
        Clavel et al [
        <xref ref-type="bibr" rid="ref4 ref7">4, 7</xref>
        ] provides a translation from ocl to first order logic (fol).
Automated theorem provers and smt solvers are then used to check the
unsatisfiability of the generated fol constructs. This work supports the null and
invalid values. It focuses on the verification of ocl constraints expressed on data
models. Our work is more focused on the verification of ocl as a language
component for dsmls. The same difference can be found in the work by Lano et al
[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] where uml class diagrams and a subset notational variant of ocl (LOCA)
are handled and verified through a transformation to the B language.
      </p>
      <p>
        uml/ocl specifications are translated to sat solving format by Soeken et
al [
        <xref ref-type="bibr" rid="ref18 ref19">18, 19</xref>
        ] or integrated in the USE toolset by Kuhlmann et al [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Another
formalism for the automated verification of specifications is the PVS theorem
prover. Kyas et al in [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] provides a lightweight translation of ocl and uml state
machines and class diagrams. Each of these approaches uses different formalism
for the formal verification with efficient verification results but are tied up to
the use of this specific formal verification technique. Our work benefits from
the wider range of formal verification toolsets that the Why3 platform provides
including most of the ones used in these works.
      </p>
      <p>
        Some other approaches have been used in order to formally model uml/ocl
specifications as in the works from Kyriakos et al [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and Cunha et Al[
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] on the
UML2Alloy tool. These provide means for the verification of uml/ocl
specifications and put a specific emphasis on the feedback of the verification result to
the dsml user. We did not focus on the feedback from solvers in our work but
it would be possible as the Why3 toolset provides access to smt solvers with
counter-example generation capabilities.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Conclusion and Future Works</title>
      <p>We have described a lightweight formalisation of the ocl language in Why3
where the limitations have been identified and discussed. We have briefly detailed
an example of dsml where ocl is used as a component language. We rely on
our formalisation of ocl to conduct the automated verification of high level
properties on the dsml instances.</p>
      <p>It is our belief that the dsml community would benefit from such a
formalisation as it allows to improve the quality of model verifications by relying on
formal verification techniques; it is based on the use of the Why3 toolset that
eases the writing of properties and is more accessible for industrial practitioners
than other formal verification platforms (like proof assistants for example) yet
still supporting their use. This accessibility is very likely to help on the adoption
of formal methods as a natural and standard verification technique.</p>
      <p>The work conducted here was mostly driven by the verification of a specific
dsml: the BlockLibrary specification language. The next step is to ease the
integration of ocl as a component language for other dsmls. Specifically, we will
focus on the adaptation of the translation of the dsml structure to Why3 which
is currently done manually. We plan on providing a translation from meta-models
instances of mof or Ecore to generically transform any dsml specification into
a set of Why theories. The translated theories will then be used in conjunction
with our formalisation of ocl to conduct verification activities on the dsml
instances.</p>
      <p>
        We are investigating a larger subset of ocl that still allows for an efficient
automatic verification of dsml properties. We will specifically focus on the
handling of any type of collections; the constructs that still need handling (tuples);
and collection operations we did not implement yet. Handling the special
invalid and null values could be done by relying on an approach close to the one
provided by Dania et al in [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ].
      </p>
      <p>
        In our BlockLibrary dsml the blocks semantics is specified using an action
language. Such a semantics is then translated as a WhyML function. We could
have used an already existing action language like fUML/alf [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] for example.
By relying on a custom language, we simplified the translation work by limiting
it only to the constructs that were needed. We plan, as proposed for a subset
of ocl, on providing a formalisation for a subset of such an action language
component. This will then be used for the verification of the semantics definition
for dsmls and will thus complete the dsml verification approach.
      </p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <given-names>Kyriakos</given-names>
            <surname>Anastasakis</surname>
          </string-name>
          , Behzad Bordbar, Geri Georg, and
          <string-name>
            <given-names>Indrakshi</given-names>
            <surname>Ray</surname>
          </string-name>
          .
          <article-title>On challenges of model transformation from UML to alloy</article-title>
          .
          <source>Software &amp; Systems Modeling</source>
          ,
          <volume>9</volume>
          (
          <issue>1</issue>
          ):
          <fpage>69</fpage>
          -
          <lpage>86</lpage>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Achim</surname>
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Brucker</surname>
            , Fr´ed´eric Tuong, and
            <given-names>Burkhart</given-names>
          </string-name>
          <string-name>
            <surname>Wolff</surname>
          </string-name>
          .
          <article-title>Featherweight OCL: A proposal for a machine-checked formal semantics for OCL 2.5</article-title>
          . Archive of Formal Proofs,
          <year>January 2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Achim</surname>
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Brucker</surname>
            and
            <given-names>Burkhart</given-names>
          </string-name>
          <string-name>
            <surname>Wolff</surname>
          </string-name>
          .
          <article-title>HOL-OCL: A formal proof environment for UML/OCL</article-title>
          . In FASE, volume
          <volume>4961</volume>
          <source>of LNCS</source>
          , pages
          <fpage>97</fpage>
          -
          <lpage>100</lpage>
          . Springer,
          <year>2008</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <given-names>Manuel</given-names>
            <surname>Clavel</surname>
          </string-name>
          , Marina Egea, and Miguel Angel Garc´ıa de Dios.
          <article-title>Checking unsatisfiability for OCL constraints</article-title>
          .
          <source>ECEASST</source>
          ,
          <volume>24</volume>
          ,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <given-names>Benoit</given-names>
            <surname>Combemale</surname>
          </string-name>
          , Xavier Cr´egut, and
          <string-name>
            <given-names>Marc</given-names>
            <surname>Pantel</surname>
          </string-name>
          .
          <article-title>A Design Pattern to Build Executable DSMLs and associated V&amp;V tools</article-title>
          .
          <source>In The 19th Asia-Pacific Software Engineering Conference (APSEC</source>
          <year>2012</year>
          ), Hong Kong, Hong Kong,
          <year>December 2012</year>
          . IEEE.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <given-names>Alcino</given-names>
            <surname>Cunha</surname>
          </string-name>
          , Ana Garis, and Daniel Riesco.
          <article-title>Translating between alloy specifications and UML class diagrams annotated with OCL</article-title>
          .
          <source>Software &amp; Systems Modeling</source>
          ,
          <volume>14</volume>
          (
          <issue>1</issue>
          ):
          <fpage>5</fpage>
          -
          <lpage>25</lpage>
          ,
          <year>2015</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <given-names>Carolina</given-names>
            <surname>Dania</surname>
          </string-name>
          and
          <string-name>
            <given-names>Manuel</given-names>
            <surname>Clavel</surname>
          </string-name>
          . OCL2FOL+
          <article-title>: coping with undefinedness</article-title>
          .
          <source>In Proceedings of the MODELS 2013 OCL Workshop co-located with the 16th International ACM/IEEE Conference on Model Driven Engineering Languages and Systems (MODELS</source>
          <year>2013</year>
          ), Miami, USA,
          <year>September 30</year>
          ,
          <year>2013</year>
          ., pages
          <fpage>53</fpage>
          -
          <lpage>62</lpage>
          ,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <given-names>Julien</given-names>
            <surname>Deantoni</surname>
          </string-name>
          and Fr´ed´eric Mallet.
          <article-title>ECL: the Event Constraint Language, an Extension of OCL with Events</article-title>
          .
          <source>Research Report RR-8031</source>
          ,
          <year>July 2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <given-names>Arnaud</given-names>
            <surname>Dieumegard</surname>
          </string-name>
          , Andres Toom, and
          <string-name>
            <given-names>Marc</given-names>
            <surname>Pantel</surname>
          </string-name>
          .
          <article-title>Model-based formal specification of a DSL library for a qualified code generator</article-title>
          .
          <source>In Proceedings of the 12th Workshop on OCL and Textual Modelling</source>
          , pages
          <fpage>61</fpage>
          -
          <lpage>62</lpage>
          , New York, NY, USA,
          <year>2012</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Arnaud</surname>
            <given-names>Dieumegard</given-names>
          </string-name>
          , Andres Toom, and
          <string-name>
            <given-names>Marc</given-names>
            <surname>Pantel</surname>
          </string-name>
          .
          <article-title>A software product line approach for semantic specification of block libraries in dataflow languages</article-title>
          .
          <source>In 18th International Software Product Line Conference, SPLC '14</source>
          ,
          <string-name>
            <surname>Florence</surname>
          </string-name>
          , Italy,
          <source>September 15-19</source>
          ,
          <year>2014</year>
          , pages
          <fpage>217</fpage>
          -
          <lpage>226</lpage>
          . ACM,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Florian</surname>
            <given-names>Heidenreich</given-names>
          </string-name>
          , Jendrik Johannes, Sven Karol, Mirko Seifert,
          <string-name>
            <given-names>Michael</given-names>
            <surname>Thiele</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Christian</given-names>
            <surname>Wende</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Claas</given-names>
            <surname>Wilke</surname>
          </string-name>
          .
          <article-title>Integrating OCL and textual modelling languages</article-title>
          .
          <source>In Models in Software Engineering</source>
          , volume
          <volume>6627</volume>
          <source>of LNCS</source>
          , pages
          <fpage>349</fpage>
          -
          <lpage>363</lpage>
          . Springer,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Mirco</surname>
            <given-names>Kuhlmann</given-names>
          </string-name>
          , Lars Hamann, and
          <string-name>
            <given-names>Martin</given-names>
            <surname>Gogolla</surname>
          </string-name>
          .
          <article-title>Extensive validation of OCL models by integrating SAT solving into USE</article-title>
          . In Objects, Models, Components, Patterns, volume
          <volume>6705</volume>
          <source>of LNCS</source>
          , pages
          <fpage>290</fpage>
          -
          <lpage>306</lpage>
          . Springer Berlin Heidelberg,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Marcel</surname>
            <given-names>Kyas</given-names>
          </string-name>
          , Harald Fecher, Frank S. de Boer, Joost Jacob, Jozef Hooman, Mark van der Zwaag, Tamarah Arons, and
          <string-name>
            <given-names>Hillel</given-names>
            <surname>Kugler</surname>
          </string-name>
          .
          <article-title>Formalizing UML models and OCL constraints in PVS</article-title>
          .
          <source>Electr. Notes Theor. Comput. Sci.</source>
          ,
          <volume>115</volume>
          :
          <fpage>39</fpage>
          -
          <lpage>47</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <article-title>Christian Laasch and MarcH</article-title>
          . Scholl.
          <article-title>A functional object database language</article-title>
          .
          <source>In Database Programming Languages (DBPL-4)</source>
          , Workshops in Computing, pages
          <fpage>136</fpage>
          -
          <lpage>156</lpage>
          . Springer London,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <given-names>K.</given-names>
            <surname>Lano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Clark</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Androutsopoulos</surname>
          </string-name>
          . Uml to b:
          <article-title>Formal verification of object-oriented models</article-title>
          .
          <source>In Integrated Formal Methods</source>
          , volume
          <volume>2999</volume>
          <source>of LNCS</source>
          , pages
          <fpage>187</fpage>
          -
          <lpage>206</lpage>
          . Springer Berlin Heidelberg,
          <year>2004</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16. David Mentr´e, Claude March´e,
          <string-name>
            <surname>Jean-Christophe</surname>
            <given-names>Filliaˆtre</given-names>
          </string-name>
          , and Masashi Asuka.
          <article-title>Discharging proof obligations from Atelier B using multiple automated provers</article-title>
          .
          <source>In ABZ'2012 - 3rd International Conference on Abstract State Machines</source>
          , Alloy, B and
          <string-name>
            <surname>Z</surname>
          </string-name>
          , volume
          <volume>7316</volume>
          <source>of LNCS</source>
          , pages
          <fpage>238</fpage>
          -
          <lpage>251</lpage>
          , Pisa, Italy, June 2012. Springer.
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <given-names>Isabelle</given-names>
            <surname>Perseil</surname>
          </string-name>
          .
          <source>ALF formal. Innovations in Systems and Software Engineering</source>
          ,
          <volume>7</volume>
          (
          <issue>4</issue>
          ):
          <fpage>325</fpage>
          -
          <lpage>326</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>M. Soeken</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Wille</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Kuhlmann</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Gogolla</surname>
            , and
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Drechsler</surname>
          </string-name>
          .
          <article-title>Verifying UML/OCL models using boolean satisfiability</article-title>
          .
          <source>In Design, Automation Test in Europe Conference Exhibition (DATE)</source>
          ,
          <year>2010</year>
          , pages
          <fpage>1341</fpage>
          -
          <lpage>1344</lpage>
          ,
          <year>March 2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Mathias</surname>
            <given-names>Soeken</given-names>
          </string-name>
          , Robert Wille, and
          <string-name>
            <given-names>Rolf</given-names>
            <surname>Drechsler</surname>
          </string-name>
          .
          <article-title>Encoding OCL data types for sat-based verification of UML/OCL models</article-title>
          . pages
          <fpage>152</fpage>
          -
          <lpage>170</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Faiez</surname>
            <given-names>Zalila</given-names>
          </string-name>
          ,
          <article-title>Xavier Cr´egut, and Marc Pantel. Leveraging formal verification tools for DSML users: A process modeling case study</article-title>
          .
          <source>In Leveraging Applications of Formal Methods, Verification and Validation. Applications and Case Studies</source>
          , volume
          <volume>7610</volume>
          <source>of LNCS</source>
          , pages
          <fpage>329</fpage>
          -
          <lpage>343</lpage>
          . Springer Berlin Heidelberg,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Faiez</surname>
            <given-names>Zalila</given-names>
          </string-name>
          ,
          <article-title>Xavier Cr´egut, and Marc Pantel. Formal verification integration approach for DSML</article-title>
          .
          <source>In Model-Driven Engineering Languages and Systems</source>
          , volume
          <volume>8107</volume>
          <source>of LNCS</source>
          , pages
          <fpage>336</fpage>
          -
          <lpage>351</lpage>
          . Springer Berlin Heidelberg,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>