[ocl] - Updating papers models
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore b/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore
index 01f70d9..db0df88 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore
+++ b/ocl/docs/publications/OCL2015CS2AS/models/AS.ecore
@@ -1,52 +1,52 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="oclAS">

-  <eClassifiers xsi:type="ecore:EClass" name="LetExp" eSuperTypes="#//OclExpression">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="in" lowerBound="1" eType="#//OclExpression"

-        containment="true"/>

-    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"

-        eType="#//Variable" containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="Variable" eSuperTypes="#//TypedElement">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="initExpression" eType="#//OclExpression"

-        containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="OclExpression" abstract="true" eSuperTypes="#//TypedElement"/>

-  <eClassifiers xsi:type="ecore:EClass" name="VariableExp" eSuperTypes="#//OclExpression">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="referredVariable" lowerBound="1"

-        eType="#//Variable"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionRange" eSuperTypes="#//OclExpression #//CollectionLiteralPart">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpression"

-        containment="true"/>

-    <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpression"

-        containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionItem" eSuperTypes="#//CollectionLiteralPart">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="item" lowerBound="1" eType="#//OclExpression"

-        containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPart" abstract="true"

-      eSuperTypes="#//TypedElement"/>

-  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//OclExpression">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpression"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">

-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//String"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" eSuperTypes="#//NamedElement">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="PropertyCallExp" eSuperTypes="#//OclExpression">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="referredProperty" lowerBound="1"

-        eType="#//Property"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="Property">

-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExp">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"

-        eType="#//CollectionLiteralPart" containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EDataType" name="String"/>

-</ecore:EPackage>

+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="oclAS">
+  <eClassifiers xsi:type="ecore:EClass" name="LetExp" eSuperTypes="#//OclExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="in" lowerBound="1" eType="#//OclExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"
+        eType="#//Variable" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Variable" eSuperTypes="#//TypedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initExpression" eType="#//OclExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OclExpression" abstract="true" eSuperTypes="#//TypedElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableExp" eSuperTypes="#//OclExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredVariable" lowerBound="1"
+        eType="#//Variable"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionRange" eSuperTypes="#//OclExpression #//CollectionLiteralPart">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpression"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionItem" eSuperTypes="#//CollectionLiteralPart">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="item" lowerBound="1" eType="#//OclExpression"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPart" abstract="true"
+      eSuperTypes="#//TypedElement"/>
+  <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true" eSuperTypes="#//OclExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpression"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NamedElement" abstract="true">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//String"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TypedElement" abstract="true" eSuperTypes="#//NamedElement">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//Type"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PropertyCallExp" eSuperTypes="#//OclExpression">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="referredProperty" lowerBound="1"
+        eType="#//Property"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Property" eSuperTypes="#//TypedElement">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExp">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
+        eType="#//CollectionLiteralPart" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="String"/>
+</ecore:EPackage>
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore b/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore
index 002b0c2..d6277d8 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore
+++ b/ocl/docs/publications/OCL2015CS2AS/models/CS.ecore
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="oclCS" nsURI="xx" nsPrefix="xx">

-  <eClassifiers xsi:type="ecore:EClass" name="LetExpCS" eSuperTypes="#//OclExpressionCS">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="inExpression" lowerBound="1"

-        eType="#//OclExpressionCS" containment="true"/>

-    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"

-        eType="#//VariableDeclarationCS" containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="VariableDeclarationCS">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="initExp" eType="#//OclExpressionCS"

-        containment="true"/>

-    <eStructuralFeatures xsi:type="ecore:EReference" name="varType" eType="#//TypeCS"

-        containment="true"/>

-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="VariableExpCS" eSuperTypes="#//OclExpressionCS">

-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionRangeCS" eSuperTypes="#//CollectionLiteralPartCS">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpressionCS"

-        containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="OclExpressionCS" abstract="true"/>

-  <eClassifiers xsi:type="ecore:EClass" name="TypeCS" eSuperTypes="#//OclExpressionCS">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpressionCS"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPartCS">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpressionCS"

-        containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="EClass0"/>

-  <eClassifiers xsi:type="ecore:EClass" name="NameExpCS">

-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="#//String"/>

-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMarkedAsPre" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExpCS" eSuperTypes="#//OclExpressionCS">

-    <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"

-        eType="#//CollectionLiteralPartCS" containment="true"/>

-  </eClassifiers>

-  <eClassifiers xsi:type="ecore:EDataType" name="String"/>

-</ecore:EPackage>

+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="oclCS" nsURI="xx" nsPrefix="xx">
+  <eClassifiers xsi:type="ecore:EClass" name="LetExpCS" eSuperTypes="#//OclExpressionCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inExpression" lowerBound="1"
+        eType="#//OclExpressionCS" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="variable" lowerBound="1"
+        eType="#//VariableDeclarationCS" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableDeclarationCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initExp" eType="#//OclExpressionCS"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="varType" eType="#//TypeCS"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="VariableExpCS" eSuperTypes="#//OclExpressionCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="varName" eType="#//String"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionRangeCS" eSuperTypes="#//CollectionLiteralPartCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="last" lowerBound="1" eType="#//OclExpressionCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OclExpressionCS" abstract="true"/>
+  <eClassifiers xsi:type="ecore:EClass" name="TypeCS" eSuperTypes="#//OclExpressionCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="EReference0" eType="#//OclExpressionCS"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPartCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="first" lowerBound="1" eType="#//OclExpressionCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="EClass0"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NameExpCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isMarkedAsPre" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExpCS" eSuperTypes="#//OclExpressionCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
+        eType="#//CollectionLiteralPartCS" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EDataType" name="String"/>
+</ecore:EPackage>
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl b/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl
index 14a46da..7c2a246 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl
+++ b/ocl/docs/publications/OCL2015CS2AS/models/CS2AS.ocl
@@ -9,7 +9,7 @@
 def :ast() :  oclAS::Type =
 	null
 	
-context ExpCS
+context OclExpressionCS
 def :ast() : oclAS::OclExpression =
 	null
 
@@ -67,7 +67,7 @@
 def : ast() : oclAS::OclExpression =
   if isAVariableExp() 
   then
-    let variable = ast().lookupVariable(self)
+    let variable = ast().lookupVariable(name)
     in oclAS::VariableExp {
         name = name,
         referredVariable = variable,
@@ -77,7 +77,7 @@
                endif
     }
   else 
-    let property = ast().lookupProperty(self)
+    let property = ast().lookupProperty(name)
     in oclAS::PropertyCallExp {
         name = name,
         referredProperty = property,
@@ -88,6 +88,7 @@
     }
   endif	
 
+
 endpackage
 
 package oclAS
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl b/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl
index 2f50eb4..4d176fa 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl
+++ b/ocl/docs/publications/OCL2015CS2AS/models/Disambiguation.ocl
@@ -2,11 +2,19 @@
 import 'AS.ecore'
 import 'Lookup.ocl'
 
+
+package oclCS
+context NameExpCS
+def : ast() : oclAS::OclExpression =
+	null
+
+endpackage
+
 package oclCS
 
 context NameExpCS
 def : isAVariableExp() : Boolean =
-	let variable = ast().lookupVariable(self)
+	let variable = ast().lookupVariable(name)
 	in variable <> null
 
 endpackage
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/Environment.ecore b/ocl/docs/publications/OCL2015CS2AS/models/Environment.ecore
new file mode 100644
index 0000000..c95ff45
--- /dev/null
+++ b/ocl/docs/publications/OCL2015CS2AS/models/Environment.ecore
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="env" nsURI="http://env">
+  <eClassifiers xsi:type="ecore:EClass" name="Environment"/>
+</ecore:EPackage>
diff --git a/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl b/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl
index f739e95..d5e7922 100644
--- a/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl
+++ b/ocl/docs/publications/OCL2015CS2AS/models/Lookup.ocl
@@ -1,6 +1,45 @@
 import 'CS.ecore'
 import 'AS.ecore'
+import 'Environment.ecore'
+
+package env
+context Environment
+def : nestedEnv() : Environment =
+	null 
+	
+def : addElement(element : OclAny) : Environment =
+	null
+endpackage
+
+package ocl
+context OclElement
+
+def : env : env::Environment = 
+  if oclContainer() <> null
+  then oclContainer().childEnv(self)
+  else env::Environment{}
+  endif
+
+def : childEnv(child : OclAny) : env::Environment =
+  env
+  
+  
+endpackage
 
 package oclAS
+context LetExp
+def : childEnv(child : OclAny) : env::Environment =
+  if child = variable
+  then env
+  else env.nestedEnv().addElement(variable)
+  endif
+
+
+context OclExpression
+def : lookupVariable(name : String ) : Variable =
+	null
+
+def : lookupProperty(name : String ) : Property =
+	null
 	
 endpackage
\ No newline at end of file
diff --git a/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf b/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf
index 5462b87..24b8d30 100644
--- a/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf
+++ b/ocl/docs/publications/OCL2015CS2AS/ow2015.pdf
Binary files differ
diff --git a/ocl/docs/publications/OCL2015CS2AS/ow2015.tex b/ocl/docs/publications/OCL2015CS2AS/ow2015.tex
index 40c7812..b48c2c2 100644
--- a/ocl/docs/publications/OCL2015CS2AS/ow2015.tex
+++ b/ocl/docs/publications/OCL2015CS2AS/ow2015.tex
@@ -417,7 +417,7 @@
 
 \begin{lstlisting}[caption=Name resolution producers, label=lst:exampleNameResodesc, language=OCL]  
 context OclAny
-def : env : env::Environment 
+def : env : env::Environment = 
   if oclContainer() <> null
   then oclContainer().childEnv(self)
   else env::Environment{}
@@ -627,8 +627,8 @@
 def : ast() : ocl::OclExpression =
   if isAVariableExp() 
   then
-    let variable = ast().lookupVariable(self)
-    in oclAS::VariableExp {
+    let variable = ast().lookupVariable(name)
+    in ocl::VariableExp {
         name = name,
         referredVariable = variable,
         type = if variable = null
@@ -637,8 +637,8 @@
                endif
     }
   else 
-    let property = ast().lookupProperty(self)
-    in oclAS::PropertyCallExp {
+    let property = ast().lookupProperty(name)
+    in ocl::PropertyCallExp {
         name = name,
         referredProperty = property,
         type = if property = null
@@ -654,7 +654,7 @@
 \begin{lstlisting}[caption=NameExpCS disambigutation rule, label=lst:nameExpDisambiguationRule, language=OCL]
 context NameExpCS
 def : isAVariableExp() : Boolean =
-	let variable =  ast().lookupVariable(self),
+	let variable = ast().lookupVariable(name)
 	in variable <> null
 \end{lstlisting}
 
@@ -741,7 +741,7 @@
 \begin{itemize}
 \item \textbf{Mapping}. An OCL operation hierarchy maps CS artifacts to the AS.
 \item \textbf{Name Resolution}. An OCL operation hierarchy flows the visible names down to the point of access.
-\item \textbf{Disambiguation}. Unified CS elements, plus CS disambiguation rules, avoid the need for semantic resolution within a syntactic parser.
+i\item \textbf{Disambiguation}. Unified CS artifacts, plus CS disambiguation rules, avoid the need for semantic resolution within a syntactic parser.
 \end{itemize}
 
 Our bridge is currently ready-to-go; it works on test examples. It will now be applied to replace manual tooling in Eclipse OCL and QVT by tooling generated direct from the potential OCL 2.5 specification models.