Assembling the Proofs of Ordered Model Transformations Maribel Fern´andez
Jeffrey Terrell
Department of Informatics, King’s College London, Strand, London WC2R 2LS, UK
[email protected]
In model-driven development, an ordered model transformation is a nested set of transformations between source and target classes, in which each transformation is governed by its own pre and postconditions, but structurally dependent on its parent. Following the proofs-as-model-transformations approach, in this paper we consider a formalisation in Constructive Type Theory of the concepts of model and model transformation, and show how the correctness proofs of potentially large ordered model transformations can be systematically assembled from the proofs of the specifications of their parts, making them easier to derive.
1
Introduction
In this paper, we outline a mechanism to assemble correctness proofs of model transformations in the context of Model Driven Development (MDD). Although MDD is in widespread use, it is essentially an informal approach to software development which does not guarantee the correctness of model transformations. High-trust solutions are essential if MDD is to be used in safety critical systems and beyond. The problem of establishing the correctness of a model transformation is well established, and work has been done towards formalising the process using for instance rewriting languages (e.g. Maude [4]) or typed multigraphs [24]. However, these approaches are first-order and do not reflect the higher-order nature of the UML-based techniques. The aim of our research is to lay the foundations on which a range of certified model transformations might be built, following a line of work that started in [17], where the use of constructive type theory to implement model transformations was first discussed. The notion of an ordered model transformation was introduced in [18], to describe how a complex transformation between models, built from a potentially large number of interrelated classes, might be derived from the specification of a series of mappings between classes, via a partially ordered traversal of the source and target models. This paper represents a significant advance on that work in that it a) formally defines the specification of an ordered model transformation in type theory, and b) provides a mechanism for assembling the proofs of ordered model transformations from their constituent parts. In this paper, a model is a Unified Modelling Language (UML) [7] class model, and a model transformation is a function which maps the artefacts of a source model (classes, attributes and relationships) onto the artefacts of a target model [11, 12]. UML is a graphical language for specifying the structure and behaviour of object oriented systems. It is also a pillar of the Object Management Group’s (OMG) Model Driven Architecture (MDA) [6] (a particular brand of MDD), along with the transformation language Query/View/Transform (QVT) [8] . Consider a transformation between two models (see Fig. 1) in which each object of X is transformed into an object of Y , via a precondition at X and a postcondition at Y . In general, the postcondition at Y is composed of three components: Data asserts a relation between the attributes of X and Y ; Link asserts a relation between Y and the class that contains it; and Nest defines the specification (in context) of the B. Buhnova, L. Happe, J. Kofroˇn: Formal Engineering Approaches to Software Components and Architectures 2013 (FESCA’13) EPTCS 108, 2013, pp. 63–77, doi:10.4204/EPTCS.108.5
c M. Fern´andez & J. Terrell
This work is licensed under the Creative Commons Attribution License.
64
Ordered Model Transformations
R
PreX
∗
X
PostY
S
∗
/Y S0
R0 ∗
∗
Figure 1: A transformation between classes X and Y , which is subject to a precondition on X and a postcondition on X and Y .
transformation between the classes that X and Y contain (clearly, if Y were a root class, the postcondition would not have a Link component, and if Y were a leaf class, the postcondition would not have a Nest component). While Data components vary significantly between transformations (there is no reason why they should be the same), the Link and Nest components are generally quite similar. In fact the only assertion that a Link component can make is that Y participates in a relationship with the class that contains it; and all that a Nest component can do is pass control of the specification to the classes that X and Y contain. This opens up the prospect of removing from users the tedious task of proving Link components by hand.1 Of course, this prospect only presents itself by virtue of the ordered nature of the models and transformations under consideration, where order is defined by containment. However, such transformations are sufficiently common in practice (see, for instance, [11] for examples) to make this a worthwhile pursuit. In this paper, we focus on a particular but nonetheless ubiquitous kind of model transformation, in which the source and target models are either partially or totally ordered.2 In particular, based on the definitions of model and model transformation given in [17], we show that the proofs of the specifications of large ordered model transformations can be systematically assembled from their parts, making them easier to derive. Our main contribution is a method to derive correctness proofs for ordered model transformations by assembling the proofs of their parts, within constructive type theory. We illustrate the method with examples. The proofs in this paper have all been implemented in the Coq Proof Assistant [1], see the Coq scripts at http://www.inf.kcl.ac.uk/pg/terrellj. The paper is organised as follows: In Section 2, we give a brief introduction to MDA and type theory, to try to make the paper self contained. In Section 3, we show how to formalise a model transformation (the specification and its correctness proof) in constructive type theory, including the key notion of a parametric proof (a proof with a hole over which it is possible to quantify and hence parametrise). We then use this idea to formally specify ordered model transformations in general in Section 4. In Section 5, there is a concrete example of an assembled proof. Finally, in Section 6, we sum up and discuss future developments.
1 The
proof of an assertion involving a many-valued relationship requires a proof by list induction, and the proof of a chain of many-valued relationships, which is not uncommon, requires a nested set of proofs by list induction. 2 Hierarchical models are the rule rather than the exception in industry (the UML metamodel is fundamentally hierarchical), where transformations are notable for their size rather than their complexity.
M. Fern´andez & J. Terrell
2
65
Preliminaries
We recall the basic notions of Model Driven Architecture (MDA) and Constructive Type Theory (CTT) that are used in the paper. We refer the reader to [11] and [13] for more details on MDA and CTT, respectively.
2.1
Model Driven Architecture
The movement away from the machine to a higher level of abstraction began in earnest in the early 1990s, with the advent of a number of object-oriented analysis and design methodologies. The most influential, in the authors’ view, was the one proposed by Shlaer and Mellor in [21, 22], for it played a huge part in shaping the MDA a decade later. The aims of the MDA are two-fold: first, that software systems should be developed independently of the platforms on which they will eventually run, and second, that they should be translated into specific implementations using standard parts, namely model to text and model to model transformations. In its simplest form, a model transformation takes as input a model, written in a source modelling language (IL), and outputs a new model, written in a possibly different target modelling language (OL). The transformation should be applicable to any model written in IL, therefore it can be seen as a mapping from elements of IL to elements of OL. In MDA, both the input and output languages are defined as metamodels within the Meta-Object Facility (MOF) [15]. Metamodelling in the MOF is usually done according to a four level hierarchy [14]. The levels are related by an object-oriented style class/object instantiation relationship: classes at level Mi+1 provide descriptions of objects at level Mi . Roughly speaking, we can think of entities at the M0 level as objects representing instances of an M1 UML class. The M2 level is where metamodels are defined. Metamodels are collections of instances of the M3 level classes (meta-meta-classes). The M3 level of the MOF model is used to classify the elements that make up an M2 level metamodel. Following [17, 18], in this paper we will consider model transformations as higher-order functional programs satisfying certain pre and post conditions.
2.2
Constructive Type Theory
The type theory below is based on the one proposed by Martin-L¨of [13]. A type is defined by prescribing how its inhabitants are formed. For example, if S is the successor function, then the inhabitants of the type Nat are given by n : Nat . 0 : Nat (S n) : Nat If A and B are types, then A ∧ B, A ∨ B and A → B are defined to be types too, where A ∧ B is inhabited by a pair of inhabitants of A and B, A ∨ B is inhabited by an inhabitant of A or B, together with an indication as to whether it is an inhabitant of A (on the left) or B (on the right), and A → B is inhabited by a function from A to B, i.e.
a: A b: B ha, bi : A ∧ B
a: A inl a : A ∨ B
b: B inr b : A ∨ B
[a : A] .. .. b: B . λa: A.b: A → B
66
Ordered Model Transformations
If a is an inhabitant of A, and B(a) is a type whose inhabitants depend on a, then ∀a : A . B(a) and ∃a : A . B(a) are defined to be types, where ∀a : A . B(a) is inhabited by a function that takes A to B(a), and ∃a : A . B(a) is inhabited by a pair of inhabitants of A and B(a), i.e. [a : A] .. .. b : B(a) λ a : A . b : ∀a : A . B(a)
a : A b : B(a) . ha, bi : ∃a : A . B(a)
One particular type that we shall meet often in this paper is ∀a : A . P(a) → ∃b : B . Q(a, b) , which defines the specification of a transformation that takes a source class A to a target class B, subject to precondition P(a) and postcondition Q(a, b). Note that types A ∧ B and A → B are special cases of types ∀a : A . B(a) and ∃a : A . B(a) where B is independent of a. A term λ a : A.b of type A → B represents a function from A to B. Application is written simply as juxtaposition: t : ∀a : A.B(a) s : A . (t s) : B(s) Further, the reduction relation is generated by the β -rule: (λ a : A.t)s → t{a 7→ s} The reflexive and transitive closure of the one-step reduction relation → is denoted by . We shall also add to our language a predicate =, which we can use to build dependent types like x = 0, where x : Nat. When 0 is substituted for x, the type becomes 0 = 0, which is inhabited by r(0) (see [25] for more details); when 1 is substituted for x, the type becomes 1 = 0, which is uninhabited. Lastly, we shall add the type [E] of lists of elements of type E to our language, and two distinguished types Set and Prop, which will be used to classify types.
3
Type Theory for Model Transformations
In this section, we formalise UML classes and objects using constructive type theory. Definition 1. A UML class C is encoded as a type, that is, an inhabitant of type Set; and a UML object of C is encoded as an inhabitant of type C. Furthermore, a base attribute of C is encoded as an inhabitant of type C → τ1 , where τ1 is a ground type, e.g. Nat; and a referential attribute of C is encoded as an inhabitant of type C → τ2 , where τ2 is the type of some other UML class or class list. We shall assume that every UML class C has a single base attribute IdC of type Nat, and as many referential attributes as it needs to encode the relationships in which it participates. For example, if C is linked by a one-valued relationship to UML class D, and a many-valued relationship to UML class E, then the rule for constructing the inhabitants of C is as follows, where @C denotes an anonymous constructor of C. n : Nat d : D l : [ E ] . @C n d l : C
M. Fern´andez & J. Terrell
67 A
PreA
PostP
/P
Figure 2: A transformation between A and P. The judgement a : A admits several different readings: a is an inhabitant of type A (as above), a is a program whose specification is A (which may be that of a model transformation), and a is a proof of proposition A (which may be that of a precondition). In the last reading, A is defined to be an inhabitant of type Prop, where A is considered to be true if and only if it is inhabited. The relationship between propositions and types, which was first discovered by Curry [5] and later extended by Howard [9], is known as the Curry-Howard isomorphism. In this paper, we describe a technique to derive proofs of potentially large ordered model transformations. To illustrate the ideas underlying this technique, we consider first a simple model transformation, where each object of class A (see Fig. 2) is transformed into an object of class P, subject to a precondition PreA of type A → Prop and a postcondition PostP of type A → P → Prop. 3 The specification of the transformation is formalised as a type, i.e. ∀a : A . PreA a → ∃p : P . PostP a p ,
(1)
and its proof is given by [a : A] 1
[h : Pre a] 2 .. .. Hole u : Post a p (∃ I) hp, ui : ∃p : P . Post a p (→ I) 2 λ h . hp, ui : Pre a → ∃p : P . Post a p (∀I)1 , λ a . λ h . hp, ui : ∀a : A . Pre a → ∃p : P . Post a p
(2)
i.e. a function that takes an object a of A and a proof h of PreA a, and returns as a pair the corresponding object p of P and a proof u of PostP a p. There is a hole in the proof above because the transformation is under specified. However, given suitable definitions of A, P, PreA and PostP , the hole could be filled and the proof completed. Furthermore, given a second transformation with a different set of definitions of A, P, PreA and PostP , we could apply the same procedure. However, the proofs would be so similar, at least in outline, that it should be possible to capture them all in a parametrised proof, by quantifying over all source and target classes, pre and postconditions, and proofs of holes, in the specification of the transformation. Based on this idea, we define the following correctness condition. Definition 2 (Correct Model Transformation). A correct model transformation from X to Y should ensure that for each x in X that satisfies the precondition there is a y in Y that satisfies the postcondition. This is formalised using the following type: ∀X : Set . ∀Y : Set . ∀Pre : X → Prop . ∀Post : X → Y → Prop . ∀ f : X → Y . ∀Hole : (∀x : X . Pre x → Post x ( f x)) . ∀x : X . Pre x → ∃y : Y . Post x y .
(3)
3 Preconditions serve several purposes. First, to allow a choice of rules in different cases, e.g. by checking that a class is a root class, if root classes are transformed by a different rule to non-root classes. Second, to ensure that a postcondition is well-defined, e.g. by insisting that x ≥ 0 if the postcondition takes the square root of x. Third, to ensure that only certain source elements are transformed, e.g. by checking that a class is persistent, if only persistent classes are mapped to database tables. In the first and second cases, we might expect the precondition to contribute to the proof of the postcondition.
68
Ordered Model Transformations The proof of (3) is little more than two eliminations and a sequence of introductions, i.e. [X : Set] 1 [Y : Set] 2 [Pre : X → Prop] 3 [Post : X → Y → Prop] 4 [ f : X → Y ]5 .. .. [Hole : (∀x : X . Pre x → Post x ( f x))] 6 [x : X] 7 (∀E) Pre x → Post x ( f x) [h : Pre x] 8 (→ E) Post x ( f x) (∃ I) ∃y : Y . Post x y (→ I) 8 Pre x → ∃y : Y . Post x y (∀I)7 ∀x : X . Pre x → ∃y : Y . Post x y (∀I)6 ∀Hole : (∀x : X . Pre x → Post x ( f x)) . ∀x : X . . . . (∀I)5 ∀ f : X → Y . ∀Hole : (∀x : X . Pre x → Post x ( f x)) . . . . (∀I)4 ∀Post : X → Y → Prop . ∀ f : X → Y . . . . (∀I)3 ∀Pre : X → Prop . ∀Post : X → Y → Prop . . . . (∀I)2 ∀Y : Set . ∀Pre : X → Prop . . . . (∀I)1 . ∀X : Set . ∀Y : Set . . . .
(4)
The fixed outline shape of the proof is captured by rules (∃ I) to (∀I)7 , and the variable proof of the hole is captured by assumption 6. Furthermore, the function K defined below can easily be shown to inhabit (3). K =d f λ X . λY . λ Pre . λ Post . λ f . λ Hole . λ x . λ h . h( f x), ui . (5) Note that the arguments X and Y are arbitrary source and target classes; Pre and Post are arbitrary pre and postconditions; f is a function that maps source objects to target objects; Hole is a proof of the hole (see (2)); x is a source object; and h is a proof that the precondition holds on the source object. K returns a target object ( f x), and a proof u that the postcondition holds on the source and target objects. We shall now apply K to a particular transformation, i.e. the one between A and P. Let PreA be a predicate that holds on all objects of A, and let PostP be a predicate that holds on all objects of A and P which have the same base attribute values. Formally, let PreA =d f λ a . > PostP =d f λ a . λ p . (IdA a = IdP p) . Now, if fA =d f λ a . @P (IdA a) , then the proof of the hole is [a : A] 1
[h : >] 2 .. .. pIdA : A → Natq [a : A] 1 (→ E) IdA a : Nat (II) r(IdA a) : IdA a = IdA a (→ I) 2 λ h . r(IdA a) : > → IdA a = IdA a (∀I)1 λ a . λ h . r(IdA a) : ∀a : A . > → IdA a = IdA a ( =d f ) . λ a . λ h . r(IdA a) : ∀a : A . PreA a → PostP a ( fA a)
M. Fern´andez & J. Terrell
69 A
PreA
PostP
/P
PostQ
R1
PreB
B
S1
/Q
Figure 3: A two-runged transformation Furthermore, if HoleA =d f λ a . λ h . r(IdA a) , then K A P PreA PostP fA HoleA (@A 1) Triv h(@P 1), r(IdA (@A 1))i . Therefore, @P 1 is the transform of @A 1, and r(IdA (@A 1)) is the term that proves it. In the next sections we generalise these ideas to families of ordered model transformations.
4
Ordered Model Transformations
In the previous section, we showed how the specification of a small transformation could be abstracted into the specification of a family of transformations, by quantifying over all possible source and target classes, pre and postconditions and holes. The proof that resulted contained a fixed part, common to all members of the family, and a variable part, specific to a particular member. In this section, we extend these ideas to ordered model transformations in general. There are two kinds of ordered transformations: totally and partially ordered. Informally, a totally ordered set of transformations is one that has the shape of a ladder, in which the source and target models are the verticals, and the transformations are the rungs. A partially ordered set of transformations has the shape of a tree of ladders, in which the branches between nodes are totally ordered transformations. We give examples before presenting the formal definitions. Consider the two-runged transformation in Fig. 3, in which A is transformed to P subject to conditions PreA and PostP , and B is transformed to Q subject to conditions PreB and PostQ . If an object a of A is transformed to an object p of P, then the object R1 a of B is transformed to the object S1 p of Q. In other words, the transformation of B to Q is nested within the transformation of A to P. As before, we shall define the specification of the transformation as a type, outline its proof, and abstract over classes, conditions and holes. The transformation along each rung is similar to the one between A and P earlier. However, the transformation between the verticals (relationships) is new. The specification of the transformation that is depicted in Figure 3 is formalised as a type as follows (for ease of readability, we write one rung per line). ∀a : A . PreA a → ∃p : P . (PostP a p ∧ ∀b : B . PreB b ∧ (R1 a) = b → ∃q : Q . PostQ b q ∧ (S1 p) = q) .
(6)
The transformation along the second rung is nested within the first rung, and has stronger pre and postconditions in virtue of the connectivity constraints placed on objects of B and Q. Note that a third or fourth rung would have the same shape as the second rung.
70
Ordered Model Transformations f
x
R
Rx
Com f0
/ fx
S
/ S ( f x) = f 0 (R x)
Figure 4: The commutative square Com. In outline, the proof of (6) is [a : A] [a : A] [b : B] [b : B] [PreB b ∧ R1 a = b] [PreB b ∧ R1 a = b] (∧ E1 ) (∧ E2 ) pPre.B bq pR1 a. = bq .. Hole .. Com B A . . PostQ b q S1 p = q [a : A] (∧ I) (PostQ b q ∧ S1 p = q) [q/q] [PreA a] .. .. .. Fixed .. HoleA PostP a p (∀b : B . PreB b ∧ R1 a = b → . . .) [p/p] (∧ I) (PostP a p ∧ ∀b : B . PreB b ∧ R1 a = b → . . .) [p/p] .. .. Fixed ∀a : A . PreA a → ∃p : P . PostP a p ∧ . . . The fixed parts of the proof exist in virtue of the structure of the specification, whereas the variable parts exist in virtue of its under-specification. The variable parts are either of the Hole kind, i.e. proofs that postconditions are derived from preconditions, or the Com kind, i.e. proofs that adjacent rungs are linked. Quantifying over all variables in (6), including proofs of variable parts, and changing the names of bound variables where appropriate, we obtain the specification of an arbitrary two-runged transformation. Definition 3 (Two-Runged Model Transformation). An arbitrary two-runged model transformation is formalised in constructive type theory by the following type: ∀X : Set . ∀Y : Set . ∀Pre : X → Prop . ∀Post : X → Y → Prop . ∀ f : X → Y . ∀Hole : (∀x : X . Pre x → Post x ( f x)) . 0
∀X : Set . ∀Y 0 : Set . ∀Pre0 : X 0 → Prop . ∀Post 0 : X 0 → Y 0 → Prop . ∀ f 0 : X 0 → Y 0 . ∀Hole0 : (∀x0 : X 0 . Pre x0 → Post x0 ( f 0 x0 )) . ∀R : X → X 0 . ∀S : Y → Y 0 . ∀Com : (∀x : X . S ( f x) = f 0 (R x)) . ∀x : X . Pre x → ∃y : Y . Post x y ∧ 0
0
0 0
∀x : X . Pre x ∧ R x = x0 → ∃y0 : Y 0 . Post 0 x0 y0 ∧ S y = y0 .
(7)
This formalisation is similar to the one in (3) except that it also quantifies over Com, i.e. a proof that starting from every object x of X (X being the source end of the first rung) and navigating to some object y0 of Y 0 (Y 0 being the target end of the second rung), first via f and S, and then via R and f 0 , the same y0 is obtained. The commutative square, after which Com is named, is shown in
M. Fern´andez & J. Terrell
71
Fig. 4. Furthermore, given a proof of Com, it is a trivial matter to prove that the rungs are linked, i.e. [x : X] [Com : ∀x : X . S ( f x) = f 0 (R x)] (∀E) S ( f x) = f 0 (R x) pR x = x0 q (IE) . S ( f x) = f 0 x0 Property 1. The function that inhabits (7) is λ X Y Pre Post f Hole X 0 Y 0 Pre0 Post 0 f 0 Hole0 R SCom x h.h( f x), ui Proof. Direct, using the typing rules given in Section 2. Note that the first element of the output pair is the result of applying the root function f to an arbitrary root object x, reflecting the fact that an ordered transformation is essentially a transformation between root classes. We are now ready to formalise the notion of ordered model transformation. First we consider totally ordered transformations, and later we extend the results to partially ordered transformations.
4.1
Totally Ordered Transformations
In order to formalise totally ordered model transformations, we will define a dependent type T X Y f , where T is the type name, and X, Y and f are the parameters on which it depends, i.e. root source class, root target class and root function respectively. A totally ordered transformation is an inhabitant of this dependent type. The inhabitants of T are defined inductively, in much the same way as Nat, by means of a base rule and a step rule. Definition 4. (Type T X Y f ) The type T is defined inductively, with a rule defining the base case and a rule defining the inductive step, as follows: X : Set Y : Set f : X → Y X 0 : Set Y 0 : Set f 0 : X 0 → Y 0 Pre0 : X 0 → Prop Post 0 : X 0 → Y 0 → Prop Hole0 : ∀x0 : X 0 . Pre0 x0 → Post 0 x0 ( f 0 x0 ) R : X → X 0 S : Y → Y 0 Com : ∀x : X . f 0 (R x) = S ( f x) TBase X Y f X 0 Y 0 f 0 Pre0 Post 0 Hole0 R SCom : T X Y f X : Set Y : Set f : X → Y X 0 : Set Y 0 : Set f 0 : X 0 → Y 0 Pre0 : X 0 → Prop Post 0 : X 0 → Y 0 → Prop Hole0 : ∀x0 : X 0 . Pre0 x0 → Post 0 x0 ( f 0 x0 ) R : X → X 0 S : Y → Y 0 Com : ∀x : X . f 0 (R x) = S ( f x) t0 : T X 0 Y 0 f 0 TStep X Y f X 0 Y 0 f 0 Pre0 Post 0 Hole0 R SCom t 0 : T X Y f
(T I1 )
(T I2 )
The base rule constructs a transformation of the kind shown in Fig. 5 (left). Note that the root hole and root pre and postconditions (to clarify, the root is at the top) are not part of the construction. The step rule constructs the successor of a transformation t 0 , of the kind shown in Fig. 5 (middle). Again, the root hole and root pre and postconditions are not part of the construction.
72
Ordered Model Transformations f
X f
X
/Y
R
Com
Pre0 X0
f0
Hole0
Post 0/
R
Com
Pre0 X0
f0
t0 :
S
Y0
X 00
Hole0 T
X0 Y 0
/Y
fa
A S
R1
Com1
/P S1
Y0
PreB fb PostQ /Q B
Y 00
PreC fc PostR /R C
Post 0/ f0
HoleB
R2
Com2
S2
HoleC
Figure 5: From left to right: representations of the base and step rules of type T , followed by an inhabitant of type T A P fa , namely tAP . To construct an inhabitant of T , we first apply the base rule and then repeatedly apply the step rule. For example, the transformation tAP in Fig. 5 (right) is constructed as follows: tBQ =d f TBase B Q fb C R fc PreC PostR HoleC R2 S2 Com2 , tAP =d f TStep A P fa B Q fb PreB PostQ HoleB R1 S1 Com1 tBQ . By extension of (6), it would be easy to write down the specification of tAP , including the root transformation we have so assiduously excluded. However, much more useful would be to write down a function that could compute it, not only for tAP but also for every other inhabitant of T X Y f as well. Such a function is given below. Definition 5. (Spec) Spec : ∀X : Set . ∀Y : Set . ∀ f : X → Y . T X Y f → (X → Y → Prop) Spec X Y f (TBase X Y f X 0 Y 0 f 0 Pre0 Post 0 Hole0 R SCom) =d f λ x : X . λ y : Y . ∀x0 : X 0 . Pre0 x0 ∧ x0 = R x → ∃y0 : Y 0 . Post 0 x0 y0 ∧ y0 = S y Spec X Y f (TStep X Y f X 0 Y 0 f 0 Pre0 Post 0 Hole0 R SCom t 0 ) =d f λ x : X . λ y : Y . ∀x0 : X 0 . Pre0 x0 ∧ x0 = R x → ∃y0 : Y 0 . Post 0 x0 y0 ∧ y0 = S y ∧ Spec X 0 Y 0 f 0 t 0 x0 y0 .
(8)
Now, the specification of a transformation is an inhabitant of Prop. However, Spec returns an inhabitant of type X → Y → Prop. Why? To allow it to be integrated with the root objects of type X and Y , passed down to it by the root transformation. In its general form, an ordered model transformation is formalised as follows. Definition 6. (Ordered Model Transformation) An ordered model transformation is an inhabitant of type ∀X : Set . ∀Y : Set . ∀ f : X → Y . ∀t : T X Y f . ∀Pre : X → Prop . ∀Post : X → Y → Prop . ∀Hole : ∀x : X . Pre x → Post x ( f x) . ∀x : X . Pre x → ∃y : Y . Post x y ∧ Spec X Y f t x y .
(9)
M. Fern´andez & J. Terrell
73
X X0
f
/Y
t1
t2
Y0
X 00
Y 00
Figure 6: A representation of the join rule of type T . A proof of (9) (an inhabitant of the type) has the form: λ X . λY . λ f . λt . λ Pre . λ Post . λ Hole . λ x . λ h . h( f x), ui ,
(10)
where u is a proof of Post x ( f x) ∧ Spec X Y f t x ( f x) . According to (10), if we could construct an inhabitant of type T from suitable values of Hole (a proof of the root hole), X and Y (the root classes), f (the root function), and Pre and Post (the root conditions), then we could justifiable claim that h( f x), ui is a certified implementation of the transformation, for an arbitrary source object x. In other words, constructing a suitable value of t is tantamount to proving the specification.
4.2
Partially Ordered Transformations
We generalise the construction to take into account the case where transformations are partially ordered. Without loss of generality, we assume that a partially ordered transformation can be constructed from two ordered transformations, as shown in Fig. 6. Thus, we extend the definition of T X Y f in Definition 4 with a join rule, i.e. t1 : T X Y f t2 : T X Y f (T I3 ) , TJoin t1 t2 : T X Y f and extend the definition of Spec (Definition 5) with a case for TJoin , which returns the conjunction of the specifications of t1 and t2 , i.e. Spec X Y f (TJoin t1 t2 ) =d f λ x : X . λ y : Y . Spec X Y f t1 x y ∧ Spec X Y f t2 x y . See Fig. 7 for an example.
5
Concrete Example
Consider a transformation between the UML and SQL models in Fig. 8, in which • each model m is mapped to a schema s of the same name; • each class c in m is mapped to a table t in s of the same name, and a primary key column in t of the same name; • each attribute in c is mapped to a non-primary key column in t of the same name; • the mappings are unconditional, i.e. the preconditions always hold.
74
Ordered Model Transformations
A
fa
/P
t7
/Q
B
t6
C
/S
E
t5
t4
D
/R t1
G
/T
F /U
t3
t2
H
/V
J
/W
I Figure 7: An example of a partially ordered transformation, in which A, B, . . . , J are the source classes, P, Q, . . . ,W are the target classes, and A is transformed to P, B to Q and so on. The transformation (minus the root artefacts) is given by t7 , where t1 =d f TBase . . ., t2 =d f TBase . . ., t3 =d f TBase . . ., t123 =d f TJoin (TJoin t1 t2 ) t3 , t4 =d f TStep . . . t123 , t5 =d f TBase . . ., t6 =d f TStep . . . t4 , t56 =d f TJoin t5 t6 , and t7 =d f TStep . . . t56 . The specification of the transformation is given by Spec A P fa t7 . The specification of the transformation is given by ∀m : Model . PreModel m → ∃s : Schema . PostSchema m s ∧ Spec Model Schema fModel tModel−Schema m s , where tModel−Schema : T Model Schema fModel−Schema . If m1 =d f @Model 1 [ c1 , c2 , c3 ] c1 =d f @Class 2 [ @Attribute 5, @Attribute 6, @Attribute 7 ] c1 =d f @Class 3 [ @Attribute 8 ] c3 =d f @Class 4 [ ] , i.e. a model with 3 classes and 4 attributes, then K Model Schema fModel PreModel PostSchema HoleModel m1 Triv reduces to hs1 , pi, where s1 is given by s1 =d f @Schema 1 [t1 ,t2 ,t3 ] t1 =d f @Table 2 [ @Column 2 true, @Column 5 f alse, @Column 6 f alse, @Column 7 f alse, ] t1 =d f @Table 3 [ @Column 3 true, @Column 8 f alse ] t3 =d f @Table 4 [ @Column 4 true ] ,
M. Fern´andez & J. Terrell
75
Model model_name: string classes : list Class
Schema schema_name: string tables : list Table
* tables * classes
Class class_name: string attributes : list Attribute
Table table_name: string columns: list Column
* columns * attributes
Attribute attribute_name: string
Column column_name: string is_primary_key: bool
Figure 8: The UML and SQL models. i.e. a schema with 3 tables and 7 columns (3 of which are primary keys), and p is an unspecified proof (through lack of space) that s1 is indeed the transform of m1 .
6
Related Work and Conclusions
A number of authors have attempted to provide a formal understanding of metamodelling and model transformations. Ruscio et al. have made some progress towards formalizing the KM3 metamodelling language using Abstract State Machines [20]; and Rivera and Vallecillo have exploited the class-based nature of the Maude specification language to formalize metamodels written in KM3 [19]. Further, a related algebraic approach is given by Boronat and Meseguer in [2]. More recently, Calegari et al. [3] proposed a framework for encoding models and metamodels in the Calculus of Inductive Constructions (CIC) [23, 1], and in doing so showed how parts of the ATL model transformation language [10] could be expressed in the CIC, including matched rules, helpers and expressions based on the Object Constraint Language (OCL) [16]. In this paper, we have shown how to assemble the proof of a potentially large ordered model transformation, by decomposing it into a number of smaller proofs which are easier to derive. 4 We focused on a particular kind of transformation with uniform characteristics, which we hope to extend to other kinds of transformations in the future, although we have already incorporated a number of additional variants into the scheme outlined above, including support for many-valued relationships, unmapped source classes (of which C is an example in Fig. 7) and multiple target classes. In future work, we will extend the techniques to a larger class of model transformations, by abstracting over the non-hierarchical parts of models too. One way of achieving this would be to quantify over arbitrary propositions in each postcondition so that users could include a non-hierarchical proof fragment where necessary. To a certain extent, this is already supported because the Data component of a postcondition is user-defined and therefore arbitrary. However, another option would be to add a separate conjunct to the postcondition. 4
The reader should note that this approach could never be fully automatised in virtue of the unlimited scope of pre and postconditions. However, once the smaller proofs are available, the process of assembling them into a proof of the whole could indeed be automatised.
76
Ordered Model Transformations
Clearly, we do not exclude the possibility of an ordered model being embedded within a larger model, like an ordered core with an unordered covering (for example, see Fig. 9). In fact, our experience suggests that the majority of industrial models (which are characterised by their size rather than their complexity) are like this, and that the algorithms which transform them invariably perform preorder traversals of the ordered cores of the source models. That is not say that every model transformation fits this mould. However, it is reasonable to suppose that the lessons learnt from this study may also be applicable to other kinds of model transformations. has assignment dynamics modelled by
Assigner State Model {no=52, kl=ASM}
0..1
R60
attributes
analysis area id [ID] (R60) class key letter [ID] (R60) status attribute name
{no=28, kl=EIS}
Existing Instance State attributes
analysis area id [ID] (R132) state number [ID] (R132) class key letter [ID] (R132) state name method is creation is terminal description
Nonexistent State
Executable UML v31
{no=120, kl=NS} attri butes
analysis area id [ID] (R132) state number [ID] (R132) class key letter [ID] (R132)
Version 3.1.0 CCG_XUML for iCCG XUML for iUML API
is a state of 1
is used by 1
R54
attributes
causes entry to
analysis area id [ID] (R54) class key letter [ID] (R54) state number [ID] state name is start state method description
0..*
0..1
Instance State
R133
{no=119, kl=IS} R193
1..*
attributes
analysis area id [ID] (R135,R135) class key letter [ID] (R135) target class key letter [ID] (R135) signal number [ID] (R135)
R145
1..* is responded to in
responds to
0..*
analysis area id [ID] (R133) class key letter [ID] (R133) state number [ID]
{no=9, kl=FA}
R29
attri butes
Derived Association
analysis area id [ID] (R7) relationship number [ID] (R7) location of formalisation
1
{no=10, kl=DA} attributes
belongs to
Not supported by the API
Instance State Model
analysis area id [ID] (R7) relationship number [ID] (R7)
references an identifier at the A end of
attributes
R8 is derived from
0..*
has instance dynamics modelled by
UML Association {no=4, kl=UMLA} attri butes
is at A 0..* end of
is at 0..* B end of
R2
R3
has an A end of
has a B end of
1
is used by 0..*
R135
0..1
0..*
0..1
Assigner SPC
models the assignment dynamics of is signal role of 1 {no=7, kl=AC}
1
{no=139, kl=ASPC}
analysis area id [ID] (R157,R169) class key letter [ID] (R157,R169) spc type [ID] (R157)
has role 1
R61
models the instance dynamic behaviour of
1
1
R128 contains 0..*
{no=2, kl=C}
R224 performs signal role for 1 R168 represents specific counterparts generically to
Signal Transmission
is located at branch with
belongs to
1
is at branch which is the location of 0..*
0..1
Subclass Participation
{no=14, kl=RI} is formalised by
attri butes
R220
R244
{no=16, kl=SP}
formalises
1
attributes
0..1
R12
R13
analysis area id [ID] (R13,R13,R220) relationship number [ID] (R13,R220) subclass class key letter [ID] (R13) relationship end (R220)
is pointed at by
defers implementation to 1..*
attri butes
is route for deferral of
analysis area id [ID] (R244,R240,R245) operation id [ID] (R244,R240) subclass class key letter [ID] (R245) parent class key letter (R244)
1..*
0..*
attributes
{no=15, kl=GEN} is further deferred down
analysis area id [ID] (R12) relationship number [ID] superclass class key letter (R12)
Not supported by the API
0..* is route for further deferral of
is superclass in 0..*
is subclass in 0..*
R9
Generalisation
contains
R20 points to 1
1..* is characterised by {no=5, kl=A}
Attribute
1..*
0..*
attributes
attri butes
analysis area id [ID] (R10) referential attribute name [ID] (R10) referencing class key letter [ID] (R10)
is referenced by
R23
refers to
Non Referential Attribute
R16
contains
analysis area id [ID] (R9,R71) class key letter [ID] (R9) attribute name [ID] description data type name (R71) default value
{no=17, kl=I}
Identifier
is input for
attri butes
analysis area id [ID] (R14) identifier number [ID] class key letter [ID] (R14) preferred
contains
0..*
Supplementary Signal Parameter Carried By UML Signal
{no=136, kl=NCTERM} attri butes
{no=147, kl=SSPCBS} attributes
Domain Operation
0..*
has role 1
has output
0..*
R199
0..*
{no=140, kl=ISPC}
attributes is carried by analysis area id [ID] (R157,R168,R199) all signals of class key letter [ID] (R157,R168,R199) 0..1 spc type [ID] (R157) identifier number (R199)
contains 0..* has input
*
Instance SPC
R237
{no=155, kl=OPP}
Operation Parameter attri butes
has name and or type linked to
provides name and or type for
R203
0..*
0..1
operation id [ID] (R201,R202) analysis area id [ID] (R203,R207,R201,R202) name [ID] is a set position data type mode linked attribute name (R203) data type name (R207) linked class key letter (R203)
receives
carries supplementary 0..*
0..*
attri butes
is type of
has name and or type linked to
analysis area id [ID] (R192,R191,R190) provides name and or type for owning spc key letter [ID] (R190) spc type [ID] (R190) 0..* parameter name [ID] data type mode is a set data type name (R191) linked attribute name (R192) linked class key letter (R192)
R192
0..*
0..1 specifies the domain of
R207
0..*
R223 R222
R71 has its domain specified by R185
defines type of
{no=81, kl=SIGP}
Signal Parameter
0..1
0..*
R151
contains
*
is always identifed by 1
analysis area id [ID] (R151,R151) target spc key letter [ID] (R151,R151) target spc type [ID] (R151,R151) signal number [ID] (R151) parameter name [ID] (R151) position
R190
R238
R202
is part of
attributes
has name and or type linked to
R184
0..1
Non Counterpart Terminator analysis area id [ID] (R157,R223) terminator key letter [ID] (R157) name description spc type (R157) is foreign
1
{no=163, kl=DOMOP}
Not supported by the API
provides name and or type for
is 0..1 output for
is provided by R218
0..*
attri butes
analysis area id [ID] (R16,R16) identifier number [ID] (R16) class key letter [ID] (R16,R16) attribute name [ID] (R16)
R10
{no=149, kl=DSMEM} attri butes
is carried by 1..*
is {no=158, kl=STERM} provided attri butes analysis area id [ID] (R211) by terminator key letter [ID] 1 name description class key letter (R211)
R217
provides
provides
{no=162, kl=NCTOP}
operation id [ID] (R215) analysis area id [ID] (R222,R215)
{no=20, kl=AII}
{no=13, kl=NRA}
1
0..*
Non Counterpart Terminator Operation operation id [ID] (R215) analysis area id [ID] (R218,R215) terminator key letter (R218)
0..*
attri butes
Data Structure Member
analysis area id [ID] (R184,R189,R185) data structure type name [ID] (R189) structure member name [ID] is a set position in structure data type mode member type name (R185) linked class key letter (R184) linked attribute name (R184)
0..1
R201
0..*
R215
attributes
Attribute in Identifier
analysis area id [ID] (R10) attribute name [ID] (R10) class key letter [ID] (R10)
*
operation id [ID] (R215) analysis area id [ID] (R217,R215) terminator key letter (R217)
attri butes
R166
analysis area id [ID] (R210) terminator key letter [ID] name description class key letter (R210)
Specialisation Terminator
{no=161, kl=STOP} attributes
{no=151, kl=OP}
Operation
operation id [ID] analysis area id [ID] (R238) operation number name description is externally visible method operation subclass
0..*
0..*
Specialisation Terminator Operation
is deferred 1 down
*
is identified by 1..*
1
1
{no=157, kl=ATERM}
R216
provides
1
{no=22, kl=AR}
is target of
is directed at
is scoped to
attri butes
is provided by
{no=160, kl=ATOP} attributes
operation id [ID] (R215) analysis area id [ID] (R216,R215) terminator key letter (R216)
owns
R14
{no=12, kl=RA}
{no=135, kl=SPC}
Association Terminator
sees specific counterparts via
attributes
1..*
produces signal to be consumed by
0..*
0..*
communicates to counterparts via
0..*
Association Terminator Operation
R242
R243
analysis area id [ID] (R28,R23,R23) referencing class key letter [ID] (R23) referencing attribute name [ID] (R23) referenced class key letter [ID] (R23) referenced attribute name [ID] (R23) relationship number (R28) relationship end (R28)
contains
consumes signal produced by
Signal Producer Consumer attributes
R28
1
R170
0..*
analysis area id [ID] (R237) key letter [ID] R157 spc type [ID]
{no=159, kl=COP}
{no=6, kl=DEFOPI} attri butes
analysis area id [ID] (R241) operation id [ID] (R241) subclass class key letter [ID] (R241) method description
{no=118, kl=UMLS}
analysis area id [ID] (R166) target spc key letter [ID] (R166) target spc type [ID] (R166) signal number [ID] signal name description
is transmission of
R171
0..*
R210
has 0..*
attributes
Referential Attribute
R219
operation id [ID] (R215) analysis area id [ID] (R215,R17,R242) class key letter (R17) deferring relationship number (R242)
attri butes
Deferred Operation Implementation
{no=18, kl=FOPD} attri butes
1..*
is transmitted by
attributes
operation id [ID] (R215) analysis area id [ID] (R219,R215) is instance based class key letter (R219)
R241
0..1
Further Operation Deferral analysis area id [ID] (R241,R243) operation id [ID] (R241) subclass class key letter [ID] (R241) child relationship number (R243)
{no=21, kl=RAIRI}
Attribute Reference
UML Signal
attri butes
analysis area id [ID] (R170,R170,R171) target spc key letter (R171) producing spc key letter [ID] (R170) producing spc type [ID] (R170) consuming spc key letter [ID] (R170) consuming spc type [ID] (R170) signal number (R171) target spc type (R171)
R211
represents counterparts to
Polymorphic Operation
Class Operation implements
belongs to
Referential Attribute In Referential Identifier analysis area id [ID] (R19,R19) referential attribute name [ID] (R19) referencing class key letter [ID] (R19) relationship number [ID] (R19) relationship end [ID] (R19)
1
{no=19, kl=POLOP}
R240
0..*
1
forms part of
1
has 0..*
implements 0..1
{no=3, kl=DEFOP}
Deferred Operation
further defers implementation to
belongs to
1 R17
R245
1
1..*
{no=138, kl=STR}
attri butes
1 has superclass
has subclass
1
analysis area id [ID] (R22,R21,R20) relationship number [ID] (R22,R21) relationship end [ID] referenced identifier number (R20) referenced identifier class key letter (R20)
attributes
R5
1
identifies
{no=54, kl=ASSIG}
Assigner Signal analysis area id [ID] (R128,R200) target assigner key letter [ID] (R128,R200) signal number [ID] (R128) target spc type (R128)
attri butes
analysis area id [ID] (R5,R29) class key letter [ID] (R5) association multiplicity relationship number (R29)
analysis area id [ID] (R224) class key letter [ID] class number class name description is foreign
characterises
R19
is affected by
0..*
1..*
{no=144, kl=TSIG}
attributes
analysis area id [ID] (R128) target terminator key letter [ID] (R128) signal number [ID] (R128) method target spc type (R128)
attri butes
R169
Association Class
{no=8, kl=NAC} attri butes
attri butes
1
Terminator Signal
attri butes
analysis area id [ID] (R128) target class key letter [ID] (R128) signal number [ID] (R128) target spc type (R128)
R225
is formalised in
Non Association Class
Class defines the type for references to instances of R188
Referential Identifier
analysis area id [ID] (R53,R195,R53) target assigner key letter [ID] (R53,R53,R195) state number [ID] (R53) signal number [ID] (R53) destination state number (R195) effect type
R53
uses
{no=51, kl=SIG}
Signal
uses
contains 0..*
analysis area id [ID] (R5) class key letter [ID] (R5)
1..*
{no=55, kl=AE}
attributes
is entered 0..* via
{no=61, kl=ISM} analysis area id [ID] (R61) class key letter [ID] (R61) status attribute name
{no=11, kl=DE}
Derivation Element
analysis area id [ID] (R8,R8) derived relationship number [ID] (R8) element relationship number [ID] (R8)
analysis area id [ID] (R225,R2,R3) relationship number [ID] description A end conditionality B end conditionality A end multiplicity B end multiplicity A end role name B end role name A end class key letter (R2) B end class key letter (R3) is foreign
is formalised by having an A identifier referenced by
0..*
Assigner Effect
attri butes
is used to derive 0..*
R7
0..1
is entered as a result of
{no=134, kl=SES} attri butes
analysis area id [ID] (R156,R156) class key letter [ID] (R156) state number [ID] (R156) target class key letter [ID] (R156) signal number [ID] (R156)
R156
{no=34, kl=EF}
analysis area id [ID] (R193,R145,R196,R193) state number [ID] (R193) class key letter [ID] (R193,R145,R196,R193) creation state number (R145) destination state number (R196) effect type target class key letter [ID] (R193) signal number [ID] (R193)
carries formalisation for 1
Formalised Association
0..1 0..1
is formalised by having a B identifier refereced by
Signal Entering State
is entered as a 0..* result of
attri butes
references an identifier at the B end of
R21
causes entry 0..1
affects
R195
0..1
is entered as a result of
Effect
R22
R200
R196
attri butes
{no=121, kl=SU}
Signal Usage
The classes marked with an * in their top-left corner are the only classes that will be populated for a 'Package Container Domain Version'. (See iCCG User Guide for further details)
{no=53, kl=AST}
Assigner State causes entry to
contains 1..*
(c) Kennedy Carter Ltd. 2007
0..*
consists of
results in creation in 0..1
R132
has type
0..*
0..1
has type 0..1
1
*
{no=26, kl=DAT} has type
Data Type attri butes
defines type of 0..*
R191
0..1
analysis area id [ID] (R221) data type name [ID]
contains 0..*
contains
0..* R221
*
*
Provided Data Type
{no=75, kl=UDDT}
*
{no=148, kl=DST}
*Constrained
is derived of
*
Constrained Real Type
*
{no=69, kl=CTT}
attributes
{no=73, kl=CTODT}
Enumeration Type
attri butes
analysis area id [ID] (R74) data type name [ID] (R74)
attributes
analysis area id [ID] (R74) data type name [ID] (R74)
is defined in
1
1
is defined in
attributes
analysis area id [ID] (R74) data type name [ID] (R74)
analysis area id [ID] (R74) data type name [ID] (R74)
is defined in
is defined in 1
1 is defined in
1
is defined in
{no=165, kl=SEG} is defined in
R233
contains
1
is defined in 1 R228
0..*
Test Method
contains 0..*
{no=168, kl=TM}
* is listed within
attri butes
analysis area id [ID] (R227) number [ID] name method
contains
R226
0..*
0..*
0..1 is current selection of R229 has currently selected 0..1
Test Method Set {no=169, kl=TMS} attri butes
analysis area id [ID] (R228,R229) name [ID]
is defined in 1
*
0..*
Test Method Set Component
0..*
analysis area id [ID] (R233) number [ID] name method
0..1 is current selection of
R230 contains
references
1
R235
R232 has currently selected
Initialisation Sequence
is referenced by
0..*
0..1 is a component of {no=166, kl=ISEQ}
1
attri butes
analysis area id [ID] (R230,R232) sequence name [ID]
consists of R234
is first component in 0..1
*
Initialisation Segment attri butes
attri butes
1 R227
contains *
{no=68, kl=ET}
*
{no=164, kl=AA}
Analysis Area
is defined in 1..*
R75 is an element of 1
Constrained Text Type
{no=71, kl=CRT}
Type
attri butes
analysis area id [ID] (R74) data type name [ID] (R74) is referenced by instance handles of type
*
Time Of Day
analysis area id [ID] has population errors
analysis area id [ID] (R75) data type name [ID] (R75) enumeration name [ID] enumeration value enumeration value set
1 is part of
Data Structure Type
*
{no=80, kl=EE} attributes
analysis area id [ID] (R73) data type name [ID] (R73)
R74
*
Enumeration Element
{no=74, kl=PDT} attri butes
analysis area id [ID] (R73) data type name [ID] (R73) description constraint data type subclass
1
is defined in 1
R73
User Defined Data Type attributes
R189
has first R239
*
Initialisation Sequence Component {no=167, kl=ISEQC}
0..*
0..1
attributes
analysis area id [ID] (R234,R235,R236,R239) sequence name [ID] (R234,R239,R236) position in sequence [ID] initialisation segment number (R235) next position in sequence (R236)
is preceded by
0..1
is followed by 0..1
{no=170, kl=TMSC}
1
attributes
Instance Handle Type {no=153, kl=IHT}
*
Constrained Date Type
attributes
analysis area id [ID] (R188,R74) data type name [ID] (R74) class key letter (R188)
*
Constrained Integer Type
{no=72, kl=CDT} attri butes
analysis area id [ID] (R74) data type name [ID] (R74)
{no=70, kl=CIT} attri butes
analysis area id [ID] (R74) data type name [ID] (R74)
*
Deferred Type attri butes
{no=67, kl=DT}
Not supported by the API
analysis area id [ID] (R226,R226) test method set name [ID] (R226) test method number [ID] (R226)
R236
analysis area id [ID] (R74) data type name [ID] (R74)
Figure 9: An industrial strength model (of executable UML, courtesy of Abstract Solutions Ltd) comprising a strongly ordered core (admittedly, one defined by generalisation—an area for further study—as well as containment, and visually apparent only to a subject matter expert) surrounded by an unordered covering.
7
Acknowledgements
The authors would like to thank Iman Poernomo for his support in writing this paper.
References [1] Y. Bertot & P. Cast´eran (2004): Interactive Theorem Proving and Program Development. Coq’Art: The Calculus of Inductive Constructions. Texts in Theoretical Computer Science, Springer-Verlag, doi:10.1007/9783-662-07964-5. [2] A. Boronat & J. Mesegeur (2008): An Algebraic Semantics for the MOF. In J. Fiadeiro & P. Inverardi, editors: FASE 2008 Proceedings, LNCS 4961, Springer, pp. 377–391, doi:10.1007/978-3-540-78743-3 28. [3] Daniel Calegari, Carlos Luna, Nora Szasz & Alvaro Tasistro (2011): A Type-Theoretic Framework for Certified Model Transformations. In Jim Davies, Leila Silva & Adenilso da Silva Sim˜ao, editors: Formal Methods: Foundations and Applications - 13th Brazilian Symposium on Formal Methods, SBMF 2010, Natal, Brazil, November 8-11, 2010, Revised Selected Papers, Lecture Notes in Computer Science 6527, Springer, pp. 112–127, doi:10.1007/978-3-642-19829-8 8.
M. Fern´andez & J. Terrell
77
[4] M. Clavel, F. Dur´an, S. Eker, P. Lincoln, N. Mart´ı-Oliet, J. Meseguer & C. Talcott (2003): The Maude 2.0 System. In: Rewriting Techniques and Applications (RTA 2003), Lecture Notes in Computer Science 2706, Springer-Verlag, pp. 76–87, doi:10.1007/3-540-44881-0 7. [5] H.B. Curry & R. Feys (1958): Combinatory Logic. 1, North Holland Publishing Company. [6] Object Management Group (2003): MDA Guide Version 1.0.1. [7] Object Management Group (2009): Unified Modelling Language, Version 2.2. Formal/09-02-02, formal/0902-04. [8] Object Management Group (2011): Meta Object Facility (MOF) 2.0 Query/View/Transformation Specification. Formal/2011-01-01. [9] W.A. Howard (1980): The Formulae-as-Types Notion of Construction. In J.P. Seldin & J.R. Hindley, editors: To H.B. Curry: Essays on Combinatory Logic, Lambda Calculus and Formalism, Academic Press Inc. [10] F. Jouault & I. Kurtev (2006): Transforming Models with ATL. LNCS 3844, MODELS 2005 Workshops, Springer-Verlag, pp. 128–138, doi:10.1007/11663430 14. [11] K. Lano (2009): Model-Driven Software Development with UML and JAVA. Cengage Learning EMEA. [12] K. Lano, editor (2009): UML 2 Semantics and Applications. Wiley, doi:10.1002/9780470522622. [13] P. Martin-L¨of (1984): Intuitionistic Type Theory. Bibliopolis. [14] S.J. Mellor, K. Scott, A. Uhl & D. Weise (2004): MDA Distilled. Addison-Wesley. [15] Object Management Group (2006): Meta Object Facility (MOF) Core Specification. Formal/06-01-01. [16] Object Management Group (2012): Object Constraint Language (OCL), Version 2.3.1. Formal/2012-01-01. [17] I.H. Poernomo (2008): Proofs-as-Model-Transformations. In Antonio Vallecillo, Jeff Gray & Alfonso Pierantonio, editors: Theory and Practice of Model Transformations, First International Conference, ICMT 2008, Z¨urich, Switzerland, July 1-2, 2008, Proceedings, Lecture Notes in Computer Science 5063, Springer, pp. 214–228, doi:10.1007/978-3-540-69927-9 15. [18] I.H. Poernomo & J.W. Terrell (2010): Correct-by-Construction Model Transformations from Partially Ordered Specifications. In J.S. Dong & H. Zhu, editors: Formal Methods and Software Engineering, Lecture Notes in Computer Science 6447, 12th International Conference on Formal Engineering Methods, ICFEM 2010, Shanghai, China, November 17-19, Springer, doi:10.1007/978-3-642-16901-4 6. [19] J. Rivera & A. Vallecillo (2007): Adding Behavioural Semantics to Models. In: The 11th IEEE International EDOC Conference (EDOC 2007), IEEE Computer Society, Annapolis, Maryland, USA, pp. 169–180. [20] D. Ruscio, F. Jouault, I. Kurtev, J. Be´zivin & A. Pierantonio (2006): Extending AMMA for Supporting Dynamic Semantics Specifications of DSLs. Technical Report 06.02, Laboratoire d’Informatique de NantesAtlantique (LINA), Nantes, France. [21] S. Shlaer & S.J. Mellor (1988): Object-Oriented Systems Analysis – Modelling the World in Data. Yourdon Press, Prentice Hall. [22] S. Shlaer & S.J. Mellor (1991): Object Lifecycles – Modelling the World in States. Yourdon Press, Prentice Hall. [23] The Coq Development Team (2010): The Coq Proof Assistant, Reference Manual. Available at http: //coq.inria.fr/refman. [24] Xavier Thirioux, Benoˆıt Combemale, Xavier Cr´egut & Pierre-Lo¨ıc Garoche (2007): A Framework to Formalise the MDE Foundations. In: TOWERS, pp. 14–30. [25] S. Thompson (1999): Type Theory & Functional Programming. Computing Laboratory, University of Kent.