[352950] Eliminate Real to Integer cast

but breaks two implicit collect tests 
diff --git a/examples/org.eclipse.ocl.examples.library/gen-src/org/eclipse/ocl/examples/library/oclstdlib/OCLstdlib.java b/examples/org.eclipse.ocl.examples.library/gen-src/org/eclipse/ocl/examples/library/oclstdlib/OCLstdlib.java
index 96a7d0f..22f7758 100644
--- a/examples/org.eclipse.ocl.examples.library/gen-src/org/eclipse/ocl/examples/library/oclstdlib/OCLstdlib.java
+++ b/examples/org.eclipse.ocl.examples.library/gen-src/org/eclipse/ocl/examples/library/oclstdlib/OCLstdlib.java
@@ -277,14 +277,14 @@
 		PrimitiveType symbol_123 = PivotFactory.eINSTANCE.createPrimitiveType(); // Integer
 		
 		PrimitiveType symbol_124 = PivotFactory.eINSTANCE.createPrimitiveType(); // Real
-		TemplateSignature symbol_125 = PivotFactory.eINSTANCE.createTemplateSignature(); // Real!oclAsType{TT}($ocl!Classifier[TT])!
-		TypeTemplateParameter symbol_126 = PivotFactory.eINSTANCE.createTypeTemplateParameter();
-		Class symbol_127 = PivotFactory.eINSTANCE.createClass(); // Real!oclAsType{TT}($ocl!Classifier[TT])?TT
 		
+		PrimitiveType symbol_125 = PivotFactory.eINSTANCE.createPrimitiveType(); // String
 		
-		PrimitiveType symbol_128 = PivotFactory.eINSTANCE.createPrimitiveType(); // String
+		PrimitiveType symbol_126 = PivotFactory.eINSTANCE.createPrimitiveType(); // UnlimitedNatural
+		TemplateSignature symbol_127 = PivotFactory.eINSTANCE.createTemplateSignature(); // UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])!
+		TypeTemplateParameter symbol_128 = PivotFactory.eINSTANCE.createTypeTemplateParameter();
+		Class symbol_129 = PivotFactory.eINSTANCE.createClass(); // UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])?TT
 		
-		PrimitiveType symbol_129 = PivotFactory.eINSTANCE.createPrimitiveType(); // UnlimitedNatural
 		
 		Package symbol_130 = PivotFactory.eINSTANCE.createPackage(); // $$
 		Class symbol_131 = PivotFactory.eINSTANCE.createClass(); // $$!$$
@@ -311,7 +311,7 @@
 		
 		ClassifierType symbol_142 = PivotFactory.eINSTANCE.createClassifierType(); // $ocl!Classifier[$ocl!OclSelf]
 		
-		ClassifierType symbol_143 = PivotFactory.eINSTANCE.createClassifierType(); // $ocl!Classifier[Real!oclAsType{TT}($ocl!Classifier[TT])?TT]
+		ClassifierType symbol_143 = PivotFactory.eINSTANCE.createClassifierType(); // $ocl!Classifier[UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])?TT]
 		
 		CollectionType symbol_144 = PivotFactory.eINSTANCE.createCollectionType(); // $ocl!Collection[$ocl!Bag{T}!flatten{T2}()?T2]
 		
@@ -1061,11 +1061,11 @@
 			symbol_305.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_306 = PivotFactory.eINSTANCE.createParameter();
-			symbol_306.setName("i");
+			symbol_306.setName("j");
 			symbol_306.setType(symbol_32);  // $ocl!Collection{T}?T
 			symbol_305.getOwnedIterators().add(symbol_306);
 			Parameter symbol_307 = PivotFactory.eINSTANCE.createParameter();
-			symbol_307.setName("j");
+			symbol_307.setName("i");
 			symbol_307.setType(symbol_32);  // $ocl!Collection{T}?T
 			symbol_305.getOwnedIterators().add(symbol_307);
 			Parameter symbol_308 = PivotFactory.eINSTANCE.createParameter();
@@ -1773,7 +1773,7 @@
 			Operation symbol_385 = PivotFactory.eINSTANCE.createOperation();
 			symbol_385.setName("toString");
 			//symbol_385.setMoniker("$ocl!OclInvalid!toString()");
-			symbol_385.setType(symbol_128);  // String
+			symbol_385.setType(symbol_125);  // String
 			
 			symbol_385.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
 			symbol_385.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
@@ -1988,7 +1988,7 @@
 			Operation symbol_405 = PivotFactory.eINSTANCE.createOperation();
 			symbol_405.setName("toString");
 			//symbol_405.setMoniker("$ocl!OclVoid!toString()");
-			symbol_405.setType(symbol_128);  // String
+			symbol_405.setType(symbol_125);  // String
 			
 			symbol_405.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
 			symbol_405.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
@@ -2151,8 +2151,8 @@
 		symbol_97.getOwnedParameters().add(symbol_98);
 		
 		symbol_96.setOwnedTemplateSignature(symbol_97);
-		symbol_96.getSuperClasses().add(symbol_228); // $ocl!UniqueCollection[$ocl!OrderedSet{T}?T]
 		symbol_96.getSuperClasses().add(symbol_195); // $ocl!OrderedCollection[$ocl!OrderedSet{T}?T]
+		symbol_96.getSuperClasses().add(symbol_228); // $ocl!UniqueCollection[$ocl!OrderedSet{T}?T]
 		{	// ocl::OrderedSet::-() $ocl!OrderedSet{T}!-($ocl!Set[$ocl!OclAny])
 			Operation symbol_422 = PivotFactory.eINSTANCE.createOperation();
 			symbol_422.setName("-");
@@ -3020,7 +3020,7 @@
 			Operation symbol_522 = PivotFactory.eINSTANCE.createOperation();
 			symbol_522.setName("toString");
 			//symbol_522.setMoniker("Boolean!toString()");
-			symbol_522.setType(symbol_128);  // String
+			symbol_522.setType(symbol_125);  // String
 			
 			symbol_522.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
 			symbol_522.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
@@ -3207,7 +3207,7 @@
 			Operation symbol_543 = PivotFactory.eINSTANCE.createOperation();
 			symbol_543.setName("toString");
 			//symbol_543.setMoniker("Integer!toString()");
-			symbol_543.setType(symbol_128);  // String
+			symbol_543.setType(symbol_125);  // String
 			
 			symbol_543.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
 			symbol_543.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
@@ -3453,367 +3453,367 @@
 			symbol_569.setImplementation(org.eclipse.ocl.examples.library.numeric.NumericMinOperation.INSTANCE);
 			symbol_124.getOwnedOperations().add(symbol_569);
 		}
-		{	// ocl::Real::oclAsType() Real!oclAsType{TT}($ocl!Classifier[TT])
+		{	// ocl::Real::round() Real!round()
 			Operation symbol_571 = PivotFactory.eINSTANCE.createOperation();
-			symbol_127.setName("TT");
-			symbol_126.setOwnedParameteredElement(symbol_127);
-			symbol_125.getOwnedParameters().add(symbol_126);
+			symbol_571.setName("round");
+			//symbol_571.setMoniker("Real!round()");
+			symbol_571.setType(symbol_123);  // Integer
 			
-			symbol_571.setOwnedTemplateSignature(symbol_125);
-			symbol_571.setName("oclAsType");
-			//symbol_571.setMoniker("Real!oclAsType{TT}($ocl!Classifier[TT])");
-			symbol_571.setType(symbol_127);  // Real!oclAsType{TT}($ocl!Classifier[TT])?TT
-			
-			Parameter symbol_572 = PivotFactory.eINSTANCE.createParameter();
-			symbol_572.setName("type");
-			//symbol_572.setMoniker("Real!oclAsType{TT}($ocl!Classifier[TT])!type");
-			symbol_572.setType(symbol_143);  // $ocl!Classifier[Real!oclAsType{TT}($ocl!Classifier[TT])?TT]
-			
-			symbol_571.getOwnedParameters().add(symbol_572);
-			symbol_571.setImplementationClass("org.eclipse.ocl.examples.library.numeric.NumericOclAsTypeOperation");
-			symbol_571.setImplementation(org.eclipse.ocl.examples.library.numeric.NumericOclAsTypeOperation.INSTANCE);
+			symbol_571.setImplementationClass("org.eclipse.ocl.examples.library.numeric.NumericRoundOperation");
+			symbol_571.setImplementation(org.eclipse.ocl.examples.library.numeric.NumericRoundOperation.INSTANCE);
 			symbol_124.getOwnedOperations().add(symbol_571);
 		}
-		{	// ocl::Real::round() Real!round()
-			Operation symbol_573 = PivotFactory.eINSTANCE.createOperation();
-			symbol_573.setName("round");
-			//symbol_573.setMoniker("Real!round()");
-			symbol_573.setType(symbol_123);  // Integer
-			
-			symbol_573.setImplementationClass("org.eclipse.ocl.examples.library.numeric.NumericRoundOperation");
-			symbol_573.setImplementation(org.eclipse.ocl.examples.library.numeric.NumericRoundOperation.INSTANCE);
-			symbol_124.getOwnedOperations().add(symbol_573);
-		}
 		{	// ocl::Real::toString() Real!toString()
-			Operation symbol_574 = PivotFactory.eINSTANCE.createOperation();
-			symbol_574.setName("toString");
-			//symbol_574.setMoniker("Real!toString()");
-			symbol_574.setType(symbol_128);  // String
+			Operation symbol_572 = PivotFactory.eINSTANCE.createOperation();
+			symbol_572.setName("toString");
+			//symbol_572.setMoniker("Real!toString()");
+			symbol_572.setType(symbol_125);  // String
 			
-			symbol_574.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
-			symbol_574.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
-			symbol_124.getOwnedOperations().add(symbol_574);
+			symbol_572.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
+			symbol_572.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
+			symbol_124.getOwnedOperations().add(symbol_572);
 		}
 		symbol_1.getOwnedTypes().add(symbol_124);
 		//
 		// ocl::String String
 		//
-		symbol_128.setName("String");
-		//symbol_128.setMoniker("String");
-		symbol_128.getSuperClasses().add(symbol_69); // $ocl!OclAny
+		symbol_125.setName("String");
+		//symbol_125.setMoniker("String");
+		symbol_125.getSuperClasses().add(symbol_69); // $ocl!OclAny
 		{	// ocl::String::+() String!+(String)
+			Operation symbol_573 = PivotFactory.eINSTANCE.createOperation();
+			symbol_573.setName("+");
+			//symbol_573.setMoniker("String!+(String)");
+			symbol_573.setType(symbol_125);  // String
+			
+			Parameter symbol_574 = PivotFactory.eINSTANCE.createParameter();
+			symbol_574.setName("s");
+			//symbol_574.setMoniker("String!+(String)!s");
+			symbol_574.setType(symbol_125);  // String
+			
+			symbol_573.getOwnedParameters().add(symbol_574);
+			symbol_573.setPrecedence(symbol_5);
+			symbol_573.setImplementationClass("org.eclipse.ocl.examples.library.string.StringConcatOperation");
+			symbol_573.setImplementation(org.eclipse.ocl.examples.library.string.StringConcatOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_573);
+		}
+		{	// ocl::String::<() String!<($ocl!OclSelf)
 			Operation symbol_575 = PivotFactory.eINSTANCE.createOperation();
-			symbol_575.setName("+");
-			//symbol_575.setMoniker("String!+(String)");
-			symbol_575.setType(symbol_128);  // String
+			symbol_575.setName("<");
+			//symbol_575.setMoniker("String!<($ocl!OclSelf)");
+			symbol_575.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_576 = PivotFactory.eINSTANCE.createParameter();
 			symbol_576.setName("s");
-			//symbol_576.setMoniker("String!+(String)!s");
-			symbol_576.setType(symbol_128);  // String
+			//symbol_576.setMoniker("String!<($ocl!OclSelf)!s");
+			symbol_576.setType(symbol_82);  // $ocl!OclSelf
 			
 			symbol_575.getOwnedParameters().add(symbol_576);
-			symbol_575.setPrecedence(symbol_5);
-			symbol_575.setImplementationClass("org.eclipse.ocl.examples.library.string.StringConcatOperation");
-			symbol_575.setImplementation(org.eclipse.ocl.examples.library.string.StringConcatOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_575);
+			symbol_575.setPrecedence(symbol_6);
+			symbol_575.setImplementationClass("org.eclipse.ocl.examples.library.string.StringLessThanOperation");
+			symbol_575.setImplementation(org.eclipse.ocl.examples.library.string.StringLessThanOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_575);
 		}
-		{	// ocl::String::<() String!<($ocl!OclSelf)
+		{	// ocl::String::<=() String!<=($ocl!OclSelf)
 			Operation symbol_577 = PivotFactory.eINSTANCE.createOperation();
-			symbol_577.setName("<");
-			//symbol_577.setMoniker("String!<($ocl!OclSelf)");
+			symbol_577.setName("<=");
+			//symbol_577.setMoniker("String!<=($ocl!OclSelf)");
 			symbol_577.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_578 = PivotFactory.eINSTANCE.createParameter();
 			symbol_578.setName("s");
-			//symbol_578.setMoniker("String!<($ocl!OclSelf)!s");
+			//symbol_578.setMoniker("String!<=($ocl!OclSelf)!s");
 			symbol_578.setType(symbol_82);  // $ocl!OclSelf
 			
 			symbol_577.getOwnedParameters().add(symbol_578);
 			symbol_577.setPrecedence(symbol_6);
-			symbol_577.setImplementationClass("org.eclipse.ocl.examples.library.string.StringLessThanOperation");
-			symbol_577.setImplementation(org.eclipse.ocl.examples.library.string.StringLessThanOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_577);
+			symbol_577.setImplementationClass("org.eclipse.ocl.examples.library.string.StringLessThanEqualOperation");
+			symbol_577.setImplementation(org.eclipse.ocl.examples.library.string.StringLessThanEqualOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_577);
 		}
-		{	// ocl::String::<=() String!<=($ocl!OclSelf)
+		{	// ocl::String::<>() String!<>($ocl!OclSelf)
 			Operation symbol_579 = PivotFactory.eINSTANCE.createOperation();
-			symbol_579.setName("<=");
-			//symbol_579.setMoniker("String!<=($ocl!OclSelf)");
+			symbol_579.setName("<>");
+			//symbol_579.setMoniker("String!<>($ocl!OclSelf)");
 			symbol_579.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_580 = PivotFactory.eINSTANCE.createParameter();
-			symbol_580.setName("s");
-			//symbol_580.setMoniker("String!<=($ocl!OclSelf)!s");
+			symbol_580.setName("object2");
+			//symbol_580.setMoniker("String!<>($ocl!OclSelf)!object2");
 			symbol_580.setType(symbol_82);  // $ocl!OclSelf
 			
 			symbol_579.getOwnedParameters().add(symbol_580);
-			symbol_579.setPrecedence(symbol_6);
-			symbol_579.setImplementationClass("org.eclipse.ocl.examples.library.string.StringLessThanEqualOperation");
-			symbol_579.setImplementation(org.eclipse.ocl.examples.library.string.StringLessThanEqualOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_579);
+			symbol_579.setPrecedence(symbol_7);
+			symbol_579.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyNotEqualOperation");
+			symbol_579.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyNotEqualOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_579);
 		}
-		{	// ocl::String::<>() String!<>($ocl!OclSelf)
+		{	// ocl::String::=() String!=($ocl!OclSelf)
 			Operation symbol_581 = PivotFactory.eINSTANCE.createOperation();
-			symbol_581.setName("<>");
-			//symbol_581.setMoniker("String!<>($ocl!OclSelf)");
+			symbol_581.setName("=");
+			//symbol_581.setMoniker("String!=($ocl!OclSelf)");
 			symbol_581.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_582 = PivotFactory.eINSTANCE.createParameter();
 			symbol_582.setName("object2");
-			//symbol_582.setMoniker("String!<>($ocl!OclSelf)!object2");
+			//symbol_582.setMoniker("String!=($ocl!OclSelf)!object2");
 			symbol_582.setType(symbol_82);  // $ocl!OclSelf
 			
 			symbol_581.getOwnedParameters().add(symbol_582);
 			symbol_581.setPrecedence(symbol_7);
-			symbol_581.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyNotEqualOperation");
-			symbol_581.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyNotEqualOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_581);
+			symbol_581.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyEqualOperation");
+			symbol_581.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyEqualOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_581);
 		}
-		{	// ocl::String::=() String!=($ocl!OclSelf)
+		{	// ocl::String::>() String!>($ocl!OclSelf)
 			Operation symbol_583 = PivotFactory.eINSTANCE.createOperation();
-			symbol_583.setName("=");
-			//symbol_583.setMoniker("String!=($ocl!OclSelf)");
+			symbol_583.setName(">");
+			//symbol_583.setMoniker("String!>($ocl!OclSelf)");
 			symbol_583.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_584 = PivotFactory.eINSTANCE.createParameter();
-			symbol_584.setName("object2");
-			//symbol_584.setMoniker("String!=($ocl!OclSelf)!object2");
+			symbol_584.setName("s");
+			//symbol_584.setMoniker("String!>($ocl!OclSelf)!s");
 			symbol_584.setType(symbol_82);  // $ocl!OclSelf
 			
 			symbol_583.getOwnedParameters().add(symbol_584);
-			symbol_583.setPrecedence(symbol_7);
-			symbol_583.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyEqualOperation");
-			symbol_583.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyEqualOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_583);
+			symbol_583.setPrecedence(symbol_6);
+			symbol_583.setImplementationClass("org.eclipse.ocl.examples.library.string.StringGreaterThanOperation");
+			symbol_583.setImplementation(org.eclipse.ocl.examples.library.string.StringGreaterThanOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_583);
 		}
-		{	// ocl::String::>() String!>($ocl!OclSelf)
+		{	// ocl::String::>=() String!>=($ocl!OclSelf)
 			Operation symbol_585 = PivotFactory.eINSTANCE.createOperation();
-			symbol_585.setName(">");
-			//symbol_585.setMoniker("String!>($ocl!OclSelf)");
+			symbol_585.setName(">=");
+			//symbol_585.setMoniker("String!>=($ocl!OclSelf)");
 			symbol_585.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_586 = PivotFactory.eINSTANCE.createParameter();
 			symbol_586.setName("s");
-			//symbol_586.setMoniker("String!>($ocl!OclSelf)!s");
+			//symbol_586.setMoniker("String!>=($ocl!OclSelf)!s");
 			symbol_586.setType(symbol_82);  // $ocl!OclSelf
 			
 			symbol_585.getOwnedParameters().add(symbol_586);
 			symbol_585.setPrecedence(symbol_6);
-			symbol_585.setImplementationClass("org.eclipse.ocl.examples.library.string.StringGreaterThanOperation");
-			symbol_585.setImplementation(org.eclipse.ocl.examples.library.string.StringGreaterThanOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_585);
-		}
-		{	// ocl::String::>=() String!>=($ocl!OclSelf)
-			Operation symbol_587 = PivotFactory.eINSTANCE.createOperation();
-			symbol_587.setName(">=");
-			//symbol_587.setMoniker("String!>=($ocl!OclSelf)");
-			symbol_587.setType(symbol_122);  // Boolean
-			
-			Parameter symbol_588 = PivotFactory.eINSTANCE.createParameter();
-			symbol_588.setName("s");
-			//symbol_588.setMoniker("String!>=($ocl!OclSelf)!s");
-			symbol_588.setType(symbol_82);  // $ocl!OclSelf
-			
-			symbol_587.getOwnedParameters().add(symbol_588);
-			symbol_587.setPrecedence(symbol_6);
-			symbol_587.setImplementationClass("org.eclipse.ocl.examples.library.string.StringGreaterThanEqualOperation");
-			symbol_587.setImplementation(org.eclipse.ocl.examples.library.string.StringGreaterThanEqualOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_587);
+			symbol_585.setImplementationClass("org.eclipse.ocl.examples.library.string.StringGreaterThanEqualOperation");
+			symbol_585.setImplementation(org.eclipse.ocl.examples.library.string.StringGreaterThanEqualOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_585);
 		}
 		{	// ocl::String::at() String!at(Integer)
-			Operation symbol_589 = PivotFactory.eINSTANCE.createOperation();
-			symbol_589.setName("at");
-			//symbol_589.setMoniker("String!at(Integer)");
-			symbol_589.setType(symbol_128);  // String
+			Operation symbol_587 = PivotFactory.eINSTANCE.createOperation();
+			symbol_587.setName("at");
+			//symbol_587.setMoniker("String!at(Integer)");
+			symbol_587.setType(symbol_125);  // String
 			
-			Parameter symbol_590 = PivotFactory.eINSTANCE.createParameter();
-			symbol_590.setName("i");
-			//symbol_590.setMoniker("String!at(Integer)!i");
-			symbol_590.setType(symbol_123);  // Integer
+			Parameter symbol_588 = PivotFactory.eINSTANCE.createParameter();
+			symbol_588.setName("i");
+			//symbol_588.setMoniker("String!at(Integer)!i");
+			symbol_588.setType(symbol_123);  // Integer
 			
-			symbol_589.getOwnedParameters().add(symbol_590);
-			symbol_589.setImplementationClass("org.eclipse.ocl.examples.library.string.StringAtOperation");
-			symbol_589.setImplementation(org.eclipse.ocl.examples.library.string.StringAtOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_589);
+			symbol_587.getOwnedParameters().add(symbol_588);
+			symbol_587.setImplementationClass("org.eclipse.ocl.examples.library.string.StringAtOperation");
+			symbol_587.setImplementation(org.eclipse.ocl.examples.library.string.StringAtOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_587);
 		}
 		{	// ocl::String::characters() String!characters()
-			Operation symbol_591 = PivotFactory.eINSTANCE.createOperation();
-			symbol_591.setName("characters");
-			//symbol_591.setMoniker("String!characters()");
-			symbol_591.setType(symbol_211);  // $ocl!Sequence[String]
+			Operation symbol_589 = PivotFactory.eINSTANCE.createOperation();
+			symbol_589.setName("characters");
+			//symbol_589.setMoniker("String!characters()");
+			symbol_589.setType(symbol_211);  // $ocl!Sequence[String]
 			
-			symbol_591.setImplementationClass("org.eclipse.ocl.examples.library.string.StringCharactersOperation");
-			symbol_591.setImplementation(org.eclipse.ocl.examples.library.string.StringCharactersOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_591);
+			symbol_589.setImplementationClass("org.eclipse.ocl.examples.library.string.StringCharactersOperation");
+			symbol_589.setImplementation(org.eclipse.ocl.examples.library.string.StringCharactersOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_589);
 		}
 		{	// ocl::String::concat() String!concat(String)
+			Operation symbol_590 = PivotFactory.eINSTANCE.createOperation();
+			symbol_590.setName("concat");
+			//symbol_590.setMoniker("String!concat(String)");
+			symbol_590.setType(symbol_125);  // String
+			
+			Parameter symbol_591 = PivotFactory.eINSTANCE.createParameter();
+			symbol_591.setName("s");
+			//symbol_591.setMoniker("String!concat(String)!s");
+			symbol_591.setType(symbol_125);  // String
+			
+			symbol_590.getOwnedParameters().add(symbol_591);
+			symbol_590.setImplementationClass("org.eclipse.ocl.examples.library.string.StringConcatOperation");
+			symbol_590.setImplementation(org.eclipse.ocl.examples.library.string.StringConcatOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_590);
+		}
+		{	// ocl::String::equalsIgnoreCase() String!equalsIgnoreCase(String)
 			Operation symbol_592 = PivotFactory.eINSTANCE.createOperation();
-			symbol_592.setName("concat");
-			//symbol_592.setMoniker("String!concat(String)");
-			symbol_592.setType(symbol_128);  // String
+			symbol_592.setName("equalsIgnoreCase");
+			//symbol_592.setMoniker("String!equalsIgnoreCase(String)");
+			symbol_592.setType(symbol_122);  // Boolean
 			
 			Parameter symbol_593 = PivotFactory.eINSTANCE.createParameter();
 			symbol_593.setName("s");
-			//symbol_593.setMoniker("String!concat(String)!s");
-			symbol_593.setType(symbol_128);  // String
+			//symbol_593.setMoniker("String!equalsIgnoreCase(String)!s");
+			symbol_593.setType(symbol_125);  // String
 			
 			symbol_592.getOwnedParameters().add(symbol_593);
-			symbol_592.setImplementationClass("org.eclipse.ocl.examples.library.string.StringConcatOperation");
-			symbol_592.setImplementation(org.eclipse.ocl.examples.library.string.StringConcatOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_592);
+			symbol_592.setImplementationClass("org.eclipse.ocl.examples.library.string.StringEqualsIgnoreCaseOperation");
+			symbol_592.setImplementation(org.eclipse.ocl.examples.library.string.StringEqualsIgnoreCaseOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_592);
 		}
-		{	// ocl::String::equalsIgnoreCase() String!equalsIgnoreCase(String)
+		{	// ocl::String::indexOf() String!indexOf(String)
 			Operation symbol_594 = PivotFactory.eINSTANCE.createOperation();
-			symbol_594.setName("equalsIgnoreCase");
-			//symbol_594.setMoniker("String!equalsIgnoreCase(String)");
-			symbol_594.setType(symbol_122);  // Boolean
+			symbol_594.setName("indexOf");
+			//symbol_594.setMoniker("String!indexOf(String)");
+			symbol_594.setType(symbol_123);  // Integer
 			
 			Parameter symbol_595 = PivotFactory.eINSTANCE.createParameter();
 			symbol_595.setName("s");
-			//symbol_595.setMoniker("String!equalsIgnoreCase(String)!s");
-			symbol_595.setType(symbol_128);  // String
+			//symbol_595.setMoniker("String!indexOf(String)!s");
+			symbol_595.setType(symbol_125);  // String
 			
 			symbol_594.getOwnedParameters().add(symbol_595);
-			symbol_594.setImplementationClass("org.eclipse.ocl.examples.library.string.StringEqualsIgnoreCaseOperation");
-			symbol_594.setImplementation(org.eclipse.ocl.examples.library.string.StringEqualsIgnoreCaseOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_594);
-		}
-		{	// ocl::String::indexOf() String!indexOf(String)
-			Operation symbol_596 = PivotFactory.eINSTANCE.createOperation();
-			symbol_596.setName("indexOf");
-			//symbol_596.setMoniker("String!indexOf(String)");
-			symbol_596.setType(symbol_123);  // Integer
-			
-			Parameter symbol_597 = PivotFactory.eINSTANCE.createParameter();
-			symbol_597.setName("s");
-			//symbol_597.setMoniker("String!indexOf(String)!s");
-			symbol_597.setType(symbol_128);  // String
-			
-			symbol_596.getOwnedParameters().add(symbol_597);
-			symbol_596.setImplementationClass("org.eclipse.ocl.examples.library.string.StringIndexOfOperation");
-			symbol_596.setImplementation(org.eclipse.ocl.examples.library.string.StringIndexOfOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_596);
+			symbol_594.setImplementationClass("org.eclipse.ocl.examples.library.string.StringIndexOfOperation");
+			symbol_594.setImplementation(org.eclipse.ocl.examples.library.string.StringIndexOfOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_594);
 		}
 		{	// ocl::String::size() String!size()
-			Operation symbol_598 = PivotFactory.eINSTANCE.createOperation();
-			symbol_598.setName("size");
-			//symbol_598.setMoniker("String!size()");
-			symbol_598.setType(symbol_123);  // Integer
+			Operation symbol_596 = PivotFactory.eINSTANCE.createOperation();
+			symbol_596.setName("size");
+			//symbol_596.setMoniker("String!size()");
+			symbol_596.setType(symbol_123);  // Integer
 			
-			symbol_598.setImplementationClass("org.eclipse.ocl.examples.library.string.StringSizeOperation");
-			symbol_598.setImplementation(org.eclipse.ocl.examples.library.string.StringSizeOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_598);
+			symbol_596.setImplementationClass("org.eclipse.ocl.examples.library.string.StringSizeOperation");
+			symbol_596.setImplementation(org.eclipse.ocl.examples.library.string.StringSizeOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_596);
 		}
 		{	// ocl::String::substring() String!substring(Integer,Integer)
-			Operation symbol_599 = PivotFactory.eINSTANCE.createOperation();
-			symbol_599.setName("substring");
-			//symbol_599.setMoniker("String!substring(Integer,Integer)");
-			symbol_599.setType(symbol_128);  // String
+			Operation symbol_597 = PivotFactory.eINSTANCE.createOperation();
+			symbol_597.setName("substring");
+			//symbol_597.setMoniker("String!substring(Integer,Integer)");
+			symbol_597.setType(symbol_125);  // String
 			
-			Parameter symbol_600 = PivotFactory.eINSTANCE.createParameter();
-			symbol_600.setName("lower");
-			//symbol_600.setMoniker("String!substring(Integer,Integer)!lower");
-			symbol_600.setType(symbol_123);  // Integer
+			Parameter symbol_598 = PivotFactory.eINSTANCE.createParameter();
+			symbol_598.setName("lower");
+			//symbol_598.setMoniker("String!substring(Integer,Integer)!lower");
+			symbol_598.setType(symbol_123);  // Integer
 			
-			symbol_599.getOwnedParameters().add(symbol_600);
-			Parameter symbol_601 = PivotFactory.eINSTANCE.createParameter();
-			symbol_601.setName("upper");
-			//symbol_601.setMoniker("String!substring(Integer,Integer)!upper");
-			symbol_601.setType(symbol_123);  // Integer
+			symbol_597.getOwnedParameters().add(symbol_598);
+			Parameter symbol_599 = PivotFactory.eINSTANCE.createParameter();
+			symbol_599.setName("upper");
+			//symbol_599.setMoniker("String!substring(Integer,Integer)!upper");
+			symbol_599.setType(symbol_123);  // Integer
 			
-			symbol_599.getOwnedParameters().add(symbol_601);
-			symbol_599.setImplementationClass("org.eclipse.ocl.examples.library.string.StringSubstringOperation");
-			symbol_599.setImplementation(org.eclipse.ocl.examples.library.string.StringSubstringOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_599);
+			symbol_597.getOwnedParameters().add(symbol_599);
+			symbol_597.setImplementationClass("org.eclipse.ocl.examples.library.string.StringSubstringOperation");
+			symbol_597.setImplementation(org.eclipse.ocl.examples.library.string.StringSubstringOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_597);
 		}
 		{	// ocl::String::toBoolean() String!toBoolean()
-			Operation symbol_602 = PivotFactory.eINSTANCE.createOperation();
-			symbol_602.setName("toBoolean");
-			//symbol_602.setMoniker("String!toBoolean()");
-			symbol_602.setType(symbol_122);  // Boolean
+			Operation symbol_600 = PivotFactory.eINSTANCE.createOperation();
+			symbol_600.setName("toBoolean");
+			//symbol_600.setMoniker("String!toBoolean()");
+			symbol_600.setType(symbol_122);  // Boolean
 			
-			symbol_602.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToBooleanOperation");
-			symbol_602.setImplementation(org.eclipse.ocl.examples.library.string.StringToBooleanOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_602);
+			symbol_600.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToBooleanOperation");
+			symbol_600.setImplementation(org.eclipse.ocl.examples.library.string.StringToBooleanOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_600);
 		}
 		{	// ocl::String::toInteger() String!toInteger()
-			Operation symbol_603 = PivotFactory.eINSTANCE.createOperation();
-			symbol_603.setName("toInteger");
-			//symbol_603.setMoniker("String!toInteger()");
-			symbol_603.setType(symbol_123);  // Integer
+			Operation symbol_601 = PivotFactory.eINSTANCE.createOperation();
+			symbol_601.setName("toInteger");
+			//symbol_601.setMoniker("String!toInteger()");
+			symbol_601.setType(symbol_123);  // Integer
 			
-			symbol_603.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToIntegerOperation");
-			symbol_603.setImplementation(org.eclipse.ocl.examples.library.string.StringToIntegerOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_603);
+			symbol_601.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToIntegerOperation");
+			symbol_601.setImplementation(org.eclipse.ocl.examples.library.string.StringToIntegerOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_601);
 		}
 		{	// ocl::String::toLower() String!toLower()
-			Operation symbol_604 = PivotFactory.eINSTANCE.createOperation();
-			symbol_604.setName("toLower");
-			//symbol_604.setMoniker("String!toLower()");
-			symbol_604.setType(symbol_128);  // String
+			Operation symbol_602 = PivotFactory.eINSTANCE.createOperation();
+			symbol_602.setName("toLower");
+			//symbol_602.setMoniker("String!toLower()");
+			symbol_602.setType(symbol_125);  // String
 			
-			symbol_604.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation");
-			symbol_604.setImplementation(org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_604);
+			symbol_602.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation");
+			symbol_602.setImplementation(org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_602);
 		}
 		{	// ocl::String::toLowerCase() String!toLowerCase()
-			Operation symbol_605 = PivotFactory.eINSTANCE.createOperation();
-			symbol_605.setName("toLowerCase");
-			//symbol_605.setMoniker("String!toLowerCase()");
-			symbol_605.setType(symbol_128);  // String
+			Operation symbol_603 = PivotFactory.eINSTANCE.createOperation();
+			symbol_603.setName("toLowerCase");
+			//symbol_603.setMoniker("String!toLowerCase()");
+			symbol_603.setType(symbol_125);  // String
 			
-			symbol_605.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation");
-			symbol_605.setImplementation(org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_605);
+			symbol_603.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation");
+			symbol_603.setImplementation(org.eclipse.ocl.examples.library.string.StringToLowerCaseOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_603);
 		}
 		{	// ocl::String::toReal() String!toReal()
-			Operation symbol_606 = PivotFactory.eINSTANCE.createOperation();
-			symbol_606.setName("toReal");
-			//symbol_606.setMoniker("String!toReal()");
-			symbol_606.setType(symbol_124);  // Real
+			Operation symbol_604 = PivotFactory.eINSTANCE.createOperation();
+			symbol_604.setName("toReal");
+			//symbol_604.setMoniker("String!toReal()");
+			symbol_604.setType(symbol_124);  // Real
 			
-			symbol_606.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToRealOperation");
-			symbol_606.setImplementation(org.eclipse.ocl.examples.library.string.StringToRealOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_606);
+			symbol_604.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToRealOperation");
+			symbol_604.setImplementation(org.eclipse.ocl.examples.library.string.StringToRealOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_604);
 		}
 		{	// ocl::String::toString() String!toString()
-			Operation symbol_607 = PivotFactory.eINSTANCE.createOperation();
-			symbol_607.setName("toString");
-			//symbol_607.setMoniker("String!toString()");
-			symbol_607.setType(symbol_128);  // String
+			Operation symbol_605 = PivotFactory.eINSTANCE.createOperation();
+			symbol_605.setName("toString");
+			//symbol_605.setMoniker("String!toString()");
+			symbol_605.setType(symbol_125);  // String
 			
-			symbol_607.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
-			symbol_607.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_607);
+			symbol_605.setImplementationClass("org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation");
+			symbol_605.setImplementation(org.eclipse.ocl.examples.library.oclany.OclAnyToStringOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_605);
 		}
 		{	// ocl::String::toUpper() String!toUpper()
-			Operation symbol_608 = PivotFactory.eINSTANCE.createOperation();
-			symbol_608.setName("toUpper");
-			//symbol_608.setMoniker("String!toUpper()");
-			symbol_608.setType(symbol_128);  // String
+			Operation symbol_606 = PivotFactory.eINSTANCE.createOperation();
+			symbol_606.setName("toUpper");
+			//symbol_606.setMoniker("String!toUpper()");
+			symbol_606.setType(symbol_125);  // String
 			
-			symbol_608.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation");
-			symbol_608.setImplementation(org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_608);
+			symbol_606.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation");
+			symbol_606.setImplementation(org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_606);
 		}
 		{	// ocl::String::toUpperCase() String!toUpperCase()
-			Operation symbol_609 = PivotFactory.eINSTANCE.createOperation();
-			symbol_609.setName("toUpperCase");
-			//symbol_609.setMoniker("String!toUpperCase()");
-			symbol_609.setType(symbol_128);  // String
+			Operation symbol_607 = PivotFactory.eINSTANCE.createOperation();
+			symbol_607.setName("toUpperCase");
+			//symbol_607.setMoniker("String!toUpperCase()");
+			symbol_607.setType(symbol_125);  // String
 			
-			symbol_609.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation");
-			symbol_609.setImplementation(org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation.INSTANCE);
-			symbol_128.getOwnedOperations().add(symbol_609);
+			symbol_607.setImplementationClass("org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation");
+			symbol_607.setImplementation(org.eclipse.ocl.examples.library.string.StringToUpperCaseOperation.INSTANCE);
+			symbol_125.getOwnedOperations().add(symbol_607);
 		}
-		symbol_1.getOwnedTypes().add(symbol_128);
+		symbol_1.getOwnedTypes().add(symbol_125);
 		//
 		// ocl::UnlimitedNatural UnlimitedNatural
 		//
-		symbol_129.setName("UnlimitedNatural");
-		//symbol_129.setMoniker("UnlimitedNatural");
-		symbol_129.getSuperClasses().add(symbol_123); // Integer
-		symbol_1.getOwnedTypes().add(symbol_129);
+		symbol_126.setName("UnlimitedNatural");
+		//symbol_126.setMoniker("UnlimitedNatural");
+		symbol_126.getSuperClasses().add(symbol_123); // Integer
+		{	// ocl::UnlimitedNatural::oclAsType() UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])
+			Operation symbol_608 = PivotFactory.eINSTANCE.createOperation();
+			symbol_129.setName("TT");
+			symbol_128.setOwnedParameteredElement(symbol_129);
+			symbol_127.getOwnedParameters().add(symbol_128);
+			
+			symbol_608.setOwnedTemplateSignature(symbol_127);
+			symbol_608.setName("oclAsType");
+			//symbol_608.setMoniker("UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])");
+			symbol_608.setType(symbol_129);  // UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])?TT
+			
+			Parameter symbol_609 = PivotFactory.eINSTANCE.createParameter();
+			symbol_609.setName("type");
+			//symbol_609.setMoniker("UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])!type");
+			symbol_609.setType(symbol_143);  // $ocl!Classifier[UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])?TT]
+			
+			symbol_608.getOwnedParameters().add(symbol_609);
+			symbol_608.setImplementationClass("org.eclipse.ocl.examples.library.numeric.UnlimitedNaturalOclAsTypeOperation");
+			symbol_608.setImplementation(org.eclipse.ocl.examples.library.numeric.UnlimitedNaturalOclAsTypeOperation.INSTANCE);
+			symbol_126.getOwnedOperations().add(symbol_608);
+		}
+		symbol_1.getOwnedTypes().add(symbol_126);
 		//
 		// ocl::$$
 		//
@@ -3885,8 +3885,8 @@
 			}
 			symbol_134.getTemplateBindings().add(symbol_614);
 		}
-		symbol_134.getSuperClasses().add(symbol_172); // $ocl!NonOrderedCollection[$ocl!Collection{T}?T]
 		symbol_134.getSuperClasses().add(symbol_182); // $ocl!NonUniqueCollection[$ocl!Collection{T}?T]
+		symbol_134.getSuperClasses().add(symbol_172); // $ocl!NonOrderedCollection[$ocl!Collection{T}?T]
 		symbol_130.getOwnedTypes().add(symbol_134);
 		//
 		// ocl::$$::Bag $ocl!Bag[$ocl!NonOrderedCollection{T}!collect{V}(T|Lambda~T()V)?V]
@@ -3927,8 +3927,8 @@
 			}
 			symbol_136.getTemplateBindings().add(symbol_618);
 		}
-		symbol_136.getSuperClasses().add(symbol_184); // $ocl!NonUniqueCollection[$ocl!NonOrderedCollection{T}?T]
 		symbol_136.getSuperClasses().add(symbol_55); // $ocl!NonOrderedCollection{T}
+		symbol_136.getSuperClasses().add(symbol_184); // $ocl!NonUniqueCollection[$ocl!NonOrderedCollection{T}?T]
 		symbol_130.getOwnedTypes().add(symbol_136);
 		//
 		// ocl::$$::Classifier $ocl!Classifier[$ocl!Classifier{T}!oclContainer{U}()?U]
@@ -4051,11 +4051,11 @@
 		symbol_142.getSuperClasses().add(symbol_69); // $ocl!OclAny
 		symbol_130.getOwnedTypes().add(symbol_142);
 		//
-		// ocl::$$::Classifier $ocl!Classifier[Real!oclAsType{TT}($ocl!Classifier[TT])?TT]
+		// ocl::$$::Classifier $ocl!Classifier[UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])?TT]
 		//
 		symbol_143.setName("Classifier");
-		//symbol_143.setMoniker("$ocl!Classifier[Real!oclAsType{TT}($ocl!Classifier[TT])?TT]");
-		symbol_143.setInstanceType(symbol_127);
+		//symbol_143.setMoniker("$ocl!Classifier[UnlimitedNatural!oclAsType{TT}($ocl!Classifier[TT])?TT]");
+		symbol_143.setInstanceType(symbol_129);
 		symbol_143.setUnspecializedElement(symbol_19);
 		{
 			TemplateBinding symbol_632 = PivotFactory.eINSTANCE.createTemplateBinding();
@@ -4063,7 +4063,7 @@
 			{
 				TemplateParameterSubstitution symbol_633 = PivotFactory.eINSTANCE.createTemplateParameterSubstitution();
 				symbol_633.setFormal(symbol_21);	
-				symbol_633.setActual(symbol_127);	
+				symbol_633.setActual(symbol_129);	
 				symbol_632.getParameterSubstitutions().add(symbol_633);
 			}
 			symbol_143.getTemplateBindings().add(symbol_632);
@@ -4535,7 +4535,7 @@
 		//
 		symbol_167.setName("Collection");
 		//symbol_167.setMoniker("$ocl!Collection[String]");
-		symbol_167.setElementType(symbol_128);
+		symbol_167.setElementType(symbol_125);
 		symbol_167.setUnspecializedElement(symbol_29);
 		{
 			TemplateBinding symbol_680 = PivotFactory.eINSTANCE.createTemplateBinding();
@@ -4543,7 +4543,7 @@
 			{
 				TemplateParameterSubstitution symbol_681 = PivotFactory.eINSTANCE.createTemplateParameterSubstitution();
 				symbol_681.setFormal(symbol_31);	
-				symbol_681.setActual(symbol_128);	
+				symbol_681.setActual(symbol_125);	
 				symbol_680.getParameterSubstitutions().add(symbol_681);
 			}
 			symbol_167.getTemplateBindings().add(symbol_680);
@@ -4975,7 +4975,7 @@
 		//
 		symbol_189.setName("NonUniqueCollection");
 		//symbol_189.setMoniker("$ocl!NonUniqueCollection[String]");
-		symbol_189.setElementType(symbol_128);
+		symbol_189.setElementType(symbol_125);
 		symbol_189.setUnspecializedElement(symbol_65);
 		{
 			TemplateBinding symbol_724 = PivotFactory.eINSTANCE.createTemplateBinding();
@@ -4983,7 +4983,7 @@
 			{
 				TemplateParameterSubstitution symbol_725 = PivotFactory.eINSTANCE.createTemplateParameterSubstitution();
 				symbol_725.setFormal(symbol_67);	
-				symbol_725.setActual(symbol_128);	
+				symbol_725.setActual(symbol_125);	
 				symbol_724.getParameterSubstitutions().add(symbol_725);
 			}
 			symbol_189.getTemplateBindings().add(symbol_724);
@@ -5175,7 +5175,7 @@
 		//
 		symbol_199.setName("OrderedCollection");
 		//symbol_199.setMoniker("$ocl!OrderedCollection[String]");
-		symbol_199.setElementType(symbol_128);
+		symbol_199.setElementType(symbol_125);
 		symbol_199.setUnspecializedElement(symbol_86);
 		{
 			TemplateBinding symbol_744 = PivotFactory.eINSTANCE.createTemplateBinding();
@@ -5183,7 +5183,7 @@
 			{
 				TemplateParameterSubstitution symbol_745 = PivotFactory.eINSTANCE.createTemplateParameterSubstitution();
 				symbol_745.setFormal(symbol_88);	
-				symbol_745.setActual(symbol_128);	
+				symbol_745.setActual(symbol_125);	
 				symbol_744.getParameterSubstitutions().add(symbol_745);
 			}
 			symbol_199.getTemplateBindings().add(symbol_744);
@@ -5208,8 +5208,8 @@
 			}
 			symbol_200.getTemplateBindings().add(symbol_746);
 		}
-		symbol_200.getSuperClasses().add(symbol_222); // $ocl!UniqueCollection[$ocl!Collection{T}?T]
 		symbol_200.getSuperClasses().add(symbol_190); // $ocl!OrderedCollection[$ocl!Collection{T}?T]
+		symbol_200.getSuperClasses().add(symbol_222); // $ocl!UniqueCollection[$ocl!Collection{T}?T]
 		symbol_130.getOwnedTypes().add(symbol_200);
 		//
 		// ocl::$$::OrderedSet $ocl!OrderedSet[$ocl!OrderedCollection{T}?T]
@@ -5250,8 +5250,8 @@
 			}
 			symbol_202.getTemplateBindings().add(symbol_750);
 		}
-		symbol_202.getSuperClasses().add(symbol_227); // $ocl!UniqueCollection[$ocl!OrderedSet{T}!flatten{T2}()?T2]
 		symbol_202.getSuperClasses().add(symbol_194); // $ocl!OrderedCollection[$ocl!OrderedSet{T}!flatten{T2}()?T2]
+		symbol_202.getSuperClasses().add(symbol_227); // $ocl!UniqueCollection[$ocl!OrderedSet{T}!flatten{T2}()?T2]
 		symbol_130.getOwnedTypes().add(symbol_202);
 		//
 		// ocl::$$::OrderedSet $ocl!OrderedSet[$ocl!OrderedSet{T}?T]
@@ -5271,8 +5271,8 @@
 			}
 			symbol_203.getTemplateBindings().add(symbol_752);
 		}
-		symbol_203.getSuperClasses().add(symbol_228); // $ocl!UniqueCollection[$ocl!OrderedSet{T}?T]
 		symbol_203.getSuperClasses().add(symbol_195); // $ocl!OrderedCollection[$ocl!OrderedSet{T}?T]
+		symbol_203.getSuperClasses().add(symbol_228); // $ocl!UniqueCollection[$ocl!OrderedSet{T}?T]
 		symbol_130.getOwnedTypes().add(symbol_203);
 		//
 		// ocl::$$::OrderedSet $ocl!OrderedSet[$ocl!UniqueCollection{T}?T]
@@ -5426,7 +5426,7 @@
 		//
 		symbol_211.setName("Sequence");
 		//symbol_211.setMoniker("$ocl!Sequence[String]");
-		symbol_211.setElementType(symbol_128);
+		symbol_211.setElementType(symbol_125);
 		symbol_211.setUnspecializedElement(symbol_103);
 		{
 			TemplateBinding symbol_768 = PivotFactory.eINSTANCE.createTemplateBinding();
@@ -5434,7 +5434,7 @@
 			{
 				TemplateParameterSubstitution symbol_769 = PivotFactory.eINSTANCE.createTemplateParameterSubstitution();
 				symbol_769.setFormal(symbol_105);	
-				symbol_769.setActual(symbol_128);	
+				symbol_769.setActual(symbol_125);	
 				symbol_768.getParameterSubstitutions().add(symbol_769);
 			}
 			symbol_211.getTemplateBindings().add(symbol_768);
@@ -5481,8 +5481,8 @@
 			}
 			symbol_213.getTemplateBindings().add(symbol_772);
 		}
-		symbol_213.getSuperClasses().add(symbol_172); // $ocl!NonOrderedCollection[$ocl!Collection{T}?T]
 		symbol_213.getSuperClasses().add(symbol_222); // $ocl!UniqueCollection[$ocl!Collection{T}?T]
+		symbol_213.getSuperClasses().add(symbol_172); // $ocl!NonOrderedCollection[$ocl!Collection{T}?T]
 		symbol_130.getOwnedTypes().add(symbol_213);
 		//
 		// ocl::$$::Set $ocl!Set[$ocl!NonOrderedCollection{T}?T]
@@ -5565,8 +5565,8 @@
 			}
 			symbol_217.getTemplateBindings().add(symbol_780);
 		}
-		symbol_217.getSuperClasses().add(symbol_228); // $ocl!UniqueCollection[$ocl!OrderedSet{T}?T]
 		symbol_217.getSuperClasses().add(symbol_176); // $ocl!NonOrderedCollection[$ocl!OrderedSet{T}?T]
+		symbol_217.getSuperClasses().add(symbol_228); // $ocl!UniqueCollection[$ocl!OrderedSet{T}?T]
 		symbol_130.getOwnedTypes().add(symbol_217);
 		//
 		// ocl::$$::Set $ocl!Set[$ocl!Set{T}!flatten{T2}()?T2]
@@ -5628,8 +5628,8 @@
 			}
 			symbol_220.getTemplateBindings().add(symbol_786);
 		}
-		symbol_220.getSuperClasses().add(symbol_231); // $ocl!UniqueCollection[Tuple{first:$ocl!Collection{T}?T,second:$ocl!Collection{T}!product{T2}($ocl!Collection[T2])?T2}]
 		symbol_220.getSuperClasses().add(symbol_179); // $ocl!NonOrderedCollection[Tuple{first:$ocl!Collection{T}?T,second:$ocl!Collection{T}!product{T2}($ocl!Collection[T2])?T2}]
+		symbol_220.getSuperClasses().add(symbol_231); // $ocl!UniqueCollection[Tuple{first:$ocl!Collection{T}?T,second:$ocl!Collection{T}!product{T2}($ocl!Collection[T2])?T2}]
 		symbol_130.getOwnedTypes().add(symbol_220);
 		//
 		// ocl::$$::UniqueCollection $ocl!UniqueCollection[$ocl!Classifier[$ocl!Classifier{T}!oclContents{U}()?U]]
diff --git a/examples/org.eclipse.ocl.examples.library/model/OCL-2.4.oclstdlib b/examples/org.eclipse.ocl.examples.library/model/OCL-2.4.oclstdlib
index f44f958..155a68d 100644
--- a/examples/org.eclipse.ocl.examples.library/model/OCL-2.4.oclstdlib
+++ b/examples/org.eclipse.ocl.examples.library/model/OCL-2.4.oclstdlib
@@ -724,7 +724,6 @@
 	The minimum of self and r.

 	**/

 	operation min(r : OclSelf) : Real => 'org.eclipse.ocl.examples.library.numeric.NumericMinOperation';

-	operation oclAsType<TT>(type : Classifier<TT>) : TT => 'org.eclipse.ocl.examples.library.numeric.NumericOclAsTypeOperation';

 	/**

 	The integer that is closest to self. When there are two such integers, the largest one.

 	**/

@@ -958,6 +957,7 @@
 Any use of the unlimited value as an integer or real is replaced by the invalid value.

 **/

 type UnlimitedNatural : PrimitiveType conformsTo Integer {

+	operation oclAsType<TT>(type : Classifier<TT>) : TT => 'org.eclipse.ocl.examples.library.numeric.UnlimitedNaturalOclAsTypeOperation';

 }

 

 }

diff --git a/examples/org.eclipse.ocl.examples.library/src/org/eclipse/ocl/examples/library/numeric/NumericOclAsTypeOperation.java b/examples/org.eclipse.ocl.examples.library/src/org/eclipse/ocl/examples/library/numeric/NumericOclAsTypeOperation.java
deleted file mode 100644
index c022c80..0000000
--- a/examples/org.eclipse.ocl.examples.library/src/org/eclipse/ocl/examples/library/numeric/NumericOclAsTypeOperation.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * <copyright>
- *
- * Copyright (c) 2009,2011 E.D.Willink and others.
- * All rights reserved.   This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   E.D.Willink - Initial API and implementation
- *
- * </copyright>
- *
- * $Id: NumericOclAsTypeOperation.java,v 1.6 2011/05/07 16:41:47 ewillink Exp $
- */
-package org.eclipse.ocl.examples.library.numeric;
-
-import org.eclipse.ocl.examples.library.oclany.OclAnyOclAsTypeOperation;
-import org.eclipse.ocl.examples.pivot.InvalidValueException;
-import org.eclipse.ocl.examples.pivot.OperationCallExp;
-import org.eclipse.ocl.examples.pivot.Type;
-import org.eclipse.ocl.examples.pivot.evaluation.EvaluationVisitor;
-import org.eclipse.ocl.examples.pivot.messages.EvaluatorMessages;
-import org.eclipse.ocl.examples.pivot.utilities.TypeManager;
-import org.eclipse.ocl.examples.pivot.values.IntegerValue;
-import org.eclipse.ocl.examples.pivot.values.RealValue;
-import org.eclipse.ocl.examples.pivot.values.TypeValue;
-import org.eclipse.ocl.examples.pivot.values.Value;
-
-/**
- * NumericOclAsTypeOperation realises the Real::oclAsType() library operation.
- * 
- * @since 3.1
- */
-public class NumericOclAsTypeOperation extends OclAnyOclAsTypeOperation
-{
-	public static final NumericOclAsTypeOperation INSTANCE = new NumericOclAsTypeOperation();
-
-	@Override
-	public Value evaluate(EvaluationVisitor evaluationVisitor, Value sourceVal, OperationCallExp operationCall) throws InvalidValueException {
-		TypeManager typeManager = evaluationVisitor.getTypeManager();
-		Type sourceType = sourceVal.getType(typeManager, operationCall.getSource().getType());
-		if (sourceType == null) {
-			return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceType, EvaluatorMessages.MissingSourceType);
-		}
-		Value argVal = evaluateArgument(evaluationVisitor, operationCall, 0);
-		TypeValue typeVal = argVal.asTypeValue();
-		Type argType = typeVal.getInstanceType();
-		if (typeManager.conformsTo(sourceType, argType, null)) {
-			if (sourceVal.isUnlimited() && ((argType == typeManager.getIntegerType()) || (argType == typeManager.getRealType()))) {
-				return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceVal, EvaluatorMessages.NonFiniteIntegerValue);
-			}
-			else if ((sourceVal instanceof IntegerValue) && (argType == typeManager.getRealType())) {
-				return ((IntegerValue)sourceVal).toRealValue();
-			}
-			else {
-				return sourceVal;
-			}
-		}
-		else {
-			RealValue realValue = sourceVal.asRealValue();
-			if (realValue != null) {
-				if (argType == typeManager.getUnlimitedNaturalType()) {
-					if (realValue.signum() < 0) {
-						return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceVal, EvaluatorMessages.NonPositiveUnlimitedNaturalValue);
-					}
-					return realValue.toIntegerValue();
-				}
-				else if (argType == typeManager.getIntegerType()) {
-					return realValue.toIntegerValue();
-				}
-				else {
-					return evaluationVisitor.throwInvalidEvaluation(null, operationCall, argType, EvaluatorMessages.IncompatibleArgumentType, argType);
-				}
-			}
-			IntegerValue integerValue = sourceVal.asIntegerValue();
-			if (integerValue != null) {
-				if (argType == typeManager.getUnlimitedNaturalType()) {
-					if (integerValue.signum() < 0) {
-						return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceVal, EvaluatorMessages.NonPositiveUnlimitedNaturalValue);
-					}
-					return integerValue;
-				}
-			}
-			return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceVal, EvaluatorMessages.UnknownSourceType);
-		}
-	}
-}
diff --git a/examples/org.eclipse.ocl.examples.library/src/org/eclipse/ocl/examples/library/numeric/UnlimitedNaturalOclAsTypeOperation.java b/examples/org.eclipse.ocl.examples.library/src/org/eclipse/ocl/examples/library/numeric/UnlimitedNaturalOclAsTypeOperation.java
new file mode 100644
index 0000000..cafc415
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.library/src/org/eclipse/ocl/examples/library/numeric/UnlimitedNaturalOclAsTypeOperation.java
@@ -0,0 +1,56 @@
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2009,2011 E.D.Willink and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ *
+ * </copyright>
+ *
+ * $Id: NumericOclAsTypeOperation.java,v 1.6 2011/05/07 16:41:47 ewillink Exp $
+ */
+package org.eclipse.ocl.examples.library.numeric;
+
+import org.eclipse.ocl.examples.library.oclany.OclAnyOclAsTypeOperation;
+import org.eclipse.ocl.examples.pivot.InvalidValueException;
+import org.eclipse.ocl.examples.pivot.OperationCallExp;
+import org.eclipse.ocl.examples.pivot.Type;
+import org.eclipse.ocl.examples.pivot.evaluation.EvaluationVisitor;
+import org.eclipse.ocl.examples.pivot.messages.EvaluatorMessages;
+import org.eclipse.ocl.examples.pivot.utilities.TypeManager;
+import org.eclipse.ocl.examples.pivot.values.TypeValue;
+import org.eclipse.ocl.examples.pivot.values.Value;
+
+/**
+ * UnlimitedNaturalOclAsTypeOperation realizes the UnlimitedNatural::oclAsType() library operation.
+ */
+public class UnlimitedNaturalOclAsTypeOperation extends OclAnyOclAsTypeOperation
+{
+	public static final UnlimitedNaturalOclAsTypeOperation INSTANCE = new UnlimitedNaturalOclAsTypeOperation();
+
+	@Override
+	public Value evaluate(EvaluationVisitor evaluationVisitor, Value sourceVal, OperationCallExp operationCall) throws InvalidValueException {
+		TypeManager typeManager = evaluationVisitor.getTypeManager();
+		Type sourceType = sourceVal.getType(typeManager, operationCall.getSource().getType());
+		if (sourceType == null) {
+			return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceType, EvaluatorMessages.MissingSourceType);
+		}
+		Value argVal = evaluateArgument(evaluationVisitor, operationCall, 0);
+		TypeValue typeVal = argVal.asTypeValue();
+		Type argType = typeVal.getInstanceType();
+		if (typeManager.conformsTo(sourceType, argType, null)) {
+			if (sourceVal.isUnlimited() && ((argType == typeManager.getIntegerType()) || (argType == typeManager.getRealType()))) {
+				return evaluationVisitor.throwInvalidEvaluation(null, operationCall, sourceVal, EvaluatorMessages.NonFiniteIntegerValue);
+			}
+			return sourceVal;
+		}
+		else {
+			return evaluationVisitor.throwInvalidEvaluation(null, operationCall, argType, EvaluatorMessages.IncompatibleArgumentType, argType);
+		}
+	}
+}
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest.java
index 3bcd91d..acafd3a 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest.java
@@ -260,7 +260,8 @@
 		//

 		assertQueryEquals(null, 3, "3.oclAsType(Integer)");

 		assertQueryEquals(null, 3.0, "3.oclAsType(Real)");

-		assertQueryEquals(null, 3, "3.0.oclAsType(Integer)");

+//		assertQueryEquals(null, 3, "3.0.oclAsType(Integer)");

+		assertQueryInvalid(null, "3.0.oclAsType(Integer)");

 		assertQueryEquals(null, 3.0, "3.0.oclAsType(Real)");

 		assertQueryInvalid(null, "3.oclAsType(String)");

 		assertQueryEquals(null, 3, "3.oclAsType(OclAny)");