[qvtd] ICMT 2013 extended abstract, submission, slides / poster
diff --git a/qvt/docs/ICMT2013/.gitignore b/qvt/docs/ICMT2013/.gitignore
new file mode 100644
index 0000000..a97a652
--- /dev/null
+++ b/qvt/docs/ICMT2013/.gitignore
@@ -0,0 +1,10 @@
+/icmt13_52.aux
+/icmt13_52.bbl
+/icmt13_52.blg
+/icmt13_52.log
+/icmt13_52.synctex.gz
+/icmt13_52_ea.aux
+/icmt13_52_ea.log
+/icmt13_52_ea.synctex.gz
+/icmt13_52_ea.bbl
+/icmt13_52_ea.blg
diff --git a/qvt/docs/ICMT2013/Metamodels.png b/qvt/docs/ICMT2013/Metamodels.png
new file mode 100644
index 0000000..26de5f6
--- /dev/null
+++ b/qvt/docs/ICMT2013/Metamodels.png
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVTView.pdf b/qvt/docs/ICMT2013/QVTView.pdf
new file mode 100644
index 0000000..31a23f6
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTView.pdf
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVTcore.odg b/qvt/docs/ICMT2013/QVTcore.odg
new file mode 100644
index 0000000..a90b349
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTcore.odg
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVTcore.png b/qvt/docs/ICMT2013/QVTcore.png
new file mode 100644
index 0000000..2d547c5
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTcore.png
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVTcore.tex b/qvt/docs/ICMT2013/QVTcore.tex
new file mode 100644
index 0000000..c486de3
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTcore.tex
@@ -0,0 +1,112 @@
+%=======================================================================

+% Copyright (c) 2013 The University of York and Willink Transformations.

+%

+% $Id: icmt13_52.tex 4326 2013-01-31 17:44:31Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\section{The QVT Core Language}\label{sec:qvtcore}

+QVT Core (QVTc) is a surprisingly simple multi-directional, multi-input, multi-output declarative model transformation language. The complexities of multi-versatility are considered in \ref{Direction}. In the following description, we therefore consider just a simple left to right transformation.

+

+A declarative model transformation language declares the many transformation relationships that all the objects in all the input models and in all the output models satisfy on completion of the transformation; it does not necessarily specify how this is achieved. The complexity of the many relationships is managed by exploiting the familiar metamodels, shown at the left and right hand sides of Figure \ref{fig:TransformationAnatomy}. These comprise packages and types to categorize the different kinds of objects in a model. The Transformation adds Mappings and Patterns to organize the different kinds of relationship to be satisfied.

+

+\begin{figure}[h]

+	\centering

+	\includegraphics[width=0.8\textwidth]{TransformationAnatomy.png}

+	\caption{Transformation Anatomy.}

+	\label{fig:TransformationAnatomy}

+\end{figure}

+

+

+Figure \ref{fig:pattern} is an Object Diagram showing an example Pattern describing a parent-child match. The pattern involves two pattern variables \textit{theParent} and the \textit{theChild} each of which may be bound to a \textit{Node} object in a user model. The pattern imposes the additional constraint that the objects bound to \textit{theParent} and  \textit{theChild} variables must lie at each end of a \textit{parent}-\textit{children} Association. The \textit{theParent} lies at the composing (diamond) end of an optional (?) multiplicity.  The \textit{theChild} lies at the end of an arbitrary (*) multiplicity.

+

+\begin{figure}[h]

+	\centering

+	\includegraphics[width=0.7\textwidth]{pattern.png}

+	\caption{Example Parent-Child Pattern.}

+	\label{fig:pattern}

+\end{figure}

+

+When the transformation relationships are satisfied, the models have been partitioned into groups of objects and every object is a member of at least one group. Each group is identified by a Binding in which the Type of each object conforms to the Type of the Pattern element to which the object is bound. The interrelationships between the bound objects similarly conform to the interrelationships between the pattern elements. For the example pattern, each Binding comprises a pair of \textit{Node}s one bound to \textit{theParent} and the other bound to \textit{theChild}. A Binding exists for every possible pair of \textit{Node} objects that match the Pattern. The transformation between the Bindings is defined by Mappings, each of which defines the interrelationships between one left Pattern and one right Pattern.

+

+

+The foregoing principles are common to many declarative and some imperative transformation languages. It is in the way in which mappings are structured that transformation languages vary.

+

+\subsection{Traceability and the Middle Model}

+A significant challenge for model transformation arises in specifying how the overlap of output Bindings is to be handled. A common solution provides specialized constructs to interrogate the execution trace and so allow the instantiation of one Pattern to interact with the instantiation of another. These specialized constructs are often rather obscure. QVTc is unusual in making the traceability model explicit; it is called the Middle model. Figure \ref{fig:QVTCoreAnatomy} shows how for QVTc there are three Domains, Left, Middle and Right, each of which comprises Models and Metamodels. Associated with each Domain are the Bindings and Patterns.

+

+\begin{figure}[h]

+	\centering

+	\includegraphics[width=0.9\textwidth]{QVTcore.png}

+	\caption{QVT Core Anatomy.}

+	\label{fig:QVTCoreAnatomy}

+\end{figure}

+

+The additional Middle model may be quite simple and the Middle Bindings may be free from overlap. This may significantly simplify the transformation exposition since with the aid of the intermediate, a direct N:M mapping from left-to-right may be expressed as a two-pass transformation comprising an N:1 left-to-middle pass and a 1:M middle-to-right pass. Any information that needs to be gleaned from the left can be cached in the middle model during left-to-middle pass so that it is readily available for use during the middle-to-right pass. Very complex transformations may specify additional passes that operate from Middle model to Middle model.

+

+The Middle model of course conforms to its metamodel and, for QVTc, it is the transformation author's responsibility to design the Middle metamodel so that overlaps can be resolved and information cached. %[The more powerful QVTr language, when implemented by a QVTc engine, requires the Middle metamodel to be synthesized as part of the QVTr to QVTc program to program transformation.]

+

+\subsection{Intra-Mapping Semantics}

+

+Within a Mapping, the QVTc semantics are simple; each Domain comprises a GuardPattern and a BottomPattern. The GuardPattern is responsible for the matching, and the BottomPattern for the model mutation. 

+

+\begin{figure}[h]

+	\centering

+	\includegraphics[width=0.5\textwidth]{QVTcoreAreas.png}

+	\caption{QVT Core Areas.}

+	\label{fig:QVTCoreAreas}

+\end{figure}

+

+The two-dimensional layout shown in Figure \ref{fig:QVTCoreAreas} is difficult to achieve in a text file and so the concrete syntax is

+

+{\scriptsize \begin{verbatim}

+map {

+  left  ( left-guard-pattern-variables | left-guard-pattern-constraints )

+        { left-bottom-pattern-variables | left-bottom-pattern-constraints }

+  right ( right-guard-pattern-variables | right-guard-pattern-constraints )

+        { right-bottom-pattern-variables | right-bottom-pattern-constraints }

+  where ( middle-guard-pattern-variables | middle-guard-pattern-constraints )

+        { middle-bottom-pattern-variables | middle-bottom-pattern-constraints }

+}

+\end{verbatim}}

+

+Let us consider a very simple example of a bidirectional transformation between colored Node trees with different color representations; HSV (hue, saturation, value) on the left, HLS (hue, lightness, saturation) on the right and RGB (red, green, blue) as a middle intermediate. Figure \ref{fig:TreeMM} shows the three metamodels with the additional traceability references from middle metamodel to the external metamodels.  Listing \ref{lsting:QVTcExample} presents the QVTc transformation for this example.

+

+\begin{figure}[hb]

+	\centering

+	\includegraphics[width=0.95\textwidth]{Metamodels.png}

+	\caption{Simple colored Tree metamodels; Left(HSV), Middle(RGB), Right(HLS).}

+	\label{fig:TreeMM}

+\end{figure}

+

+\input{qvtc.lst}

+

+Lines 1 to 15 provide some boilerplate; the \texttt{import} statements of the actual metamodels whose package names are the same as the file name; the \texttt{transform\-ation} declaration including an unnamed \textit{TypedModel} for the middle model; declarations of the color converter queries whose definition is omitted for space reasons.

+

+Lines 16 to 28 provide the \textit{Node2Node} mapping, without any guard variables or constraints; the mapping is therefore unbound. Each domain realizes a \textit{Node}, and so requires that where that node exists in an input domain, the corresponding nodes are created or updated in the middle and output domains. Lines 21 to 24 initialize the middle node from whichever of \textit{hsv} or \textit{hls} is the input and lines 25 to 26 initialize the color value of the \textit{hsv} or \textit{hls} nodes from the middle node.

+

+Lines 30 to 38 refine the \textit{Node2Node} mapping to enforce consistency at the root so that all root nodes have no parent. Lines 40 to 47 refine the \textit{Node2Node} mapping to enforce consistency of parent-child relationships. The guard pattern introduces an additional parent node variable for each domain and requires that this is indeed the parent of each node inherited from \textit{Node2Node}. For the input domain, the parent-child relationship is interpreted as a guard, whereas for the middle and output domains, the parent-child relationship is enforced.

+

+The foregoing quick summaries demonstrate how the combination of the pattern variable declarations, some of which can be realized while others must exist, and the assignments of OCL queries to properties support symmetrical definition of multi-directional transformations. Some declarations are distinct for each direction, others adopt distinct predicate or assignment semantics according to the transformation direction.

+

+% In each domain we are interested in two elements (the parent and the child), so we need two pattern variables to capture the two parts of a Binding. These variable are constrained, firstly by their type, secondly by an explicit constraint that the two nodes have the same color and finally by an explicit constraints that one fulfills the relation of being the parent of the other. A naive transformation tool may just iterate each variable over each model element to identify each candidate binding and then prune those that fail to satisfy all constraints. A slightly more intelligent tool may iterate only over the model elements that conform to the required type. For this trivial example all model elements are of the same type so a type check achieves little. For more realistic metamodels the basic type constraint should significantly reduce the mantissa of an exponential computation cost. A much more intelligent tool should exploit the metamodel relationships so that at most the first pattern variable involves a full model search; subsequent variables can be searched for locally. In our example, after choosing a parent candidate, only its children need consideration. Careful use of the metamodel to plan search strategies can reduce the naive exponential complexity to something much closer to linear for many practical problems.

+

+% Returning to the QVTc exposition. The GuardPattern orchestrates the search, so in the GuardPattern we declare the two pattern variables with their constraining types and provide the additional matching color constraint. Once the GuardPattern has been satisfied, the BottomPattern provides the copy of the selected child from left to right.

+

+% Our example loses information and so cannot be executed in reverse. However we can still examine the example to understand the symmetries that QVTc provides. In the forward direction, an assignment defines the valid right hand output from left inputs. Conversely for a reverse transformation the forward assignment acts as a predicate rejecting candidate right hand elements that are inconsistent with the forward transformation. For example on Listing \ref{lsting:QVTcExample} if the transformation was executed in the direction of the \texttt{subTree} model, the predicate in line 21 will cause the \textit{color} attribute of \textit{\textbf{cT}} to be set to the value of the \textit{color} attribute of \textit{\textbf{pT}}. If we executed the transformation in reverse (i.e. in the direction of \texttt{coloredTree}) then the predicate in line 21 will act as a constraint evaluating that both elements have the same \textit{color}.

+

+\subsection{Inter-Mapping Semantics}

+

+A single mapping is of limited utility. Practical transformations require many mappings and an ability to share context between mappings. Consider a mapping from a hierarchical metamodel such as UML. A high level mapping may transform packages, and the transformed package is then needed as context for a mapping involving classes. QVTc supports independent mappings by declaring each as a top level mapping as in Listing \ref{lsting:QVTcExample}. Shared context is supported by declaring the dependent mappings as nested within the mapping whose bindings the nested mapping shares as in Listing \ref{lsting:QVTiExample}.

+

+QVTc supports reuse of mappings within a transformation by refinement, and reuse of transformations by inheritance.

+

+\subsection{Execution Modes}

+

+\subsubsection{Direction}\label{Direction}

+

+The multi-directional capability allows a single QVTc transformation program to specify many model transformations, and to avoid the inconsistencies that may arise through writing independent programs for each direction and enforcement.

+

+A multi-directional transformation does not have unambiguous inputs or outputs and so a QVTc transformation is specified between TypedModels. In practice only one direction will be of interest at any one time and so once the invocation identifies which TypedModels are inputs and which are outputs, a practical QVTc tool may optimize away the redundant declarations for unwanted directions. Since all transformations are not reversible, QVTc allows the programmer to restrict particular Domains to input or output by using the \texttt{check} or \texttt{enforce} keywords.

+

+\subsubsection{Enforcement}\label{Enforcement}

+

+A transformation may be used for more than one purpose: \textit{check}, \textit{update} or \textit{create}. In the more common case, a transformation \textit{creates} output models corresponding to input models. A transformation may also be used to \textit{check} that existing output models are consistent with input models, or to \textit{update} existing output models to be consistent with input models. In the case of an update, for many important system applications the update may need to occur in-place. For this use case, the declarative QVTc exposition enables the QVTc tooling to ensure that the update occurs in a coherent fashion so that all input locations are read before any co-located output locations are written.

diff --git a/qvt/docs/ICMT2013/QVTcoreAreas.odg b/qvt/docs/ICMT2013/QVTcoreAreas.odg
new file mode 100644
index 0000000..0b1c423
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTcoreAreas.odg
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVTcoreAreas.png b/qvt/docs/ICMT2013/QVTcoreAreas.png
new file mode 100644
index 0000000..2d8e9e6
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTcoreAreas.png
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVThorizontalAlphabet.png b/qvt/docs/ICMT2013/QVThorizontalAlphabet.png
new file mode 100644
index 0000000..55cf3af
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVThorizontalAlphabet.png
Binary files differ
diff --git a/qvt/docs/ICMT2013/QVTi.tex b/qvt/docs/ICMT2013/QVTi.tex
new file mode 100644
index 0000000..36a2da0
--- /dev/null
+++ b/qvt/docs/ICMT2013/QVTi.tex
@@ -0,0 +1,122 @@
+%=======================================================================

+% Copyright (c) 2012 The University of York and Willink Transformations.

+%

+% $Id: icmt13_52.tex 4326 2013-01-31 17:44:31Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\section{The QVT Imperative Language}\label{sec:qvti}

+The new QVT Imperative (QVTi) language re-uses the principles and syntax of QVTc to provide an easily executable semantics that can be targetted by program-to-program transformations shown in Figure \ref{fig:overview}. The major simplifications of QVTi in comparison to QVTc are:

+\begin{itemize}

+\item Uni-directional (not multi-directional)

+\item Specific creation/update/check behaviour (no check/enforce flexibility)

+\item No complex syntax such as refinement, or inheritance (no syntax sugar)

+\item No mappings have both input and output domains (no complex dataflow)

+\item Each mapping has one unbound variable (no multi-variable patterns) 

+\item Multiple mappings are executed sequentially (rather than declaratively)

+\item Nested mappings may be invoked directly (rather than declaratively)

+\end{itemize}

+

+These simplifications combine to support a simple mode of execution in which mappings are executed in sequence within one-dimensional loops. Nested mappings nest in a manner that allows a conventional execution stack to maintain the prevailing state of each search variable. The overall transformation is executed as a guarded depth-first search of the input and then middle model spaces. Where the guarded search matches, either the middle model element temporarily persists the context of the match, or an output model element is updated.

+

+The search strategy is defined by the program-to-program transformation that produces the QVTi program. As a minimum this producer must serialize mappings with multi-variable patterns so that sub-mappings match just one variable at a time. This serialization offers significant opportunities for optimization through use of the known metamodels and optionally through profiling as well. It is very desirable for the search to iterate over easy navigation paths such as compositions and forward references. It is also desirable to search first over model elements that have strict guard conditions since these may result in early pruning of the search space. It is highly undesirable to perform whole model searches or traverse associations in an unnavigable direction. 

+

+We will demonstrate the simplified QVTi semantics by reworking the Listing \ref{lsting:QVTcExample} example in accordance with a user requirement to create an HLS model from an HSV model. The resulting mappings, shown in Listing \ref{lsting:QVTiExample}, are manually produced pending future work on the program-to-program transformation chain.

+

+\input{qvtiListings.lst}

+

+%The major simplifying semantics of QVTi involves decomposing the mappings for multi-variable patterns into multiple sub-mappings each of which introduces exactly one new pattern variable. variables extension patterns so that the conversion to QVTu simplifies the transformation to support just creation of HLS from of HSV. The conversion to QVTm flattens the refinements. Then the conversion to QVTi imposes a multi-pass search schedule, one pattern variable at a time. The search schedule is carefully chosen to exploit the metamodels, so that successive steps use easily navigable paths and early pruning of the search space by evaluating constraints as soon as their pattern variables are bound. Total model searches and unnavigable paths are avoided wherever possible. 

+

+The transformation starts with the HSV2MiddleRoot mapping whose \textit{GuardPattern} on line 2 searches for an \textit{HSVNode} input without a parent. Since the transformation is now solely executed from \textit{hsv} to \textit{hsl}, the \texttt{check} and \texttt{enforce} keywords have been removed. Wherever a match is found, lines 4-6 realize an \textit{HSVNode2HLSNode} middle node and populate it with the input context and computed RGB value.

+

+The two nested mapping calls on lines 8-14 are then executed sequentially. The \textit{HSV2MiddleRecursion} mapping is invoked with its \textit{hsvNode} guard variable bound to each of the original input nodes children, and its \textit{middleParent} bound to the realized middle node. The \textit{HSV2MiddleRecursion} realizes a corresponding middle node for each input node and recurses down the input tree.

+

+Once the \textit{HSV2MiddleRecursion} completes, the \textit{HSV2MiddleRoot} mapping resumes and invokes the \textit{Middle2HLSRoot} mapping, binding its \textit{middleNode} guard variable to the \textit{middleRoot} node. The \textit{Middle2HLSRoot} behaves in a very similar fashion realizing an output node and using the \textit{Middle2HLSRecursion} to build the output tree. Notice in this case that since \textit{hls} is an output domain, the \texttt{enforce} keyword has been preserved.

+

+This simple example demonstrates the simplifications underlying QVTi and the one syntax extension to QVTc; an explicit mapping call. In order to define this as a QVTc, rather than QVTi extension, we define the invocation on line 8, as providing bound search domains for the two guard variables of the \textit{HSV2MiddleRecursion} mapping named \textit{hsvNode} and \textit{middleParent}. Where collections are provided as the bound domains for non-collection guard variables, a distinct \texttt{mapping} invocation occurs for the Cartesian product of each variable from each bound domain. Guard variables not bound by the invocation are bound one element at a time to the whole model. This is a natural extension restricting the declarative search space of QVTc whereby every guard variable is bound to the whole model. For QVTi, we impose the reduced semantics that at most one bound domain may be a collection and no guard variables may be left unbound, thereby ensuring that the invocation involves at most a simple loop.

+

+With these reduced semantics QVTi still has the power to express important programming idioms.

+

+\subsubsection{Sequencing and Passes}

+Sequential execution of multiple patterns within one pass or of multiple passes can be expressed by sequential nested mappings as in the \textit{HSV2MiddleRecursion} then \textit{HSV2MiddleRoot} sequencing.

+

+\subsubsection{Iteration and Recursion}

+Looping over multiple model elements is supported by a \textit{GuardPattern} variable bound to each element in turn of a collection of model elements as in the \textit{HSV2MiddleRecursion} over the children. Simple iteration loops may use nested \textit{mappings}. Recursive loops exploit a nested mapping that invokes a named mapping with bindings. This syntax extension short-circuits the total model search associated with the declarative exposition.  

+

+\subsubsection{Conditional Execution}

+Arbitrary OCL constraints may be used in the guards for each step of each iteration. The example is very regular so there is only a single `at the root' guard for the \textit{HSV2MiddleRoot} mapping.

+

+\subsubsection{Model Mutation}

+Model elements are created by the realized variable declarations in the bottom patterns. Arbitrary OCL queries define the value to be assigned to each model element, or the iteration domain of a nested mapping. These expressions appear to the right of \textit{assignment} (\texttt{:=}) operators in the example.

+

+\subsubsection{Traceability}

+Traceability is provided by the middle model. This is user-defined and so allows the user to control how much information relating input and output is maintained.

+

+

+%QVTi is a very small unidirectional imperative transformation language that is syntactically a subset of QVTm.  The intention of QVTi is to allow imperative constructs to be written in QVTc. This means that transformations will explicitly define the order of execution of mappings by limiting the number of unbound variables to one and by using nested mappings to support common imperative programming idioms. The limited semantics allow that a minimal extension of the OCL VM\cite{Willink2012} can be implemented to provide QVTi support. Current development demonstrated that the IOCL (imperative OCL) VM presented in Figure \ref{fig:overview} is no longer needed as the \textit{Type.createInstance} and \textit{Property.initValue} in the current OCL API are enough to provide the side effects required to modify or create elements in the candidate and middle models.  The example introduced in section \ref{sec:qvtcore} is useful to understand the effects of the progressive semantic restrictions that are introduced when mapping QVTc to QVTu to QVTm to QVTi. Listing \ref{lsting:QVTiExample} presents the Node to subtree transformation written in QVTi. 

+%: limited semantic bandwidth, if/switch/loop/seq/recurse/multi-pass idioms, minimal OCL VM change.

+

+%As required in QVTu, lets assume the user selected the subtree model as the output and an enforcement operation mode. The effect of this selection is that all \texttt{enforce} keywords are removed from the input domains, i.e., domains which associated model type is \textit{coloredTree} (see lines 12 and 25). Consequently, \texttt{check} keywords are removed from output domains, i.e., domains which associated model type is \textit{subTree} (see lines 43 and 55). Since in the original QVTc transformations there aren't any refinements, composition of mappings is not required.

+

+%Explicit order of execution is done by using nested mappings. Further, in QVTi execution order must follow a 3+ step sequence better described as:

+%\begin{verbatim}%Z

+%map {

+%  map input-to-middle {...}

+%  map middle-to-middle {...}

+%  map middle-to-output {...}

+%}

+%\end{verbatim}

+%Where several middle-to-middle mappings may be used. This is particularly useful for in-place transformations where the required information is first copied form the candidate model to the middle model and then used to create/update the candidate model. This guarantees that create/update operations do not affect \textit{checking} when the model is an input. Since there is a single root mapping and nested mappings are evaluated sequentially, there is only one execution order eliminating declarative execution. 

+

+%The other key aspect of QVTi is the limit of 1 unbound variable per mapping, as this restriction is useful when using mappings to build common programming idioms as presented next.

+

+%\begin{itemize}

+%\item In the original QVTc transformations the mapping for the input model defined two variables. In QVTi, since only one unbound variable is allowed, the original mapping is rewritten as a mapping that defines \texttt{pHT:HueTree} (line 12) with a nested mapping in which \texttt{cHT:HueTree} is introduced (line 25). 

+%\item A single variable introduced in a guard pattern is used to create an \textit{if} expression. This is the case of line 25-27 where \texttt{cHT:HueTree} is introduced but the MiddleBottomPattern and the nested map will only be evaluated if the \texttt{cHT.parent := pHT;} and \texttt{cHT.color := pHT.color;} conditions are met. Additionally, since the ColoredTree metamodel enumerates the possible colors, the set of possible values could be used to create a \textit{switch} statement by testing the cHT color attribute against a specific value , eg. \texttt{cHT.color := Color::red;}

+

+%\end{itemize}

+

+

+%Ideally the example should flow through so that the utility of the bulets is demonstrated

+

+%The foregoing semantic limitations support the following programming idioms

+%- sequential/nested execution

+%- if/switch

+%- loop iteration

+%- recursion

+%- multiple passes

+

+%again one paragraph each with as much reuse of the example as possible

+

+

+\subsection{Implementation}

+Some simple QVTi transformations have been implemented using the Eclipse QVTc editor and parser and the Eclipse OCL VM\cite{Willink2012}.

+

+The OCL VM offers two modes of execution, the simplest of which is interpreted. It comprises a simple tree-walking evaluator over the OCL AST. This evaluator is realized by an extensible EvaluationVisitor and so, since the QVTc AST is an extension of the OCL AST, it is sufficient to extend the OCL EvaluationVisitor to support the additional QVTc AST nodes.

+

+This proved to be surprisingly easy. It was not even necessary to add extensions for model mutation since the Eclipse OCL VM has a prototype implementation of type constructors.

+

+\begin{quotation}

+Type constructors extend the Tuple syntax to allow construction of fully initialized user objects as \texttt{Person\{name:='Me'; age:=20;\}.}

+\end{quotation}

+

+The API for type constructors provides \texttt{Type.createInstance()} and \texttt{Pro\-per\-ty.initValue()} methods. These were sufficient for the disciplined form of model mutation in QVTi. The extended IOCL VM with Imperative OCL functionality shown in  Figure \ref{fig:overview} has not been necessary for QVTi; it may yet prove necessary to fully integrate QVTo.

+

+\subsection{Future Work}

+The Eclipse OCL VM also offers a tree-walking code generator that produces a direct Java realization of OCL. This too can be extended to support the additional QVTi AST nodes and so enable direct Java code to be produced for a QVTi transformation. 

+

+We have glossed over the complexities of update transformations by choosing a simple model creation as our example. We can justify this because QVTi is intended to have simple imperative semantics. From this perspective the many challenges of an update transformation are handled by a reconciliation between input and output models for which the QVTc to QVTu transformation synthesizes a solution. The additional complexities of in-place updates are respected if the synthesis ensures that all input/output state is read from output models and cached in the middle model before any potential corruption by an update. Similarly a check mode of operation again requires an input/output reconciliation followed by a simpler transformation that generates a report model.

+

+Once the QVTr to QVTc to QVTi program-to-program transformations are in-place, we can look forward to a high performance direct Java realization of QVTr. And with QVTr in-place, the slightly verbose expositions of the QVTc and its subset languages can be ignored by users. Only transformation toolsmiths need use them to exploit their interchange opportunities.

+

+%What we do want is an inpractice section.

+

+%The OCL capabilities have been reused without change. Mutation was already available through type constructor support provision of Type.createInstance() and Propery.initValue(). The IOCL VM of Fig 1 is therefore not needed for declarative, but may be need for QVTo.

+

+%The OCL evaluator with its tree walking interpreter with (? 50 nodes) is easily extended for QVT Core where

+

+%Transformation ...

+%TypedModel is structural

+%Mapping ...

+%Domain ...

+%GuardPattern ...

+%BottomPattern ...

+%...

diff --git a/qvt/docs/ICMT2013/TransformationAnatomy.odg b/qvt/docs/ICMT2013/TransformationAnatomy.odg
new file mode 100644
index 0000000..93de8b3
--- /dev/null
+++ b/qvt/docs/ICMT2013/TransformationAnatomy.odg
Binary files differ
diff --git a/qvt/docs/ICMT2013/TransformationAnatomy.png b/qvt/docs/ICMT2013/TransformationAnatomy.png
new file mode 100644
index 0000000..e51b66b
--- /dev/null
+++ b/qvt/docs/ICMT2013/TransformationAnatomy.png
Binary files differ
diff --git a/qvt/docs/ICMT2013/abstract.tex b/qvt/docs/ICMT2013/abstract.tex
new file mode 100644
index 0000000..bca3a94
--- /dev/null
+++ b/qvt/docs/ICMT2013/abstract.tex
@@ -0,0 +1,54 @@
+%=======================================================================

+% Copyright (c) 2012 The University of York and Willink Transformations.

+%

+% $Id: abstract.tex 4481 2013-02-12 14:15:46Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\begin{abstract}

+%using at least 70 and at most 150 words.

+%The early enthusiasm that led to the definition of the QVT specification for the standardization of model transformation languages subdued due to the lack of an industrial quality implementation. 

+% 1)The early enthusiasm (2002) for model to model transformation languages led to eight submissions (2003) for an OMG standard (2007) comprising three languages; no commercial products have appeared (2013).

+

+

+% The problem is not the lack of an industrial quality.  The problem is that the lack of an industrtail quality implementation of the QVT languages has stopped QVT

+%The problem is that

+%Initial enthusiasm around the QVT specification has subdued and a hybrid declarative/imperative a commercial product is still missing and available implementations do not provide the complete set of QVT languages. 

+

+The early enthusiasm, in 2002, for model to model transformation languages led to eight submissions for an OMG standard comprising three languages, yet no commercial products have appeared. The QVT Core language was intended as the foundation for QVT Relations but the available implementations have ignored the core language. Rather than ignoring the core language, we take the opposite approach and introduce three more core languages. Progressive program-to-program transformation through these core languages terminates in an easily implemented imperative language that supports declarative transformations.

+

+% Optionally add a fifth sentence being positive about progressing from ATL, sharing knowledge, tooling etc.

+

+%Initial enthusiasm around the QVT specification has subdued evidenced by the lack of a commercial product implementation; further, available implementations only provide support to QVTr (Relations) or QVTo (Operational Mappings). In fact, there are no QVTc (Core) implementations although the QVTc language was intended as the common foundation for QVTr and QVTo. To provide a complete QVT implementation that delivers the hybrid declarative/imperative facilities required by model transformations we expand the QVT alphabet to six languages. The additional languages are a semantic subset of QVTc; they bridge the semantic gap between highly declarative QVTr relations and a low level imperative operations. Additionally, they provide interchange points at different levels of abstraction that serve as interface points for other transformation languages, with the intention to promote knowledge sharing and collaboration. 

+

+%Our additional core languages are semantic subsets of QVTc; they define important interchange points during the progressive program-to-program transformation from a highly declarative QVTr program via QVTc to a low level imperative program.

+

+

+

+% QVTc (Core) was intended as the common foundation for QVTr (Relational) and QVTo (Operational Mappings) and due to its simpler semantics 

+ %have not implemented the QVTc (Core) language. The lack of a QVTc implementation that can be used as an engine for QVTr (Relations) transformations

+  %simpler semantics of QVTc, its implementation should be simpler and it can then be used semantics of the QVTr (Relations) 

+%The simpler semantics of QVTc suggest that its implementation should be simpler In the QVT specification the QVTc language s  and QVTo (Operational Mappings) implementation

+

+%As Eclipse QVTo and Medini QVTr projects stall a set of QVT parallel initiatives emerge, such as ATL, Kermeta and ETL, that due to their lack of standardization fail to create and reuse common knowledge, increasing the engineering and development cost.

+%"As Eclipse QVTo and Medini QVTr projects stall a set of QVT parallel initiatives emerged, such as ATL, Kermeta and ETL, leading to fragmentation and duplication of effort in the Model Transformation community."

+% 2) The QVTc (Core) language was intended as the common foundation for QVTr (Relational) and QVTo (Operational Mappings); the available implementations ignore the core language. 

+% This is aproblem becuase QVTc was inteded as the common fundation for QVTr and QVTo. 

+ 

+ 

+% The simplest way to implement QVT, addressing the semantic complexity of bidirectional model transformations, is to augment the QVT alphabet so that a particular language provides suitability for a certain part of the complexity. 

+ %3) It is clear that the three language compromise between declarative and imperative approaches was insufficient and so we expand the QVT alphabet to six languages.

+ 

+ 

+% The implementation of the proposed subset of QVTc languages will allow QVTr transformations to be executed by providing the required semantics and offer standard interchange points for current and future model transformation language initiatives.

+%4) Our additional core languages are semantic subsets of QVTc; they define important interchange points during the progressive program-to-program transformation from a highly declarative QVTr program via QVTc to a low level imperative program.

+

+

+

+

+

+

+

+%Optionally add a fifth sentence being positive about progressing from ATL, sharing knowledge, tooling etc.

+

+

+\keywords{QVT, OCL, virtual machine, program transformation, declarative transformation, progressive transformation, transformation chain}

+\end{abstract}

diff --git a/qvt/docs/ICMT2013/conclusions.tex b/qvt/docs/ICMT2013/conclusions.tex
new file mode 100644
index 0000000..28d1277
--- /dev/null
+++ b/qvt/docs/ICMT2013/conclusions.tex
@@ -0,0 +1,10 @@
+%=======================================================================

+% Copyright (c) 2012 The University of York and Willink Transformations.

+%

+% $Id: icmt13_52.tex 4326 2013-01-31 17:44:31Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\section{Conclusions}\label{sec:concandfuture}

+

+We have proposed a progressive program-to-program transformation chain from QVTr to QVTc to QVTu to QVTm to QVTi, in order to provide a simple unidirectional imperative language that provides a practical execution semantics for QVTc and QVTr. We have introduced the QVT Imperative (QVTi) language and presented its simple semantics and basic syntax. We have demonstrated that QVTi may retain the basic QVTc concrete syntax and yet support useful idioms for optimized pattern matching strategies and multiple passes. Our preliminary QVTi implementations demonstrate that the Eclipse OCL VM interpreter is easily extended for QVTi. We can therefore look to exploit the Eclipse OCL VM's Java code generator to provide good quality compiled Java code and then concentrate on the QVTc to QVTi program-to-program transformations to provide effective execution strategies.

+

+%QVTu may be an appropriate entry point at which other declarative transformation languages such as ATL, Epsilon or Viatra2 reuse a shared transformation framework.

diff --git a/qvt/docs/ICMT2013/hhr502References.bib b/qvt/docs/ICMT2013/hhr502References.bib
new file mode 100644
index 0000000..e46e2a2
--- /dev/null
+++ b/qvt/docs/ICMT2013/hhr502References.bib
@@ -0,0 +1,693 @@
+% This file was created with JabRef 2.8.1.

+% Encoding: Cp1252

+

+@ARTICLE{Aranda.etal2012,

+  author = {Aranda, J. and Damian, D. and Borici, A.},

+  title = {Transition to Model-Driven Engineering},

+  journal = {Model Driven Engineering Languages and Systems},

+  year = {2012},

+  pages = {692--708},

+  owner = {hhoyos},

+  publisher = {Springer},

+  timestamp = {2013.01.21}

+}

+

+@MISC{ATL.VMSpec,

+  author = {ATLAS group, LINA \& INRIA Nantes},

+  title = {Specification of the {ATL Virtual Machine}},

+  note = {\url{http://www.eclipse.org/atl/documentation/old/ATL\_VMSpecification[v00.01].pdf}},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@INCOLLECTION{Bezivin.etal2006,

+  author = {B\'{e}zivin, Jean and Bouzitouna, Salim and Del Fabro, Marcos and

+	Gervais, Marie-Pierre and Jouault, Fréderic and Kolovos, Dimitrios

+	and Kurtev, Ivan and Paige, Richard},

+  title = {A Canonical Scheme for Model Composition},

+  booktitle = {Model Driven Architecture – Foundations and Applications},

+  publisher = {Springer Berlin / Heidelberg},

+  year = {2006},

+  editor = {Rensink, Arend and Warmer, Jos},

+  volume = {4066},

+  series = {Lecture Notes in Computer Science},

+  pages = {346--360},

+  affiliation = {ATLAS Group (INRIA & LINA), Universit\'{e} de Nantes, France},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@MASTERSTHESIS{Bosems2011,

+  author = {Steven Bosems},

+  title = {A Performance Analysis of Model Transformations and Tools},

+  school = {Department of Electrical Engineering Mathematics and Computer Science,

+	University of Twente},

+  year = {2011},

+  month = {March},

+  note = {\url{http://www.utwente.nl/ewi/trese/graduation\_projects/2011/004.pdf}},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@ARTICLE{Cohen1994,

+  author = {Cohen, J.},

+  title = {The earth is round (p<. 05).},

+  journal = {American psychologist},

+  year = {1994},

+  volume = {49},

+  pages = {997},

+  number = {12},

+  owner = {hhoyos},

+  publisher = {American Psychological Association},

+  timestamp = {2012.10.16}

+}

+

+@TECHREPORT{Cormdmi.etal1996,

+  author = {A. Corradini and U. Montanari and F. Rossi and H. Ehrig and R. Heckel

+	and M. Loewe},

+  title = {Algebraic Approaches to Graph Transformation, Part I: Basic Concepts

+	and Double Pushout Approach},

+  institution = {Universit\`{a} di Pisa, Ddipartimento di Iinformatica},

+  year = {1996},

+  number = {TR-96-17},

+  owner = {hhoyos},

+  timestamp = {2012.09.11}

+}

+

+@INPROCEEDINGS{Costa.etal2011,

+  author = {Costa, Jean M. and Cataldo, Marcelo and de Souza, Cleidson R.},

+  title = {The scale and evolution of coordination needs in large-scale distributed

+	projects: implications for the future generation of collaborative

+	tools},

+  booktitle = {Proceedings of the SIGCHI Conference on Human Factors in Computing

+	Systems},

+  year = {2011},

+  series = {CHI '11},

+  pages = {3151--3160},

+  publisher = {ACM},

+  keywords = {awareness, collaboration tools, coordination, scalability},

+  owner = {hhoyos},

+  timestamp = {2013.01.21}

+}

+

+@ARTICLE{Czarnecki.etal2009,

+  author = {Czarnecki, K. and Foster, J. and Hu, Z. and L{\"a}mmel, R. and Sch{\"u}rr,

+	A. and Terwilliger, J.},

+  title = {Bidirectional transformations: {A} cross-discipline perspective},

+  journal = {Theory and {P}ractice of {M}odel {T}ransformations},

+  year = {2009},

+  pages = {260--283},

+  owner = {hhoyos},

+  publisher = {Springer},

+  timestamp = {2012.10.23}

+}

+

+@ARTICLE{Czarnecki.Helsen2006,

+  author = {Czarnecki, K. and Helsen, S.},

+  title = {Feature-based survey of model transformation approaches},

+  journal = {{IBM} Systems Journal},

+  year = {2006},

+  volume = {45},

+  pages = {621--645},

+  number = {3},

+  owner = {hhoyos},

+  timestamp = {2012.08.28}

+}

+

+@INPROCEEDINGS{Czarnecki.Helsen2003,

+  author = {Czarnecki, K. and Helsen, S.},

+  title = {Classification of model transformation approaches},

+  booktitle = {Proceedings of the 2nd OOPSLA Workshop on Generative Techniques in

+	the Context of the Model Driven Architecture},

+  year = {2003},

+  volume = {45},

+  number = {3},

+  pages = {1--17},

+  owner = {hhoyos},

+  timestamp = {2012.10.23}

+}

+

+@ARTICLE{Deng.etal2008,

+  author = {Deng, G. and Schmidt, D.C. and Gokhale, A. and Gray, J. and Lin,

+	Y. and Lenz, G.},

+  title = {Evolution in model-driven software product-line architectures},

+  journal = {Designing Software-Intensive Systems: Methods and Principles},

+  year = {2008},

+  owner = {hhoyos},

+  publisher = {Idea Group},

+  timestamp = {2012.08.22}

+}

+

+@INCOLLECTION{DiRuscio.etal2012,

+  author = {Di Ruscio, Davide and Eramo, Romina and Pierantonio, Alfonso},

+  title = {Model Transformations},

+  booktitle = {Formal Methods for Model-Driven Engineering},

+  publisher = {Springer Berlin / Heidelberg},

+  year = {2012},

+  volume = {7320},

+  series = {Lecture Notes in Computer Science},

+  pages = {91--136},

+  owner = {hhoyos},

+  timestamp = {2012.09.24}

+}

+

+@INCOLLECTION{Diskin.etal2011,

+  author = {Diskin, Zinovy and Xiong, Yingfei and Czarnecki, Krzysztof and Ehrig,

+	Hartmut and Hermann, Frank and Orejas, Fernando},

+  title = {From State- to Delta-Based Bidirectional Model Transformations: The

+	Symmetric Case},

+  booktitle = {Model Driven Engineering Languages and Systems},

+  publisher = {Springer Berlin Heidelberg},

+  year = {2011},

+  volume = {6981},

+  series = {Lecture Notes in Computer Science},

+  pages = {304-318},

+  owner = {hhoyos},

+  timestamp = {2013.01.22}

+}

+

+@INPROCEEDINGS{Drivalos.etal2008,

+  author = {Drivalos, N. and Paige, R.F. and Fernandes, K.J. and Kolovos, D.S.},

+  title = {Towards rigorously defined model-to-model traceability},

+  booktitle = {ECMDA Traceability Workshop (ECMDA-TW)},

+  year = {2008},

+  pages = {17--26},

+  owner = {hhoyos},

+  timestamp = {2012.09.25}

+}

+

+@INCOLLECTION{Ehrig.etal2007,

+  author = {Ehrig, Hartmut and Ehrig, Karsten and Ermel, Claudia and Hermann,

+	Frank and Taentzer, Gabriele},

+  title = {Information Preserving Bidirectional Model Transformations},

+  booktitle = {Fundamental Approaches to Software Engineering},

+  publisher = {Springer Berlin Heidelberg},

+  year = {2007},

+  volume = {4422},

+  series = {Lecture Notes in Computer Science},

+  pages = {72-86},

+  owner = {hhoyos},

+  timestamp = {2013.01.22}

+}

+

+@INPROCEEDINGS{Fleurey.etal2004,

+  author = {Fleurey, F. and Steel, J. and Baudry, B.},

+  title = {Validation in model-driven engineering: testing model transformations},

+  booktitle = {Model, Design and Validation, 2004. Proceedings of the First International

+	Workshop on},

+  year = {2004},

+  pages = {29--40},

+  month = {Nov},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@INPROCEEDINGS{Fouquet.etal2010,

+  author = {Francois Fouquet and Olivier Barais and Jean-Marc J\'{e}z'{e}quel},

+  title = {Building a Kermeta Compiler using Scala: an Experience Report},

+  booktitle = {Proc. Scala Days 2010},

+  year = {2010},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@INPROCEEDINGS{FrancoisFouquet2010,

+  author = {Francois Fouquet and Olivier Barais and Jean-Marc J\'{e}z'{e}quel},

+  title = {Building a Kermeta Compiler using Scala: an Experience Report},

+  booktitle = {Proc. Scala Days 2010},

+  year = {2010},

+  location = {Lauzanne, Switzerland},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@INPROCEEDINGS{France.Rumpe2007,

+  author = {France, Robert and Rumpe, Bernhard},

+  title = {Model-driven Development of Complex Software: A Research Roadmap},

+  booktitle = {2007 Future of Software Engineering},

+  year = {2007},

+  series = {FOSE '07},

+  pages = {37--54},

+  publisher = {IEEE Computer Society},

+  numpages = {18},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@INPROCEEDINGS{Gardner.etal2003,

+  author = {Gardner, T. and Griffin, C. and Koehler, J. and Hauser, R.},

+  title = {A review of {OMG MOF 2.0 Query/Views/Transformations} Submissions

+	and Recommendations towards the final Standard},

+  booktitle = {Metamodelling for {MDA}, 2003. Proceedings of the Workshop},

+  year = {2003},

+  owner = {hhoyos},

+  timestamp = {2012.09.11}

+}

+

+@INPROCEEDINGS{Gerken.etal2011,

+  author = {Gerken, Jens and Jetter, Hans-Christian and Z\"{o}llner, Michael

+	and Mader, Martin and Reiterer, Harald},

+  title = {The concept maps method as a tool to evaluate the usability of APIs},

+  booktitle = {Proceedings of the SIGCHI Conference on Human Factors in Computing

+	Systems},

+  year = {2011},

+  series = {CHI '11},

+  pages = {3373--3382},

+  publisher = {ACM},

+  keywords = {API usability, concept maps, evaluation method, longitudinal},

+  owner = {hhoyos},

+  timestamp = {2013.01.21}

+}

+

+@ARTICLE{Greenyer.Kindler2007,

+  author = {Greenyer, J. and Kindler, E.},

+  title = {Reconciling TGGs with QVT},

+  journal = {Model Driven Engineering Languages and Systems},

+  year = {2007},

+  pages = {16--30},

+  owner = {hhoyos},

+  publisher = {Springer},

+  timestamp = {2013.01.29}

+}

+

+@INCOLLECTION{Guerra2012,

+  author = {Guerra, Esther},

+  title = {Specification-Driven Test Generation for Model Transformations},

+  booktitle = {Theory and Practice of Model Transformations},

+  publisher = {Springer Berlin Heidelberg},

+  year = {2012},

+  editor = {Hu, Zhenjiang and Lara, Juan},

+  volume = {7307},

+  series = {Lecture Notes in Computer Science},

+  pages = {40-55},

+  owner = {hhoyos},

+  timestamp = {2013.01.23}

+}

+

+@INPROCEEDINGS{Jouault.Kurtev2006,

+  author = {Jouault, Fr{\'e}d{\'e}ric and Kurtev, Ivan},

+  title = {On the architectural alignment of ATL and QVT},

+  booktitle = {Proceedings of the 2006 ACM symposium on Applied computing},

+  year = {2006},

+  series = {SAC '06},

+  pages = {1188--1195},

+  publisher = {ACM},

+  keywords = {ATL, QVT, interoperability, model engineering, model transformations},

+  numpages = {8},

+  owner = {hhoyos},

+  timestamp = {2013.01.29}

+}

+

+@ARTICLE{Kent.Smith2003,

+  author = {Stuart Kent and Robert Smith},

+  title = {The Bidirectional Mapping Problem},

+  journal = {Electronic Notes in Theoretical Computer Science},

+  year = {2003},

+  volume = {82},

+  pages = {151 - 165},

+  number = {7},

+  owner = {hhoyos},

+  timestamp = {2013.01.23}

+}

+

+@INCOLLECTION{Kessentini.etal2008,

+  author = {Kessentini, Marouane and Sahraoui, Houari and Boukadoum, Mounir},

+  title = {Model Transformation as an Optimization Problem},

+  booktitle = {Model Driven Engineering Languages and Systems},

+  publisher = {Springer Berlin / Heidelberg},

+  year = {2008},

+  volume = {5301},

+  series = {Lecture Notes in Computer Science},

+  pages = {159--173},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@INPROCEEDINGS{Klar.etal2007,

+  author = {Klar, Felix and K\"{o}nigs, Alexander and Sch\"{u}rr, Andy},

+  title = {Model transformation in the large},

+  booktitle = {Proceedings of the the 6th joint meeting of the European software

+	engineering conference and the {ACM SIGSOFT} symposium on The foundations

+	of software engineering},

+  year = {2007},

+  series = {ESEC-FSE '07},

+  pages = {285--294},

+  publisher = {ACM},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@INCOLLECTION{Kurtev2008,

+  author = {Kurtev, Ivan},

+  title = {State of the Art of {QVT}: A Model Transformation Language Standard},

+  booktitle = {Applications of Graph Transformations with Industrial Relevance},

+  publisher = {Springer Berlin / Heidelberg},

+  year = {2008},

+  volume = {5088},

+  series = {Lecture Notes in Computer Science},

+  pages = {377--393},

+  owner = {hhoyos},

+  timestamp = {2012.08.28}

+}

+

+@ARTICLE{Mens.Gorp2006,

+  author = {Tom Mens and Pieter Van Gorp},

+  title = {A Taxonomy of Model Transformation},

+  journal = {Electronic Notes in Theoretical Computer Science},

+  year = {2006},

+  volume = {152},

+  pages = {125--142},

+  number = {0},

+  owner = {hhoyos},

+  timestamp = {2012.08.28}

+}

+

+@INPROCEEDINGS{Muller.etal2005,

+  author = {Muller, P.A. and Fleurey, F. and Vojtisek, D. and Drey, Z. and Pollet,

+	D. and Fondement, F. and Studer, P. and J{\'e}z{\'e}quel, J.M. and

+	others},

+  title = {On executable meta-languages applied to model transformations},

+  booktitle = {Model Transformations In Practice Workshop},

+  year = {2005},

+  owner = {hhoyos},

+  timestamp = {2013.01.22}

+}

+

+@MISC{QVT-RFP,

+  author = {OMG},

+  title = {{Request for Proposal: MOF 2.0 Query / Views / Transformations RFP}},

+  howpublished = {OMG Document: ad/2002-04-10},

+  note = {Revised on: April 24, 2002},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@MISC{OCL2.3.1,

+  author = {{OMG}},

+  title = {{OCL} - Object Constraint Language},

+  month = {January},

+  year = {2012},

+  comment = {2.3.1},

+  owner = {hhoyos},

+  publisher = {{ISO, Geneva, Switzerland}},

+  timestamp = {2012.08.16}

+}

+

+@MISC{QVT1.1,

+  author = {{OMG}},

+  title = {{Meta Object Facility (MOF) 2.0 Query/View/Transformation Specification}},

+  howpublished = {http://www.omg.org/spec/QVT/1.1/},

+  month = {January},

+  year = {2011},

+  note = {Version 1.1},

+  owner = {hhoyos},

+  publisher = {{ISO, Geneva, Switzerland}},

+  timestamp = {2012.09.18}

+}

+

+@MISC{HUTN1.0,

+  author = {{OMG}},

+  title = {{HUTN} - Human-Usable Textual Notation},

+  month = {August},

+  year = {2004},

+  comment = {1.0},

+  owner = {hhoyos},

+  publisher = {{ISO, Geneva, Switzerland}},

+  timestamp = {2012.09.04}

+}

+

+@ARTICLE{Padhy.etal2011,

+  author = {Padhy, R.P. and Patra, M.R. and Satapathy, S.C.},

+  title = {{RDBMS} to {NoSQL}: Reviewing Some Next-Generation Non-Relational

+	Database‘s},

+  journal = {{INTERNATIONAL JOURNAL OF ADVANCED ENGINEERING SCIENCES AND TECHNOLOGIES}},

+  year = {2011},

+  volume = {11},

+  pages = {15--30},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@INPROCEEDINGS{Paige.etal2009,

+  author = {Paige, R.F. and Kolovos, D.S. and Rose, L.M. and Drivalos, N. and

+	Polack, F.A.C.},

+  title = {The Design of a Conceptual Framework and Technical Infrastructure

+	for Model Management Language Engineering},

+  booktitle = {Proc. 14th IEEE International Conference on Engineering of Complex

+	Computer Systems},

+  year = {2009},

+  pages = {162 -171},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@INPROCEEDINGS{Polacek.Verma2009,

+  author = {Polacek, G. and Verma, D.},

+  title = {Requirements engineering for complex adaptive systems: principles

+	vs. rules},

+  booktitle = {7th annual conference on systems engineering research},

+  year = {2009},

+  owner = {hhoyos},

+  timestamp = {2012.10.12}

+}

+

+@INPROCEEDINGS{Sanchez-Barbudo.etal2008,

+  author = {S{\'a}nchez-Barbudo, Adolfo and S{\'a}nchez, E Victor and Rold{\'a}n,

+	V{\i}ctor and Est{\'e}vez, Antonio and Roda, Jos{\'e} Luis},

+  title = {Providing an open virtual-machine-based QVT implementation},

+  booktitle = {{Actas de los Talleres de las Jornadas de Ingeniería del Software

+	y Bases de Datos}},

+  year = {2008},

+  volume = {2},

+  number = {3},

+  pages = {42--51},

+  owner = {hhoyos},

+  timestamp = {2013.02.12}

+}

+

+@ARTICLE{Selic2003,

+  author = {Selic, B.},

+  title = {The pragmatics of model-driven development},

+  journal = {Software, IEEE},

+  year = {2003},

+  volume = {20},

+  pages = { 19 - 25},

+  number = {5},

+  month = {sept.-oct.},

+  owner = {hhoyos},

+  timestamp = {2013.01.28}

+}

+

+@ARTICLE{Sheard.Mostashari2008,

+  author = {Sheard, S.A. and Mostashari, A.},

+  title = {Principles of complex systems for systems engineering},

+  journal = {Systems Engineering},

+  year = {2008},

+  volume = {12},

+  pages = {295--311},

+  number = {4},

+  owner = {hhoyos},

+  publisher = {Wiley Online Library},

+  timestamp = {2012.10.11}

+}

+

+@INPROCEEDINGS{Sillitto2010,

+  author = {Sillitto, H.},

+  title = {Design Principles for Ultra-Large Scale Systems},

+  booktitle = {20th Annual International Council on Systems Engineering (INCOSE)

+	International Symposium},

+  year = {2010},

+  owner = {hhoyos},

+  timestamp = {2012.10.14}

+}

+

+@ARTICLE{Sprinkle.Karsai2004,

+  author = {Jonathan Sprinkle and Gabor Karsai},

+  title = {A domain-specific visual language for domain model evolution},

+  journal = {Journal of Visual Languages \& Computing},

+  year = {2004},

+  volume = {15},

+  pages = {291--307},

+  number = {3–4},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@ARTICLE{Stevens2010,

+  author = {Stevens, Perdita},

+  title = {Bidirectional model transformations in {QVT}: semantic issues and

+	open questions},

+  journal = {Software \& {Systems Modeling}},

+  year = {2010},

+  volume = {9},

+  pages = {7-20},

+  issue = {1},

+  keywords = {Bidirectional model transformation; QVT; Model-driven development;

+	Semantics},

+  owner = {hhoyos},

+  publisher = {Springer-Verlag},

+  timestamp = {2013.01.22}

+}

+

+@INCOLLECTION{Stevens2008,

+  author = {Stevens, Perdita},

+  title = {A Landscape of Bidirectional Model Transformations},

+  booktitle = {Generative and Transformational Techniques in Software Engineering

+	II},

+  publisher = {Springer Berlin Heidelberg},

+  year = {2008},

+  volume = {5235},

+  series = {Lecture Notes in Computer Science},

+  pages = {408-424},

+  keywords = {bidirectional model transformation; QVT; graph transformation; triple

+	graph grammar; bidirectional programming language},

+  owner = {hhoyos},

+  timestamp = {2013.01.22}

+}

+

+@INCOLLECTION{Stevens2007,

+  author = {Stevens, Perdita},

+  title = {Bidirectional Model Transformations in QVT: Semantic Issues and Open

+	Questions},

+  booktitle = {Model Driven Engineering Languages and Systems},

+  publisher = {Springer Berlin Heidelberg},

+  year = {2007},

+  volume = {4735},

+  series = {Lecture Notes in Computer Science},

+  pages = {1-15},

+  keywords = {bidirectional model transformation; QVT},

+  owner = {hhoyos},

+  timestamp = {2013.01.22}

+}

+

+@INPROCEEDINGS{Taentzer.etal2005,

+  author = {Taentzer, G. and Ehrig, K. and Guerra, E. and De Lara, J. and Lengyel,

+	L. and Levendovszky, T. and Prange, U. and Varr{\'o}, D. and Varr{\'o}-Gyapay,

+	S.},

+  title = {Model transformation by graph transformation: A comparative study},

+  booktitle = {Proc. Workshop Model Transformation in Practice},

+  year = {2005},

+  owner = {hhoyos},

+  timestamp = {2012.10.22}

+}

+

+@ARTICLE{Uhl2008,

+  author = {Uhl, A.},

+  title = {Model-Driven Development in the Enterprise},

+  journal = {Software, IEEE},

+  year = {2008},

+  volume = {25},

+  pages = {46 -49},

+  number = {1},

+  owner = {hhoyos},

+  timestamp = {2013.01.29}

+}

+

+@INPROCEEDINGS{Varro.etal2005,

+  author = {Varro, G. and Schurr, A. and Varro, D.},

+  title = {Benchmarking for graph transformation},

+  booktitle = {Visual Languages and Human-Centric Computing, 2005 {IEEE} Symposium

+	on},

+  year = {2005},

+  pages = {79--88},

+  owner = {hhoyos},

+  timestamp = {2012.08.22}

+}

+

+@INPROCEEDINGS{Venkatesan.etal2010,

+  author = {Venkatesan, A.S.P. and Thomas, D.G. and Robinson, T. and Nagar, A.K.},

+  title = {Trajectory array P system},

+  booktitle = {Bio-Inspired Computing: Theories and Applications (BIC-TA), 2010

+	IEEE Fifth International Conference on},

+  year = {2010},

+  pages = {1543 -1549},

+  owner = {Horace},

+  timestamp = {2012.11.04}

+}

+

+@INPROCEEDINGS{Wagelaar.etal2011,

+  author = {Wagelaar, Dennis and Tisi, Massimo and Cabot, Jordi and Jouault,

+	Fr{\'e}d{\'e}ric},

+  title = {Towards a general composition semantics for rule-based model transformation},

+  booktitle = {Proceedings of the 14th international conference on Model driven

+	engineering languages and systems},

+  year = {2011},

+  series = {MODELS'11},

+  pages = {623--637},

+  publisher = {Springer-Verlag},

+  keywords = {ATL, graph transformation, model transformation, model transformation

+	composition},

+  owner = {hhoyos},

+  timestamp = {2013.02.11}

+}

+

+@ARTICLE{Willink2011,

+  author = {Edward Willink},

+  title = {Aligning {OCL} with {UML}},

+  journal = {Electronic Communications of the {EASST}},

+  year = {2011},

+  volume = {44},

+  owner = {hhoyos},

+  timestamp = {2012.08.20}

+}

+

+@ARTICLE{Willink2011a,

+  author = {Edward Willink},

+  title = {Modeling the {OCL Standard Library}},

+  journal = {Electronic Communications of the {EASST}},

+  year = {2011},

+  volume = {44},

+  owner = {hhoyos},

+  timestamp = {2012.08.20}

+}

+

+@INPROCEEDINGS{Willink2012,

+  author = {Willink, E. D.},

+  title = {An extensible OCL virtual machine and code generator},

+  booktitle = {Proceedings of the 12th Workshop on OCL and Textual Modelling},

+  year = {2012},

+  series = {OCL '12},

+  pages = {13--18},

+  publisher = {ACM},

+  owner = {Horace},

+  timestamp = {2013.01.31}

+}

+

+@INCOLLECTION{Wimmer.etal2011,

+  author = {Wimmer, Manuel and Kappel, Gerti and Kusel, Angelika and Retschitzegger,

+	Werner and Schönböck, Johannes and Schwinger, Wieland and Kolovos,

+	Dimitris and Paige, Richard and Lauder, Marius and Schürr, Andy and

+	Wagelaar, Dennis},

+  title = {A Comparison of Rule Inheritance in Model-to-Model Transformation

+	Languages},

+  booktitle = {Theory and Practice of Model Transformations},

+  publisher = {Springer Berlin Heidelberg},

+  year = {2011},

+  volume = {6707},

+  series = {Lecture Notes in Computer Science},

+  pages = {31-46},

+  owner = {hhoyos},

+  timestamp = {2013.02.01}

+}

+

+@BOOK{Rozenberg1997,

+  title = {Handbook of graph grammars and computing by graph transformation:

+	volume I. foundations},

+  publisher = {World Scientific Publishing Co., Inc.},

+  year = {1997},

+  editor = {Rozenberg, Grzegorz},

+  volume = {1},

+  owner = {hhoyos},

+  timestamp = {2012.08.28}

+}

+

+@comment{jabref-meta: selector_review:}

+

+@comment{jabref-meta: selector_publisher:}

+

+@comment{jabref-meta: selector_author:}

+

+@comment{jabref-meta: selector_journal:}

+

+@comment{jabref-meta: selector_keywords:}

+

diff --git a/qvt/docs/ICMT2013/icmt13_52.pdf b/qvt/docs/ICMT2013/icmt13_52.pdf
new file mode 100644
index 0000000..51a34f4
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt13_52.pdf
Binary files differ
diff --git a/qvt/docs/ICMT2013/icmt13_52.tex b/qvt/docs/ICMT2013/icmt13_52.tex
new file mode 100644
index 0000000..4cf0d9b
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt13_52.tex
@@ -0,0 +1,65 @@
+%=======================================================================

+% Copyright (c) 2012 The University of York and Willink Transformations.

+%

+% $Id: icmt13_52.tex 4506 2013-02-12 16:45:23Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\documentclass{llncs}

+%

+\usepackage{makeidx}  % allows for indexgeneration

+\usepackage{listings}

+\usepackage{graphicx}

+\usepackage{multicol}

+\usepackage{upquote}

+

+%

+\begin{document}

+\input{oclListings}

+\input{qvtcListings}

+\lstset{

+basicstyle=\scriptsize,

+tabsize=4,

+% Numbering

+numbers=left, numberstyle=\tiny, numbersep=5pt}

+

+\mainmatter              % start of the contributions

+%

+%\title{Towards an extended family of QVT languages}

+\title{QVT Imperative - A practical semantics for declarative transformations}

+%

+\author{Horacio Hoyos \and Dimitris Kolovos\inst{1} \and Edward Willink\inst{2}}

+%

+\institute{The University of York, York, UK,\\

+\email{horacio.hoyos.rodriguez@ieee.org, dimitris.kolovos@york.ac.uk},\\

+\and

+Willink Transformations Ltd., Reading, UK \\

+\email{ed@willinktransformations.co.uk}}

+

+\maketitle              % typeset the title of the contribution

+

+\input{abstract}

+

+%\input{Outline}

+

+\input{introduction}

+

+\input{motivation}

+

+\input{QVTcore}

+

+%\input{subsetLanguages}

+

+\input{QVTi}

+

+\input{relatedwork}

+

+%\input{virtualMachine}

+

+\input{conclusions}

+

+%

+% ---- Bibliography ----

+%

+\bibliographystyle{splncs03}

+\bibliography{hhr502References}

+

+\end{document}
\ No newline at end of file
diff --git a/qvt/docs/ICMT2013/icmt13_52_ea.pdf b/qvt/docs/ICMT2013/icmt13_52_ea.pdf
new file mode 100644
index 0000000..6ad4d58
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt13_52_ea.pdf
Binary files differ
diff --git a/qvt/docs/ICMT2013/icmt13_52_ea.tex b/qvt/docs/ICMT2013/icmt13_52_ea.tex
new file mode 100644
index 0000000..bf67040
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt13_52_ea.tex
@@ -0,0 +1,92 @@
+%=======================================================================

+% Copyright (c) 2013 The University of York and Willink Transformations.

+%

+% $Id: icmt13_52.tex 4506 2013-02-12 16:45:23Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\documentclass{llncs}

+%

+\usepackage{makeidx}  % allows for indexgeneration

+\usepackage{listings}

+\usepackage{graphicx}

+\usepackage{multicol}

+%\usepackage{upquote}

+

+%

+\begin{document}

+\lstset{

+basicstyle=\scriptsize,

+tabsize=4,

+% Numbering

+numbers=left, numberstyle=\tiny, numbersep=5pt}

+

+\mainmatter              % start of the contributions

+%

+\title{Yet Another Three QVT  Languages}

+%

+\author{Edward Willink\inst{1} \and Horacio Hoyos\inst{2} \and Dimitris Kolovos\inst{2}}

+%

+\institute{Willink Transformations Ltd., Reading, UK \\

+\email{ed@willinktransformations.co.uk}

+\and The University of York, York, UK,\\

+\email{horacio.hoyos.rodriguez@ieee.org, dimitris.kolovos@york.ac.uk},\\

+}

+

+\maketitle              % typeset the title of the contribution

+

+%\begin{abstract}

+The early enthusiasm, in 2002, for model to model transformation languages led to eight submissions for an OMG standard\cite{QVT1.1} comprising three languages, yet no commercial products. The QVT Core language was intended as the foundation for QVT Relations but the available implementations have ignored the core language. Rather than ignoring the core language, we take the opposite approach and introduce three more core languages. Progressive program-to-program transformation through these core languages terminates in an easily implemented imperative language that supports declarative transformations.

+

+%\keywords{QVT, OCL, virtual machine, program transformation, declarative transformation, progressive transformation, transformation chain}

+%\end{abstract}

+

+%\section{Extended Abstract}

+There are currently only two freely available but discouragingly stable implementations of QVTr. There are no implementations for QVTc. The Eclipse QVT Declarative project provides only models, editors and parsers for both QVTr and QVTc. We outline progress to remedy the execution deficiency.

+

+The original work for  Eclipse QVTd execution considered only QVTr and confirmed that direct tooling of a complex declarative language such as QVTr is rather hard. Three years ago, the direct approach was abandoned and the progressive approach shown in the Figure was first posted on the web. Work on this approach has at last started.

+

+\begin{figure}[h]

+	\centering

+	\includegraphics[width=0.9\textwidth]{QVThorizontalAlphabet.png}

+%	\caption{Progressive transformation approach to Declarative QVT.}

+	\label{fig:overview}

+\end{figure}

+

+At the left we have the two QVT Declarative languages, with QVTr realized by a QVTr to QVTc program-to-program transformation. Our three new languages, QVTu, QVTm and QVTi are syntactic and semantic simplifications of QVTc. QVTi is realized by extending the OCL support of Eclipse OCL. This enables the Xtext editing, OCL and UML model support and the OCL to Java code generator to be exploited.

+

+The utility of the new languages and the program to program transformations are summarized below.

+

+\subsubsection{QVTc to QVTu (Unidirectional)}

+The QVTc transformation is aligned to the user's invocation context to extract a uni-directional declarative representation.

+\begin{itemize}

+\item the redundant multi-directionality and enforcement modes are eliminated

+\end{itemize}

+

+\subsubsection{QVTu to QVTm (Minimal)}

+The QVTu transformation is normalized to give as simple and as uniform a declarative representation as possible.

+\begin{itemize}

+\item syntactic sugar is removed

+\item representation alternatives are normalized

+\end{itemize}

+

+\subsubsection{QVTm to QVTi (Imperative)}

+A practical multi-pass implementation is synthesized that can be easily executed on a model-friendly Virtual Machine.

+\begin{itemize}

+\item a reconciler is synthesized if an update transformation is required

+\item a pattern matching schedule serializes declarative input matches

+\item a pattern generation schedule serializes declarative output updates 

+\end{itemize}

+

+QVTc differs from other transformation languages in requiring traceability to be made explicit in an additional middle metamodel. QVTi exploits the middle model to provide a convenient buffer between the reconciliation, input matching and output update passes. The reconciliation for an update transformation populates the middle model with the pre-existing matches. An in-place transformation ensures that all input context is cached in the middle model before any potentially conflicting output updates are made. A solution to these complexities is prepared at compile time, and expressed in QVTi, so that the run-time execution is naive and efficient.  

+

+These new languages are not just a convenience for realizing QVTc, they also offer important interchange points for other transformation technologies to exploit and so share the tool chain.

+

+\begin{itemize}

+\item QVTu provides a high level interchange point for other uni-directional declarative transformation languages such as ATL or ETL.

+\item QVTm provides a normalized representation at which declarative transformation composition and optimisation can be applied.

+\item QVTi provides a low level interchange point that imperative transformation languages such as QVTo, ALF or EOL may exploit.

+\end{itemize}

+

+The extension of Eclipse OCL VM\cite{Willink2012} to support execution of QVTi proved to be surprisingly easy. Some simple transformations have confirmed how simple QVTi  can be. It is now only necessary to develop the QVTr to QVTc to QVTu to QVTm to QVTi program transformation chain.

+\bibliographystyle{splncs03}

+\bibliography{hhr502References}

+\end{document}
\ No newline at end of file
diff --git a/qvt/docs/ICMT2013/icmt2013_poster.odg b/qvt/docs/ICMT2013/icmt2013_poster.odg
new file mode 100644
index 0000000..4ed37f9
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt2013_poster.odg
Binary files differ
diff --git a/qvt/docs/ICMT2013/icmt2013_poster.pdf b/qvt/docs/ICMT2013/icmt2013_poster.pdf
new file mode 100644
index 0000000..b74d6aa
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt2013_poster.pdf
Binary files differ
diff --git a/qvt/docs/ICMT2013/icmt2013_talk.odp b/qvt/docs/ICMT2013/icmt2013_talk.odp
new file mode 100644
index 0000000..c8f679a
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt2013_talk.odp
Binary files differ
diff --git a/qvt/docs/ICMT2013/icmt2013_talk.pdf b/qvt/docs/ICMT2013/icmt2013_talk.pdf
new file mode 100644
index 0000000..341b388
--- /dev/null
+++ b/qvt/docs/ICMT2013/icmt2013_talk.pdf
Binary files differ
diff --git a/qvt/docs/ICMT2013/introduction.tex b/qvt/docs/ICMT2013/introduction.tex
new file mode 100644
index 0000000..ba4184f
--- /dev/null
+++ b/qvt/docs/ICMT2013/introduction.tex
@@ -0,0 +1,23 @@
+%=======================================================================

+% Copyright (c) 2012 The University of York and Willink Transformations.

+%

+% $Id: introduction.tex 4512 2013-02-12 20:47:04Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\section{Introduction}

+The importance and benefits of standardisation are widely recognised in all engineering disciplines. In the domain of Model Driven Engineering, the OMG has provided a set of standards related to modelling and model management. One of these standards is the Query/View/Transformation (QVT) specification\cite{QVT1.1} that addresses the task of model transformation. Although the QVT Request For Proposals (RFP)\cite{QVT-RFP}  in 2002 attracted 8 submissions, ten years later the initial enthusiasm has failed to mature into any commercial implementations.

+

+The RFP called for one transformation language, but the submitters could not agree whether an  imperative or declarative approach should be used, and so a compromise between the two viewpoints was resolved by specifying three languages. Three languages might seem like a typical committee outcome, however in this paper we run with this compromise and start to argue for six languages.

+

+The QVT Operational Mappings language (QVTo) supports an imperative form of model transformation and is the most successful with two Open Source implementations available; SmartQVT and the QVT Operational project at Eclipse. The most recent release of SmartQVT was in 2008. Eclipse QVTo was originally developed by Borland, and after a three year lull is again under active maintenance and development.

+

+The QVT Relations (QVTr) language provides powerful multi-directional declarative transformation capabilities. It has two implementations. Medini QVT is Open Source, provides a partial implementation but does not appear to be progressing. Performance results have been very disappointing \cite{Bosems2011}. ModelMorf is proprietary but the freely available Beta releases have not matured into a product.

+

+The QVT Core (QVTc) language provides much simpler multi-directional declarative capabilities. The internal submission prototype at Compuware was never updated to match the specification and so QVTc has never had an implementation.

+

+At Eclipse, the QVT Declarative project has provided editors, parsers and models for QVTr and QVTc but no execution capability. This paper describes ongoing activity towards remedying the execution deficiencies.

+

+The two-level declarative approach adopted by the QVT specification provides powerful abstractions but no obvious way to realize them. For efficient execution we want a highly optimized imperative representation that we call QVT Imperative (QVTi). Following the QVT specification's suggestion that QVTr should be realized by a program-to-program transformation to QVTc, we propose a program-to-program transformation from QVTc to QVTi. This transformation will be realized as a chain of three program-to-program transformations from QVTc via QVT Unidirectional (QVTu) and QVT Minimal (QVTm) to QVTi. In a future paper, we will discuss the QVTc to QVTi transformations and the QVTu and QVTm languages. In this paper, we concentrate on the QVTi semantics, its execution and the reuse of QVTc concrete syntax for QVTi (and QVTm and QVTu).

+

+It should be noted that the QVT 1.1 specification failed to address any of the issues raised against QVTc in the QVT draft or 1.0 specification, and since no prototype of QVTc has been produced anywhere, we have to treat the precise wording of the QVT specification with a little scepticism. We therefore work to what we perceive to be the spirit rather than the letter of the specification. Our tooling introduces a QVTo-like import statement for the QVTc  metamodels, including the middle metamodel.

+

+In this paper we present the motivation for the three new QVTc subset languages in section \ref{sec:motivation} and an overview of QVTc in section \ref{sec:qvtcore}. The details of QVTi are presented in section \ref{sec:qvti}, with related work presented in section \ref{sec:related}. Finally, section \ref{sec:concandfuture} concludes.
\ No newline at end of file
diff --git a/qvt/docs/ICMT2013/llncs.cls b/qvt/docs/ICMT2013/llncs.cls
new file mode 100644
index 0000000..1d49f3d
--- /dev/null
+++ b/qvt/docs/ICMT2013/llncs.cls
@@ -0,0 +1,1207 @@
+% LLNCS DOCUMENT CLASS -- version 2.17 (12-Jul-2010)

+% Springer Verlag LaTeX2e support for Lecture Notes in Computer Science

+%

+%%

+%% \CharacterTable

+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z

+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z

+%%   Digits        \0\1\2\3\4\5\6\7\8\9

+%%   Exclamation   \!     Double quote  \"     Hash (number) \#

+%%   Dollar        \$     Percent       \%     Ampersand     \&

+%%   Acute accent  \'     Left paren    \(     Right paren   \)

+%%   Asterisk      \*     Plus          \+     Comma         \,

+%%   Minus         \-     Point         \.     Solidus       \/

+%%   Colon         \:     Semicolon     \;     Less than     \<

+%%   Equals        \=     Greater than  \>     Question mark \?

+%%   Commercial at \@     Left bracket  \[     Backslash     \\

+%%   Right bracket \]     Circumflex    \^     Underscore    \_

+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|

+%%   Right brace   \}     Tilde         \~}

+%%

+\NeedsTeXFormat{LaTeX2e}[1995/12/01]

+\ProvidesClass{llncs}[2010/07/12 v2.17

+^^J LaTeX document class for Lecture Notes in Computer Science]

+% Options

+\let\if@envcntreset\iffalse

+\DeclareOption{envcountreset}{\let\if@envcntreset\iftrue}

+\DeclareOption{citeauthoryear}{\let\citeauthoryear=Y}

+\DeclareOption{oribibl}{\let\oribibl=Y}

+\let\if@custvec\iftrue

+\DeclareOption{orivec}{\let\if@custvec\iffalse}

+\let\if@envcntsame\iffalse

+\DeclareOption{envcountsame}{\let\if@envcntsame\iftrue}

+\let\if@envcntsect\iffalse

+\DeclareOption{envcountsect}{\let\if@envcntsect\iftrue}

+\let\if@runhead\iffalse

+\DeclareOption{runningheads}{\let\if@runhead\iftrue}

+

+\let\if@openright\iftrue

+\let\if@openbib\iffalse

+\DeclareOption{openbib}{\let\if@openbib\iftrue}

+

+% languages

+\let\switcht@@therlang\relax

+\def\ds@deutsch{\def\switcht@@therlang{\switcht@deutsch}}

+\def\ds@francais{\def\switcht@@therlang{\switcht@francais}}

+

+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}

+

+\ProcessOptions

+

+\LoadClass[twoside]{article}

+\RequirePackage{multicol} % needed for the list of participants, index

+\RequirePackage{aliascnt}

+

+\setlength{\textwidth}{12.2cm}

+\setlength{\textheight}{19.3cm}

+\renewcommand\@pnumwidth{2em}

+\renewcommand\@tocrmarg{3.5em}

+%

+\def\@dottedtocline#1#2#3#4#5{%

+  \ifnum #1>\c@tocdepth \else

+    \vskip \z@ \@plus.2\p@

+    {\leftskip #2\relax \rightskip \@tocrmarg \advance\rightskip by 0pt plus 2cm

+               \parfillskip -\rightskip \pretolerance=10000

+     \parindent #2\relax\@afterindenttrue

+     \interlinepenalty\@M

+     \leavevmode

+     \@tempdima #3\relax

+     \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip

+     {#4}\nobreak

+     \leaders\hbox{$\m@th

+        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep

+        mu$}\hfill

+     \nobreak

+     \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}%

+     \par}%

+  \fi}

+%

+\def\switcht@albion{%

+\def\abstractname{Abstract.}

+\def\ackname{Acknowledgement.}

+\def\andname{and}

+\def\lastandname{\unskip, and}

+\def\appendixname{Appendix}

+\def\chaptername{Chapter}

+\def\claimname{Claim}

+\def\conjecturename{Conjecture}

+\def\contentsname{Table of Contents}

+\def\corollaryname{Corollary}

+\def\definitionname{Definition}

+\def\examplename{Example}

+\def\exercisename{Exercise}

+\def\figurename{Fig.}

+\def\keywordname{{\bf Keywords:}}

+\def\indexname{Index}

+\def\lemmaname{Lemma}

+\def\contriblistname{List of Contributors}

+\def\listfigurename{List of Figures}

+\def\listtablename{List of Tables}

+\def\mailname{{\it Correspondence to\/}:}

+\def\noteaddname{Note added in proof}

+\def\notename{Note}

+\def\partname{Part}

+\def\problemname{Problem}

+\def\proofname{Proof}

+\def\propertyname{Property}

+\def\propositionname{Proposition}

+\def\questionname{Question}

+\def\remarkname{Remark}

+\def\seename{see}

+\def\solutionname{Solution}

+\def\subclassname{{\it Subject Classifications\/}:}

+\def\tablename{Table}

+\def\theoremname{Theorem}}

+\switcht@albion

+% Names of theorem like environments are already defined

+% but must be translated if another language is chosen

+%

+% French section

+\def\switcht@francais{%\typeout{On parle francais.}%

+ \def\abstractname{R\'esum\'e.}%

+ \def\ackname{Remerciements.}%

+ \def\andname{et}%

+ \def\lastandname{ et}%

+ \def\appendixname{Appendice}

+ \def\chaptername{Chapitre}%

+ \def\claimname{Pr\'etention}%

+ \def\conjecturename{Hypoth\`ese}%

+ \def\contentsname{Table des mati\`eres}%

+ \def\corollaryname{Corollaire}%

+ \def\definitionname{D\'efinition}%

+ \def\examplename{Exemple}%

+ \def\exercisename{Exercice}%

+ \def\figurename{Fig.}%

+ \def\keywordname{{\bf Mots-cl\'e:}}

+ \def\indexname{Index}

+ \def\lemmaname{Lemme}%

+ \def\contriblistname{Liste des contributeurs}

+ \def\listfigurename{Liste des figures}%

+ \def\listtablename{Liste des tables}%

+ \def\mailname{{\it Correspondence to\/}:}

+ \def\noteaddname{Note ajout\'ee \`a l'\'epreuve}%

+ \def\notename{Remarque}%

+ \def\partname{Partie}%

+ \def\problemname{Probl\`eme}%

+ \def\proofname{Preuve}%

+ \def\propertyname{Caract\'eristique}%

+%\def\propositionname{Proposition}%

+ \def\questionname{Question}%

+ \def\remarkname{Remarque}%

+ \def\seename{voir}

+ \def\solutionname{Solution}%

+ \def\subclassname{{\it Subject Classifications\/}:}

+ \def\tablename{Tableau}%

+ \def\theoremname{Th\'eor\`eme}%

+}

+%

+% German section

+\def\switcht@deutsch{%\typeout{Man spricht deutsch.}%

+ \def\abstractname{Zusammenfassung.}%

+ \def\ackname{Danksagung.}%

+ \def\andname{und}%

+ \def\lastandname{ und}%

+ \def\appendixname{Anhang}%

+ \def\chaptername{Kapitel}%

+ \def\claimname{Behauptung}%

+ \def\conjecturename{Hypothese}%

+ \def\contentsname{Inhaltsverzeichnis}%

+ \def\corollaryname{Korollar}%

+%\def\definitionname{Definition}%

+ \def\examplename{Beispiel}%

+ \def\exercisename{\"Ubung}%

+ \def\figurename{Abb.}%

+ \def\keywordname{{\bf Schl\"usselw\"orter:}}

+ \def\indexname{Index}

+%\def\lemmaname{Lemma}%

+ \def\contriblistname{Mitarbeiter}

+ \def\listfigurename{Abbildungsverzeichnis}%

+ \def\listtablename{Tabellenverzeichnis}%

+ \def\mailname{{\it Correspondence to\/}:}

+ \def\noteaddname{Nachtrag}%

+ \def\notename{Anmerkung}%

+ \def\partname{Teil}%

+%\def\problemname{Problem}%

+ \def\proofname{Beweis}%

+ \def\propertyname{Eigenschaft}%

+%\def\propositionname{Proposition}%

+ \def\questionname{Frage}%

+ \def\remarkname{Anmerkung}%

+ \def\seename{siehe}

+ \def\solutionname{L\"osung}%

+ \def\subclassname{{\it Subject Classifications\/}:}

+ \def\tablename{Tabelle}%

+%\def\theoremname{Theorem}%

+}

+

+% Ragged bottom for the actual page

+\def\thisbottomragged{\def\@textbottom{\vskip\z@ plus.0001fil

+\global\let\@textbottom\relax}}

+

+\renewcommand\small{%

+   \@setfontsize\small\@ixpt{11}%

+   \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@

+   \abovedisplayshortskip \z@ \@plus2\p@

+   \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@

+   \def\@listi{\leftmargin\leftmargini

+               \parsep 0\p@ \@plus1\p@ \@minus\p@

+               \topsep 8\p@ \@plus2\p@ \@minus4\p@

+               \itemsep0\p@}%

+   \belowdisplayskip \abovedisplayskip

+}

+

+\frenchspacing

+\widowpenalty=10000

+\clubpenalty=10000

+

+\setlength\oddsidemargin   {63\p@}

+\setlength\evensidemargin  {63\p@}

+\setlength\marginparwidth  {90\p@}

+

+\setlength\headsep   {16\p@}

+

+\setlength\footnotesep{7.7\p@}

+\setlength\textfloatsep{8mm\@plus 2\p@ \@minus 4\p@}

+\setlength\intextsep   {8mm\@plus 2\p@ \@minus 2\p@}

+

+\setcounter{secnumdepth}{2}

+

+\newcounter {chapter}

+\renewcommand\thechapter      {\@arabic\c@chapter}

+

+\newif\if@mainmatter \@mainmattertrue

+\newcommand\frontmatter{\cleardoublepage

+            \@mainmatterfalse\pagenumbering{Roman}}

+\newcommand\mainmatter{\cleardoublepage

+       \@mainmattertrue\pagenumbering{arabic}}

+\newcommand\backmatter{\if@openright\cleardoublepage\else\clearpage\fi

+      \@mainmatterfalse}

+

+\renewcommand\part{\cleardoublepage

+                 \thispagestyle{empty}%

+                 \if@twocolumn

+                     \onecolumn

+                     \@tempswatrue

+                   \else

+                     \@tempswafalse

+                 \fi

+                 \null\vfil

+                 \secdef\@part\@spart}

+

+\def\@part[#1]#2{%

+    \ifnum \c@secnumdepth >-2\relax

+      \refstepcounter{part}%

+      \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%

+    \else

+      \addcontentsline{toc}{part}{#1}%

+    \fi

+    \markboth{}{}%

+    {\centering

+     \interlinepenalty \@M

+     \normalfont

+     \ifnum \c@secnumdepth >-2\relax

+       \huge\bfseries \partname~\thepart

+       \par

+       \vskip 20\p@

+     \fi

+     \Huge \bfseries #2\par}%

+    \@endpart}

+\def\@spart#1{%

+    {\centering

+     \interlinepenalty \@M

+     \normalfont

+     \Huge \bfseries #1\par}%

+    \@endpart}

+\def\@endpart{\vfil\newpage

+              \if@twoside

+                \null

+                \thispagestyle{empty}%

+                \newpage

+              \fi

+              \if@tempswa

+                \twocolumn

+              \fi}

+

+\newcommand\chapter{\clearpage

+                    \thispagestyle{empty}%

+                    \global\@topnum\z@

+                    \@afterindentfalse

+                    \secdef\@chapter\@schapter}

+\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne

+                       \if@mainmatter

+                         \refstepcounter{chapter}%

+                         \typeout{\@chapapp\space\thechapter.}%

+                         \addcontentsline{toc}{chapter}%

+                                  {\protect\numberline{\thechapter}#1}%

+                       \else

+                         \addcontentsline{toc}{chapter}{#1}%

+                       \fi

+                    \else

+                      \addcontentsline{toc}{chapter}{#1}%

+                    \fi

+                    \chaptermark{#1}%

+                    \addtocontents{lof}{\protect\addvspace{10\p@}}%

+                    \addtocontents{lot}{\protect\addvspace{10\p@}}%

+                    \if@twocolumn

+                      \@topnewpage[\@makechapterhead{#2}]%

+                    \else

+                      \@makechapterhead{#2}%

+                      \@afterheading

+                    \fi}

+\def\@makechapterhead#1{%

+% \vspace*{50\p@}%

+  {\centering

+    \ifnum \c@secnumdepth >\m@ne

+      \if@mainmatter

+        \large\bfseries \@chapapp{} \thechapter

+        \par\nobreak

+        \vskip 20\p@

+      \fi

+    \fi

+    \interlinepenalty\@M

+    \Large \bfseries #1\par\nobreak

+    \vskip 40\p@

+  }}

+\def\@schapter#1{\if@twocolumn

+                   \@topnewpage[\@makeschapterhead{#1}]%

+                 \else

+                   \@makeschapterhead{#1}%

+                   \@afterheading

+                 \fi}

+\def\@makeschapterhead#1{%

+% \vspace*{50\p@}%

+  {\centering

+    \normalfont

+    \interlinepenalty\@M

+    \Large \bfseries  #1\par\nobreak

+    \vskip 40\p@

+  }}

+

+\renewcommand\section{\@startsection{section}{1}{\z@}%

+                       {-18\p@ \@plus -4\p@ \@minus -4\p@}%

+                       {12\p@ \@plus 4\p@ \@minus 4\p@}%

+                       {\normalfont\large\bfseries\boldmath

+                        \rightskip=\z@ \@plus 8em\pretolerance=10000 }}

+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%

+                       {-18\p@ \@plus -4\p@ \@minus -4\p@}%

+                       {8\p@ \@plus 4\p@ \@minus 4\p@}%

+                       {\normalfont\normalsize\bfseries\boldmath

+                        \rightskip=\z@ \@plus 8em\pretolerance=10000 }}

+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%

+                       {-18\p@ \@plus -4\p@ \@minus -4\p@}%

+                       {-0.5em \@plus -0.22em \@minus -0.1em}%

+                       {\normalfont\normalsize\bfseries\boldmath}}

+\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%

+                       {-12\p@ \@plus -4\p@ \@minus -4\p@}%

+                       {-0.5em \@plus -0.22em \@minus -0.1em}%

+                       {\normalfont\normalsize\itshape}}

+\renewcommand\subparagraph[1]{\typeout{LLNCS warning: You should not use

+                  \string\subparagraph\space with this class}\vskip0.5cm

+You should not use \verb|\subparagraph| with this class.\vskip0.5cm}

+

+\DeclareMathSymbol{\Gamma}{\mathalpha}{letters}{"00}

+\DeclareMathSymbol{\Delta}{\mathalpha}{letters}{"01}

+\DeclareMathSymbol{\Theta}{\mathalpha}{letters}{"02}

+\DeclareMathSymbol{\Lambda}{\mathalpha}{letters}{"03}

+\DeclareMathSymbol{\Xi}{\mathalpha}{letters}{"04}

+\DeclareMathSymbol{\Pi}{\mathalpha}{letters}{"05}

+\DeclareMathSymbol{\Sigma}{\mathalpha}{letters}{"06}

+\DeclareMathSymbol{\Upsilon}{\mathalpha}{letters}{"07}

+\DeclareMathSymbol{\Phi}{\mathalpha}{letters}{"08}

+\DeclareMathSymbol{\Psi}{\mathalpha}{letters}{"09}

+\DeclareMathSymbol{\Omega}{\mathalpha}{letters}{"0A}

+

+\let\footnotesize\small

+

+\if@custvec

+\def\vec#1{\mathchoice{\mbox{\boldmath$\displaystyle#1$}}

+{\mbox{\boldmath$\textstyle#1$}}

+{\mbox{\boldmath$\scriptstyle#1$}}

+{\mbox{\boldmath$\scriptscriptstyle#1$}}}

+\fi

+

+\def\squareforqed{\hbox{\rlap{$\sqcap$}$\sqcup$}}

+\def\qed{\ifmmode\squareforqed\else{\unskip\nobreak\hfil

+\penalty50\hskip1em\null\nobreak\hfil\squareforqed

+\parfillskip=0pt\finalhyphendemerits=0\endgraf}\fi}

+

+\def\getsto{\mathrel{\mathchoice {\vcenter{\offinterlineskip

+\halign{\hfil

+$\displaystyle##$\hfil\cr\gets\cr\to\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr\gets

+\cr\to\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr\gets

+\cr\to\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr

+\gets\cr\to\cr}}}}}

+\def\lid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil

+$\displaystyle##$\hfil\cr<\cr\noalign{\vskip1.2pt}=\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr<\cr

+\noalign{\vskip1.2pt}=\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr<\cr

+\noalign{\vskip1pt}=\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr

+<\cr

+\noalign{\vskip0.9pt}=\cr}}}}}

+\def\gid{\mathrel{\mathchoice {\vcenter{\offinterlineskip\halign{\hfil

+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip1.2pt}=\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr>\cr

+\noalign{\vskip1.2pt}=\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr>\cr

+\noalign{\vskip1pt}=\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr

+>\cr

+\noalign{\vskip0.9pt}=\cr}}}}}

+\def\grole{\mathrel{\mathchoice {\vcenter{\offinterlineskip

+\halign{\hfil

+$\displaystyle##$\hfil\cr>\cr\noalign{\vskip-1pt}<\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\textstyle##$\hfil\cr

+>\cr\noalign{\vskip-1pt}<\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptstyle##$\hfil\cr

+>\cr\noalign{\vskip-0.8pt}<\cr}}}

+{\vcenter{\offinterlineskip\halign{\hfil$\scriptscriptstyle##$\hfil\cr

+>\cr\noalign{\vskip-0.3pt}<\cr}}}}}

+\def\bbbr{{\rm I\!R}} %reelle Zahlen

+\def\bbbm{{\rm I\!M}}

+\def\bbbn{{\rm I\!N}} %natuerliche Zahlen

+\def\bbbf{{\rm I\!F}}

+\def\bbbh{{\rm I\!H}}

+\def\bbbk{{\rm I\!K}}

+\def\bbbp{{\rm I\!P}}

+\def\bbbone{{\mathchoice {\rm 1\mskip-4mu l} {\rm 1\mskip-4mu l}

+{\rm 1\mskip-4.5mu l} {\rm 1\mskip-5mu l}}}

+\def\bbbc{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm C$}\hbox{\hbox

+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}

+{\setbox0=\hbox{$\textstyle\rm C$}\hbox{\hbox

+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptstyle\rm C$}\hbox{\hbox

+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptscriptstyle\rm C$}\hbox{\hbox

+to0pt{\kern0.4\wd0\vrule height0.9\ht0\hss}\box0}}}}

+\def\bbbq{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm

+Q$}\hbox{\raise

+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}

+{\setbox0=\hbox{$\textstyle\rm Q$}\hbox{\raise

+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.8\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptstyle\rm Q$}\hbox{\raise

+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptscriptstyle\rm Q$}\hbox{\raise

+0.15\ht0\hbox to0pt{\kern0.4\wd0\vrule height0.7\ht0\hss}\box0}}}}

+\def\bbbt{{\mathchoice {\setbox0=\hbox{$\displaystyle\rm

+T$}\hbox{\hbox to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}

+{\setbox0=\hbox{$\textstyle\rm T$}\hbox{\hbox

+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptstyle\rm T$}\hbox{\hbox

+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptscriptstyle\rm T$}\hbox{\hbox

+to0pt{\kern0.3\wd0\vrule height0.9\ht0\hss}\box0}}}}

+\def\bbbs{{\mathchoice

+{\setbox0=\hbox{$\displaystyle     \rm S$}\hbox{\raise0.5\ht0\hbox

+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox

+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}

+{\setbox0=\hbox{$\textstyle        \rm S$}\hbox{\raise0.5\ht0\hbox

+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\hbox

+to0pt{\kern0.55\wd0\vrule height0.5\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptstyle      \rm S$}\hbox{\raise0.5\ht0\hbox

+to0pt{\kern0.35\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox

+to0pt{\kern0.5\wd0\vrule height0.45\ht0\hss}\box0}}

+{\setbox0=\hbox{$\scriptscriptstyle\rm S$}\hbox{\raise0.5\ht0\hbox

+to0pt{\kern0.4\wd0\vrule height0.45\ht0\hss}\raise0.05\ht0\hbox

+to0pt{\kern0.55\wd0\vrule height0.45\ht0\hss}\box0}}}}

+\def\bbbz{{\mathchoice {\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}

+{\hbox{$\mathsf\textstyle Z\kern-0.4em Z$}}

+{\hbox{$\mathsf\scriptstyle Z\kern-0.3em Z$}}

+{\hbox{$\mathsf\scriptscriptstyle Z\kern-0.2em Z$}}}}

+

+\let\ts\,

+

+\setlength\leftmargini  {17\p@}

+\setlength\leftmargin    {\leftmargini}

+\setlength\leftmarginii  {\leftmargini}

+\setlength\leftmarginiii {\leftmargini}

+\setlength\leftmarginiv  {\leftmargini}

+\setlength  \labelsep  {.5em}

+\setlength  \labelwidth{\leftmargini}

+\addtolength\labelwidth{-\labelsep}

+

+\def\@listI{\leftmargin\leftmargini

+            \parsep 0\p@ \@plus1\p@ \@minus\p@

+            \topsep 8\p@ \@plus2\p@ \@minus4\p@

+            \itemsep0\p@}

+\let\@listi\@listI

+\@listi

+\def\@listii {\leftmargin\leftmarginii

+              \labelwidth\leftmarginii

+              \advance\labelwidth-\labelsep

+              \topsep    0\p@ \@plus2\p@ \@minus\p@}

+\def\@listiii{\leftmargin\leftmarginiii

+              \labelwidth\leftmarginiii

+              \advance\labelwidth-\labelsep

+              \topsep    0\p@ \@plus\p@\@minus\p@

+              \parsep    \z@

+              \partopsep \p@ \@plus\z@ \@minus\p@}

+

+\renewcommand\labelitemi{\normalfont\bfseries --}

+\renewcommand\labelitemii{$\m@th\bullet$}

+

+\setlength\arraycolsep{1.4\p@}

+\setlength\tabcolsep{1.4\p@}

+

+\def\tableofcontents{\chapter*{\contentsname\@mkboth{{\contentsname}}%

+                                                    {{\contentsname}}}

+ \def\authcount##1{\setcounter{auco}{##1}\setcounter{@auth}{1}}

+ \def\lastand{\ifnum\value{auco}=2\relax

+                 \unskip{} \andname\

+              \else

+                 \unskip \lastandname\

+              \fi}%

+ \def\and{\stepcounter{@auth}\relax

+          \ifnum\value{@auth}=\value{auco}%

+             \lastand

+          \else

+             \unskip,

+          \fi}%

+ \@starttoc{toc}\if@restonecol\twocolumn\fi}

+

+\def\l@part#1#2{\addpenalty{\@secpenalty}%

+   \addvspace{2em plus\p@}%  % space above part line

+   \begingroup

+     \parindent \z@

+     \rightskip \z@ plus 5em

+     \hrule\vskip5pt

+     \large               % same size as for a contribution heading

+     \bfseries\boldmath   % set line in boldface

+     \leavevmode          % TeX command to enter horizontal mode.

+     #1\par

+     \vskip5pt

+     \hrule

+     \vskip1pt

+     \nobreak             % Never break after part entry

+   \endgroup}

+

+\def\@dotsep{2}

+

+\let\phantomsection=\relax

+

+\def\hyperhrefextend{\ifx\hyper@anchor\@undefined\else

+{}\fi}

+

+\def\addnumcontentsmark#1#2#3{%

+\addtocontents{#1}{\protect\contentsline{#2}{\protect\numberline

+                     {\thechapter}#3}{\thepage}\hyperhrefextend}}%

+\def\addcontentsmark#1#2#3{%

+\addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}\hyperhrefextend}}%

+\def\addcontentsmarkwop#1#2#3{%

+\addtocontents{#1}{\protect\contentsline{#2}{#3}{0}\hyperhrefextend}}%

+

+\def\@adcmk[#1]{\ifcase #1 \or

+\def\@gtempa{\addnumcontentsmark}%

+  \or    \def\@gtempa{\addcontentsmark}%

+  \or    \def\@gtempa{\addcontentsmarkwop}%

+  \fi\@gtempa{toc}{chapter}%

+}

+\def\addtocmark{%

+\phantomsection

+\@ifnextchar[{\@adcmk}{\@adcmk[3]}%

+}

+

+\def\l@chapter#1#2{\addpenalty{-\@highpenalty}

+ \vskip 1.0em plus 1pt \@tempdima 1.5em \begingroup

+ \parindent \z@ \rightskip \@tocrmarg

+ \advance\rightskip by 0pt plus 2cm

+ \parfillskip -\rightskip \pretolerance=10000

+ \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip

+ {\large\bfseries\boldmath#1}\ifx0#2\hfil\null

+ \else

+      \nobreak

+      \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern

+      \@dotsep mu$}\hfill

+      \nobreak\hbox to\@pnumwidth{\hss #2}%

+ \fi\par

+ \penalty\@highpenalty \endgroup}

+

+\def\l@title#1#2{\addpenalty{-\@highpenalty}

+ \addvspace{8pt plus 1pt}

+ \@tempdima \z@

+ \begingroup

+ \parindent \z@ \rightskip \@tocrmarg

+ \advance\rightskip by 0pt plus 2cm

+ \parfillskip -\rightskip \pretolerance=10000

+ \leavevmode \advance\leftskip\@tempdima \hskip -\leftskip

+ #1\nobreak

+ \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern

+ \@dotsep mu$}\hfill

+ \nobreak\hbox to\@pnumwidth{\hss #2}\par

+ \penalty\@highpenalty \endgroup}

+

+\def\l@author#1#2{\addpenalty{\@highpenalty}

+ \@tempdima=15\p@ %\z@

+ \begingroup

+ \parindent \z@ \rightskip \@tocrmarg

+ \advance\rightskip by 0pt plus 2cm

+ \pretolerance=10000

+ \leavevmode \advance\leftskip\@tempdima %\hskip -\leftskip

+ \textit{#1}\par

+ \penalty\@highpenalty \endgroup}

+

+\setcounter{tocdepth}{0}

+\newdimen\tocchpnum

+\newdimen\tocsecnum

+\newdimen\tocsectotal

+\newdimen\tocsubsecnum

+\newdimen\tocsubsectotal

+\newdimen\tocsubsubsecnum

+\newdimen\tocsubsubsectotal

+\newdimen\tocparanum

+\newdimen\tocparatotal

+\newdimen\tocsubparanum

+\tocchpnum=\z@            % no chapter numbers

+\tocsecnum=15\p@          % section 88. plus 2.222pt

+\tocsubsecnum=23\p@       % subsection 88.8 plus 2.222pt

+\tocsubsubsecnum=27\p@    % subsubsection 88.8.8 plus 1.444pt

+\tocparanum=35\p@         % paragraph 88.8.8.8 plus 1.666pt

+\tocsubparanum=43\p@      % subparagraph 88.8.8.8.8 plus 1.888pt

+\def\calctocindent{%

+\tocsectotal=\tocchpnum

+\advance\tocsectotal by\tocsecnum

+\tocsubsectotal=\tocsectotal

+\advance\tocsubsectotal by\tocsubsecnum

+\tocsubsubsectotal=\tocsubsectotal

+\advance\tocsubsubsectotal by\tocsubsubsecnum

+\tocparatotal=\tocsubsubsectotal

+\advance\tocparatotal by\tocparanum}

+\calctocindent

+

+\def\l@section{\@dottedtocline{1}{\tocchpnum}{\tocsecnum}}

+\def\l@subsection{\@dottedtocline{2}{\tocsectotal}{\tocsubsecnum}}

+\def\l@subsubsection{\@dottedtocline{3}{\tocsubsectotal}{\tocsubsubsecnum}}

+\def\l@paragraph{\@dottedtocline{4}{\tocsubsubsectotal}{\tocparanum}}

+\def\l@subparagraph{\@dottedtocline{5}{\tocparatotal}{\tocsubparanum}}

+

+\def\listoffigures{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn

+ \fi\section*{\listfigurename\@mkboth{{\listfigurename}}{{\listfigurename}}}

+ \@starttoc{lof}\if@restonecol\twocolumn\fi}

+\def\l@figure{\@dottedtocline{1}{0em}{1.5em}}

+

+\def\listoftables{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn

+ \fi\section*{\listtablename\@mkboth{{\listtablename}}{{\listtablename}}}

+ \@starttoc{lot}\if@restonecol\twocolumn\fi}

+\let\l@table\l@figure

+

+\renewcommand\listoffigures{%

+    \section*{\listfigurename

+      \@mkboth{\listfigurename}{\listfigurename}}%

+    \@starttoc{lof}%

+    }

+

+\renewcommand\listoftables{%

+    \section*{\listtablename

+      \@mkboth{\listtablename}{\listtablename}}%

+    \@starttoc{lot}%

+    }

+

+\ifx\oribibl\undefined

+\ifx\citeauthoryear\undefined

+\renewenvironment{thebibliography}[1]

+     {\section*{\refname}

+      \def\@biblabel##1{##1.}

+      \small

+      \list{\@biblabel{\@arabic\c@enumiv}}%

+           {\settowidth\labelwidth{\@biblabel{#1}}%

+            \leftmargin\labelwidth

+            \advance\leftmargin\labelsep

+            \if@openbib

+              \advance\leftmargin\bibindent

+              \itemindent -\bibindent

+              \listparindent \itemindent

+              \parsep \z@

+            \fi

+            \usecounter{enumiv}%

+            \let\p@enumiv\@empty

+            \renewcommand\theenumiv{\@arabic\c@enumiv}}%

+      \if@openbib

+        \renewcommand\newblock{\par}%

+      \else

+        \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%

+      \fi

+      \sloppy\clubpenalty4000\widowpenalty4000%

+      \sfcode`\.=\@m}

+     {\def\@noitemerr

+       {\@latex@warning{Empty `thebibliography' environment}}%

+      \endlist}

+\def\@lbibitem[#1]#2{\item[{[#1]}\hfill]\if@filesw

+     {\let\protect\noexpand\immediate

+     \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}

+\newcount\@tempcntc

+\def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi

+  \@tempcnta\z@\@tempcntb\m@ne\def\@citea{}\@cite{\@for\@citeb:=#2\do

+    {\@ifundefined

+       {b@\@citeb}{\@citeo\@tempcntb\m@ne\@citea\def\@citea{,}{\bfseries

+        ?}\@warning

+       {Citation `\@citeb' on page \thepage \space undefined}}%

+    {\setbox\z@\hbox{\global\@tempcntc0\csname b@\@citeb\endcsname\relax}%

+     \ifnum\@tempcntc=\z@ \@citeo\@tempcntb\m@ne

+       \@citea\def\@citea{,}\hbox{\csname b@\@citeb\endcsname}%

+     \else

+      \advance\@tempcntb\@ne

+      \ifnum\@tempcntb=\@tempcntc

+      \else\advance\@tempcntb\m@ne\@citeo

+      \@tempcnta\@tempcntc\@tempcntb\@tempcntc\fi\fi}}\@citeo}{#1}}

+\def\@citeo{\ifnum\@tempcnta>\@tempcntb\else

+               \@citea\def\@citea{,\,\hskip\z@skip}%

+               \ifnum\@tempcnta=\@tempcntb\the\@tempcnta\else

+               {\advance\@tempcnta\@ne\ifnum\@tempcnta=\@tempcntb \else

+                \def\@citea{--}\fi

+      \advance\@tempcnta\m@ne\the\@tempcnta\@citea\the\@tempcntb}\fi\fi}

+\else

+\renewenvironment{thebibliography}[1]

+     {\section*{\refname}

+      \small

+      \list{}%

+           {\settowidth\labelwidth{}%

+            \leftmargin\parindent

+            \itemindent=-\parindent

+            \labelsep=\z@

+            \if@openbib

+              \advance\leftmargin\bibindent

+              \itemindent -\bibindent

+              \listparindent \itemindent

+              \parsep \z@

+            \fi

+            \usecounter{enumiv}%

+            \let\p@enumiv\@empty

+            \renewcommand\theenumiv{}}%

+      \if@openbib

+        \renewcommand\newblock{\par}%

+      \else

+        \renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%

+      \fi

+      \sloppy\clubpenalty4000\widowpenalty4000%

+      \sfcode`\.=\@m}

+     {\def\@noitemerr

+       {\@latex@warning{Empty `thebibliography' environment}}%

+      \endlist}

+      \def\@cite#1{#1}%

+      \def\@lbibitem[#1]#2{\item[]\if@filesw

+        {\def\protect##1{\string ##1\space}\immediate

+      \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}

+   \fi

+\else

+\@cons\@openbib@code{\noexpand\small}

+\fi

+

+\def\idxquad{\hskip 10\p@}% space that divides entry from number

+

+\def\@idxitem{\par\hangindent 10\p@}

+

+\def\subitem{\par\setbox0=\hbox{--\enspace}% second order

+                \noindent\hangindent\wd0\box0}% index entry

+

+\def\subsubitem{\par\setbox0=\hbox{--\,--\enspace}% third

+                \noindent\hangindent\wd0\box0}% order index entry

+

+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}

+

+\renewenvironment{theindex}

+               {\@mkboth{\indexname}{\indexname}%

+                \thispagestyle{empty}\parindent\z@

+                \parskip\z@ \@plus .3\p@\relax

+                \let\item\par

+                \def\,{\relax\ifmmode\mskip\thinmuskip

+                             \else\hskip0.2em\ignorespaces\fi}%

+                \normalfont\small

+                \begin{multicols}{2}[\@makeschapterhead{\indexname}]%

+                }

+                {\end{multicols}}

+

+\renewcommand\footnoterule{%

+  \kern-3\p@

+  \hrule\@width 2truecm

+  \kern2.6\p@}

+  \newdimen\fnindent

+  \fnindent1em

+\long\def\@makefntext#1{%

+    \parindent \fnindent%

+    \leftskip \fnindent%

+    \noindent

+    \llap{\hb@xt@1em{\hss\@makefnmark\ }}\ignorespaces#1}

+

+\long\def\@makecaption#1#2{%

+  \small

+  \vskip\abovecaptionskip

+  \sbox\@tempboxa{{\bfseries #1.} #2}%

+  \ifdim \wd\@tempboxa >\hsize

+    {\bfseries #1.} #2\par

+  \else

+    \global \@minipagefalse

+    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%

+  \fi

+  \vskip\belowcaptionskip}

+

+\def\fps@figure{htbp}

+\def\fnum@figure{\figurename\thinspace\thefigure}

+\def \@floatboxreset {%

+        \reset@font

+        \small

+        \@setnobreak

+        \@setminipage

+}

+\def\fps@table{htbp}

+\def\fnum@table{\tablename~\thetable}

+\renewenvironment{table}

+               {\setlength\abovecaptionskip{0\p@}%

+                \setlength\belowcaptionskip{10\p@}%

+                \@float{table}}

+               {\end@float}

+\renewenvironment{table*}

+               {\setlength\abovecaptionskip{0\p@}%

+                \setlength\belowcaptionskip{10\p@}%

+                \@dblfloat{table}}

+               {\end@dblfloat}

+

+\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname

+  ext@#1\endcsname}{#1}{\protect\numberline{\csname

+  the#1\endcsname}{\ignorespaces #2}}\begingroup

+    \@parboxrestore

+    \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par

+  \endgroup}

+

+% LaTeX does not provide a command to enter the authors institute

+% addresses. The \institute command is defined here.

+

+\newcounter{@inst}

+\newcounter{@auth}

+\newcounter{auco}

+\newdimen\instindent

+\newbox\authrun

+\newtoks\authorrunning

+\newtoks\tocauthor

+\newbox\titrun

+\newtoks\titlerunning

+\newtoks\toctitle

+

+\def\clearheadinfo{\gdef\@author{No Author Given}%

+                   \gdef\@title{No Title Given}%

+                   \gdef\@subtitle{}%

+                   \gdef\@institute{No Institute Given}%

+                   \gdef\@thanks{}%

+                   \global\titlerunning={}\global\authorrunning={}%

+                   \global\toctitle={}\global\tocauthor={}}

+

+\def\institute#1{\gdef\@institute{#1}}

+

+\def\institutename{\par

+ \begingroup

+ \parskip=\z@

+ \parindent=\z@

+ \setcounter{@inst}{1}%

+ \def\and{\par\stepcounter{@inst}%

+ \noindent$^{\the@inst}$\enspace\ignorespaces}%

+ \setbox0=\vbox{\def\thanks##1{}\@institute}%

+ \ifnum\c@@inst=1\relax

+   \gdef\fnnstart{0}%

+ \else

+   \xdef\fnnstart{\c@@inst}%

+   \setcounter{@inst}{1}%

+   \noindent$^{\the@inst}$\enspace

+ \fi

+ \ignorespaces

+ \@institute\par

+ \endgroup}

+

+\def\@fnsymbol#1{\ensuremath{\ifcase#1\or\star\or{\star\star}\or

+   {\star\star\star}\or \dagger\or \ddagger\or

+   \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger

+   \or \ddagger\ddagger \else\@ctrerr\fi}}

+

+\def\inst#1{\unskip$^{#1}$}

+\def\fnmsep{\unskip$^,$}

+\def\email#1{{\tt#1}}

+\AtBeginDocument{\@ifundefined{url}{\def\url#1{#1}}{}%

+\@ifpackageloaded{babel}{%

+\@ifundefined{extrasenglish}{}{\addto\extrasenglish{\switcht@albion}}%

+\@ifundefined{extrasfrenchb}{}{\addto\extrasfrenchb{\switcht@francais}}%

+\@ifundefined{extrasgerman}{}{\addto\extrasgerman{\switcht@deutsch}}%

+}{\switcht@@therlang}%

+\providecommand{\keywords}[1]{\par\addvspace\baselineskip

+\noindent\keywordname\enspace\ignorespaces#1}%

+}

+\def\homedir{\~{ }}

+

+\def\subtitle#1{\gdef\@subtitle{#1}}

+\clearheadinfo

+%

+%%% to avoid hyperref warnings

+\providecommand*{\toclevel@author}{999}

+%%% to make title-entry parent of section-entries

+\providecommand*{\toclevel@title}{0}

+%

+\renewcommand\maketitle{\newpage

+\phantomsection

+  \refstepcounter{chapter}%

+  \stepcounter{section}%

+  \setcounter{section}{0}%

+  \setcounter{subsection}{0}%

+  \setcounter{figure}{0}

+  \setcounter{table}{0}

+  \setcounter{equation}{0}

+  \setcounter{footnote}{0}%

+  \begingroup

+    \parindent=\z@

+    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%

+    \if@twocolumn

+      \ifnum \col@number=\@ne

+        \@maketitle

+      \else

+        \twocolumn[\@maketitle]%

+      \fi

+    \else

+      \newpage

+      \global\@topnum\z@   % Prevents figures from going at top of page.

+      \@maketitle

+    \fi

+    \thispagestyle{empty}\@thanks

+%

+    \def\\{\unskip\ \ignorespaces}\def\inst##1{\unskip{}}%

+    \def\thanks##1{\unskip{}}\def\fnmsep{\unskip}%

+    \instindent=\hsize

+    \advance\instindent by-\headlineindent

+    \if!\the\toctitle!\addcontentsline{toc}{title}{\@title}\else

+       \addcontentsline{toc}{title}{\the\toctitle}\fi

+    \if@runhead

+       \if!\the\titlerunning!\else

+         \edef\@title{\the\titlerunning}%

+       \fi

+       \global\setbox\titrun=\hbox{\small\rm\unboldmath\ignorespaces\@title}%

+       \ifdim\wd\titrun>\instindent

+          \typeout{Title too long for running head. Please supply}%

+          \typeout{a shorter form with \string\titlerunning\space prior to

+                   \string\maketitle}%

+          \global\setbox\titrun=\hbox{\small\rm

+          Title Suppressed Due to Excessive Length}%

+       \fi

+       \xdef\@title{\copy\titrun}%

+    \fi

+%

+    \if!\the\tocauthor!\relax

+      {\def\and{\noexpand\protect\noexpand\and}%

+      \protected@xdef\toc@uthor{\@author}}%

+    \else

+      \def\\{\noexpand\protect\noexpand\newline}%

+      \protected@xdef\scratch{\the\tocauthor}%

+      \protected@xdef\toc@uthor{\scratch}%

+    \fi

+    \addtocontents{toc}{\noexpand\protect\noexpand\authcount{\the\c@auco}}%

+    \addcontentsline{toc}{author}{\toc@uthor}%

+    \if@runhead

+       \if!\the\authorrunning!

+         \value{@inst}=\value{@auth}%

+         \setcounter{@auth}{1}%

+       \else

+         \edef\@author{\the\authorrunning}%

+       \fi

+       \global\setbox\authrun=\hbox{\small\unboldmath\@author\unskip}%

+       \ifdim\wd\authrun>\instindent

+          \typeout{Names of authors too long for running head. Please supply}%

+          \typeout{a shorter form with \string\authorrunning\space prior to

+                   \string\maketitle}%

+          \global\setbox\authrun=\hbox{\small\rm

+          Authors Suppressed Due to Excessive Length}%

+       \fi

+       \xdef\@author{\copy\authrun}%

+       \markboth{\@author}{\@title}%

+     \fi

+  \endgroup

+  \setcounter{footnote}{\fnnstart}%

+  \clearheadinfo}

+%

+\def\@maketitle{\newpage

+ \markboth{}{}%

+ \def\lastand{\ifnum\value{@inst}=2\relax

+                 \unskip{} \andname\

+              \else

+                 \unskip \lastandname\

+              \fi}%

+ \def\and{\stepcounter{@auth}\relax

+          \ifnum\value{@auth}=\value{@inst}%

+             \lastand

+          \else

+             \unskip,

+          \fi}%

+ \begin{center}%

+ \let\newline\\

+ {\Large \bfseries\boldmath

+  \pretolerance=10000

+  \@title \par}\vskip .8cm

+\if!\@subtitle!\else {\large \bfseries\boldmath

+  \vskip -.65cm

+  \pretolerance=10000

+  \@subtitle \par}\vskip .8cm\fi

+ \setbox0=\vbox{\setcounter{@auth}{1}\def\and{\stepcounter{@auth}}%

+ \def\thanks##1{}\@author}%

+ \global\value{@inst}=\value{@auth}%

+ \global\value{auco}=\value{@auth}%

+ \setcounter{@auth}{1}%

+{\lineskip .5em

+\noindent\ignorespaces

+\@author\vskip.35cm}

+ {\small\institutename}

+ \end{center}%

+ }

+

+% definition of the "\spnewtheorem" command.

+%

+% Usage:

+%

+%     \spnewtheorem{env_nam}{caption}[within]{cap_font}{body_font}

+% or  \spnewtheorem{env_nam}[numbered_like]{caption}{cap_font}{body_font}

+% or  \spnewtheorem*{env_nam}{caption}{cap_font}{body_font}

+%

+% New is "cap_font" and "body_font". It stands for

+% fontdefinition of the caption and the text itself.

+%

+% "\spnewtheorem*" gives a theorem without number.

+%

+% A defined spnewthoerem environment is used as described

+% by Lamport.

+%

+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

+

+\def\@thmcountersep{}

+\def\@thmcounterend{.}

+

+\def\spnewtheorem{\@ifstar{\@sthm}{\@Sthm}}

+

+% definition of \spnewtheorem with number

+

+\def\@spnthm#1#2{%

+  \@ifnextchar[{\@spxnthm{#1}{#2}}{\@spynthm{#1}{#2}}}

+\def\@Sthm#1{\@ifnextchar[{\@spothm{#1}}{\@spnthm{#1}}}

+

+\def\@spxnthm#1#2[#3]#4#5{\expandafter\@ifdefinable\csname #1\endcsname

+   {\@definecounter{#1}\@addtoreset{#1}{#3}%

+   \expandafter\xdef\csname the#1\endcsname{\expandafter\noexpand

+     \csname the#3\endcsname \noexpand\@thmcountersep \@thmcounter{#1}}%

+   \expandafter\xdef\csname #1name\endcsname{#2}%

+   \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%

+                              \global\@namedef{end#1}{\@endtheorem}}}

+

+\def\@spynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname

+   {\@definecounter{#1}%

+   \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%

+   \expandafter\xdef\csname #1name\endcsname{#2}%

+   \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#3}{#4}}%

+                               \global\@namedef{end#1}{\@endtheorem}}}

+

+\def\@spothm#1[#2]#3#4#5{%

+  \@ifundefined{c@#2}{\@latexerr{No theorem environment `#2' defined}\@eha}%

+  {\expandafter\@ifdefinable\csname #1\endcsname

+  {\newaliascnt{#1}{#2}%

+  \expandafter\xdef\csname #1name\endcsname{#3}%

+  \global\@namedef{#1}{\@spthm{#1}{\csname #1name\endcsname}{#4}{#5}}%

+  \global\@namedef{end#1}{\@endtheorem}}}}

+

+\def\@spthm#1#2#3#4{\topsep 7\p@ \@plus2\p@ \@minus4\p@

+\refstepcounter{#1}%

+\@ifnextchar[{\@spythm{#1}{#2}{#3}{#4}}{\@spxthm{#1}{#2}{#3}{#4}}}

+

+\def\@spxthm#1#2#3#4{\@spbegintheorem{#2}{\csname the#1\endcsname}{#3}{#4}%

+                    \ignorespaces}

+

+\def\@spythm#1#2#3#4[#5]{\@spopargbegintheorem{#2}{\csname

+       the#1\endcsname}{#5}{#3}{#4}\ignorespaces}

+

+\def\@spbegintheorem#1#2#3#4{\trivlist

+                 \item[\hskip\labelsep{#3#1\ #2\@thmcounterend}]#4}

+

+\def\@spopargbegintheorem#1#2#3#4#5{\trivlist

+      \item[\hskip\labelsep{#4#1\ #2}]{#4(#3)\@thmcounterend\ }#5}

+

+% definition of \spnewtheorem* without number

+

+\def\@sthm#1#2{\@Ynthm{#1}{#2}}

+

+\def\@Ynthm#1#2#3#4{\expandafter\@ifdefinable\csname #1\endcsname

+   {\global\@namedef{#1}{\@Thm{\csname #1name\endcsname}{#3}{#4}}%

+    \expandafter\xdef\csname #1name\endcsname{#2}%

+    \global\@namedef{end#1}{\@endtheorem}}}

+

+\def\@Thm#1#2#3{\topsep 7\p@ \@plus2\p@ \@minus4\p@

+\@ifnextchar[{\@Ythm{#1}{#2}{#3}}{\@Xthm{#1}{#2}{#3}}}

+

+\def\@Xthm#1#2#3{\@Begintheorem{#1}{#2}{#3}\ignorespaces}

+

+\def\@Ythm#1#2#3[#4]{\@Opargbegintheorem{#1}

+       {#4}{#2}{#3}\ignorespaces}

+

+\def\@Begintheorem#1#2#3{#3\trivlist

+                           \item[\hskip\labelsep{#2#1\@thmcounterend}]}

+

+\def\@Opargbegintheorem#1#2#3#4{#4\trivlist

+      \item[\hskip\labelsep{#3#1}]{#3(#2)\@thmcounterend\ }}

+

+\if@envcntsect

+   \def\@thmcountersep{.}

+   \spnewtheorem{theorem}{Theorem}[section]{\bfseries}{\itshape}

+\else

+   \spnewtheorem{theorem}{Theorem}{\bfseries}{\itshape}

+   \if@envcntreset

+      \@addtoreset{theorem}{section}

+   \else

+      \@addtoreset{theorem}{chapter}

+   \fi

+\fi

+

+%definition of divers theorem environments

+\spnewtheorem*{claim}{Claim}{\itshape}{\rmfamily}

+\spnewtheorem*{proof}{Proof}{\itshape}{\rmfamily}

+\if@envcntsame % alle Umgebungen wie Theorem.

+   \def\spn@wtheorem#1#2#3#4{\@spothm{#1}[theorem]{#2}{#3}{#4}}

+\else % alle Umgebungen mit eigenem Zaehler

+   \if@envcntsect % mit section numeriert

+      \def\spn@wtheorem#1#2#3#4{\@spxnthm{#1}{#2}[section]{#3}{#4}}

+   \else % nicht mit section numeriert

+      \if@envcntreset

+         \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}

+                                   \@addtoreset{#1}{section}}

+      \else

+         \def\spn@wtheorem#1#2#3#4{\@spynthm{#1}{#2}{#3}{#4}

+                                   \@addtoreset{#1}{chapter}}%

+      \fi

+   \fi

+\fi

+\spn@wtheorem{case}{Case}{\itshape}{\rmfamily}

+\spn@wtheorem{conjecture}{Conjecture}{\itshape}{\rmfamily}

+\spn@wtheorem{corollary}{Corollary}{\bfseries}{\itshape}

+\spn@wtheorem{definition}{Definition}{\bfseries}{\itshape}

+\spn@wtheorem{example}{Example}{\itshape}{\rmfamily}

+\spn@wtheorem{exercise}{Exercise}{\itshape}{\rmfamily}

+\spn@wtheorem{lemma}{Lemma}{\bfseries}{\itshape}

+\spn@wtheorem{note}{Note}{\itshape}{\rmfamily}

+\spn@wtheorem{problem}{Problem}{\itshape}{\rmfamily}

+\spn@wtheorem{property}{Property}{\itshape}{\rmfamily}

+\spn@wtheorem{proposition}{Proposition}{\bfseries}{\itshape}

+\spn@wtheorem{question}{Question}{\itshape}{\rmfamily}

+\spn@wtheorem{solution}{Solution}{\itshape}{\rmfamily}

+\spn@wtheorem{remark}{Remark}{\itshape}{\rmfamily}

+

+\def\@takefromreset#1#2{%

+    \def\@tempa{#1}%

+    \let\@tempd\@elt

+    \def\@elt##1{%

+        \def\@tempb{##1}%

+        \ifx\@tempa\@tempb\else

+            \@addtoreset{##1}{#2}%

+        \fi}%

+    \expandafter\expandafter\let\expandafter\@tempc\csname cl@#2\endcsname

+    \expandafter\def\csname cl@#2\endcsname{}%

+    \@tempc

+    \let\@elt\@tempd}

+

+\def\theopargself{\def\@spopargbegintheorem##1##2##3##4##5{\trivlist

+      \item[\hskip\labelsep{##4##1\ ##2}]{##4##3\@thmcounterend\ }##5}

+                  \def\@Opargbegintheorem##1##2##3##4{##4\trivlist

+      \item[\hskip\labelsep{##3##1}]{##3##2\@thmcounterend\ }}

+      }

+

+\renewenvironment{abstract}{%

+      \list{}{\advance\topsep by0.35cm\relax\small

+      \leftmargin=1cm

+      \labelwidth=\z@

+      \listparindent=\z@

+      \itemindent\listparindent

+      \rightmargin\leftmargin}\item[\hskip\labelsep

+                                    \bfseries\abstractname]}

+    {\endlist}

+

+\newdimen\headlineindent             % dimension for space between

+\headlineindent=1.166cm              % number and text of headings.

+

+\def\ps@headings{\let\@mkboth\@gobbletwo

+   \let\@oddfoot\@empty\let\@evenfoot\@empty

+   \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%

+                  \leftmark\hfil}

+   \def\@oddhead{\normalfont\small\hfil\rightmark\hspace{\headlineindent}%

+                 \llap{\thepage}}

+   \def\chaptermark##1{}%

+   \def\sectionmark##1{}%

+   \def\subsectionmark##1{}}

+

+\def\ps@titlepage{\let\@mkboth\@gobbletwo

+   \let\@oddfoot\@empty\let\@evenfoot\@empty

+   \def\@evenhead{\normalfont\small\rlap{\thepage}\hspace{\headlineindent}%

+                  \hfil}

+   \def\@oddhead{\normalfont\small\hfil\hspace{\headlineindent}%

+                 \llap{\thepage}}

+   \def\chaptermark##1{}%

+   \def\sectionmark##1{}%

+   \def\subsectionmark##1{}}

+

+\if@runhead\ps@headings\else

+\ps@empty\fi

+

+\setlength\arraycolsep{1.4\p@}

+\setlength\tabcolsep{1.4\p@}

+

+\endinput

+%end of file llncs.cls

diff --git a/qvt/docs/ICMT2013/motivation.tex b/qvt/docs/ICMT2013/motivation.tex
new file mode 100644
index 0000000..2a561dc
--- /dev/null
+++ b/qvt/docs/ICMT2013/motivation.tex
@@ -0,0 +1,69 @@
+%=======================================================================

+% Copyright (c) 2012 The University of York and Willink Transformations.

+%

+% $Id: subsetLanguages.tex 4326 2013-01-31 17:44:31Z hhoyos@CS.YORK.AC.UK $

+%=======================================================================

+\section{Motivation}\label{sec:motivation}

+In QVTr, a model transformation is defined using powerful abstractions. A set of relations that \textquotedblleft declare constraints that must be satisfied by the elements of the candidate models\textquotedblright\cite{QVT1.1}.

+

+\begin{itemize}

+\item Constraints are defined by matching properties of elements in the candidate models.

+\item Property matching uses expressions written in OCL and grouped in domains.

+\item Each domain represents a candidate model.

+\item Constraints can be specialized to check models (checking semantics).

+\item Constraints can be specialized to modify models (enforcement semantics).

+\item Constraints semantics varies with the chosen transformation direction.

+\end{itemize}

+

+The complexity of the language semantics, and the underlying abstractions of pattern matching, constraints and OCL make the specification and implementation of QVTr a complex and daunting task. The QVT specification uses an almost unreadable and untested QVTr to QVTc transformation to `solve' the problem.

+

+QVTc is \textquotedblleft as powerful as the Relations language, though simpler. Consequently, the semantics of the Core Language can be defined more simply, though transformations described using the Core are more verbose\textquotedblright \cite{QVT1.1}. Since in QVTc the trace models must be explicitly defined, constraints are now defined by matching properties of elements in the candidate models and the trace models. Checking and enforcement provide the same functionality as in QVTr.

+

+A QVTc transformation is specified as a set of mappings with constraints defined in a domain for each candidate and trace model. The simpler semantics of QVTc  make a QVTc implementation more tractable. QVTc makes only small abstract syntax extensions to EMOF and OCL. A QVTc implementation is therefore an attractive intermediate implementation approach for QVTr. This approach may use a debugged version of the QVTr to QVTc transformation from the specification.

+

+However, multi-directional transformations still present several challenges in a number of domains and disciplines \cite{Czarnecki.etal2009}, some of which translate to QVT\cite{Stevens2010}. Declarative transformations present a challenge from a rule schedulability point of view. In the specific case of QVT this translates to an implementation in which the execution of rules can be partial, interrupted or postponed until matches in other rules provide the required variable values (bindings), eventually requiring multiple passes. These challenges can be overcome by removing multi-directionality, normalizing constraints and defining an imperative semantics. 

+

+However, the semantic gap between \textless multi-directional + declarative\textgreater\hspace{0pt} and \textless uni-directional + imperative\textgreater\hspace{0pt} makes it difficult to tackle the aforementioned aspects in a one-step mapping. Moreover, there is a risk that what was gained from having to implement a simpler semantics would be lost by the work needed to realize the required mappings.

+

+\begin{figure}[h]

+	\centering

+	\includegraphics[width=0.56\textwidth]{QVTView.pdf}

+	\caption{Overview of the proposed QVT 6 languages architecture.}

+	\label{fig:overview}

+\end{figure}

+

+Figure \ref{fig:overview} presents our progressive transformation solution to realizing QVTr on an OCL Virtual Machine\cite{Willink2012}. At the top we have the two QVT Declarative languages, with QVTr realized by a QVTr to QVTc program-to-program transformation. Our three new languages, QVTu, QVTm and QVTi are syntactic and semantic simplifications of QVTc.

+

+\begin{itemize}

+\item For QVT Uni-directional (QVTu), we align the transformation to the user's invocation context and eliminate the redundant multi-directional and enforcement flexibilities.

+\item For QVT Minimal (QVTm) we normalize to eliminate syntactic sugar and alternate representation flexibilities.

+\item For QVT Imperative (QVTi) we discard declarative flexibilities and synthesize a multi-pass imperative search schedule that can be executed easily by a model-friendly Virtual Machine.

+\end{itemize}

+

+These new languages are not just a convenience for realizing QVTc, they also offer important interchange points for other transformation technologies to exploit and so share the tool chain.

+

+\begin{itemize}

+\item QVTu provides a high level interchange point for other uni-directional declarative transformation languages such as ATL or ETL.

+\item QVTm provides a normalized representation at which declarative transformation composition and optimisation can be applied.

+\item QVTi provides a low level interchange point that imperative transformation languages such as QVTo, ALF or EOL may exploit.

+\end{itemize}

+

+%three new languages, each one supporting a more restricted QVTc abstract syntax and providing increasingly limited semantics. QVTo operations will be invoked at the QVTi level and QVTi will provide an interface for QVTo to populate the middle (trace) model. Proximity of the QVTc abstract syntax to EMOF and OCL will be useful as an AST interpretation and execution can be provided by extending the Eclipse OCL Virtual Machine\cite{Willink2012}.

+

+%The intention of the QVTc subset languages is then to progressively restrict the QVTc semantics to eventually define a subset of QVTc that is uni-directional, normalized and imperative. The different levels of semantic \textquotedblleft power\textquotedblright will also imply a restriction on the use of the language's abstract syntax, from permissive to restricted. An overview of the proposed QVT alphabet is presented in Figure \ref{fig:overview}. 

+

+%Complete support for QVTr is achieved by specifying mappings and implementing automated program transformations for:

+%\begin{itemize}

+%\item  QVTr$\rightarrow$QVTc, written in QVTc

+%\item  QVTc$\rightarrow$QVTu, written in QVTu

+%\item  QVTu$\rightarrow$QVTm, written in QVTm

+%\item  QVTm$\rightarrow$QVTi, written in QVTi

+%\end{itemize}

+

+%The first restriction is to remove bi-directionality, thus QVTu (unidirectional) restricts the semantics so that in the context of a mapping (the name given to rules in QVTc) only one candidate model can be enforced. The next restriction is to remove rule specialization, thus QVTm (minimal) does not allow mapping refinement. Finally, to remove the declarative component, in QVTi (imperative) mappings are allowed to introduce only one unbound variable and transformations must be written as a tree of mapping compositions were each root mapping declares the constraints between one of the candidate models and the trace model.  Execution of all the languages is provided by performing automated transformations from semantically richer languages to simpler ones, for example form QVTr to QVTc or from QVTm to QVTi.

+

+

+

+

+

+

diff --git a/qvt/docs/ICMT2013/oclListings.tex b/qvt/docs/ICMT2013/oclListings.tex
new file mode 100644
index 0000000..ee81e88
--- /dev/null
+++ b/qvt/docs/ICMT2013/oclListings.tex
@@ -0,0 +1,7 @@
+\lstdefinelanguage[omg]{ocl}

+{morekeywords={and,body,context,def,derive,else,endif,endpackage,false,if,implies,in,init,inv,invalid,let,not,null,or,package,post,pre,self,static,then,true,xor},

+sensitive=false,

+morecomment=[l]{--},

+morecomment=[s]{/*}{*/},

+morestring=[b]",

+}

diff --git a/qvt/docs/ICMT2013/pattern.png b/qvt/docs/ICMT2013/pattern.png
new file mode 100644
index 0000000..a8dac0c
--- /dev/null
+++ b/qvt/docs/ICMT2013/pattern.png
Binary files differ
diff --git a/qvt/docs/ICMT2013/qvtc.lst b/qvt/docs/ICMT2013/qvtc.lst
new file mode 100644
index 0000000..31da619
--- /dev/null
+++ b/qvt/docs/ICMT2013/qvtc.lst
@@ -0,0 +1,49 @@
+\begin{lstlisting}[language=qvtc,label=lsting:QVTcExample,caption={QVTc transformation of colored nodes.}]

+import 'HSVTree.ecore';			-- import the HSVTree package

+import 'HLSTree.ecore';			-- import the HLSTree package

+import 'HSV2HLS.ecore';			-- import the HSV2HLS package

+

+transformation ColorChange {	-- declare the ColorChange transformation

+	hsv imports HSVTree;		-- hsv TypedModel uses HSVTree package

+	hls imports HLSTree;		-- hls TypedModel uses HLSTree package

+	imports HSV2HLS;			-- middle TypedModel uses HSV2HLS package

+}

+								-- utility queries for color conversions

+query ColorChange::hls2rgb(color : HLSTree::HLS) : HSV2HLS::RGB;

+query ColorChange::hsv2rgb(color : HSVTree::HSV) : HSV2HLS::RGB;

+query ColorChange::rgb2hls(color : HSV2HLS::RGB) : HLSTree::HLS;

+query ColorChange::rgb2hsv(color : HSV2HLS::RGB) : HSVTree::HSV;

+

+map Node2Node in ColorChange {		-- abstract mapping of a Node

+	enforce hsv() { realize hsvNode : HSVNode | } -- hsv node exists

+	enforce hls() { realize hlsNode : HLSNode | } -- hls node exists

+	where() {

+		realize middleNode : HSVNode2HLSNode | 	-- middle node exists

+		middleNode.hsv := hsvNode;				-- middle to hsv trace

+		middleNode.hls := hlsNode;				-- middle to hls trace

+		middleNode.rgb := hsv2rgb(hsvNode.hsv);	-- hsv to middle color

+		middleNode.rgb := hls2rgb(hlsNode.hls);	-- hls to middle color

+		hsvNode.hsv := rgb2hsv(middleNode.rgb);	-- middle to hsv color

+		hlsNode.hls := rgb2hls(middleNode.rgb);	-- middle to hls color

+	}

+}

+

+map Root2Root in ColorChange refines Node2Node { -- refined for a root

+	enforce hsv() {					-- hsv can be an output

+		hsvNode.parent := null; }	-- parent must be null

+	enforce hls() {					-- hls can be an output

+		hlsNode.parent := null; }	-- parent must be null

+	where() {						-- middle is always the middle

+		middleNode.parent := null;	-- parent must be null

+	}

+}

+

+map Child2Child in ColorChange refines Node2Node { -- refined for a child

+	enforce hsv(hsvParent : HSVNode | ) {	-- additional parent variable

+		hsvNode.parent := hsvParent; }		-- node's parent is parent

+	enforce hls(hlsParent : HLSNode | ) {	-- additional parent variable

+		hlsNode.parent := hlsParent; }		-- node's parent is parent

+	where(middleParent : HSVNode2HLSNode | ) { -- additional parent var

+		middleNode.parent := middleParent; } -- node's parent is parent

+}

+\end{lstlisting}
\ No newline at end of file
diff --git a/qvt/docs/ICMT2013/qvtcListings.tex b/qvt/docs/ICMT2013/qvtcListings.tex
new file mode 100644
index 0000000..3b46b38
--- /dev/null
+++ b/qvt/docs/ICMT2013/qvtcListings.tex
@@ -0,0 +1,9 @@
+%\lstdefinelanguage

+%[[dialect] ] {language}

+%[ [base dialect]{hand base languagei} ]

+%{key=value ... }

+%[ [hlist of required aspects (keywordcomments,texcs,etc.)i] ]

+\lstdefinelanguage{qvtc}

+[omg]{ocl}

+{morekeywords={import,transformation,imports,uses,map,in,refines,check,enforce,where,realize,default,query},

+}
\ No newline at end of file
diff --git a/qvt/docs/ICMT2013/qvtiListings.lst b/qvt/docs/ICMT2013/qvtiListings.lst
new file mode 100644
index 0000000..46f3e85
--- /dev/null
+++ b/qvt/docs/ICMT2013/qvtiListings.lst
@@ -0,0 +1,55 @@
+\begin{lstlisting}[language=qvtc,label=lsting:QVTiExample,caption={QVTi mappings of colored nodes.}]

+map HSV2MiddleRoot in ColorChanger {	-- Mapping root nodes L to M

+	hsv() { hsvRoot : HSVNode | hsvRoot.parent = null;} 

+	where() {

+		realize middleRoot : HSVNode2HLSNode |

+		middleRoot.hsv := hsvRoot;

+		middleRoot.rgb := hsv2rgb(hsvRoot.hsv);

+	}

+	map HSV2MiddleRecursion {		-- recursive call to visit children

+		hsvNode := hsvRoot.children;

+		middleParent := middleRoot;

+	}

+	map Middle2HLSRoot {		-- invoke middle to output mapping

+		middleNode := middleRoot;

+	}

+}

+

+map HSV2MiddleRecursion in ColorChanger { -- Mapping child nodes L to M

+	hsv(hsvNode : HSVNode | ) {}

+	where(middleParent : HSVNode2HLSNode | ) {

+		realize middleNode : HSVNode2HLSNode |

+		middleNode.parent := middleParent;

+		middleNode.hsv := hsvNode;

+		middleNode.rgb := hsv2rgb(hsvNode.hsv);

+	}

+	map HSV2MiddleRecursion {		-- recursive call to visit children

+		hsvNode := hsvNode.children;

+		middleParent := middleNode;

+	}

+}

+

+map Middle2HLSRoot in ColorChanger { -- Mapping root nodes M to R

+	enforce hls() { realize hlsNode : HLSNode | }

+	where(middleNode : HSVNode2HLSNode) {

+		middleNode.hls := hlsNode;

+		hlsNode.parent := null;

+		hlsNode.hls := rgb2hls(middleNode.rgb);

+	}

+	map Middle2HLSRecursion {		-- recursive call to visit children

+		middleNode := middleNode.children;

+	}

+}

+

+map Middle2HLSRecursion in ColorChanger { -- Mapping child nodes M to R

+	enforce hls() { realize hlsNode : HLSNode | }

+	where(middleNode : HSVNode2HLSNode |) {

+		middleNode.hls := hlsNode;

+		hlsNode.parent := middleNode.parent.hls;

+		hlsNode.hls := rgb2hls(middleNode.rgb);

+	}

+	map Middle2HLSRecursion {		-- recursive call to visit children

+		middleNode := middleNode.children;

+	}

+}

+\end{lstlisting}
\ No newline at end of file
diff --git a/qvt/docs/ICMT2013/relatedwork.tex b/qvt/docs/ICMT2013/relatedwork.tex
new file mode 100644
index 0000000..a784adc
--- /dev/null
+++ b/qvt/docs/ICMT2013/relatedwork.tex
@@ -0,0 +1,9 @@
+\section{Related Work}\label{sec:related}

+

+The Kermeta model transformation language development tools include code generators that can transform Kermeta transformations into Java and Scala code which can then be executed against a Java Virtual Machine (JVM) for more efficient execution \cite{Fouquet.etal2010}. The Epsilon\cite{Paige.etal2009} platform of model management languages also features a layered approach where all model task-specific languages extend a common expression language (EOL).

+

+Following the paradigm of VM-based programming language architectures (e.g. JVM), the Atlas Transformation Language (ATL) features a layered architecture in which transformations are compiled to XML-based byte-code, which is then executed by a virtual machine \cite{ATL.VMSpec}. The architecture of ATL enables the substitution of the default VM with custom VM implementations. Beyond the default generic VM, ATL ships with an additional optimized VM for transforming EMF-based models. The ATL VM is based upon the ATL language and so has limited integration with its OCL implementation. The similarities of the QVT and ATL architectures provide interesting points for interoperability\cite{Jouault.Kurtev2006}. In contrast our approach exploits the inherent tree structure of the OCL AST to extend the Eclipse OCL VM's tree-walking interpreter and code generator for the extended QVTi AST. 

+

+Building on the idea of a 2-stage execution of model transformations, in \cite{Wagelaar.etal2011}, the authors present a generic transformation engine VM (EMFTVM). Similarly to the ATL VM, EMFTVM also executes byte-code but unlike the ATL VM where byte-code is represented using proprietary XML, in EMFTVM byte-code conforms to an Ecore metamodel -- and as such it is easier for higher-level transformation languages to compile down to it using higher-order transformations. The aim of EMFTVM is to serve as an underlying VM for additional transformation languages and as a proof of concept, the developer of the EMFTVM has implemented higher-order model transformations that map transformations expressed both in ATL and in a simple graph transformation language\footnote{http://soft.vub.ac.be/soft/research/mdd/simplegt} to VM byte-code. The concept of a reusable EMF-based VM that can act as a compilation target for higher-level languages is similar to the approach proposed in this paper. However, in our approach we envision multiple hook points which will allow transformation languages operating at different levels of abstraction to integrate with the proposed architecture with reduced duplication.

+

+Most similar to the approach proposed in this paper, is the work presented in \cite{Sanchez-Barbudo.etal2008} where the authors propose a layered architecture for implementing QVTc and QVTo. More specifically, the authors propose a program-to-program transformation to compile QVTc and QVTo transformations into a low-level imperative transformation language called Atomic Transformation Code (ATC), and then compile ATC code to byte-code that can be executed by a proprietary virtual machine called Virtual Transformation Engine (VTE). The architecture of our approach is similar, but we propose to eliminate dependencies on proprietary components (ATC), and to further decompose the compilation process by introducing additional intermediate QVTx languages.

diff --git a/qvt/docs/ICMT2013/splncs03.bst b/qvt/docs/ICMT2013/splncs03.bst
new file mode 100644
index 0000000..3279169
--- /dev/null
+++ b/qvt/docs/ICMT2013/splncs03.bst
@@ -0,0 +1,1519 @@
+%% BibTeX bibliography style `splncs03'

+%%

+%% BibTeX bibliography style for use with numbered references in

+%% Springer Verlag's "Lecture Notes in Computer Science" series.

+%% (See Springer's documentation for llncs.cls for

+%% more details of the suggested reference format.)  Note that this

+%% file will not work for author-year style citations.

+%%

+%% Use \documentclass{llncs} and \bibliographystyle{splncs03}, and cite

+%% a reference with (e.g.) \cite{smith77} to get a "[1]" in the text.

+%%

+%% This file comes to you courtesy of Maurizio "Titto" Patrignani of

+%% Dipartimento di Informatica e Automazione Universita' Roma Tre

+%%

+%% ================================================================================================

+%% This was file `titto-lncs-02.bst' produced on Wed Apr 1, 2009

+%% Edited by hand by titto based on `titto-lncs-01.bst' (see below)

+%%

+%% CHANGES (with respect to titto-lncs-01.bst):

+%% - Removed the call to \urlprefix (thus no "URL" string is added to the output)

+%% ================================================================================================

+%% This was file `titto-lncs-01.bst' produced on Fri Aug 22, 2008

+%% Edited by hand by titto based on `titto.bst' (see below)

+%%

+%% CHANGES (with respect to titto.bst):

+%% - Removed the "capitalize" command for editors string "(eds.)" and "(ed.)"

+%% - Introduced the functions titto.bbl.pages and titto.bbl.page for journal pages (without "pp.")

+%% - Added a new.sentence command to separate with a dot booktitle and series in the inproceedings

+%% - Commented all new.block commands before urls and notes (to separate them with a comma)

+%% - Introduced the functions titto.bbl.volume for handling journal volumes (without "vol." label)

+%% - Used for editors the same name conventions used for authors (see function format.in.ed.booktitle)

+%% - Removed a \newblock to avoid long spaces between title and "In: ..."

+%% - Added function titto.space.prefix to add a space instead of "~" after the (removed) "vol." label

+%% ================================================================================================

+%% This was file `titto.bst',

+%% generated with the docstrip utility.

+%%

+%% The original source files were:

+%%

+%% merlin.mbs  (with options: `vonx,nm-rvvc,yr-par,jttl-rm,volp-com,jwdpg,jwdvol,numser,ser-vol,jnm-x,btit-rm,bt-rm,edparxc,bkedcap,au-col,in-col,fin-bare,pp,ed,abr,mth-bare,xedn,jabr,and-com,and-com-ed,xand,url,url-blk,em-x,nfss,')

+%% ----------------------------------------

+%% *** Tentative .bst file for Springer LNCS ***

+%%

+%% Copyright 1994-2007 Patrick W Daly

+ % ===============================================================

+ % IMPORTANT NOTICE:

+ % This bibliographic style (bst) file has been generated from one or

+ % more master bibliographic style (mbs) files, listed above.

+ %

+ % This generated file can be redistributed and/or modified under the terms

+ % of the LaTeX Project Public License Distributed from CTAN

+ % archives in directory macros/latex/base/lppl.txt; either

+ % version 1 of the License, or any later version.

+ % ===============================================================

+ % Name and version information of the main mbs file:

+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]

+ %   For use with BibTeX version 0.99a or later

+ %-------------------------------------------------------------------

+ % This bibliography style file is intended for texts in ENGLISH

+ % This is a numerical citation style, and as such is standard LaTeX.

+ % It requires no extra package to interface to the main text.

+ % The form of the \bibitem entries is

+ %   \bibitem{key}...

+ % Usage of \cite is as follows:

+ %   \cite{key} ==>>          [#]

+ %   \cite[chap. 2]{key} ==>> [#, chap. 2]

+ % where # is a number determined by the ordering in the reference list.

+ % The order in the reference list is alphabetical by authors.

+ %---------------------------------------------------------------------

+

+ENTRY

+  { address

+    author

+    booktitle

+    chapter

+    edition

+    editor

+    eid

+    howpublished

+    institution

+    journal

+    key

+    month

+    note

+    number

+    organization

+    pages

+    publisher

+    school

+    series

+    title

+    type

+    url

+    volume

+    year

+  }

+  {}

+  { label }

+INTEGERS { output.state before.all mid.sentence after.sentence after.block }

+FUNCTION {init.state.consts}

+{ #0 'before.all :=

+  #1 'mid.sentence :=

+  #2 'after.sentence :=

+  #3 'after.block :=

+}

+STRINGS { s t}

+FUNCTION {output.nonnull}

+{ 's :=

+  output.state mid.sentence =

+    { ", " * write$ }

+    { output.state after.block =

+        { add.period$ write$

+%          newline$

+%          "\newblock " write$  % removed for titto-lncs-01

+          " " write$            % to avoid long spaces between title and "In: ..."

+        }

+        { output.state before.all =

+            'write$

+            { add.period$ " " * write$ }

+          if$

+        }

+      if$

+      mid.sentence 'output.state :=

+    }

+  if$

+  s

+}

+FUNCTION {output}

+{ duplicate$ empty$

+    'pop$

+    'output.nonnull

+  if$

+}

+FUNCTION {output.check}

+{ 't :=

+  duplicate$ empty$

+    { pop$ "empty " t * " in " * cite$ * warning$ }

+    'output.nonnull

+  if$

+}

+FUNCTION {fin.entry}

+{ duplicate$ empty$

+    'pop$

+    'write$

+  if$

+  newline$

+}

+

+FUNCTION {new.block}

+{ output.state before.all =

+    'skip$

+    { after.block 'output.state := }

+  if$

+}

+FUNCTION {new.sentence}

+{ output.state after.block =

+    'skip$

+    { output.state before.all =

+        'skip$

+        { after.sentence 'output.state := }

+      if$

+    }

+  if$

+}

+FUNCTION {add.blank}

+{  " " * before.all 'output.state :=

+}

+

+

+FUNCTION {add.colon}

+{ duplicate$ empty$

+    'skip$

+    { ":" * add.blank }

+  if$

+}

+

+FUNCTION {date.block}

+{

+  new.block

+}

+

+FUNCTION {not}

+{   { #0 }

+    { #1 }

+  if$

+}

+FUNCTION {and}

+{   'skip$

+    { pop$ #0 }

+  if$

+}

+FUNCTION {or}

+{   { pop$ #1 }

+    'skip$

+  if$

+}

+STRINGS {z}

+FUNCTION {remove.dots}

+{ 'z :=

+  ""

+  { z empty$ not }

+  { z #1 #1 substring$

+    z #2 global.max$ substring$ 'z :=

+    duplicate$ "." = 'pop$

+      { * }

+    if$

+  }

+  while$

+}

+FUNCTION {new.block.checka}

+{ empty$

+    'skip$

+    'new.block

+  if$

+}

+FUNCTION {new.block.checkb}

+{ empty$

+  swap$ empty$

+  and

+    'skip$

+    'new.block

+  if$

+}

+FUNCTION {new.sentence.checka}

+{ empty$

+    'skip$

+    'new.sentence

+  if$

+}

+FUNCTION {new.sentence.checkb}

+{ empty$

+  swap$ empty$

+  and

+    'skip$

+    'new.sentence

+  if$

+}

+FUNCTION {field.or.null}

+{ duplicate$ empty$

+    { pop$ "" }

+    'skip$

+  if$

+}

+FUNCTION {emphasize}

+{ skip$ }

+FUNCTION {tie.or.space.prefix}

+{ duplicate$ text.length$ #3 <

+    { "~" }

+    { " " }

+  if$

+  swap$

+}

+FUNCTION {titto.space.prefix} %  always introduce a space

+{ duplicate$ text.length$ #3 <

+    { " " }

+    { " " }

+  if$

+  swap$

+}

+

+

+FUNCTION {capitalize}

+{ "u" change.case$ "t" change.case$ }

+

+FUNCTION {space.word}

+{ " " swap$ * " " * }

+ % Here are the language-specific definitions for explicit words.

+ % Each function has a name bbl.xxx where xxx is the English word.

+ % The language selected here is ENGLISH

+FUNCTION {bbl.and}

+{ "and"}

+

+FUNCTION {bbl.etal}

+{ "et~al." }

+

+FUNCTION {bbl.editors}

+{ "eds." }

+

+FUNCTION {bbl.editor}

+{ "ed." }

+

+FUNCTION {bbl.edby}

+{ "edited by" }

+

+FUNCTION {bbl.edition}

+{ "edn." }

+

+FUNCTION {bbl.volume}

+{ "vol." }

+

+FUNCTION {titto.bbl.volume} % for handling journals

+{ "" }

+

+FUNCTION {bbl.of}

+{ "of" }

+

+FUNCTION {bbl.number}

+{ "no." }

+

+FUNCTION {bbl.nr}

+{ "no." }

+

+FUNCTION {bbl.in}

+{ "in" }

+

+FUNCTION {bbl.pages}

+{ "pp." }

+

+FUNCTION {bbl.page}

+{ "p." }

+

+FUNCTION {titto.bbl.pages} % for journals

+{ "" }

+

+FUNCTION {titto.bbl.page}  % for journals

+{ "" }

+

+FUNCTION {bbl.chapter}

+{ "chap." }

+

+FUNCTION {bbl.techrep}

+{ "Tech. Rep." }

+

+FUNCTION {bbl.mthesis}

+{ "Master's thesis" }

+

+FUNCTION {bbl.phdthesis}

+{ "Ph.D. thesis" }

+

+MACRO {jan} {"Jan."}

+

+MACRO {feb} {"Feb."}

+

+MACRO {mar} {"Mar."}

+

+MACRO {apr} {"Apr."}

+

+MACRO {may} {"May"}

+

+MACRO {jun} {"Jun."}

+

+MACRO {jul} {"Jul."}

+

+MACRO {aug} {"Aug."}

+

+MACRO {sep} {"Sep."}

+

+MACRO {oct} {"Oct."}

+

+MACRO {nov} {"Nov."}

+

+MACRO {dec} {"Dec."}

+

+MACRO {acmcs} {"ACM Comput. Surv."}

+

+MACRO {acta} {"Acta Inf."}

+

+MACRO {cacm} {"Commun. ACM"}

+

+MACRO {ibmjrd} {"IBM J. Res. Dev."}

+

+MACRO {ibmsj} {"IBM Syst.~J."}

+

+MACRO {ieeese} {"IEEE Trans. Software Eng."}

+

+MACRO {ieeetc} {"IEEE Trans. Comput."}

+

+MACRO {ieeetcad}

+ {"IEEE Trans. Comput. Aid. Des."}

+

+MACRO {ipl} {"Inf. Process. Lett."}

+

+MACRO {jacm} {"J.~ACM"}

+

+MACRO {jcss} {"J.~Comput. Syst. Sci."}

+

+MACRO {scp} {"Sci. Comput. Program."}

+

+MACRO {sicomp} {"SIAM J. Comput."}

+

+MACRO {tocs} {"ACM Trans. Comput. Syst."}

+

+MACRO {tods} {"ACM Trans. Database Syst."}

+

+MACRO {tog} {"ACM Trans. Graphic."}

+

+MACRO {toms} {"ACM Trans. Math. Software"}

+

+MACRO {toois} {"ACM Trans. Office Inf. Syst."}

+

+MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."}

+

+MACRO {tcs} {"Theor. Comput. Sci."}

+

+FUNCTION {bibinfo.check}

+{ swap$

+  duplicate$ missing$

+    {

+      pop$ pop$

+      ""

+    }

+    { duplicate$ empty$

+        {

+          swap$ pop$

+        }

+        { swap$

+          pop$

+        }

+      if$

+    }

+  if$

+}

+FUNCTION {bibinfo.warn}

+{ swap$

+  duplicate$ missing$

+    {

+      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$

+      ""

+    }

+    { duplicate$ empty$

+        {

+          swap$ "empty " swap$ * " in " * cite$ * warning$

+        }

+        { swap$

+          pop$

+        }

+      if$

+    }

+  if$

+}

+FUNCTION {format.url}

+{ url empty$

+    { "" }

+%    { "\urlprefix\url{" url * "}" * }

+    { "\url{" url * "}" * }  % changed in titto-lncs-02.bst

+  if$

+}

+

+INTEGERS { nameptr namesleft numnames }

+

+

+STRINGS  { bibinfo}

+

+FUNCTION {format.names}

+{ 'bibinfo :=

+  duplicate$ empty$ 'skip$ {

+  's :=

+  "" 't :=

+  #1 'nameptr :=

+  s num.names$ 'numnames :=

+  numnames 'namesleft :=

+    { namesleft #0 > }

+    { s nameptr

+      "{vv~}{ll}{, jj}{, f{.}.}"

+      format.name$

+      bibinfo bibinfo.check

+      't :=

+      nameptr #1 >

+        {

+          namesleft #1 >

+            { ", " * t * }

+            {

+              s nameptr "{ll}" format.name$ duplicate$ "others" =

+                { 't := }

+                { pop$ }

+              if$

+              "," *

+              t "others" =

+                {

+                  " " * bbl.etal *

+                }

+                { " " * t * }

+              if$

+            }

+          if$

+        }

+        't

+      if$

+      nameptr #1 + 'nameptr :=

+      namesleft #1 - 'namesleft :=

+    }

+  while$

+  } if$

+}

+FUNCTION {format.names.ed}

+{

+  'bibinfo :=

+  duplicate$ empty$ 'skip$ {

+  's :=

+  "" 't :=

+  #1 'nameptr :=

+  s num.names$ 'numnames :=

+  numnames 'namesleft :=

+    { namesleft #0 > }

+    { s nameptr

+      "{f{.}.~}{vv~}{ll}{ jj}"

+      format.name$

+      bibinfo bibinfo.check

+      't :=

+      nameptr #1 >

+        {

+          namesleft #1 >

+            { ", " * t * }

+            {

+              s nameptr "{ll}" format.name$ duplicate$ "others" =

+                { 't := }

+                { pop$ }

+              if$

+              "," *

+              t "others" =

+                {

+

+                  " " * bbl.etal *

+                }

+                { " " * t * }

+              if$

+            }

+          if$

+        }

+        't

+      if$

+      nameptr #1 + 'nameptr :=

+      namesleft #1 - 'namesleft :=

+    }

+  while$

+  } if$

+}

+FUNCTION {format.authors}

+{ author "author" format.names

+}

+FUNCTION {get.bbl.editor}

+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }

+

+FUNCTION {format.editors}

+{ editor "editor" format.names duplicate$ empty$ 'skip$

+    {

+      " " *

+      get.bbl.editor

+%      capitalize

+   "(" swap$ * ")" *

+      *

+    }

+  if$

+}

+FUNCTION {format.note}

+{

+ note empty$

+    { "" }

+    { note #1 #1 substring$

+      duplicate$ "{" =

+        'skip$

+        { output.state mid.sentence =

+          { "l" }

+          { "u" }

+        if$

+        change.case$

+        }

+      if$

+      note #2 global.max$ substring$ * "note" bibinfo.check

+    }

+  if$

+}

+

+FUNCTION {format.title}

+{ title

+  duplicate$ empty$ 'skip$

+    { "t" change.case$ }

+  if$

+  "title" bibinfo.check

+}

+FUNCTION {output.bibitem}

+{ newline$

+  "\bibitem{" write$

+  cite$ write$

+  "}" write$

+  newline$

+  ""

+  before.all 'output.state :=

+}

+

+FUNCTION {n.dashify}

+{

+  't :=

+  ""

+    { t empty$ not }

+    { t #1 #1 substring$ "-" =

+        { t #1 #2 substring$ "--" = not

+            { "--" *

+              t #2 global.max$ substring$ 't :=

+            }

+            {   { t #1 #1 substring$ "-" = }

+                { "-" *

+                  t #2 global.max$ substring$ 't :=

+                }

+              while$

+            }

+          if$

+        }

+        { t #1 #1 substring$ *

+          t #2 global.max$ substring$ 't :=

+        }

+      if$

+    }

+  while$

+}

+

+FUNCTION {word.in}

+{ bbl.in capitalize

+  ":" *

+  " " * }

+

+FUNCTION {format.date}

+{

+  month "month" bibinfo.check

+  duplicate$ empty$

+  year  "year"  bibinfo.check duplicate$ empty$

+    { swap$ 'skip$

+        { "there's a month but no year in " cite$ * warning$ }

+      if$

+      *

+    }

+    { swap$ 'skip$

+        {

+          swap$

+          " " * swap$

+        }

+      if$

+      *

+      remove.dots

+    }

+  if$

+  duplicate$ empty$

+    'skip$

+    {

+      before.all 'output.state :=

+    " (" swap$ * ")" *

+    }

+  if$

+}

+FUNCTION {format.btitle}

+{ title "title" bibinfo.check

+  duplicate$ empty$ 'skip$

+    {

+    }

+  if$

+}

+FUNCTION {either.or.check}

+{ empty$

+    'pop$

+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }

+  if$

+}

+FUNCTION {format.bvolume}

+{ volume empty$

+    { "" }

+    { bbl.volume volume tie.or.space.prefix

+      "volume" bibinfo.check * *

+      series "series" bibinfo.check

+      duplicate$ empty$ 'pop$

+        { emphasize ", " * swap$ * }

+      if$

+      "volume and number" number either.or.check

+    }

+  if$

+}

+FUNCTION {format.number.series}

+{ volume empty$

+    { number empty$

+        { series field.or.null }

+        { output.state mid.sentence =

+            { bbl.number }

+            { bbl.number capitalize }

+          if$

+          number tie.or.space.prefix "number" bibinfo.check * *

+          series empty$

+            { "there's a number but no series in " cite$ * warning$ }

+            { bbl.in space.word *

+              series "series" bibinfo.check *

+            }

+          if$

+        }

+      if$

+    }

+    { "" }

+  if$

+}

+

+FUNCTION {format.edition}

+{ edition duplicate$ empty$ 'skip$

+    {

+      output.state mid.sentence =

+        { "l" }

+        { "t" }

+      if$ change.case$

+      "edition" bibinfo.check

+      " " * bbl.edition *

+    }

+  if$

+}

+INTEGERS { multiresult }

+FUNCTION {multi.page.check}

+{ 't :=

+  #0 'multiresult :=

+    { multiresult not

+      t empty$ not

+      and

+    }

+    { t #1 #1 substring$

+      duplicate$ "-" =

+      swap$ duplicate$ "," =

+      swap$ "+" =

+      or or

+        { #1 'multiresult := }

+        { t #2 global.max$ substring$ 't := }

+      if$

+    }

+  while$

+  multiresult

+}

+FUNCTION {format.pages}

+{ pages duplicate$ empty$ 'skip$

+    { duplicate$ multi.page.check

+        {

+          bbl.pages swap$

+          n.dashify

+        }

+        {

+          bbl.page swap$

+        }

+      if$

+      tie.or.space.prefix

+      "pages" bibinfo.check

+      * *

+    }

+  if$

+}

+FUNCTION {format.journal.pages}

+{ pages duplicate$ empty$ 'pop$

+    { swap$ duplicate$ empty$

+        { pop$ pop$ format.pages }

+        {

+          ", " *

+          swap$

+          n.dashify

+          pages multi.page.check

+            'titto.bbl.pages

+            'titto.bbl.page

+          if$

+          swap$ tie.or.space.prefix

+          "pages" bibinfo.check

+          * *

+          *

+        }

+      if$

+    }

+  if$

+}

+FUNCTION {format.journal.eid}

+{ eid "eid" bibinfo.check

+  duplicate$ empty$ 'pop$

+    { swap$ duplicate$ empty$ 'skip$

+      {

+          ", " *

+      }

+      if$

+      swap$ *

+    }

+  if$

+}

+FUNCTION {format.vol.num.pages} % this function is used only for journal entries

+{ volume field.or.null

+  duplicate$ empty$ 'skip$

+    {

+%     bbl.volume swap$ tie.or.space.prefix

+      titto.bbl.volume swap$ titto.space.prefix

+%             rationale for the change above: for journals you don't want "vol." label

+%             hence it does not make sense to attach the journal number to the label when

+%             it is short

+      "volume" bibinfo.check

+      * *

+    }

+  if$

+  number "number" bibinfo.check duplicate$ empty$ 'skip$

+    {

+      swap$ duplicate$ empty$

+        { "there's a number but no volume in " cite$ * warning$ }

+        'skip$

+      if$

+      swap$

+      "(" swap$ * ")" *

+    }

+  if$ *

+  eid empty$

+    { format.journal.pages }

+    { format.journal.eid }

+  if$

+}

+

+FUNCTION {format.chapter.pages}

+{ chapter empty$

+    'format.pages

+    { type empty$

+        { bbl.chapter }

+        { type "l" change.case$

+          "type" bibinfo.check

+        }

+      if$

+      chapter tie.or.space.prefix

+      "chapter" bibinfo.check

+      * *

+      pages empty$

+        'skip$

+        { ", " * format.pages * }

+      if$

+    }

+  if$

+}

+

+FUNCTION {format.booktitle}

+{

+  booktitle "booktitle" bibinfo.check

+}

+FUNCTION {format.in.ed.booktitle}

+{ format.booktitle duplicate$ empty$ 'skip$

+    {

+%     editor "editor" format.names.ed duplicate$ empty$ 'pop$ % changed by titto

+      editor "editor" format.names duplicate$ empty$ 'pop$

+        {

+          " " *

+          get.bbl.editor

+%          capitalize

+          "(" swap$ * ") " *

+          * swap$

+          * }

+      if$

+      word.in swap$ *

+    }

+  if$

+}

+FUNCTION {empty.misc.check}

+{ author empty$ title empty$ howpublished empty$

+  month empty$ year empty$ note empty$

+  and and and and and

+  key empty$ not and

+    { "all relevant fields are empty in " cite$ * warning$ }

+    'skip$

+  if$

+}

+FUNCTION {format.thesis.type}

+{ type duplicate$ empty$

+    'pop$

+    { swap$ pop$

+      "t" change.case$ "type" bibinfo.check

+    }

+  if$

+}

+FUNCTION {format.tr.number}

+{ number "number" bibinfo.check

+  type duplicate$ empty$

+    { pop$ bbl.techrep }

+    'skip$

+  if$

+  "type" bibinfo.check

+  swap$ duplicate$ empty$

+    { pop$ "t" change.case$ }

+    { tie.or.space.prefix * * }

+  if$

+}

+FUNCTION {format.article.crossref}

+{

+  key duplicate$ empty$

+    { pop$

+      journal duplicate$ empty$

+        { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }

+        { "journal" bibinfo.check emphasize word.in swap$ * }

+      if$

+    }

+    { word.in swap$ * " " *}

+  if$

+  " \cite{" * crossref * "}" *

+}

+FUNCTION {format.crossref.editor}

+{ editor #1 "{vv~}{ll}" format.name$

+  "editor" bibinfo.check

+  editor num.names$ duplicate$

+  #2 >

+    { pop$

+      "editor" bibinfo.check

+      " " * bbl.etal

+      *

+    }

+    { #2 <

+        'skip$

+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =

+            {

+              "editor" bibinfo.check

+              " " * bbl.etal

+              *

+            }

+            {

+             bbl.and space.word

+              * editor #2 "{vv~}{ll}" format.name$

+              "editor" bibinfo.check

+              *

+            }

+          if$

+        }

+      if$

+    }

+  if$

+}

+FUNCTION {format.book.crossref}

+{ volume duplicate$ empty$

+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$

+      pop$ word.in

+    }

+    { bbl.volume

+      capitalize

+      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *

+    }

+  if$

+  editor empty$

+  editor field.or.null author field.or.null =

+  or

+    { key empty$

+        { series empty$

+            { "need editor, key, or series for " cite$ * " to crossref " *

+              crossref * warning$

+              "" *

+            }

+            { series emphasize * }

+          if$

+        }

+        { key * }

+      if$

+    }

+    { format.crossref.editor * }

+  if$

+  " \cite{" * crossref * "}" *

+}

+FUNCTION {format.incoll.inproc.crossref}

+{

+  editor empty$

+  editor field.or.null author field.or.null =

+  or

+    { key empty$

+        { format.booktitle duplicate$ empty$

+            { "need editor, key, or booktitle for " cite$ * " to crossref " *

+              crossref * warning$

+            }

+            { word.in swap$ * }

+          if$

+        }

+        { word.in key * " " *}

+      if$

+    }

+    { word.in format.crossref.editor * " " *}

+  if$

+  " \cite{" * crossref * "}" *

+}

+FUNCTION {format.org.or.pub}

+{ 't :=

+  ""

+  address empty$ t empty$ and

+    'skip$

+    {

+      t empty$

+        { address "address" bibinfo.check *

+        }

+        { t *

+          address empty$

+            'skip$

+            { ", " * address "address" bibinfo.check * }

+          if$

+        }

+      if$

+    }

+  if$

+}

+FUNCTION {format.publisher.address}

+{ publisher "publisher" bibinfo.warn format.org.or.pub

+}

+

+FUNCTION {format.organization.address}

+{ organization "organization" bibinfo.check format.org.or.pub

+}

+

+FUNCTION {article}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.title "title" output.check

+  new.block

+  crossref missing$

+    {

+      journal

+      "journal" bibinfo.check

+      "journal" output.check

+      add.blank

+      format.vol.num.pages output

+      format.date "year" output.check

+    }

+    { format.article.crossref output.nonnull

+      format.pages output

+    }

+  if$

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+FUNCTION {book}

+{ output.bibitem

+  author empty$

+    { format.editors "author and editor" output.check

+      add.colon

+    }

+    { format.authors output.nonnull

+      add.colon

+      crossref missing$

+        { "author and editor" editor either.or.check }

+        'skip$

+      if$

+    }

+  if$

+  new.block

+  format.btitle "title" output.check

+  crossref missing$

+    { format.bvolume output

+      new.block

+      new.sentence

+      format.number.series output

+      format.publisher.address output

+    }

+    {

+      new.block

+      format.book.crossref output.nonnull

+    }

+  if$

+  format.edition output

+  format.date "year" output.check

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+FUNCTION {booklet}

+{ output.bibitem

+  format.authors output

+  add.colon

+  new.block

+  format.title "title" output.check

+  new.block

+  howpublished "howpublished" bibinfo.check output

+  address "address" bibinfo.check output

+  format.date output

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {inbook}

+{ output.bibitem

+  author empty$

+    { format.editors "author and editor" output.check

+      add.colon

+    }

+    { format.authors output.nonnull

+      add.colon

+      crossref missing$

+        { "author and editor" editor either.or.check }

+        'skip$

+      if$

+    }

+  if$

+  new.block

+  format.btitle "title" output.check

+  crossref missing$

+    {

+      format.bvolume output

+      format.chapter.pages "chapter and pages" output.check

+      new.block

+      new.sentence

+      format.number.series output

+      format.publisher.address output

+    }

+    {

+      format.chapter.pages "chapter and pages" output.check

+      new.block

+      format.book.crossref output.nonnull

+    }

+  if$

+  format.edition output

+  format.date "year" output.check

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {incollection}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.title "title" output.check

+  new.block

+  crossref missing$

+    { format.in.ed.booktitle "booktitle" output.check

+      format.bvolume output

+      format.chapter.pages output

+      new.sentence

+      format.number.series output

+      format.publisher.address output

+      format.edition output

+      format.date "year" output.check

+    }

+    { format.incoll.inproc.crossref output.nonnull

+      format.chapter.pages output

+    }

+  if$

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+FUNCTION {inproceedings}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.title "title" output.check

+  new.block

+  crossref missing$

+    { format.in.ed.booktitle "booktitle" output.check

+      new.sentence % added by titto

+      format.bvolume output

+      format.pages output

+      new.sentence

+      format.number.series output

+      publisher empty$

+        { format.organization.address output }

+        { organization "organization" bibinfo.check output

+          format.publisher.address output

+        }

+      if$

+      format.date "year" output.check

+    }

+    { format.incoll.inproc.crossref output.nonnull

+      format.pages output

+    }

+  if$

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+FUNCTION {conference} { inproceedings }

+FUNCTION {manual}

+{ output.bibitem

+  author empty$

+    { organization "organization" bibinfo.check

+      duplicate$ empty$ 'pop$

+        { output

+          address "address" bibinfo.check output

+        }

+      if$

+    }

+    { format.authors output.nonnull }

+  if$

+  add.colon

+  new.block

+  format.btitle "title" output.check

+  author empty$

+    { organization empty$

+        {

+          address new.block.checka

+          address "address" bibinfo.check output

+        }

+        'skip$

+      if$

+    }

+    {

+      organization address new.block.checkb

+      organization "organization" bibinfo.check output

+      address "address" bibinfo.check output

+    }

+  if$

+  format.edition output

+  format.date output

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {mastersthesis}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.btitle

+  "title" output.check

+  new.block

+  bbl.mthesis format.thesis.type output.nonnull

+  school "school" bibinfo.warn output

+  address "address" bibinfo.check output

+  format.date "year" output.check

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {misc}

+{ output.bibitem

+  format.authors output

+  add.colon

+  title howpublished new.block.checkb

+  format.title output

+  howpublished new.block.checka

+  howpublished "howpublished" bibinfo.check output

+  format.date output

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+  empty.misc.check

+}

+FUNCTION {phdthesis}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.btitle

+  "title" output.check

+  new.block

+  bbl.phdthesis format.thesis.type output.nonnull

+  school "school" bibinfo.warn output

+  address "address" bibinfo.check output

+  format.date "year" output.check

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {proceedings}

+{ output.bibitem

+  editor empty$

+    { organization "organization" bibinfo.check output

+    }

+    { format.editors output.nonnull }

+  if$

+  add.colon

+  new.block

+  format.btitle "title" output.check

+  format.bvolume output

+  editor empty$

+    { publisher empty$

+        {  format.number.series output }

+        {

+          new.sentence

+          format.number.series output

+          format.publisher.address output

+        }

+      if$

+    }

+    { publisher empty$

+        {

+          new.sentence

+          format.number.series output

+          format.organization.address output }

+        {

+          new.sentence

+          format.number.series output

+          organization "organization" bibinfo.check output

+          format.publisher.address output

+        }

+      if$

+     }

+  if$

+      format.date "year" output.check

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {techreport}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.title

+  "title" output.check

+  new.block

+  format.tr.number output.nonnull

+  institution "institution" bibinfo.warn output

+  address "address" bibinfo.check output

+  format.date "year" output.check

+%  new.block

+  format.url output

+%  new.block

+  format.note output

+  fin.entry

+}

+

+FUNCTION {unpublished}

+{ output.bibitem

+  format.authors "author" output.check

+  add.colon

+  new.block

+  format.title "title" output.check

+  format.date output

+%  new.block

+  format.url output

+%  new.block

+  format.note "note" output.check

+  fin.entry

+}

+

+FUNCTION {default.type} { misc }

+READ

+FUNCTION {sortify}

+{ purify$

+  "l" change.case$

+}

+INTEGERS { len }

+FUNCTION {chop.word}

+{ 's :=

+  'len :=

+  s #1 len substring$ =

+    { s len #1 + global.max$ substring$ }

+    's

+  if$

+}

+FUNCTION {sort.format.names}

+{ 's :=

+  #1 'nameptr :=

+  ""

+  s num.names$ 'numnames :=

+  numnames 'namesleft :=

+    { namesleft #0 > }

+    { s nameptr

+      "{ll{ }}{  ff{ }}{  jj{ }}"

+      format.name$ 't :=

+      nameptr #1 >

+        {

+          "   "  *

+          namesleft #1 = t "others" = and

+            { "zzzzz" * }

+            { t sortify * }

+          if$

+        }

+        { t sortify * }

+      if$

+      nameptr #1 + 'nameptr :=

+      namesleft #1 - 'namesleft :=

+    }

+  while$

+}

+

+FUNCTION {sort.format.title}

+{ 't :=

+  "A " #2

+    "An " #3

+      "The " #4 t chop.word

+    chop.word

+  chop.word

+  sortify

+  #1 global.max$ substring$

+}

+FUNCTION {author.sort}

+{ author empty$

+    { key empty$

+        { "to sort, need author or key in " cite$ * warning$

+          ""

+        }

+        { key sortify }

+      if$

+    }

+    { author sort.format.names }

+  if$

+}

+FUNCTION {author.editor.sort}

+{ author empty$

+    { editor empty$

+        { key empty$

+            { "to sort, need author, editor, or key in " cite$ * warning$

+              ""

+            }

+            { key sortify }

+          if$

+        }

+        { editor sort.format.names }

+      if$

+    }

+    { author sort.format.names }

+  if$

+}

+FUNCTION {author.organization.sort}

+{ author empty$

+    { organization empty$

+        { key empty$

+            { "to sort, need author, organization, or key in " cite$ * warning$

+              ""

+            }

+            { key sortify }

+          if$

+        }

+        { "The " #4 organization chop.word sortify }

+      if$

+    }

+    { author sort.format.names }

+  if$

+}

+FUNCTION {editor.organization.sort}

+{ editor empty$

+    { organization empty$

+        { key empty$

+            { "to sort, need editor, organization, or key in " cite$ * warning$

+              ""

+            }

+            { key sortify }

+          if$

+        }

+        { "The " #4 organization chop.word sortify }

+      if$

+    }

+    { editor sort.format.names }

+  if$

+}

+FUNCTION {presort}

+{ type$ "book" =

+  type$ "inbook" =

+  or

+    'author.editor.sort

+    { type$ "proceedings" =

+        'editor.organization.sort

+        { type$ "manual" =

+            'author.organization.sort

+            'author.sort

+          if$

+        }

+      if$

+    }

+  if$

+  "    "

+  *

+  year field.or.null sortify

+  *

+  "    "

+  *

+  title field.or.null

+  sort.format.title

+  *

+  #1 entry.max$ substring$

+  'sort.key$ :=

+}

+ITERATE {presort}

+SORT

+STRINGS { longest.label }

+INTEGERS { number.label longest.label.width }

+FUNCTION {initialize.longest.label}

+{ "" 'longest.label :=

+  #1 'number.label :=

+  #0 'longest.label.width :=

+}

+FUNCTION {longest.label.pass}

+{ number.label int.to.str$ 'label :=

+  number.label #1 + 'number.label :=

+  label width$ longest.label.width >

+    { label 'longest.label :=

+      label width$ 'longest.label.width :=

+    }

+    'skip$

+  if$

+}

+EXECUTE {initialize.longest.label}

+ITERATE {longest.label.pass}

+FUNCTION {begin.bib}

+{ preamble$ empty$

+    'skip$

+    { preamble$ write$ newline$ }

+  if$

+  "\begin{thebibliography}{"  longest.label  * "}" *

+  write$ newline$

+  "\providecommand{\url}[1]{\texttt{#1}}"

+  write$ newline$

+  "\providecommand{\urlprefix}{URL }"

+  write$ newline$

+}

+EXECUTE {begin.bib}

+EXECUTE {init.state.consts}

+ITERATE {call.type$}

+FUNCTION {end.bib}

+{ newline$

+  "\end{thebibliography}" write$ newline$

+}

+EXECUTE {end.bib}

+%% End of customized bst file

+%%

+%% End of file `titto.bst'.

+

+