blob: b55b467d872fd44af35169973b284065a4f62072 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<pivot:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pivot="http://www.eclipse.org/ocl/2015/Pivot"
xsi:schemaLocation="http://www.eclipse.org/ocl/2015/Pivot java://org.eclipse.ocl.pivot.PivotPackage" xmi:id="AAAAA" externalURI="platform:/resource/org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib" name="OCL-2.5.oclstdlib" xmiidVersion="1">
<ownedComments body="This clause describes the OCL Standard Library of predefined types, their operations, and predefined expression templates in the OCL.&#xA;This sub clause contains all standard types defined within OCL, including all the operations defined on those types.&#xA;For each operation the signature and a description of the semantics is given.&#xA;Within the description, the reserved word ‘result’ is used to refer to the value that results from evaluating the operation.&#xA;In several places, post conditions are used to describe properties of the result.&#xA;When there is more than one postcondition, all postconditions must be true.&#xA;A similar thing is true for multiple preconditions.&#xA;If these are used, the operation is only defined if all preconditions evaluate to oclText[true].&#xA;&#xA;heading:1[Introduction]&#xA;&#xA;The structure, syntax, and semantics of the OCL is defined in Clauses 8 (“Abstract Syntax”), 9 (“Concrete Syntax”),&#xA;and 10 (“Semantics Described using UML”).&#xA;This sub clause adds another part to the OCL definition: a library of predefined types and operations.&#xA;Any implementation of OCL must include this library package. This approach has also been taken by e.g., the Java definition,&#xA;where the language definition and the standard libraries are both mandatory parts of the complete language definition.&#xA;&#xA;The OCL standard library defines a number of types.&#xA;It includes several primitive types: UnlimitedNatural, Integer, Real, String, and Boolean.&#xA;These are familiar from many other languages. The second part of the standard library consists of the collection types.&#xA;They are Bag, Set, Sequence, and Collection where Collection is an abstract type.&#xA;Note that all types defined in the OCL standard library are instances of an abstract syntax class.&#xA;The OCL standard library exists at the modeling level, also referred to as the M1 level, where the abstract syntax is the metalevel or M2 level.&#xA;&#xA;Next to definitions of types the OCL standard library defines a number of template expressions.&#xA;Many operations defined on collections map not on the abstract syntax metaclass FeatureCallExp, but on the IteratorExp.&#xA;For each of these a template expression that defines the name and format of the expression is defined in 11.8, Predefined Iterator Expressions.&#xA;&#xA;The Standard Library may be extended with new types, new operations and new iterators.&#xA;In particular new operations can be defined for collections.&#xA;&#xA;Certain String operations depend on the prevailing locale to ensure that Strings are collated and characters are case-converted&#xA;in an appropriate fashion.&#xA;A locale is defined as a concatenation of up to three character sequences separated by underscores,&#xA;with the first sequence identifying the language and the second sequence identifying the country.&#xA;The third sequence is empty but may encode an implementation-specific variant.&#xA;Trailing empty strings and separators may be omitted.&#xA;&#xA;The character sequences for languages are defined by ISO 639.&#xA;&#xA;The character sequences for countries are defined by ISO 3166.&#xA;&#xA;‘fr_CA’ therefore identifies the locale for the French language in the Canada country.&#xA;&#xA;Comparison of strings and consequently the collation order of Collection::sortedBy()&#xA;conforms to the Unicode Collation algorithm defined by Unicode Technical Standard#10.&#xA;&#xA;The locale is ‘en_us’ by default but may be configured by a property constraint on OclAny::oclLocale.&#xA;&#xA;The prevailing locale is defined by the prevailing value of oclLocale within the current environment;&#xA;it may therefore be changed temporarily by using a Let expression.&#xA;let oclLocale : String = ‘fr_CA’ in aString.toUpperCase()&#xA;&#xA;heading:1[Iterators]&#xA;&#xA;This sub clause defines the standard OCL iterator expressions.&#xA;In the abstract syntax these are all instances of IteratorExp.&#xA;These iterator expressions always have a collection expression as their source,&#xA;as is defined in the well-formedness rules in Clause 8 (“Abstract Syntax”).&#xA;The defined iterator expressions are shown per source collection type.&#xA;The semantics of each iterator expression is defined through a mapping from the iterator to the ‘iterate’ construct.&#xA;This means that the semantics of the iterator expressions do not need to be defined separately in the semantics sub clauses.&#xA;&#xA;In all of the following OCL expressions, the lefthand side of the equals sign is the IteratorExp to be defined,&#xA;and the righthand side of the equals sign is the equivalent as an IterateExp.&#xA;The names source, body, and iterator refer to the role names in the abstract syntax:&#xA;&#xA;source&#x9;The source expression of the IteratorExp.&#xA;&#xA;body&#x9;The body expression of the IteratorExp.&#xA;&#xA;iterator&#x9;The iterator variable of the IteratorExp.&#xA;&#xA;result&#x9;The result variable of the IterateExp.&#xA;&#xA;heading:2[Extending the Standard Library with Iterator Expressions]&#xA;&#xA;It is possible to add new iterator expressions in the standard library.&#xA;If this is done the semantics of a new iterator should be defined by mapping it to existing constructs,&#xA;in the same way the semantics of pre-defined iterators is done (see sub clause 11.9)&#xA;&#xA;"/>
<ownedPackages xsi:type="pivot:Library" xmi:id="S673I" URI="http://www.eclipse.org/ocl/2015/Library" name="ocl" nsPrefix="ocl">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="PackageRole">
<values>StandardLibrary</values>
</ownedDetails>
<ownedDetails name="ClassGroup_Collection">
<values>This sub clause defines the collection types and their operations. As defined in this sub clause, each collection type is actually a template type with one parameter. ‘T’ denotes the parameter. A concrete collection type is created by substituting a type for the T. So Set (Integer) and Bag (Person) are collection types.</values>
</ownedDetails>
<ownedDetails name="ClassGroup_PrimitiveTypes">
<values>The primitive types defined in the OCL standard library are UnlimitedNatural, Integer, Real, String, and Boolean. They are all instances of the metaclass Primitive from the UML core package.</values>
</ownedDetails>
</ownedAnnotations>
<ownedClasses xsi:type="pivot:BagType" xmi:id="yEcHF" name="Bag" superClasses="#Z+X23">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="A bag is a collection with duplicates allowed. That is, one object can be an element of a bag many times.&#xA;There is no ordering defined on the elements in a bag.&#xA;Bag is itself an instance of the metatype BagType.&#xA;"/>
<ownedOperations xmi:id="qpz,+" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="lMz,+" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="True if oclText[self] and bag contain the same elements, the same number of times.&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="70dcd" implementationClass="org.eclipse.ocl.pivot.library.iterator.ClosureIteration"
name="closure" type="#dkz0o">
<ownedComments body="The closure of applying body transitively to every distinct element of the source collection.&#xA;"/>
<ownedIterators name="i" type="#k2OA6"/>
<ownedParameters isRequired="false" name="lambda" type="#xv1ql"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="qQrYi" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectIteration"
name="collect" type="#tNfy1">
<ownedIterators isRequired="false" name="i" type="#k2OA6"/>
<ownedParameters isRequired="false" name="lambda" type="#8QuxN"/>
<ownedSignature>
<ownedParameters xmi:id="ehjJ6" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="BnvOK" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectNestedIteration"
name="collectNested" type="#kj8x0">
<ownedComments body="The Bag of elements which results from applying body to every member of the source nonordered collection.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#k2OA6"/>
<ownedParameters isRequired="false" name="lambda" type="#dKdmN"/>
<ownedSignature>
<ownedParameters xmi:id="tKoqz" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="PpLPA" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingOperation" name="excluding"
type="#yEcHF">
<ownedComments body="The bag containing all elements of oclText[self] apart from all occurrences of object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="pgH9f" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingAllOperation" name="excludingAll"
type="#yEcHF">
<ownedComments body="The bag containing all elements of oclText[self] apart from all occurrences of all objects.&#xA;"/>
<ownedParameters name="objects" type="#AaA3o"/>
</ownedOperations>
<ownedOperations xmi:id="jS7X7" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionFlattenOperation" name="flatten"
type="#OLliK">
<ownedComments body="Redefines the Collection operation. If the element type is not a collection type, this results in the same bag as oclText[self].&#xA;If the element type is a collection type, the result is the bag containing all the elements of all the recursively flattened elements of oclText[self].&#xA;"/>
<ownedSignature>
<ownedParameters xmi:id="n6+jq" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="lpjkQ" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingOperation" name="including"
type="#yEcHF">
<ownedComments body="The bag containing all elements of oclText[self] plus object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#k2OA6"/>
</ownedOperations>
<ownedOperations xmi:id="qnRMR" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingAllOperation" name="includingAll"
type="#yEcHF">
<ownedComments body="The bag containing all elements of oclText[self] and objects.&#xA;"/>
<ownedParameters name="objects" type="#Z+X23"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="faMFy" implementationClass="org.eclipse.ocl.pivot.library.iterator.RejectIteration"
name="reject" type="#yEcHF">
<ownedComments body="The sub-bag of the source bag for which body is oclText[false].&#xA;&#xA;oclCode[self->reject(iterator | body) = self->select(iterator | not body)].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#k2OA6"/>
<ownedParameters name="lambda" type="#TVxB,"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="8foyz" implementationClass="org.eclipse.ocl.pivot.library.iterator.SelectIteration"
name="select" type="#yEcHF">
<ownedComments body="The sub-bag of the source bag for which body is oclText[true].&#xA;&#xA;oclCode[self->select(iterator | body) =&#xA;self->iterate(iterator; result : Bag(T) = Bag{} |&#xA;if body then result->including(iterator)&#xA;else result&#xA;endif)]&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#k2OA6"/>
<ownedParameters name="lambda" type="#TVxB,"/>
</ownedOperations>
<ownedOperations xmi:id="n+noG" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByKindOperation" name="selectByKind"
type="#kYj3+">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#tHLI9"/>
<ownedSignature>
<ownedParameters xmi:id="tHLI9" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="NNtpG" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByTypeOperation" name="selectByType"
type="#KCu19">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#DLB0P"/>
<ownedSignature>
<ownedParameters xmi:id="DLB0P" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="0LL4M" implementationClass="org.eclipse.ocl.pivot.library.iterator.SortedByIteration"
name="sortedBy" type="#8CNH9">
<ownedComments body="Results in the Sequence containing all elements of the source collection.&#xA;The element for which body has the lowest value comes first, and so on.&#xA;The type of the body expression must have the &lt; operation defined.&#xA;The &lt; operation must return a Boolean value and must be transitive (i.e., if a &lt; b and b &lt; c then a &lt; c).&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#k2OA6"/>
<ownedParameters isRequired="false" name="lambda" type="#H9NqH"/>
</ownedOperations>
<ownedSignature>
<ownedParameters xmi:id="k2OA6" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xsi:type="pivot:PrimitiveType" xmi:id="XEMMs" name="Boolean" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Primitive</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The standard type Boolean represents the common true/false values.&#xA;Boolean is itself an instance of the metatype PrimitiveType (from UML).&#xA;"/>
<ownedOperations xmi:id="76cxV" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedComments body="Returns oclText[true] if the logical value of oclText[self] is the not same as the numeric value of object2, oclText[false] otherwise."/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="2dcxV" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="Returns oclText[true] if the logical value of oclText[self] is the same as the numeric value of object2, oclText[false] otherwise."/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="NDthD" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanAllInstancesOperation" isStatic="true"
name="allInstances" type="#UQF4+">
<ownedComments body="Returns oclText[Set{false, true}]."/>
</ownedOperations>
<ownedOperations xmi:id="8sfYU" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanAndOperation" isInvalidating="true"
isRequired="false" isValidating="true" name="and" precedence="#VT87C" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self.oclIsInvalid() then&#xA;&#x9;&#x9; if b.oclIsInvalid() then self&#xA;&#x9;&#x9; elseif b = false then false&#xA;&#x9;&#x9; else self&#xA;&#x9;&#x9; endif&#xA;&#x9;&#x9; elseif self = false then false&#xA;&#x9;&#x9; elseif b.oclIsInvalid() then b&#xA;&#x9;&#x9; elseif b = false then false&#xA;&#x9;&#x9; elseif self = null then null&#xA;&#x9;&#x9; elseif b = null then null&#xA;&#x9;&#x9; else true&#xA;&#x9;&#x9; endif"
isRequired="false" type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Ing82" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Ing82" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#jXcmC" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#jXcmC" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Ing82" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#jXcmC" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#jXcmC" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#jXcmC" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#jXcmC" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:VariableExp" name="self" referredVariable="#Ing82" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" name="self" referredVariable="#Ing82" type="#XEMMs"/>
</ownedThen>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="Ing82" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="jXcmC" isRequired="false" name="b" representedParameter="#Z7lXU"
type="#XEMMs"/>
</bodyExpression>
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Primitive</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="oclText[false] if either oclText[self] or oclText[b] is oclText[false].&#xA;Otherwise oclText[invalid] if either oclText[self] or oclText[b] is oclText[invalid] .&#xA;Otherwise oclText[null] if either oclText[self] or oclText[b] is oclText[null].&#xA;Otherwise oclText[true].&#xA;"/>
<ownedParameters xmi:id="Z7lXU" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="gKkjU" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanAndOperation2" isRequired="false"
name="and2" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self = false then false&#xA;&#x9;&#x9; elseif b = false then false&#xA;&#x9;&#x9; else true&#xA;&#x9;&#x9; endif"
type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#MxyDI" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#nhutT" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="MxyDI" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="nhutT" isRequired="false" name="b" representedParameter="#tix9E"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[false] if either oclText[self] or oclText[b] is oclText[false].&#xA;Otherwise oclText[true].&#xA;"/>
<ownedParameters xmi:id="tix9E" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="cIALH" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanImpliesOperation" isInvalidating="true"
isRequired="false" isValidating="true" name="implies" precedence="#1Odhg" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self.oclIsInvalid() then&#xA;&#x9;&#x9; if b.oclIsInvalid() then self&#xA;&#x9;&#x9; elseif b = true then true&#xA;&#x9;&#x9; else self&#xA;&#x9;&#x9; endif&#xA;&#x9;&#x9; elseif self = false then true&#xA;&#x9;&#x9; elseif b.oclIsInvalid() then b&#xA;&#x9;&#x9; elseif b = true then true&#xA;&#x9;&#x9; elseif self = null then null&#xA;&#x9;&#x9; elseif b = null then b&#xA;&#x9;&#x9; else false&#xA;&#x9;&#x9; endif"
isRequired="false" type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#oe0Z9" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#oe0Z9" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#oe0Z9" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedThen xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DPwDJ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:VariableExp" name="self" referredVariable="#oe0Z9" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" name="self" referredVariable="#oe0Z9" type="#XEMMs"/>
</ownedThen>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="oe0Z9" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="DPwDJ" isRequired="false" name="b" representedParameter="#5o8Gk"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if oclText[self] is oclText[false], or if oclText[b] is oclText[true].&#xA;Otherwise oclText[invalid] if either oclText[self] or oclText[b] is oclText[invalid].&#xA;Otherwise oclText[null] if either oclText[self] or oclText[b] is oclText[null].&#xA;Otherwise oclText[false].&#xA;"/>
<ownedParameters xmi:id="5o8Gk" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="AfRB7" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanImpliesOperation2" isRequired="false"
name="implies2" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self = false then true&#xA;&#x9;&#x9; elseif b = true then true&#xA;&#x9;&#x9; else false&#xA;&#x9;&#x9; endif"
type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#spaQQ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#HaW6b" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="spaQQ" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="HaW6b" isRequired="false" name="b" representedParameter="#Nlx5s"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if oclText[self] is oclText[false], or if oclText[b] is oclText[true].&#xA;Otherwise oclText[false].&#xA;"/>
<ownedParameters xmi:id="Nlx5s" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="DH5kA" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanNotOperation" isRequired="false"
isValidating="true" name="not" precedence="#tgQwH" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self.oclIsInvalid() then self&#xA;&#x9;&#x9; elseif self = null then null&#xA;&#x9;&#x9; else self = false&#xA;&#x9;&#x9; endif"
isRequired="false" type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Hy6AH" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Hy6AH" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Hy6AH" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" name="self" referredVariable="#Hy6AH" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="Hy6AH" name="self" type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if oclText[self] is oclText[false].&#xA;oclText[false] if oclText[self] is oclText[true].&#xA;oclText[null] if oclText[self] is oclText[null].&#xA;Otherwise oclText[invalid].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="vaZxA" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanNotOperation2" name="not2" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self then false else true endif" type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:VariableExp" name="self" referredVariable="#Tj7Dn" type="#XEMMs"/>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="Tj7Dn" name="self" type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if oclText[self] is oclText[false].&#xA;Otherwise oclText[false].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="I9IYU" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanOrOperation" isInvalidating="true"
isRequired="false" isValidating="true" name="or" precedence="#BEt7C" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self.oclIsInvalid() then&#xA;&#x9;&#x9; if b.oclIsInvalid() then self&#xA;&#x9;&#x9;&#x9; elseif b = true then true&#xA;&#x9;&#x9; else self&#xA;&#x9;&#x9; endif&#xA;&#x9;&#x9; elseif self = true then true&#xA;&#x9;&#x9;&#x9; elseif b.oclIsInvalid() then b&#xA;&#x9;&#x9;&#x9; elseif b = true then true&#xA;&#x9;&#x9;&#x9; elseif self = null then null&#xA;&#x9;&#x9;&#x9; elseif b = null then null&#xA;&#x9;&#x9; else false&#xA;&#x9;&#x9; endif"
isRequired="false" type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#04BxZ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#04BxZ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#Pp9al" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#Pp9al" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#04BxZ" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#Pp9al" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#Pp9al" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#Pp9al" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#Pp9al" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:VariableExp" name="self" referredVariable="#04BxZ" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" name="self" referredVariable="#04BxZ" type="#XEMMs"/>
</ownedThen>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="04BxZ" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="Pp9al" isRequired="false" name="b" representedParameter="#1KtsO"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if either oclText[self] or oclText[b] is oclText[true].&#xA;Otherwise oclText[invalid] if either oclText[self] or oclText[b] is oclText[invalid].&#xA;Otherwise oclText[null] if either oclText[self] or oclText[b] is oclText[null].&#xA;Otherwise oclText[false].&#xA;"/>
<ownedParameters xmi:id="1KtsO" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="UAjYU" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanOrOperation2" isRequired="false"
name="or2" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self = true then true&#xA;&#x9;&#x9;&#x9; elseif b = true then true&#xA;&#x9;&#x9; else false&#xA;&#x9;&#x9; endif"
type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#gV6f," type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#7F2JL" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:BooleanLiteralExp" booleanSymbol="false" type="#XEMMs"/>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:BooleanLiteralExp" booleanSymbol="true" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="gV6f," name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="7F2JL" isRequired="false" name="b" representedParameter="#RBSMV"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if either oclText[self] or oclText[b] is oclText[true].&#xA;Otherwise oclText[false].&#xA;"/>
<ownedParameters xmi:id="RBSMV" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="clDqW" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Converts oclText[self] to a string value.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="AHlYU" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanXorOperation" isRequired="false"
name="xor" precedence="#ZtB8C" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="if self.oclIsInvalid() then self&#xA;&#x9;&#x9; elseif b.oclIsInvalid() then b&#xA;&#x9;&#x9; elseif self = null then null&#xA;&#x9;&#x9; elseif b = null then null&#xA;&#x9;&#x9; else self &lt;> b&#xA;&#x9;&#x9; endif"
isRequired="false" type="#XEMMs">
<ownedBody xsi:type="pivot:IfExp" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#sRLGX" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="oclIsInvalid" referredOperation="#Bz+rT" type="#XEMMs">
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#HCHwi" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#sRLGX" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:IfExp" isElseIf="true" isRequired="false" type="#XEMMs">
<ownedCondition xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
<ownedSource xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#HCHwi" type="#XEMMs"/>
</ownedCondition>
<ownedElse xsi:type="pivot:OperationCallExp" name="&lt;>" referredOperation="#76cxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#HCHwi" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#sRLGX" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:NullLiteralExp" isRequired="false" type="#7u3MH"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#HCHwi" type="#XEMMs"/>
</ownedElse>
<ownedThen xsi:type="pivot:VariableExp" name="self" referredVariable="#sRLGX" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="sRLGX" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="HCHwi" isRequired="false" name="b" representedParameter="#Nt2tV"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if oclText[self] is oclText[true] and oclText[b] is oclText[false], or if oclText[self] is oclText[false] and oclText[b] is oclText[true].&#xA;oclText[false] if oclText[self] is oclText[true] and oclText[b] is oclText[true], or if oclText[self] is oclText[false] and oclText[b] is oclText[false].&#xA;Otherwise oclText[invalid] if either oclText[self] or oclText[b] is oclText[invalid].&#xA;Otherwise oclText[null].&#xA;"/>
<ownedParameters xmi:id="Nt2tV" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="cyLmU" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanXorOperation2" isRequired="false"
name="xor2" type="#XEMMs">
<bodyExpression xsi:type="pivot:ExpressionInOCL" body="self &lt;> b" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="&lt;>" referredOperation="#76cxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" isRequired="false" name="b" referredVariable="#DJZZ4" type="#XEMMs"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#oYdvs" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="oYdvs" name="self" type="#XEMMs"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="DJZZ4" isRequired="false" name="b" representedParameter="#5q5vu"
type="#XEMMs"/>
</bodyExpression>
<ownedComments body="oclText[true] if oclText[self] &lt;> oclText[b]&#xA;Otherwise oclText[false].&#xA;"/>
<ownedParameters xmi:id="5q5vu" isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xmi:id="nZ3,I" name="Class" superClasses="#jbMkR"/>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="IgEJU" isAbstract="true" name="Collection" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="Collection is the abstract supertype of all collection types in the OCL Standard Library.&#xA;Each occurrence of an object in a collection is called an element.&#xA;If an object occurs twice in a collection, there are two elements.&#xA;&#xA;This sub clause defines the properties on Collections that have identical semantics for all collection subtypes.&#xA;Some operations may be defined within the subtype as well,&#xA;which means that there is an additional postcondition or a more specialized return value.&#xA;Collection is itself an instance of the metatype CollectionType.&#xA;&#xA;The definition of several common operations is different for each subtype.&#xA;These operations are not mentioned in this sub clause.&#xA;&#xA;The semantics of the collection operations is given in the form of a postcondition that uses the IterateExp of the IteratorExp construct.&#xA;The semantics of those constructs is defined in Clause 10 (“Semantics Described using UML”).&#xA;In several cases the postcondition refers to other collection operations,&#xA;which in turn are defined in terms of the IterateExp or IteratorExp constructs.&#xA;&#xA;Well-formedness rules&#xA;&#xA;[1] A collection cannot contain oclText[invalid] values.&#xA;&#xA;context Collection&#xA;inv: self->forAll(not oclIsInvalid())"/>
<ownedOperations xmi:id="o3vBs" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedComments body="True if c is not equal to oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="javBs" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="True if c is a collection of the same kind as oclText[self] and contains the same elements in the same quantities and in the same order,&#xA;in the case of an ordered collection type.&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="qBJ1W" implementationClass="org.eclipse.ocl.pivot.library.iterator.AnyIteration"
isInvalidating="true" isRequired="false" name="any" type="#qs59R">
<ownedComments body="Returns any element in the e[source] collection for which e[body] evaluates to oclText[true].&#xA;Returns oclText[invalid] if the e[body] evaluates to oclText[invalid] for any element,&#xA;otherwise if there are one or more elements for which the e[body] is oclText[true],&#xA;an indeterminate choice of one of them is returned, otherwise the result is oclText[invalid].&#xA;&#xA;let source : Collection(T) = ..., body : Lambda T() : Boolean = ... in&#xA;source->any(iterator | body) = source->select(iterator | body)->asSequence()->first()&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters name="body" type="#9VTck"/>
</ownedOperations>
<ownedOperations xmi:id="Ti0Xc" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionAsBagOperation" name="asBag"
type="#ZxUl9">
<ownedComments body="The Bag that contains all the elements from oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="kC8EI" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionAsOrderedSetOperation" name="asOrderedSet"
type="#G1Pyh">
<ownedComments body="An OrderedSet that contains all the elements from oclText[self], with duplicates removed,&#xA;in an order dependent on the particular concrete collection type.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="ww6rV" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionAsSequenceOperation" name="asSequence"
type="#SRy3R">
<ownedComments body="A Sequence that contains all the elements from oclText[self], in an order dependent on the particular concrete collection type.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="tj4Xc" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionAsSetOperation" name="asSet"
type="#zyYl9">
<ownedComments body="The Set containing all the elements from oclText[self], with duplicates removed.&#xA;"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="oenaP" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectIteration"
name="collect" type="#Be91P">
<ownedComments body="The Collection of elements that results from applying body to every member of the source set.&#xA;The result is flattened. Notice that this is based on collectNested, which can be of different type depending on the type of source.&#xA;collectNested is defined individually for each subclass of CollectionType.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#Yd8AC"/>
<ownedSignature>
<ownedParameters xmi:id="MfE+M" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id=",0rQ3" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectNestedIteration"
name="collectNested" type="#4za1O">
<ownedComments body="The Collection of elements which results from applying body to every member of the source collection.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#5Wr1B"/>
<ownedSignature>
<ownedParameters xmi:id="bIJfG" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="FLuaO" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionCountOperation" name="count"
type="#tYtCd">
<ownedComments body="The number of times that object occurs in the collection oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="P+mn," implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludesOperation" name="excludes"
type="#XEMMs">
<ownedComments body="True if object is not an element of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="vFNWB" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludesAllOperation" name="excludesAll"
type="#XEMMs">
<ownedComments body="Does oclText[self] contain none of the elements of c2 ?&#xA;"/>
<ownedParameters name="c2" type="#wPdfw"/>
<ownedSignature>
<ownedParameters xmi:id="THtXS" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="N3HRt" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingOperation" name="excluding"
type="#IgEJU">
<ownedComments body="The collection containing all elements of oclText[self] apart from object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="nuD,M" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingAllOperation" name="excludingAll"
type="#IgEJU">
<ownedComments body="The collection containing all elements of oclText[self] apart from all occurrences of all objects.&#xA;"/>
<ownedParameters name="objects" type="#AaA3o"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="cuQ+J" implementationClass="org.eclipse.ocl.pivot.library.iterator.ExistsIteration"
isInvalidating="true" isRequired="false" isValidating="true" name="exists" type="#XEMMs">
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedIterators isRequired="false" name="j" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="arQ+J" implementationClass="org.eclipse.ocl.pivot.library.iterator.ExistsIteration"
isInvalidating="true" isRequired="false" isValidating="true" name="exists" type="#XEMMs">
<ownedComments body="Results in oclText[true] if body evaluates to oclText[true] for at least one element in the source collection.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xmi:id="hg3Zo" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionFlattenOperation" name="flatten"
type="#ibDmk">
<ownedComments body="If the element type is not a collection type, this results in the same collection as oclText[self].&#xA;If the element type is a collection type, the result is a collection containing all the elements of all the recursively flattened elements of oclText[self].&#xA;"/>
<ownedSignature>
<ownedParameters xmi:id="V4fY9" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="YtmML" implementationClass="org.eclipse.ocl.pivot.library.iterator.ForAllIteration"
isInvalidating="true" isRequired="false" isValidating="true" name="forAll" type="#XEMMs">
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedIterators isRequired="false" name="j" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="WqmML" implementationClass="org.eclipse.ocl.pivot.library.iterator.ForAllIteration"
isInvalidating="true" isRequired="false" isValidating="true" name="forAll" type="#XEMMs">
<ownedComments body="Results in oclText[true] if the body expression evaluates to oclText[true] for each element in the source collection; otherwise, result is oclText[false].&#xA;"/>
<ownedIterators xmi:id="HfeAP" isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xmi:id="BKNJO" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludesOperation" name="includes"
type="#XEMMs">
<ownedComments body="True if object is an element of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="9ETDK" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludesAllOperation" name="includesAll"
type="#XEMMs">
<ownedComments body="Does oclText[self] contain all the elements of c2 ?&#xA;"/>
<ownedParameters name="c2" type="#+dsXX"/>
<ownedSignature>
<ownedParameters xmi:id="RAum0" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="j3fm9" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingOperation" name="including"
type="#IgEJU">
<ownedComments body="The collection containing all elements of oclText[self] plus object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#qs59R"/>
</ownedOperations>
<ownedOperations xmi:id="xSRQj" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingAllOperation" name="includingAll"
type="#IgEJU">
<ownedComments body="The collection containing all elements of oclText[self] and objects.&#xA;"/>
<ownedParameters name="objects" type="#IgEJU"/>
</ownedOperations>
<ownedOperations xmi:id="+sJto" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIntersectionOperation" name="intersection"
type="#ZxUl9">
<ownedComments body="The intersection of oclText[self] and bag; the bag of all elements that are in both oclText[self] and c.&#xA;"/>
<ownedParameters name="c" type="#IgEJU"/>
</ownedOperations>
<ownedOperations xmi:id="YdPKO" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIntersectionOperation" name="intersection"
type="#zyYl9">
<ownedComments body="The intersection of oclText[self] and a unique collection; the set of all elements that are in both oclText[self] and u.&#xA;"/>
<ownedParameters name="u" type="#gHti8"/>
</ownedOperations>
<ownedOperations xmi:id="ghkfR" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIsEmptyOperation" name="isEmpty"
type="#XEMMs">
<ownedComments body="Is oclText[self] the empty collection?&#xA;&#xA;Note: oclText[null->isEmpty()] returns oclText[true] in virtue of the implicit casting from oclText[null] to oclText[Bag{}].&#xA;"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="ZQp5M" implementationClass="org.eclipse.ocl.pivot.library.iterator.IsUniqueIteration"
name="isUnique" type="#XEMMs">
<ownedComments body="Results in oclText[true] if body evaluates to a different value for each element in the source collection; otherwise, result is oclText[false].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#x9vEt"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="6+B+U" implementationClass="org.eclipse.ocl.pivot.library.iterator.IterateIteration"
isRequired="false" name="iterate" type="#FfSe4">
<ownedAccumulators isRequired="false" name="acc" type="#FfSe4"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#vUOyu"/>
<ownedSignature>
<ownedParameters xmi:id="FfSe4" name="Tacc"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="BuL1W" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionMaxOperation" name="max"
type="#qs59R">
<ownedComments body="The element with the maximum value of all elements in oclText[self].&#xA;Elements must be of a type supporting the max operation.&#xA;The max operation - supported by the elements - must take one parameter of type T and be both associative and commutative.&#xA;UnlimitedNatural, Integer and Real fulfill this condition.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="vxL1W" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionMinOperation" name="min"
type="#qs59R">
<ownedComments body="The element with the minimum value of all elements in oclText[self].&#xA;Elements must be of a type supporting the min operation.&#xA;The min operation - supported by the elements - must take one parameter of type T and be both associative and commutative.&#xA;UnlimitedNatural, Integer and Real fulfill this condition.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="XxcWz" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionNotEmptyOperation" name="notEmpty"
type="#XEMMs">
<ownedComments body="Is oclText[self] not the empty collection?&#xA;&#xA;oclText[null->notEmpty()] returns oclText[false] in virtue of the implicit casting from oclText[null] to oclText[Bag{}].&#xA;"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="kTM1W" implementationClass="org.eclipse.ocl.pivot.library.iterator.OneIteration"
name="one" type="#XEMMs">
<ownedComments body="Results in oclText[true] if there is exactly one element in the source collection for which body is oclText[true].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xmi:id="WVvJn" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionProductOperation" name="product"
type="#AVIYn">
<ownedComments body="The cartesian product operation of oclText[self] and c2.&#xA;"/>
<ownedParameters name="c2" type="#3GM3z"/>
<ownedSignature>
<ownedParameters xmi:id="yzGsR" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="doIHf" implementationClass="org.eclipse.ocl.pivot.library.iterator.RejectIteration"
name="reject" type="#IgEJU">
<ownedComments body="The sub-collection of the source collection for which body is oclText[false].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="6tk0g" implementationClass="org.eclipse.ocl.pivot.library.iterator.SelectIteration"
name="select" type="#IgEJU">
<ownedComments body="The sub-collection of the source collection for which body is oclText[true].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters name="lambda" type="#9VTck"/>
</ownedOperations>
<ownedOperations xmi:id="lMkqz" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByKindOperation" name="selectByKind"
type="#4oB7Y">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#bFs8P"/>
<ownedSignature>
<ownedParameters xmi:id="bFs8P" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="Lbprz" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByTypeOperation" name="selectByType"
type="#eSM5X">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#xIioi"/>
<ownedSignature>
<ownedParameters xmi:id="xIioi" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="eYPCX" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSizeOperation" name="size"
type="#tYtCd">
<ownedComments body="The number of elements in the collection oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="yZH65" implementationClass="org.eclipse.ocl.pivot.library.iterator.SortedByIteration"
name="sortedBy" type="#SRy3R">
<ownedComments body="Results in the Collection containing all elements of the source collection.&#xA;The element for which body has the lowest value comes first, and so on.&#xA;The type of the body expression must have the &lt; operation defined.&#xA;The &lt; operation must return a Boolean value and must be transitive (i.e., if a &lt; b and b &lt; c then a &lt; c).&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#qs59R"/>
<ownedParameters isRequired="false" name="lambda" type="#x9vEt"/>
</ownedOperations>
<ownedOperations xmi:id="oRN1W" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSumOperation" name="sum"
type="#qs59R">
<ownedComments body="The addition of all elements in oclText[self].&#xA;Elements must be of an oclText[OclSummable] type to provide the zero() and sum() operations.&#xA;The e[sum] operation must be both associative: a.sum(b).sum(c) = a.sum(b.sum(c)), and commutative: a.sum(b) = b.sum(a).&#xA;Integer and Real fulfill this condition.&#xA;&#xA;If the e[sum] operation is not both associative and commutative, the e[sum] expression is not well-formed,&#xA;which may result in unpredictable results during evaluation.&#xA;If an implementation is able to detect a lack of associativity or commutativity,&#xA;the implementation may bypass the evaluation and return an oclText[invalid] result.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="EesOl" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionUnionOperation" name="union"
type="#ZxUl9">
<ownedComments body="The bag consisting of all elements in oclText[self] and all elements in c.&#xA;"/>
<ownedParameters name="c" type="#IgEJU"/>
</ownedOperations>
<ownedProperties xmi:id="WTuwp" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionElementTypeProperty" isStatic="true"
name="elementType" type="#qs59R">
<ownedComments body="Evaluates to the type of the collection elements.&#xA;"/>
</ownedProperties>
<ownedProperties xmi:id="BucvH" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionLowerProperty" isStatic="true"
name="lower" type="#tYtCd">
<ownedComments body="Evaluates to the lower bound on the number of collection elements.&#xA;"/>
</ownedProperties>
<ownedProperties xmi:id="ikPPI" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionUpperProperty" isStatic="true"
name="upper" type="#tYtCd">
<ownedComments body="Evaluates to the upper bound on the number of collection elements.&#xA;"/>
</ownedProperties>
<ownedSignature>
<ownedParameters xmi:id="qs59R" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xmi:id="28WYD" name="Enumeration" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="@Deprecated: Use OclEnumeration&#xA;The Enumeration type is the type of an OrderedSet of EnumerationLiteral.&#xA;"/>
<ownedOperations xmi:id="wJUrA" implementationClass="org.eclipse.ocl.pivot.library.enumeration.EnumerationAllInstancesOperation"
isStatic="true" name="allInstances" type="#UQF4+">
<ownedComments body="Return a set of all enumeration values of oclText[self]."/>
</ownedOperations>
<ownedProperties xmi:id="bVY,D" implementationClass="org.eclipse.ocl.pivot.library.enumeration.EnumerationOwnedLiteralProperty"
isStatic="true" name="allLiterals" type="#rET9a">
<ownedComments body="Evaluates to the literals of the enumeration.&#xA;"/>
</ownedProperties>
</ownedClasses>
<ownedClasses xmi:id="Xml8E" name="EnumerationLiteral" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The standard type EnumerationLiteral represents a named constant value of an Enumeration.&#xA;"/>
<ownedProperties xmi:id="9qMPm" isImplicit="true" name="Enumeration" opposite="#bVY,D" type="#ATAYr"/>
<ownedProperties xmi:id="Fr0SV" isImplicit="true" name="OclEnumeration" opposite="#DVi0w" type="#IeoaH"/>
</ownedClasses>
<ownedClasses xsi:type="pivot:PrimitiveType" xmi:id="tYtCd" coercions="#RRcEo" name="Integer" superClasses="#Nr4QF">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Primitive</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The standard type Integer represents the mathematical concept of integer.&#xA;Integer is itself an instance of the metatype PrimitiveType (from UML).&#xA;"/>
<ownedOperations xmi:id="hA+ir" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericTimesOperation" name="*" precedence="#0NX0o"
type="#tYtCd">
<ownedComments body="The value of the multiplication of oclText[self] and i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="iA+ir" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericPlusOperation" name="+" precedence="#qLHeo"
type="#tYtCd">
<ownedComments body="The value of the addition of oclText[self] and i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="b,,VW" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericNegateOperation" name="-" precedence="#tgQwH"
type="#tYtCd">
<ownedComments body="The negative value of oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="kA+ir" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericMinusOperation" name="-" precedence="#qLHeo"
type="#tYtCd">
<ownedComments body="The value of the subtraction of i from oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="mA+ir" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericDivideOperation" isInvalidating="true"
name="/" precedence="#0NX0o" type="#Nr4QF">
<ownedComments body="The value of oclText[self] divided by i.&#xA;Evaluates to oclText[invalid] if r is equal to zero.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="ggXWW" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericAbsOperation" name="abs" type="#tYtCd">
<ownedComments body="The absolute value of oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="WTP3A" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericDivOperation" name="div" type="#tYtCd">
<ownedComments body="The number of times that i fits completely within oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#tYtCd"/>
</ownedOperations>
<ownedOperations xmi:id="bVYjr" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericMaxOperation" name="max" type="#tYtCd">
<ownedComments body="The maximum of oclText[self] an i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="JZYjr" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericMinOperation" name="min" type="#tYtCd">
<ownedComments body="The minimum of oclText[self] an i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="HdR3A" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericModOperation" name="mod" type="#tYtCd">
<ownedComments body="The result is oclText[self] modulo i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#tYtCd"/>
</ownedOperations>
<ownedOperations xmi:id="aIlbs" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Converts oclText[self] to a string value.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="RRcEo" implementationClass="org.eclipse.ocl.pivot.library.numeric.IntegerToUnlimitedNaturalOperation" name="toUnlimitedNatural"
type="#3kMFL">
<ownedComments body="Converts a non-negative oclText[self] to an UnlimitedNatural value. A negative oclText[self] is converted to oclText[invalid].&#xA;An automatic coersion may be synthesized if the coercion enables an operation reference to be resolved&#xA;in an expression where no operation was available without coercion.&#xA;"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xsi:type="pivot:MapType" xmi:id="LpeHF" name="Map" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="A Map provides a Set of key values, each of which has an associated value.&#xA;Keys and values may be null, but neither may be invalid."/>
<ownedOperations xmi:id="fMyo," implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="avxo," implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if oclText[self] and s contain the same elements.&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="gM8Xc" implementationClass="org.eclipse.ocl.pivot.library.map.MapAtOperation" isInvalidating="true" isRequired="false"
name="at" type="#HeAuH">
<ownedComments body="The value of the map at oclText[key].&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="GTpOT" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludesOperation" name="excludes" type="#XEMMs">
<ownedComments body="True if oclText[key] is not one of the keys of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="4v4G3" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludesPairOperation" name="excludes"
type="#XEMMs">
<ownedComments body="True if oclText[key] and oclText[value] are not a key-value pair of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
<ownedParameters isRequired="false" name="value" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="hW+,U" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludesAllOperation" name="excludesAll"
type="#XEMMs">
<ownedComments body="True if none of the elements of oclText[coll] are keys of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters name="coll" type="#jNn4z"/>
<ownedSignature>
<ownedParameters xmi:id="+Zdec" name="K2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="n0IE2" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludesMapOperation" name="excludesMap"
type="#XEMMs">
<ownedComments body="True if none of the key-value pairs of oclText[map] are also key-value pairs of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="map" type="#ILFp8"/>
<ownedSignature>
<ownedParameters xmi:id="0oyuu" name="K2"/>
<ownedParameters xmi:id="Juyuu" name="V2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="FoD,z" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludesValueOperation" name="excludesValue"
type="#XEMMs">
<ownedComments body="True if oclText[value] is not one of the values of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="value" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="EMK4A" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludingOperation" isRequired="false"
name="excluding" type="#LpeHF">
<ownedComments body="The map containing all key-value pairs of oclText[self] except any whose key is oclText[key].&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="2oZwk" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludingPairOperation" isRequired="false"
name="excluding" type="#LpeHF">
<ownedComments body="The map containing all key-value pairs of oclText[self] except any whose key is oclText[key] and whose value is oclText[key].&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
<ownedParameters isRequired="false" name="value" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="eDGmg" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludingAllOperation" isRequired="false"
name="excludingAll" type="#LpeHF">
<ownedComments body="The map containing all key-value pairs of oclText[self] except any whose key is included in oclText[keys].&#xA;"/>
<ownedParameters name="keys" type="#AaA3o"/>
</ownedOperations>
<ownedOperations xmi:id="p4+Il" implementationClass="org.eclipse.ocl.pivot.library.map.MapExcludingMapOperation" isRequired="false"
name="excludingMap" type="#LpeHF">
<ownedComments body="The map containing all key-value pairs of oclText[self] except any which is also included in oclText[map].&#xA;"/>
<ownedParameters isRequired="false" name="map" type="#MFAWn"/>
<ownedSignature>
<ownedParameters xmi:id="GNWcV" name="K2"/>
<ownedParameters xmi:id="bSWcV" name="V2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="4ePwh" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludesOperation" name="includes" type="#XEMMs">
<ownedComments body="True if oclText[key] is one of the keys of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="q7eoF" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludesPairOperation" name="includes"
type="#XEMMs">
<ownedComments body="True if oclText[key] and oclText[value] are a key-value pair of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="key" type="#jbMkR"/>
<ownedParameters isRequired="false" name="value" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="vVEtd" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludesAllOperation" name="includesAll"
type="#XEMMs">
<ownedComments body="True if all the elements of oclText[coll] are keys of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters name="coll" type="#xb2wa"/>
<ownedSignature>
<ownedParameters xmi:id="8Set+" name="K2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="1zOx+" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludesMapOperation" name="includesMap"
type="#XEMMs">
<ownedComments body="True if all of the key-value pairs of oclText[map] are also key-value pairs of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="map" type="#knjZK"/>
<ownedSignature>
<ownedParameters xmi:id="yhz9Q" name="K2"/>
<ownedParameters xmi:id="Hnz9Q" name="V2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="T59Fh" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludesValueOperation" name="includesValue"
type="#XEMMs">
<ownedComments body="True if oclText[value] is one of the values of oclText[self], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="value" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="eSiNR" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludingPairOperation" isRequired="false"
name="including" type="#LpeHF">
<ownedComments body="The map containing all of the key-value pairs of oclText[self] and an additional key-value pair for oclText[key] and oclText[value].&#xA;If oclText[key] is already a key of oclText[self], the old value pair is replaced by oclText[value]."/>
<ownedParameters isRequired="false" name="key" type="#8dAuH"/>
<ownedParameters isRequired="false" name="value" type="#HeAuH"/>
</ownedOperations>
<ownedOperations xmi:id="bg4+y" implementationClass="org.eclipse.ocl.pivot.library.map.MapIncludingMapOperation" isRequired="false"
name="includingMap" type="#LpeHF">
<ownedComments body="The map containing all of the key-value pairs of oclText[self] and oclText[map].&#xA;The values associated with key-value pairs in oclText[map] replace those in oclText[self] where the same key is used by both maps.&#xA;"/>
<ownedParameters isRequired="false" name="map" type="#w2v0R"/>
<ownedSignature>
<ownedParameters xmi:id="Izxt6" name="K2"/>
<ownedParameters xmi:id="d4xt6" name="V2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="X2mGl" implementationClass="org.eclipse.ocl.pivot.library.map.MapIsEmptyOperation" name="isEmpty" type="#XEMMs">
<ownedComments body="True if oclText[self] is the empty map, oclText[false] otherwise.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="IlWoq" implementationClass="org.eclipse.ocl.pivot.library.map.MapKeysOperation" name="keys" type="#1Uzet">
<ownedComments body="A Set comprising all the keys of the key-value pairs in oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="OGf9G" implementationClass="org.eclipse.ocl.pivot.library.map.MapNotEmptyOperation" name="notEmpty" type="#XEMMs">
<ownedComments body="True if oclText[self] not the empty map, oclText[false] otherwise.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="VtRpq" implementationClass="org.eclipse.ocl.pivot.library.map.MapSizeOperation" name="size" type="#tYtCd">
<ownedComments body="The number of key-value pairs in oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="2hNV5" implementationClass="org.eclipse.ocl.pivot.library.map.MapValuesOperation" name="values" type="#uivet">
<ownedComments body="The Bag comprising all the values of the key-value pairs in oclText[self].&#xA;"/>
</ownedOperations>
<ownedProperties xmi:id="w,Rmk" implementationClass="org.eclipse.ocl.pivot.library.map.MapKeyTypeProperty" isRequired="false" isStatic="true"
name="keyType" type="#8dAuH">
<ownedComments body="The key type of the key-value pairs of oclText[self].&#xA;"/>
</ownedProperties>
<ownedProperties xmi:id="CoDkn" implementationClass="org.eclipse.ocl.pivot.library.map.MapValueTypeProperty" isRequired="false"
isStatic="true" name="valueType" type="#HeAuH">
<ownedComments body="The value type of the key-value pairs of oclText[self].&#xA;"/>
</ownedProperties>
<ownedSignature>
<ownedParameters xmi:id="8dAuH" name="K"/>
<ownedParameters xmi:id="HeAuH" name="V"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xsi:type="pivot:AnyType" xmi:id="jbMkR" isAbstract="true" name="OclAny">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The number of elements in the collection oclText[self].essions.&#xA;OclAny is itself an instance of the metatype AnyType.&#xA;&#xA;All classes in a UML model inherit all operations defined on OclAny.&#xA;To avoid name conflicts between properties in the model and the properties inherited from OclAny,&#xA;all names on the properties of OclAny start with ‘ocl.’&#xA;Although theoretically there may still be name conflicts, they can be avoided.&#xA;One can also use qualification by OclAny (name of the type) to explicitly refer to the OclAny properties.&#xA;&#xA;Operations of OclAny, where the instance of OclAny is called object.&#xA;"/>
<ownedOperations xmi:id="X1Ovl" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedComments body="True if oclText[self] is a different object from object2. Infix operator.&#xA;"/>
<ownedParameters xmi:id="5jbKp" isRequired="false" name="object2" type="#zlfMH"/>
<ownedPostconditions xmi:id="MrNhR">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="result = not (self = object2)" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:OperationCallExp" isRequired="false" name="not" referredOperation="#DH5kA" type="#XEMMs">
<ownedSource xsi:type="pivot:OperationCallExp" name="=" referredOperation="#SYOvl" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" isRequired="false" name="object2" referredVariable="#oqZCH" type="#jbMkR"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#cohTe" type="#jbMkR"/>
</ownedSource>
</ownedArguments>
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#UlSQT" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="cohTe" name="self" type="#jbMkR"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="oqZCH" isRequired="false" name="object2" representedParameter="#5jbKp"
type="#jbMkR"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="UlSQT" name="result" type="#XEMMs"/>
</ownedSpecification>
</ownedPostconditions>
</ownedOperations>
<ownedOperations xmi:id="SYOvl" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="True if oclText[self] is the same object as object2. Infix operator.&#xA;"/>
<ownedParameters xmi:id="IrLDp" isRequired="false" name="object2" type="#zlfMH"/>
<ownedPostconditions xmi:id="by9ZR">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="result = (self = object2)" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#2dcxV" type="#XEMMs">
<ownedArguments xsi:type="pivot:OperationCallExp" name="=" referredOperation="#SYOvl" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" isRequired="false" name="object2" referredVariable="#vLUya" type="#jbMkR"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#jJcDy" type="#jbMkR"/>
</ownedArguments>
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#bGNAn" type="#XEMMs"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="jJcDy" name="self" type="#jbMkR"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="vLUya" isRequired="false" name="object2" representedParameter="#IrLDp"
type="#jbMkR"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="bGNAn" name="result" type="#XEMMs"/>
</ownedSpecification>
</ownedPostconditions>
</ownedOperations>
<ownedOperations xmi:id="koUSM" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsSetOperation" name="oclAsSet"
type="#UQF4+">
<ownedComments body="Returns a Set with oclText[self] as the sole content, unless oclText[self] is oclText[null] in which case returns an empty set,"/>
</ownedOperations>
<ownedOperations xmi:id="xOh0M" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsTypeOperation" isInvalidating="true"
name="oclAsType" type="#HZ,i,">
<ownedComments body="Evaluates to oclText[self], where oclText[self] is of the type identified by oclText[TT].&#xA;The type oclText[TT] may be any classifier defined by OCL or a user metamodel;&#xA;if the actual type of oclText[self] at evaluation time does not conform to oclText[TT],&#xA;then the oclAsType operation evaluates to oclText[invalid].&#xA;&#xA;If oclText[self] is a multiply classified instance, the current classification used for OCL navigation&#xA;is changed to the classification to which oclText[TT] conforms. The oclAsType call is not well-formed if&#xA;the classification is ambiguous.&#xA;&#xA;In the case of feature redefinition, casting an object to a supertype of its actual type&#xA;does not access the supertype’s definition of the feature;&#xA;according to the semantics of redefinition, the redefined feature simply does not exist for the object.&#xA;However, when casting to a supertype, any features additionally defined by the subtype are suppressed."/>
<ownedParameters xmi:id="Shnpr" isRequired="false" isTypeof="true" name="type" type="#HZ,i,"/>
<ownedPostconditions xmi:id="0dG7z" name="IsSelf">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="result = self" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#SYOvl" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" name="self" referredVariable="#EwkQp" type="#jbMkR"/>
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#8sVNe" type="#HZ,i,"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="EwkQp" name="self" type="#jbMkR"/>
<ownedParameters xsi:type="pivot:ParameterVariable" isRequired="false" name="type" representedParameter="#Shnpr" type="#HZ,i,"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="8sVNe" name="result" type="#HZ,i,"/>
</ownedSpecification>
</ownedPostconditions>
<ownedSignature>
<ownedParameters xmi:id="HZ,i," name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="OJbtr" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsInStateOperation" name="oclIsInState"
type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if the oclText[self] is in the state identified by statespec.&#xA;"/>
<ownedParameters isRequired="false" name="statespec" type="#IebtF"/>
</ownedOperations>
<ownedOperations xmi:id="Bz+rT" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsInvalidOperation" isValidating="true"
name="oclIsInvalid" type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if the oclText[self] is equal to OclInvalid.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="MuzAj" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation" name="oclIsKindOf"
type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if the type of oclText[self] conforms to oclText[type].&#xA;That is, oclText[self] is of type oclText[type] or a subtype of oclText[type].&#xA;"/>
<ownedParameters isRequired="false" name="type" type="#hlrMH"/>
</ownedOperations>
<ownedOperations xmi:id="qNfuM" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyUnsupportedOperation" name="oclIsNew"
type="#XEMMs">
<ownedComments body="Can only be used in a postcondition.&#xA;Evaluates to oclText[true] if the oclText[self] is created during performing the operation (for instance, it didn’t exist at precondition time).&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="y2TQz" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsTypeOfOperation" name="oclIsTypeOf"
type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if oclText[self] is of the type oclText[type] but not a subtype of oclText[type]."/>
<ownedParameters isRequired="false" name="type" type="#hlrMH"/>
</ownedOperations>
<ownedOperations xmi:id="aSwFn" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsUndefinedOperation" isValidating="true"
name="oclIsUndefined" type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if the oclText[self] is equal to oclText[invalid] or equal to oclText[null].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="YyEmT" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclLogOperation" isRequired="false"
name="oclLog" type="#zlfMH">
<ownedComments body="Evaluates to the self, with the side effect of generating a log message comprising self.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="YxE0K" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclLogOperation" isRequired="false"
name="oclLog" type="#zlfMH">
<ownedComments body="Evaluates to the self, with the side effect of generating a log message comprising message followed by self.&#xA;"/>
<ownedParameters isRequired="false" name="message" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="+nmZv" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclTypeOperation" isTypeof="true"
name="oclType" type="#zlfMH">
<ownedComments body="Evaluates to the most derived type of which oclText[self] is currently an instance. If oclText[self] is an instance of a multiply&#xA;classified type, the return is the most derived type of the current classification which is established when the instance is&#xA;passed to OCL, or re-established by an oclText[oclAsType()] call.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="N,CWN" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclTypesOperation" name="oclTypes"
type="#PRF4+">
<ownedComments body="Evaluates to all of the most derived type of which oclText[self] is an instance. The return from oclText[oclTypes()]&#xA;is normally equivalent to that from oclText[oclType()] unless oclText[self] is an instance of multiply classified type.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="4f1nm" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Returns a string representation of oclText[self]."/>
</ownedOperations>
<ownedProperties xmi:id="c8rKW" isImplicit="true" name="OclInvalid" opposite="#QSjNW" type="#4eSgX"/>
</ownedClasses>
<ownedClasses xmi:id="BEwMu" isAbstract="true" name="OclComparable" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclComparable defines the compareTo operation used by the sortedBy iteration. Only types that provide a derived&#xA;compareTo implementation may be sorted.&#xA;"/>
<ownedOperations xmi:id="3+qvY" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanOperation" name="&lt;"
precedence="#FpitR" type="#XEMMs">
<ownedComments body="True if oclText[self] is less than oclText[that].&#xA;"/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="8brvY" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclComparableLessThanEqualOperation" name="&lt;="
precedence="#FpitR" type="#XEMMs">
<ownedComments body="True if oclText[self] is less than or equal to oclText[that].&#xA;"/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="5+qvY" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclComparableGreaterThanOperation" name=">"
precedence="#FpitR" type="#XEMMs">
<ownedComments body="True if oclText[self] is greater than oclText[that].&#xA;"/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="6crvY" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclComparableGreaterThanEqualOperation"
name=">=" precedence="#FpitR" type="#XEMMs">
<ownedComments body="True if oclText[self] is greater than or equal to oclText[that].&#xA;"/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="7GliE" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclComparableCompareToOperation" name="compareTo"
type="#tYtCd">
<ownedComments body="Return -ve, 0, +ve according to whether self is less than, equal to , or greater than that.&#xA;&#xA;The compareTo operation should be commutative."/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xmi:id="zfDWR" isAbstract="true" name="OclElement" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclElement is the implicit supertype of any user-defined type that has no explicit supertypes. Operations defined&#xA;for OclElement are therefore applicable to all user-defined types.&#xA;"/>
<ownedOperations xmi:id="5w96x" implementationClass="org.eclipse.ocl.pivot.library.classifier.ClassifierAllInstancesOperation" isStatic="true"
name="allInstances" type="#UQF4+">
<ownedComments body="Return a set of all instances of the type and derived types of self."/>
</ownedOperations>
<ownedOperations xmi:id="2xDak" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclElementOclAsModelTypeOperation" isInvalidating="true"
name="oclAsModelType" type="#00OUM">
<ownedComments body="Evaluates to oclText[self], where oclText[self] is of the model type identified by oclText[TT].&#xA;&#xA;Most model elements have metamodel types for use with oclAsType, but no model type and so the return is oclText[invalid].&#xA;&#xA;Model elements such as UML's InstnaceSpecification that do support distinct model and metamodel types return oclText[self]&#xA;with the cast type oclText[TT] that may be used for further navigation.&#xA;If the actual model type of oclText[self] at evaluation time does not conform to oclText[TT],&#xA;then the oclAsType operation evaluates to oclText[invalid].&#xA;&#xA;If oclText[self] is a multiply classified instance, the current classification used for OCL navigation&#xA;is changed to the classification to which oclText[TT] conforms. The oclAsModelType call is not well-formed if&#xA;the classification is ambiguous."/>
<ownedParameters xmi:id="DIxh9" isRequired="false" isTypeof="true" name="type" type="#00OUM"/>
<ownedPostconditions xmi:id="lEQzF" name="IsSelf">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="result = self" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#SYOvl" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" name="self" referredVariable="#9sxzW" type="#zfDWR"/>
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#1piwL" type="#00OUM"/>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="9sxzW" name="self" type="#zfDWR"/>
<ownedParameters xsi:type="pivot:ParameterVariable" isRequired="false" name="type" representedParameter="#DIxh9" type="#00OUM"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="1piwL" name="result" type="#00OUM"/>
</ownedSpecification>
</ownedPostconditions>
<ownedSignature>
<ownedParameters xmi:id="00OUM" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="lyeXH" implementationClass="org.eclipse.ocl.pivot.library.classifier.ClassifierOclContainerOperation" isRequired="false"
name="oclContainer" type="#zfDWR">
<ownedComments body="Returns the object for which self is a composed content or null if there is no such object."/>
</ownedOperations>
<ownedOperations xmi:id="ua8bl" implementationClass="org.eclipse.ocl.pivot.library.classifier.ClassifierOclContentsOperation" name="oclContents"
type="#U6ALG">
<ownedComments body="Returns the composed contents of self."/>
</ownedOperations>
<ownedOperations xmi:id="hgQiG" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclElementOclIsModelKindOfOperation" name="oclIsModelKindOf"
type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if the type of oclText[self] conforms to the model type oclText[type].&#xA;That is, oclText[self] is of type oclText[type] or a subtype of oclText[type].&#xA;&#xA;The return is normally oclText[false] since few model elements have model types. UML's InstanceSpecification::classifier provides&#xA;a multiple classification for a model type.&#xA;"/>
<ownedParameters isRequired="false" name="type" type="#hlrMH"/>
</ownedOperations>
<ownedOperations xmi:id="nIOBo" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclElementOclModelTypeOperation" isTypeof="true"
name="oclModelType" type="#zlfMH">
<ownedComments body="Evaluates to the most derived model type of which oclText[self] is currently an instance. If oclText[self] is an instance of a multiply&#xA;classified model type, the return is the most derived type of the current classification which is established&#xA;by an oclText[oclAsModelType()] call.&#xA;&#xA;The return is normally oclText[invalid] since few model elements have model types. UML's InstanceSpecification::classifier provides&#xA;a multiple classification for a model type."/>
</ownedOperations>
<ownedOperations xmi:id="kxvpX" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclElementOclModelTypesOperation" name="oclModelTypes"
type="#PRF4+">
<ownedComments body="Evaluates to all of the most derived model types of which oclText[self] is an instance. The return from oclText[oclModelTypes()]&#xA;is normally equivalent to that from oclText[oclModelType()] unless oclText[self] is an instance of multiply classified model type.&#xA;&#xA;The return is normally oclText[invalid] since few model elements have model types. UML's InstanceSpecification::classifier provides&#xA;a multiple classification for a model type.&#xA;"/>
</ownedOperations>
<ownedProperties xmi:id="IcnIy" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclElementOclContainerProperty" isRequired="false"
name="oclContainer" type="#zfDWR">
<ownedComments body="The object for which self is a composed content or null if there is no such object.&#xA;"/>
</ownedProperties>
<ownedProperties xmi:id="REFNQ" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclElementOclContentsProperty" name="oclContents"
type="#U6ALG">
<ownedComments body="The composed contents of self."/>
</ownedProperties>
<ownedProperties xmi:id="i+8xQ" isImplicit="true" name="OclElement" opposite="#IcnIy" type="#158KG"/>
<ownedProperties xmi:id="hXMRj" isImplicit="true" name="OclElement" opposite="#REFNQ" type="#158KG"/>
</ownedClasses>
<ownedClasses xmi:id="+8+by" isAbstract="true" name="OclEnumeration" superClasses="#hlrMH">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The OclEnumeration type is the implicit supertype of any user Enumeration type.&#xA;"/>
<ownedOperations xmi:id="YJegt" implementationClass="org.eclipse.ocl.pivot.library.enumeration.EnumerationAllInstancesOperation"
isStatic="true" name="allInstances" type="#UQF4+">
<ownedComments body="Return a set of all enumeration values of oclText[self]."/>
</ownedOperations>
<ownedProperties xmi:id="DVi0w" implementationClass="org.eclipse.ocl.pivot.library.enumeration.EnumerationOwnedLiteralProperty"
isStatic="true" name="allLiterals" type="#rET9a">
<ownedComments body="Evaluates to the literals of the enumeration.&#xA;"/>
</ownedProperties>
</ownedClasses>
<ownedClasses xsi:type="pivot:InvalidType" xmi:id="urQRp" isAbstract="true" name="OclInvalid" superClasses="#7u3MH">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclInvalid is a type that conforms to all other types.&#xA;It has one single instance, identified as oclText[invalid].&#xA;Any property call applied on invalid results in oclText[invalid], except for the operations oclIsUndefined() and oclIsInvalid().&#xA;OclInvalid is itself an instance of the metatype InvalidType.&#xA;"/>
<ownedOperations xmi:id="20Esv" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedComments body="Returns oclText[invalid]."/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="xXEsv" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="Returns oclText[invalid]."/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="I9Ucd" implementationClass="org.eclipse.ocl.pivot.library.oclinvalid.OclInvalidAllInstancesOperation" isStatic="true"
name="allInstances" type="#UQF4+">
<ownedComments body="Returns oclText[invalid]."/>
</ownedOperations>
<ownedOperations xmi:id="3mHTu" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanAndOperation" isRequired="false"
isValidating="true" name="and" precedence="#VT87C" type="#XEMMs">
<ownedParameters isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="XCoFh" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanImpliesOperation" isRequired="false"
isValidating="true" name="implies" precedence="#1Odhg" type="#XEMMs">
<ownedParameters isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="DoKPW" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsSetOperation" name="oclAsSet"
type="#UQF4+"/>
<ownedOperations xmi:id="QOXxW" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsTypeOperation" isRequired="false"
name="oclAsType" type="#e0WDG">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#e0WDG"/>
<ownedSignature>
<ownedParameters xmi:id="e0WDG" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="FGLX2" isRequired="false" name="oclBadOperation" type="#jbMkR">
<ownedComments body="An oclBadOperation may be used as a placeholder in an unsuccessfully created OCLExpression."/>
</ownedOperations>
<ownedOperations xmi:id="gy0od" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsInvalidOperation" isValidating="true"
name="oclIsInvalid" type="#XEMMs"/>
<ownedOperations xmi:id="rtp9s" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsKindOfOperation" name="oclIsKindOf"
type="#XEMMs">
<ownedParameters isRequired="false" name="type" type="#hlrMH"/>
</ownedOperations>
<ownedOperations xmi:id="R2JN9" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsTypeOfOperation" name="oclIsTypeOf"
type="#XEMMs">
<ownedParameters isRequired="false" name="type" type="#hlrMH"/>
</ownedOperations>
<ownedOperations xmi:id="5RmCx" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsUndefinedOperation" isValidating="true"
name="oclIsUndefined" type="#XEMMs"/>
<ownedOperations xmi:id="dncW5" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclTypeOperation" isTypeof="true"
name="oclType" type="#zlfMH"/>
<ownedOperations xmi:id="D3wSu" implementationClass="org.eclipse.ocl.pivot.library.logical.BooleanAndOperation" isRequired="false"
isValidating="true" name="or" precedence="#BEt7C" type="#XEMMs">
<ownedParameters isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="Xfrkw" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Returns 'invalid'."/>
</ownedOperations>
<ownedProperties xmi:id="QSjNW" isRequired="false" name="oclBadProperty" type="#jbMkR">
<ownedComments body="An oclBadProperty may be used as a placeholder in an unsuccessfully created OCLExpression."/>
</ownedProperties>
</ownedClasses>
<ownedClasses xmi:id="ufpqK" isAbstract="true" name="OclLambda" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclLambda is the implicit supertype of all Lambda types. The operations defined for OclLambda&#xA;therefore apply to all lambda expressions.&#xA;"/>
</ownedClasses>
<ownedClasses xmi:id="+jBYt" isAbstract="true" name="OclMessage" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="OclMessage&#xA;This sub clause contains the definition of the standard type OclMessage.&#xA;As defined in this sub clause, each ocl message type is actually a template type with one parameter.&#xA;‘T’ denotes the parameter.&#xA;A concrete ocl message type is created by substituting an operation or signal for the T.&#xA;&#xA;The predefined type OclMessage is an instance of MessageType.&#xA;Every OclMessage is fully determined by either the operation, or signal given as parameter.&#xA;Note that there is conceptually an undefined (infinite) number of these types,&#xA;as each is determined by a different operation or signal.&#xA;These types are unnamed. Every type has as attributes the name of the operation or signal,&#xA;and either all formal parameters of the operation, or all attributes of the signal.&#xA;OclMessage is itself an instance of the metatype MessageType.&#xA;&#xA;OclMessage has a number of predefined operations, as shown in the OCL Standard Library.&#xA;"/>
<ownedOperations xmi:id="EX,aT" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyUnsupportedOperation" name="hasReturned"
type="#XEMMs">
<ownedComments body="True if type of template parameter is an operation call, and the called operation has returned a value.&#xA;This implies the fact that the message has been sent. False in all other cases.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="WqoFB" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyUnsupportedOperation" name="isOperationCall"
type="#XEMMs">
<ownedComments body="Returns oclText[true] if the OclMessage represents the sending of a UML Operation call.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="lZ5A7" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyUnsupportedOperation" name="isSignalSent"
type="#XEMMs">
<ownedComments body="Returns oclText[true] if the OclMessage represents the sending of a UML Signal.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="YNUsC" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyUnsupportedOperation" isRequired="false"
name="result" type="#jbMkR">
<ownedComments body="Returns the result of the called operation, if type of template parameter is an operation call,&#xA;and the called operation has returned a value. Otherwise the oclText[invalid] value is returned.&#xA;"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xsi:type="pivot:SelfType" xmi:id="zlfMH" isAbstract="true" name="OclSelf" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The pseudo-type OclSelf denotes the statically determinate type of oclText[self] in Operation&#xA;and Iteration signatures. Instances of OclSelf are never created.&#xA;"/>
</ownedClasses>
<ownedClasses xmi:id="IebtF" isAbstract="true" name="OclState" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
</ownedClasses>
<ownedClasses xmi:id="ZNWlJ" isAbstract="true" name="OclStereotype" superClasses="#hlrMH">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclStereotype is the implicit supertype of any UML stereotype. Operations defined&#xA;for OclStereotype are therefore applicable to all UML stereotypes.&#xA;"/>
<ownedOperations xmi:id="HIf49" implementationClass="org.eclipse.ocl.pivot.library.classifier.ClassifierAllInstancesOperation" isStatic="true"
name="allInstances" type="#UQF4+">
<ownedComments body="Return a set of all instances of the stereotype and derived types of self."/>
</ownedOperations>
</ownedClasses>
<ownedClasses xmi:id="D4eXY" isAbstract="true" name="OclSummable" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclSummable defines the sum and zero operations used by the Collection::sum iteration. Only types that provide derived&#xA;sum and zero implementations may be summed."/>
<ownedOperations xmi:id="A768F" isRequired="false" name="sum" type="#zlfMH">
<ownedComments body="Return the sum of self and that.&#xA;&#xA;The sum operation should be associative."/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="U7w9w" isRequired="false" name="zero" type="#zlfMH">
<ownedComments body="Return the 'zero' value of self to initialize a summation.&#xA;&#xA;zero().sum(self) = self."/>
</ownedOperations>
</ownedClasses>
<ownedClasses xmi:id=",qHxF" isAbstract="true" name="OclTuple" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclTuple is the implicit supertype of all Tuple types. The operations defined for OclTuple&#xA;therefore apply to all tuples.&#xA;"/>
<ownedOperations xmi:id="DHU8X" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="+pT8X" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xmi:id="hlrMH" isAbstract="true" name="OclType" superClasses="#zfDWR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclType is the implicit supertype of any UML type. Operations defined&#xA;for OclType are therefore applicable to all UML types.&#xA;"/>
<ownedOperations xmi:id="N,qUJ" implementationClass="org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation" name="conformsTo"
type="#XEMMs">
<ownedComments body="Returns true if type2 conforms to self."/>
<ownedParameters isRequired="false" name="type2" type="#hlrMH"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xsi:type="pivot:VoidType" xmi:id="7u3MH" isAbstract="true" name="OclVoid" superClasses="#jbMkR">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>OCL</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The type OclVoid is a type that conforms to all other types except OclInvalid.&#xA;It has one single instance, identified as oclText[null], that corresponds with the UML LiteralNull value specification.&#xA;Any property call applied on oclText[null] results in oclText[invalid], except for the&#xA;oclIsUndefined(), oclIsInvalid(), =(OclAny) and &lt;>(OclAny) operations.&#xA;However, by virtue of the implicit conversion to a collection literal,&#xA;an expression evaluating to oclText[null] can be used as source of collection operations (such as ‘isEmpty’).&#xA;If the source is the oclText[null] literal, it is implicitly converted to Bag{}.&#xA;&#xA;OclVoid is itself an instance of the metatype VoidType.&#xA;"/>
<ownedOperations xmi:id="P7CqP" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="KeCqP" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="Redefines the OclAny operation, returning oclText[true] if object is oclText[null], oclText[invalid]&#xA;if object is oclText[invalid], oclText[false] otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="hDTa9" implementationClass="org.eclipse.ocl.pivot.library.oclvoid.OclVoidAllInstancesOperation" isStatic="true"
name="allInstances" type="#PRF4+">
<ownedComments body="Returns oclText[Set{null}]."/>
</ownedOperations>
<ownedOperations xmi:id="QtFRO" implementationClass="org.eclipse.ocl.pivot.library.oclvoid.OclVoidAndOperation" isRequired="false"
name="and" precedence="#VT87C" type="#XEMMs">
<ownedParameters isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="wImDB" implementationClass="org.eclipse.ocl.pivot.library.oclvoid.OclVoidImpliesOperation" isRequired="false"
name="implies" precedence="#1Odhg" type="#XEMMs">
<ownedParameters isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="cuIN2" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsSetOperation" name="oclAsSet"
type="#UQF4+"/>
<ownedOperations xmi:id="54ym9" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsInvalidOperation" isValidating="true"
name="oclIsInvalid" type="#XEMMs"/>
<ownedOperations xmi:id="SYkAR" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyOclIsUndefinedOperation" isValidating="true"
name="oclIsUndefined" type="#XEMMs"/>
<ownedOperations xmi:id="c9uQO" implementationClass="org.eclipse.ocl.pivot.library.oclvoid.OclVoidOrOperation" isRequired="false"
name="or" precedence="#BEt7C" type="#XEMMs">
<ownedParameters isRequired="false" name="b" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="wlpiQ" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Returns oclText[null]."/>
</ownedOperations>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Vw5fK" isAbstract="true" name="OrderedCollection" superClasses="#cfVYj">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The OrderedCollection type provides the shared functionality of the OrderedSet and Sequence&#xA;collections for which the elements are ordered.&#xA;The common supertype of OrderedCollection is Collection.&#xA;"/>
<ownedOperations xmi:id="ArMlL" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionAtOperation" isInvalidating="true"
isRequired="false" name="at" type="#feFHs">
<ownedComments body="The i-th element of ordered collection.&#xA;"/>
<ownedParameters isRequired="false" name="index" type="#tYtCd"/>
</ownedOperations>
<ownedOperations xmi:id="mCC4m" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionFirstOperation" isInvalidating="true"
isRequired="false" name="first" type="#feFHs">
<ownedComments body="The first element in oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="Y,g1G" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionIndexOfOperation"
isInvalidating="true" name="indexOf" type="#tYtCd">
<ownedComments body="The index of object obj in the ordered collection.&#xA;"/>
<ownedParameters isRequired="false" name="obj" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="MC+Qh" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionLastOperation" isInvalidating="true"
isRequired="false" name="last" type="#feFHs">
<ownedComments body="The last element in oclText[self].&#xA;"/>
</ownedOperations>
<ownedSignature>
<ownedParameters xmi:id="feFHs" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="fIXUp" name="OrderedSet" superClasses="#zE,BO #Xv5mH">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The OrderedSet is a Set, the elements of which are ordered.&#xA;It contains no duplicates. OrderedSet is itself an instance of the metatype OrderedSetType.&#xA;An OrderedSet is not a subtype of Set, neither a subtype of Sequence.&#xA;The common supertype of Sets and OrderedSets is Collection.&#xA;"/>
<ownedOperations xmi:id="oLqxV" implementationClass="org.eclipse.ocl.pivot.library.collection.SetMinusOperation" name="-" precedence="#qLHeo"
type="#fIXUp">
<ownedComments body="The elements of oclText[self], which are not in s.&#xA;"/>
<ownedParameters name="s" type="#xUwyY"/>
</ownedOperations>
<ownedOperations xmi:id="ju9Jh" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="eR9Jh" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="TNM23" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionAppendOperation"
name="append" type="#fIXUp">
<ownedComments body="The set of elements, consisting of all elements of oclText[self], followed by object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#53+C2"/>
</ownedOperations>
<ownedOperations xmi:id="FuPDG" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionAppendAllOperation"
name="appendAll" type="#fIXUp">
<ownedComments body="The set of elements, consisting of all elements of oclText[self], followed by objects.&#xA;"/>
<ownedParameters name="objects" type="#zE,BO"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="05nm," implementationClass="org.eclipse.ocl.pivot.library.iterator.ClosureIteration"
name="closure" type="#fIXUp">
<ownedComments body="The closure of applying body transitively to every distinct element of the source collection.&#xA;"/>
<ownedIterators name="i" type="#53+C2"/>
<ownedParameters isRequired="false" name="lambda" type="#e5sKD"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="jV1iE" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectIteration"
name="collect" type="#,aKE3">
<ownedIterators isRequired="false" name="i" type="#53+C2"/>
<ownedParameters isRequired="false" name="lambda" type="#ekZDz"/>
<ownedSignature>
<ownedParameters xmi:id="ftoBy" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="6r5Ys" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectNestedIteration"
name="collectNested" type="#2wnD2">
<ownedComments body="The sequence of elements that results from applying body to every member of the source ordered collection.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#53+C2"/>
<ownedParameters isRequired="false" name="lambda" type="#,dI4y"/>
<ownedSignature>
<ownedParameters xmi:id="uWtir" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="IuVZi" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingOperation" name="excluding"
type="#fIXUp">
<ownedComments body="The ordered set containing all elements of oclText[self] apart from object.&#xA;&#xA;The order of the remaining elements is not changed.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="ilRHC" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingAllOperation" name="excludingAll"
type="#fIXUp">
<ownedComments body="The ordered set containing all elements of oclText[self] apart from all occurrences of all objects.&#xA;"/>
<ownedParameters name="objects" type="#AaA3o"/>
</ownedOperations>
<ownedOperations xmi:id="cXFid" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionFlattenOperation" name="flatten"
type="#U8tub">
<ownedSignature>
<ownedParameters xmi:id="oGEci" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="eutuy" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingOperation" name="including"
type="#fIXUp">
<ownedComments body="The ordered set containing all elements of oclText[self] plus object added as the last element if not already present.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#53+C2"/>
</ownedOperations>
<ownedOperations xmi:id="jsbWz" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingAllOperation" name="includingAll"
type="#fIXUp">
<ownedComments body="The ordered set containing all elements of oclText[self] plus objects added as the last elements.&#xA;"/>
<ownedParameters name="objects" type="#m0JrX"/>
</ownedOperations>
<ownedOperations xmi:id="9XmwW" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionInsertAtOperation"
isInvalidating="true" name="insertAt" type="#fIXUp">
<ownedComments body="The ordered set consisting of oclText[self] with object present at position index.&#xA;"/>
<ownedParameters isRequired="false" name="index" type="#tYtCd"/>
<ownedParameters isRequired="false" name="object" type="#53+C2"/>
</ownedOperations>
<ownedOperations xmi:id="H,g+4" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionPrependOperation"
name="prepend" type="#fIXUp">
<ownedComments body="The sequence consisting of object, followed by all elements in oclText[self].&#xA;"/>
<ownedParameters xmi:id="VAP6J" isRequired="false" name="object" type="#53+C2"/>
<ownedPostconditions xmi:id="97mHo" name="IsSizePlusOne">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="result->size() = self->size() + 1" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#UJEtV" type="#XEMMs">
<ownedArguments xsi:type="pivot:OperationCallExp" name="+" referredOperation="#iA+ir" type="#tYtCd">
<ownedArguments xsi:type="pivot:IntegerLiteralExp" integerSymbol="1" type="#tYtCd"/>
<ownedSource xsi:type="pivot:OperationCallExp" name="size" referredOperation="#eYPCX" type="#tYtCd">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#Vf73G" type="#fIXUp"/>
</ownedSource>
</ownedArguments>
<ownedSource xsi:type="pivot:OperationCallExp" name="size" referredOperation="#eYPCX" type="#tYtCd">
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#Ncs07" type="#fIXUp"/>
</ownedSource>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="Vf73G" name="self" type="#fIXUp"/>
<ownedParameters xsi:type="pivot:ParameterVariable" isRequired="false" name="object" representedParameter="#VAP6J" type="#53+C2"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="Ncs07" name="result" type="#fIXUp"/>
</ownedSpecification>
</ownedPostconditions>
<ownedPostconditions xmi:id="BrQM3" name="IsAtStart">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="result->at(1) = object" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#SYOvl" type="#XEMMs">
<ownedArguments xsi:type="pivot:VariableExp" isRequired="false" name="object" referredVariable="#xCT1a" type="#53+C2"/>
<ownedSource xsi:type="pivot:OperationCallExp" isRequired="false" name="at" referredOperation="#ArMlL" type="#53+C2">
<ownedArguments xsi:type="pivot:IntegerLiteralExp" integerSymbol="1" type="#tYtCd"/>
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#xD+HB" type="#fIXUp"/>
</ownedSource>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" name="self" type="#fIXUp"/>
<ownedParameters xsi:type="pivot:ParameterVariable" xmi:id="xCT1a" isRequired="false" name="object" representedParameter="#VAP6J"
type="#53+C2"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="xD+HB" name="result" type="#fIXUp"/>
</ownedSpecification>
</ownedPostconditions>
<ownedPostconditions xmi:id="iw4n5" name="IsShiftedAlong">
<ownedSpecification xsi:type="pivot:ExpressionInOCL" body="Sequence{1..self->size()}->forAll(index : Integer[1] | self->at(index) = result->at(index + 1))"
isRequired="false" type="#XEMMs">
<ownedBody xsi:type="pivot:IteratorExp" isRequired="false" name="forAll" referredIteration="#WqmML" type="#XEMMs">
<ownedBody xsi:type="pivot:OperationCallExp" name="=" referredOperation="#SYOvl" type="#XEMMs">
<ownedArguments xsi:type="pivot:OperationCallExp" isRequired="false" name="at" referredOperation="#ArMlL" type="#53+C2">
<ownedArguments xsi:type="pivot:OperationCallExp" name="+" referredOperation="#iA+ir" type="#tYtCd">
<ownedArguments xsi:type="pivot:IntegerLiteralExp" integerSymbol="1" type="#tYtCd"/>
<ownedSource xsi:type="pivot:VariableExp" name="index" referredVariable="#ZZk,E" type="#tYtCd"/>
</ownedArguments>
<ownedSource xsi:type="pivot:VariableExp" name="result" referredVariable="#aVV8Q" type="#fIXUp"/>
</ownedArguments>
<ownedSource xsi:type="pivot:OperationCallExp" isRequired="false" name="at" referredOperation="#ArMlL" type="#53+C2">
<ownedArguments xsi:type="pivot:VariableExp" name="index" referredVariable="#ZZk,E" type="#tYtCd"/>
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#iYk,b" type="#fIXUp"/>
</ownedSource>
</ownedBody>
<ownedIterators xsi:type="pivot:IteratorVariable" xmi:id="ZZk,E" name="index" representedParameter="#HfeAP" type="#tYtCd"/>
<ownedSource xsi:type="pivot:CollectionLiteralExp" kind="Sequence" type="#dhqjr">
<ownedParts xsi:type="pivot:CollectionRange" type="#tYtCd">
<ownedFirst xsi:type="pivot:IntegerLiteralExp" integerSymbol="1" type="#tYtCd"/>
<ownedLast xsi:type="pivot:OperationCallExp" name="size" referredOperation="#eYPCX" type="#tYtCd">
<ownedSource xsi:type="pivot:VariableExp" name="self" referredVariable="#iYk,b" type="#fIXUp"/>
</ownedLast>
</ownedParts>
</ownedSource>
</ownedBody>
<ownedContext xsi:type="pivot:ParameterVariable" xmi:id="iYk,b" name="self" type="#fIXUp"/>
<ownedParameters xsi:type="pivot:ParameterVariable" isRequired="false" name="object" representedParameter="#VAP6J" type="#53+C2"/>
<ownedResult xsi:type="pivot:ParameterVariable" xmi:id="aVV8Q" name="result" type="#fIXUp"/>
</ownedSpecification>
</ownedPostconditions>
</ownedOperations>
<ownedOperations xmi:id="RqODI" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionPrependAllOperation"
name="prependAll" type="#fIXUp">
<ownedComments body="The sequence consisting of objects, followed by all elements in oclText[self].&#xA;"/>
<ownedParameters name="objects" type="#zE,BO"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="YfWPU" implementationClass="org.eclipse.ocl.pivot.library.iterator.RejectIteration"
name="reject" type="#fIXUp">
<ownedComments body="The ordered set of the source ordered set for which body is oclText[false].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#53+C2"/>
<ownedParameters name="lambda" type="#mzCFm"/>
</ownedOperations>
<ownedOperations xmi:id="6akgN" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionReverseOperation"
name="reverse" type="#fIXUp">
<ownedComments body="The ordered set of elements with same elements but with the opposite order.&#xA;"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="1ky8V" implementationClass="org.eclipse.ocl.pivot.library.iterator.SelectIteration"
name="select" type="#fIXUp">
<ownedComments body="The ordered set of the source ordered set for which body is oclText[true]&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#53+C2"/>
<ownedParameters name="lambda" type="#mzCFm"/>
</ownedOperations>
<ownedOperations xmi:id="gDyyo" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByKindOperation" name="selectByKind"
type="#qJsDQ">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#uTQA1"/>
<ownedSignature>
<ownedParameters xmi:id="uTQA1" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="GS3zo" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByTypeOperation" name="selectByType"
type="#Qz2BP">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#EXGsH"/>
<ownedSignature>
<ownedParameters xmi:id="EXGsH" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="tQVCv" implementationClass="org.eclipse.ocl.pivot.library.iterator.SortedByIteration"
name="sortedBy" type="#fIXUp">
<ownedComments body="Results in the ordered set containing all elements of the source collection.&#xA;The element for which body has the lowest value comes first, and so on.&#xA;The type of the body expression must have the &lt; operation defined.&#xA;The &lt; operation must return a Boolean value and must be transitive (i.e., if a &lt; b and b &lt; c, then a &lt; c).&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#53+C2"/>
<ownedParameters isRequired="false" name="lambda" type="#abftu"/>
</ownedOperations>
<ownedOperations xmi:id="yi+SY" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedSetSubOrderedSetOperation"
isInvalidating="true" name="subOrderedSet" type="#fIXUp">
<ownedComments body="The sub-set of oclText[self] starting at number lower, up to and including element number upper.&#xA;"/>
<ownedParameters isRequired="false" name="lower" type="#tYtCd"/>
<ownedParameters isRequired="false" name="upper" type="#tYtCd"/>
</ownedOperations>
<ownedSignature>
<ownedParameters xmi:id="53+C2" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xsi:type="pivot:PrimitiveType" xmi:id="Nr4QF" name="Real" superClasses="#BEwMu #D4eXY">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Primitive</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The standard type Real represents the mathematical concept of real.&#xA;Note that Integer is a subclass of Real,&#xA;so for each parameter of type Real, you can use an integer as the actual parameter.&#xA;Real is itself an instance of the metatype PrimitiveType (from UML).&#xA;"/>
<ownedOperations xmi:id="BJEtV" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericTimesOperation" name="*" precedence="#0NX0o"
type="#Nr4QF">
<ownedComments body="The value of the multiplication of oclText[self] and r.&#xA;"/>
<ownedParameters isRequired="false" name="r" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="CJEtV" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericPlusOperation" name="+" precedence="#qLHeo"
type="#Nr4QF">
<ownedComments body="The value of the addition of oclText[self] and r.&#xA;"/>
<ownedParameters isRequired="false" name="r" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="7HGgA" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericNegateOperation" name="-" precedence="#tgQwH"
type="#Nr4QF">
<ownedComments body="The negative value of oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="EJEtV" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericMinusOperation" name="-" precedence="#qLHeo"
type="#Nr4QF">
<ownedComments body="The value of the subtraction of r from oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="r" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="GJEtV" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericDivideOperation" isInvalidating="true"
name="/" precedence="#0NX0o" type="#Nr4QF">
<ownedComments body="The value of oclText[self] divided by r. Evaluates to oclText[invalid] if r is equal to zero.&#xA;"/>
<ownedParameters isRequired="false" name="r" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="ZmEtV" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedComments body="Returns oclText[true] if the numeric value of oclText[self] is the not the same as the numeric value of object2, oclText[false] otherwise."/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="UJEtV" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="Returns oclText[true] if the numeric value of oclText[self] is the same as the numeric value of object2, oclText[false] otherwise."/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="ApdgA" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericAbsOperation" name="abs" type="#Nr4QF">
<ownedComments body="The absolute value of oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="aXIUG" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericFloorOperation" name="floor" type="#tYtCd">
<ownedComments body="The largest integer that is less than or equal to oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="7detV" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericMaxOperation" name="max" type="#Nr4QF">
<ownedComments body="The maximum of oclText[self] and r.&#xA;"/>
<ownedParameters isRequired="false" name="r" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="phetV" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericMinOperation" name="min" type="#Nr4QF">
<ownedComments body="The minimum of oclText[self] and r.&#xA;"/>
<ownedParameters isRequired="false" name="r" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="cNx+G" implementationClass="org.eclipse.ocl.pivot.library.numeric.NumericRoundOperation" name="round" type="#tYtCd">
<ownedComments body="The integer that is closest to oclText[self]. When there are two such integers, the largest one.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="6QrlW" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Converts oclText[self] to a string value.&#xA;"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="rk5ZZ" name="Sequence" superClasses="#,2,Sg">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="A sequence is a collection where the elements are ordered.&#xA;An element may be part of a sequence more than once.&#xA;Sequence is itself an instance of the metatype SequenceType.&#xA;A Sentence is not a subtype of Bag.&#xA;The common supertype of Sentence and Bags is Collection.&#xA;"/>
<ownedOperations xmi:id=",ZZgp" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="68Ygp" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="True if oclText[self] contains the same elements as s in the same order.&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="v4nMA" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionAppendOperation"
name="append" type="#rk5ZZ">
<ownedComments body="The sequence of elements, consisting of all elements of oclText[self], followed by object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#l1i6D"/>
</ownedOperations>
<ownedOperations xmi:id="hZrZO" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionAppendAllOperation"
name="appendAll" type="#rk5ZZ">
<ownedComments body="The sequence of elements, consisting of all elements of oclText[self], followed by objects.&#xA;"/>
<ownedParameters name="objects" type="#,2,Sg"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="QlD9H" implementationClass="org.eclipse.ocl.pivot.library.iterator.ClosureIteration"
name="closure" type="#JPdH,">
<ownedComments body="The closure of applying body transitively to every distinct element of the source collection.&#xA;"/>
<ownedIterators name="i" type="#l1i6D"/>
<ownedParameters isRequired="false" name="lambda" type="#Vf8OR"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id=",AR5M" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectIteration"
name="collect" type="#bErdQ">
<ownedIterators isRequired="false" name="i" type="#l1i6D"/>
<ownedParameters isRequired="false" name="lambda" type="#WkcOL"/>
<ownedSignature>
<ownedParameters xmi:id="b0XaB" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="WXVv0" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectNestedIteration"
name="collectNested" type="#SaIdP">
<ownedComments body="The sequence of elements that results from applying body to every member of the source ordered collection.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#l1i6D"/>
<ownedParameters isRequired="false" name="lambda" type="#3dLDL"/>
<ownedSignature>
<ownedParameters xmi:id="qdc76" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="kZxvq" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingOperation" name="excluding"
type="#rk5ZZ">
<ownedComments body="The sequence containing all elements of oclText[self] apart from all occurrences of object.&#xA;&#xA;The order of the remaining elements is not changed.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="+QtdK" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingAllOperation" name="excludingAll"
type="#rk5ZZ">
<ownedComments body="The sequence containing all elements of oclText[self] apart from all occurrences of all objects.&#xA;"/>
<ownedParameters name="objects" type="#AaA3o"/>
</ownedOperations>
<ownedOperations xmi:id="4Ch4l" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionFlattenOperation" name="flatten"
type="#8BxNl">
<ownedComments body="Redefines the Collection operation. If the element type is not a collection type, this results in the same sequence as oclText[self].&#xA;If the element type is a collection type, the result is the sequence containing all the elements&#xA;of all the recursively flattened elements of oclText[self]. The order of the elements is partial.&#xA;"/>
<ownedSignature>
<ownedParameters xmi:id="kNz0x" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="6ZJF7" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingOperation" name="including"
type="#rk5ZZ">
<ownedComments body="The sequence containing all elements of oclText[self] plus object added as the last element.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#l1i6D"/>
</ownedOperations>
<ownedOperations xmi:id=",X3s7" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingAllOperation" name="includingAll"
type="#rk5ZZ">
<ownedComments body="The sequence containing all elements of oclText[self] plus objects added as the last elements.&#xA;"/>
<ownedParameters name="objects" type="#ymK8p"/>
</ownedOperations>
<ownedOperations xmi:id="ZDCHf" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionInsertAtOperation"
isInvalidating="true" name="insertAt" type="#rk5ZZ">
<ownedComments body="The sequence consisting of oclText[self] with object inserted at position index.&#xA;"/>
<ownedParameters isRequired="false" name="index" type="#tYtCd"/>
<ownedParameters isRequired="false" name="object" type="#l1i6D"/>
</ownedOperations>
<ownedOperations xmi:id="jq8UB" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionPrependOperation"
name="prepend" type="#rk5ZZ">
<ownedComments body="The sequence consisting of object, followed by all elements in oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#l1i6D"/>
</ownedOperations>
<ownedOperations xmi:id="tVqZQ" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionPrependAllOperation"
name="prependAll" type="#rk5ZZ">
<ownedComments body="The sequence consisting of objects, followed by all elements in oclText[self].&#xA;"/>
<ownedParameters name="objects" type="#,2,Sg"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="0Kylc" implementationClass="org.eclipse.ocl.pivot.library.iterator.RejectIteration"
name="reject" type="#rk5ZZ">
<ownedComments body="The subsequence of the source sequence for which body is oclText[false].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#l1i6D"/>
<ownedParameters name="lambda" type="#aP8t+"/>
</ownedOperations>
<ownedOperations xmi:id="WGA3V" implementationClass="org.eclipse.ocl.pivot.library.collection.OrderedCollectionReverseOperation"
name="reverse" type="#rk5ZZ">
<ownedComments body="The sequence containing the same elements but with the opposite order.&#xA;"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="RQOTe" implementationClass="org.eclipse.ocl.pivot.library.iterator.SelectIteration"
name="select" type="#rk5ZZ">
<ownedComments body="The subsequence of the source sequence for which body is oclText[true].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#l1i6D"/>
<ownedParameters name="lambda" type="#aP8t+"/>
</ownedOperations>
<ownedOperations xmi:id="8uNJx" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByKindOperation" name="selectByKind"
type="#SPviZ">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#qa,YE"/>
<ownedSignature>
<ownedParameters xmi:id="qa,YE" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="i9SKx" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByTypeOperation" name="selectByType"
type="#445gY">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#Ae1EX"/>
<ownedSignature>
<ownedParameters xmi:id="Ae1EX" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="J8wY3" implementationClass="org.eclipse.ocl.pivot.library.iterator.SortedByIteration"
name="sortedBy" type="#rk5ZZ">
<ownedComments body="Results in the Sequence containing all elements of the source collection.&#xA;The element for which body has the lowest value comes first, and so on.&#xA;The type of the body expression must have the &lt; operation defined.&#xA;The &lt; operation must return a Boolean value and must be transitive (i.e., if a &lt; b and b &lt; c then a &lt; c).&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#l1i6D"/>
<ownedParameters isRequired="false" name="lambda" type="#O3YWH"/>
</ownedOperations>
<ownedOperations xmi:id="aqloy" implementationClass="org.eclipse.ocl.pivot.library.collection.SequenceSubSequenceOperation" isInvalidating="true"
name="subSequence" type="#rk5ZZ">
<ownedComments body="The sub-sequence of oclText[self] starting at number lower, up to and including element number upper.&#xA;"/>
<ownedParameters isRequired="false" name="lower" type="#tYtCd"/>
<ownedParameters isRequired="false" name="upper" type="#tYtCd"/>
</ownedOperations>
<ownedSignature>
<ownedParameters xmi:id="l1i6D" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="MGgHF" name="Set" superClasses="#kfuQE">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedOperations xmi:id="hiqn0" implementationClass="org.eclipse.ocl.pivot.library.collection.SetMinusOperation" name="-" precedence="#qLHeo"
type="#MGgHF">
<ownedComments body="The elements of oclText[self], which are not in s.&#xA;"/>
<ownedParameters name="s" type="#xUwyY"/>
</ownedOperations>
<ownedOperations xmi:id="cF+,," implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="Xo9,," implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedComments body="Evaluates to oclText[true] if oclText[self] and s contain the same elements.&#xA;"/>
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="tQoce" implementationClass="org.eclipse.ocl.pivot.library.iterator.ClosureIteration"
name="closure" type="#MGgHF">
<ownedComments body="The closure of applying body transitively to every distinct element of the source collection.&#xA;"/>
<ownedIterators name="i" type="#ODsm5"/>
<ownedParameters isRequired="false" name="lambda" type="#Uo45T"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="cs1Yj" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectIteration"
name="collect" type="#f6RAK">
<ownedIterators isRequired="false" name="i" type="#ODsm5"/>
<ownedParameters isRequired="false" name="lambda" type="#A88rw"/>
<ownedSignature>
<ownedParameters xmi:id="gbWpi" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="zC6OL" implementationClass="org.eclipse.ocl.pivot.library.iterator.CollectNestedIteration"
name="collectNested" type="#WQv,I">
<ownedComments body="The Bag of elements which results from applying body to every member of the source nonordered collection.&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#ODsm5"/>
<ownedParameters isRequired="false" name="lambda" type="#h1rgw"/>
<ownedSignature>
<ownedParameters xmi:id="vEbKc" name="V"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="BFWPB" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingOperation" name="excluding"
type="#MGgHF">
<ownedComments body="The set containing all elements of oclText[self] without object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#jbMkR"/>
</ownedOperations>
<ownedOperations xmi:id="b8R9g" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionExcludingAllOperation" name="excludingAll"
type="#MGgHF">
<ownedComments body="The set containing all elements of oclText[self] apart from all occurrences of all objects.&#xA;"/>
<ownedParameters name="objects" type="#AaA3o"/>
</ownedOperations>
<ownedOperations xmi:id="VuFY8" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionFlattenOperation" name="flatten"
type="#a5bwe">
<ownedComments body="Redefines the Collection operation. If the element type is not a collection type, this results in the same set as oclText[self].&#xA;If the element type is a collection type, the result is the set containing all the elements of all the recursively flattened elements of oclText[self].&#xA;"/>
<ownedSignature>
<ownedParameters xmi:id="p0xDT" name="T2"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="XFukR" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingOperation" name="including"
type="#MGgHF">
<ownedComments body="The set containing all elements of oclText[self] plus object.&#xA;"/>
<ownedParameters isRequired="false" name="object" type="#ODsm5"/>
</ownedOperations>
<ownedOperations xmi:id="cDcMS" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIncludingAllOperation" name="includingAll"
type="#MGgHF">
<ownedComments body="The set containing all elements of oclText[self] and objects.&#xA;"/>
<ownedParameters name="objects" type="#zk+UU"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="R2WFz" implementationClass="org.eclipse.ocl.pivot.library.iterator.RejectIteration"
name="reject" type="#MGgHF">
<ownedComments body="The subset of the source set for which body is oclText[false].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#ODsm5"/>
<ownedParameters name="lambda" type="#5XKsi"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="u7yy0" implementationClass="org.eclipse.ocl.pivot.library.iterator.SelectIteration"
name="select" type="#MGgHF">
<ownedComments body="The subset of set for which expr is oclText[true].&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#ODsm5"/>
<ownedParameters name="lambda" type="#5XKsi"/>
</ownedOperations>
<ownedOperations xmi:id="ZayoH" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByKindOperation" name="selectByKind"
type="#wGaFT">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#vB+nl"/>
<ownedSignature>
<ownedParameters xmi:id="vB+nl" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id=",o3pH" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionSelectByTypeOperation" name="selectByType"
type="#WwkDS">
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#FF0T4"/>
<ownedSignature>
<ownedParameters xmi:id="FF0T4" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="mnV4N" implementationClass="org.eclipse.ocl.pivot.library.iterator.SortedByIteration"
name="sortedBy" type="#KNRgp">
<ownedComments body="Results in the ordered set containing all elements of the source collection.&#xA;The element for which body has the lowest value comes first, and so on.&#xA;The type of the body expression must have the &lt; operation defined.&#xA;The &lt; operation must return a Boolean value and must be transitive (i.e., if a &lt; b and b &lt; c, then a &lt; c).&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#ODsm5"/>
<ownedParameters isRequired="false" name="lambda" type="#t,mUr"/>
</ownedOperations>
<ownedSignature>
<ownedParameters xmi:id="ODsm5" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xmi:id="AGJ5J" name="State" superClasses="#IebtF">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
</ownedClasses>
<ownedClasses xsi:type="pivot:PrimitiveType" xmi:id="AlwVZ" name="String" superClasses="#BEwMu #D4eXY">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Primitive</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The standard type String represents strings, which can be both ASCII or Unicode.&#xA;String is itself an instance of the metatype PrimitiveType (from UML).&#xA;"/>
<ownedOperations xmi:id="gJ7dJ" implementationClass="org.eclipse.ocl.pivot.library.string.StringConcatOperation" name="+" precedence="#qLHeo"
type="#AlwVZ">
<ownedComments body="The concatenation of oclText[self] and s.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="6L5cn" implementationClass="org.eclipse.ocl.pivot.library.string.StringLessThanOperation" name="&lt;" precedence="#FpitR"
type="#XEMMs">
<ownedComments body="True if oclText[self] is less than s, using the locale defined by looking up oclLocale in the current environment.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id=",o5cn" implementationClass="org.eclipse.ocl.pivot.library.string.StringLessThanEqualOperation" name="&lt;="
precedence="#FpitR" type="#XEMMs">
<ownedComments body="True if oclText[self] is less than or equal to s, using the locale defined by looking up oclLocale in the current environment.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="Ap5cn" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyNotEqualOperation" name="&lt;>"
precedence="#YwCPU" type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="7L5cn" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyEqualOperation" name="=" precedence="#YwCPU"
type="#XEMMs">
<ownedParameters isRequired="false" name="object2" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="8L5cn" implementationClass="org.eclipse.ocl.pivot.library.string.StringGreaterThanOperation" name=">" precedence="#FpitR"
type="#XEMMs">
<ownedComments body="True if oclText[self] is greater than s, using the locale defined by looking up oclLocale in the current environment.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="9p5cn" implementationClass="org.eclipse.ocl.pivot.library.string.StringGreaterThanEqualOperation" name=">="
precedence="#FpitR" type="#XEMMs">
<ownedComments body="True if oclText[self] is greater than or equal to s, using the locale defined by looking up oclLocale in the current environment.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id=",8yw8" implementationClass="org.eclipse.ocl.pivot.library.string.StringAtOperation" isInvalidating="true"
name="at" type="#AlwVZ">
<ownedComments body="Queries the character at position i in oclText[self].&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#tYtCd"/>
</ownedOperations>
<ownedOperations xmi:id="fz1ec" implementationClass="org.eclipse.ocl.pivot.library.string.StringCharactersOperation" name="characters"
type="#4nGDi">
<ownedComments body="Obtains the characters of oclText[self] as a sequence.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="+TzPT" implementationClass="org.eclipse.ocl.pivot.library.string.StringCompareToOperation" name="compareTo"
type="#tYtCd">
<ownedComments body="The comparison of oclText[self] with oclText[that]. -ve if less than, 0 if equal, +ve if greater than.&#xA;"/>
<ownedParameters isRequired="false" name="that" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="Jlyt4" implementationClass="org.eclipse.ocl.pivot.library.string.StringConcatOperation" name="concat" type="#AlwVZ">
<ownedComments body="The concatenation of oclText[self] and s.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="T4iXx" implementationClass="org.eclipse.ocl.pivot.library.string.StringEndsWithOperation" name="endsWith"
type="#XEMMs">
<ownedComments body="Returns true if oclText[self] ends with the string s.&#xA;Every string ends with the empty string.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="29V1Y" implementationClass="org.eclipse.ocl.pivot.library.string.StringEqualsIgnoreCaseOperation" name="equalsIgnoreCase"
type="#XEMMs">
<ownedComments body="Queries whether s and oclText[self] are equivalent under case-insensitive collation.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="+h,S9" implementationClass="org.eclipse.ocl.pivot.library.string.StringIndexOfOperation" name="indexOf"
type="#tYtCd">
<ownedComments body="Queries the first index in oclText[self] at which s is a substring of oclText[self], or zero if s is not a substring of oclText[self].&#xA;The empty string is a substring of every string at index 1 (and also at all other indexes).&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="Ikgmt" implementationClass="org.eclipse.ocl.pivot.library.string.StringLastIndexOfOperation" name="lastIndexOf"
type="#tYtCd">
<ownedComments body="Queries the last in oclText[self] at which s is a substring of oclText[self], or zero if s is not a substring of oclText[self].&#xA;The empty string is a substring of every string at index oclText[self]-size()+1 (and also at all other indexes).&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="otjl7" implementationClass="org.eclipse.ocl.pivot.library.string.StringMatchesOperation" name="matches"
type="#XEMMs">
<ownedComments body="Use a regular expression match and return true if self matches regex, false otherwise.&#xA;"/>
<ownedParameters isRequired="false" name="regex" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="CQJau" implementationClass="org.eclipse.ocl.pivot.library.string.StringReplaceAllOperation" isInvalidating="true"
name="replaceAll" type="#AlwVZ">
<ownedComments body="Return a string derived from self by replacing all matches of regex by replacement.&#xA;"/>
<ownedParameters isRequired="false" name="regex" type="#AlwVZ"/>
<ownedParameters isRequired="false" name="replacement" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="RIn,R" implementationClass="org.eclipse.ocl.pivot.library.string.StringReplaceFirstOperation" isInvalidating="true"
name="replaceFirst" type="#AlwVZ">
<ownedComments body="Return a string derived from self by replacing the first match of regex by replacement.&#xA;"/>
<ownedParameters isRequired="false" name="regex" type="#AlwVZ"/>
<ownedParameters isRequired="false" name="replacement" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="2JZdS" implementationClass="org.eclipse.ocl.pivot.library.string.StringSizeOperation" name="size" type="#tYtCd">
<ownedComments body="The number of characters in oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="s7Aws" implementationClass="org.eclipse.ocl.pivot.library.string.StringStartsWithOperation" name="startsWith"
type="#XEMMs">
<ownedComments body="Returns true if oclText[self] starts with the string s.&#xA;Every string starts with the empty string.&#xA;"/>
<ownedParameters isRequired="false" name="s" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="cB5Zu" implementationClass="org.eclipse.ocl.pivot.library.string.StringSubstituteAllOperation" name="substituteAll"
type="#AlwVZ">
<ownedComments body="Return a string derived from self by replacing all occurrences of oldSubstring by newSubstring.&#xA;"/>
<ownedParameters isRequired="false" name="oldSubstring" type="#AlwVZ"/>
<ownedParameters isRequired="false" name="newSubstring" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="r,7LO" implementationClass="org.eclipse.ocl.pivot.library.string.StringSubstituteFirstOperation" name="substituteFirst"
type="#AlwVZ">
<ownedComments body="Return a string derived from self by replacing the first occurrence of oldSubstring by newSubstring.&#xA;Returns invalid if there is no first occurrence.&#xA;"/>
<ownedParameters isRequired="false" name="oldSubstring" type="#AlwVZ"/>
<ownedParameters isRequired="false" name="newSubstring" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="LKXax" implementationClass="org.eclipse.ocl.pivot.library.string.StringSubstringOperation" isInvalidating="true"
name="substring" type="#AlwVZ">
<ownedComments body="The sub-string of oclText[self] starting at character number lower, up to and including character number upper. Character numbers run from 1 to self.size().&#xA;"/>
<ownedParameters isRequired="false" name="lower" type="#tYtCd"/>
<ownedParameters isRequired="false" name="upper" type="#tYtCd"/>
</ownedOperations>
<ownedOperations xmi:id="ieH+y" implementationClass="org.eclipse.ocl.pivot.library.string.StringToBooleanOperation" isInvalidating="true"
name="toBoolean" type="#XEMMs">
<ownedComments body="Converts oclText[self] to a boolean value.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="4yo0j" implementationClass="org.eclipse.ocl.pivot.library.string.StringToIntegerOperation" isInvalidating="true"
name="toInteger" type="#tYtCd">
<ownedComments body="Converts oclText[self] to an Integer value.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="7O7XM" implementationClass="org.eclipse.ocl.pivot.library.string.StringToLowerCaseOperation" name="toLower"
type="#AlwVZ">
<ownedComments body="This is a deprecated variant of toLowerCase() preserving compatibility with traditional Eclipse OCL behaviour.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="LAZcO" implementationClass="org.eclipse.ocl.pivot.library.string.StringToLowerCaseOperation" name="toLowerCase"
type="#AlwVZ">
<ownedComments body="Converts oclText[self] to lower case, using the locale defined by looking up oclLocale in the current environment.&#xA;Otherwise, returns the same string as oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="ukNde" implementationClass="org.eclipse.ocl.pivot.library.string.StringToRealOperation" isInvalidating="true"
name="toReal" type="#Nr4QF">
<ownedComments body="Converts oclText[self] to a Real[1] value.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="hTgVo" implementationClass="org.eclipse.ocl.pivot.library.oclany.OclAnyToStringOperation" name="toString"
type="#AlwVZ">
<ownedComments body="Returns oclText[self]."/>
</ownedOperations>
<ownedOperations xmi:id="cFu3M" implementationClass="org.eclipse.ocl.pivot.library.string.StringToUpperCaseOperation" name="toUpper"
type="#AlwVZ">
<ownedComments body="This is a deprecated variant of toUpperCase() preserving compatibility with traditional Eclipse OCL behaviour.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="sUwb6" implementationClass="org.eclipse.ocl.pivot.library.string.StringToUpperCaseOperation" name="toUpperCase"
type="#AlwVZ">
<ownedComments body="Converts oclText[self] to upper case, using the locale defined by looking up oclLocale in the current environment.&#xA;Otherwise, returns the same string as oclText[self].&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="wMSdQ" implementationClass="org.eclipse.ocl.pivot.library.string.StringTokenizeOperation" name="tokenize"
type="#4nGDi">
<ownedComments body="Partition oclText[self] into a sequence substrings separated by any of space, line-feed, carriage-return, form-feed and horizontal-tab delimiters.&#xA;The delimiters are omitted from the return.&#xA;"/>
</ownedOperations>
<ownedOperations xmi:id="wLSrH" implementationClass="org.eclipse.ocl.pivot.library.string.StringTokenizeOperation" name="tokenize"
type="#4nGDi">
<ownedComments body="Partition oclText[self] into a sequence substrings separated by characters in the delimiters. The delimiters are omitted from the return.&#xA;"/>
<ownedParameters isRequired="false" name="delimiters" type="#AlwVZ"/>
</ownedOperations>
<ownedOperations xmi:id="aflSv" implementationClass="org.eclipse.ocl.pivot.library.string.StringTokenizeOperation" name="tokenize"
type="#4nGDi">
<ownedComments body="Partition oclText[self] into a sequence substrings separated by characters in the delimiters. If returnDelimeters is&#xA;true the returned sequence includes the delimiters, otherwise the delimiters are omitted.&#xA;"/>
<ownedParameters isRequired="false" name="delimiters" type="#AlwVZ"/>
<ownedParameters isRequired="false" name="returnDelimiters" type="#XEMMs"/>
</ownedOperations>
<ownedOperations xmi:id="XaidS" implementationClass="org.eclipse.ocl.pivot.library.string.StringTrimOperation" name="trim" type="#AlwVZ">
<ownedComments body="Return oclText[self] with leading and trailing whitespace removed.&#xA;"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xmi:id="pBMRF" name="Type" superClasses="#hlrMH">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>UML</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The UML Type is the supertype of anything that may be used as a type.&#xA;"/>
<ownedOperations xmi:id="NJQE3" implementationClass="org.eclipse.ocl.pivot.library.classifier.OclTypeConformsToOperation" name="conformsTo"
type="#XEMMs">
<ownedComments body="Returns true if type2 conforms to self."/>
<ownedParameters isRequired="false" name="type2" type="#pBMRF"/>
</ownedOperations>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="5a0EE" isAbstract="true" name="UniqueCollection" superClasses="#AMe4i">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Collection</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The UniqueCollection type provides the shared functionality of the OrderedSet and Set&#xA;collections for which the elements are unique.&#xA;The common supertype of UniqueCollection is Collection.&#xA;"/>
<ownedOperations xmi:id="a040M" implementationClass="org.eclipse.ocl.pivot.library.collection.SetMinusOperation" name="-" precedence="#qLHeo"
type="#5a0EE">
<ownedComments body="The elements of oclText[self], which are not in s.&#xA;"/>
<ownedParameters name="s" type="#xUwyY"/>
</ownedOperations>
<ownedOperations xmi:id="ivi2v" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionIntersectionOperation" name="intersection"
type="#Ey52T">
<ownedComments body="The intersection of oclText[self] and c (i.e., the set of all elements that are in both oclText[self] and c).&#xA;"/>
<ownedParameters name="c" type="#AMe4i"/>
</ownedOperations>
<ownedOperations xsi:type="pivot:Iteration" xmi:id="f5jFm" implementationClass="org.eclipse.ocl.pivot.library.iterator.SortedByIteration"
name="sortedBy" type="#X0wD4">
<ownedComments body="Results in the ordered set containing all elements of the source collection.&#xA;The element for which body has the lowest value comes first, and so on.&#xA;The type of the body expression must have the &lt; operation defined.&#xA;The &lt; operation must return a Boolean value and must be transitive (i.e., if a &lt; b and b &lt; c, then a &lt; c).&#xA;"/>
<ownedIterators isRequired="false" name="i" type="#jdfjE"/>
<ownedParameters isRequired="false" name="lambda" type="#ANpx0"/>
</ownedOperations>
<ownedOperations xmi:id="BjgTZ" implementationClass="org.eclipse.ocl.pivot.library.collection.SetSymmetricDifferenceOperation" name="symmetricDifference"
type="#Ey52T">
<ownedComments body="The set containing all the elements that are in oclText[self] or s, but not in both.&#xA;"/>
<ownedParameters name="s" type="#xUwyY"/>
</ownedOperations>
<ownedOperations xmi:id="ULS5b" implementationClass="org.eclipse.ocl.pivot.library.collection.CollectionUnionOperation" name="union"
type="#Ey52T">
<ownedComments body="The set consisting of all elements in oclText[self] and all elements in s.&#xA;"/>
<ownedParameters name="s" type="#5a0EE"/>
</ownedOperations>
<ownedSignature>
<ownedParameters xmi:id="jdfjE" name="T"/>
</ownedSignature>
</ownedClasses>
<ownedClasses xsi:type="pivot:PrimitiveType" xmi:id="3kMFL" name="UnlimitedNatural" superClasses="#BEwMu">
<ownedAnnotations xsi:type="pivot:Annotation" name="http://www.omg.org/ocl">
<ownedDetails name="ClassGroup">
<values>Primitive</values>
</ownedDetails>
</ownedAnnotations>
<ownedComments body="The standard type UnlimitedNatural is used to encode the non-negative values of a multiplicity specification.&#xA;This includes a special e[unlimited] value (*) that encodes the upper value of a multiplicity specification.&#xA;UnlimitedNatural is itself an instance of the metatype UnlimitedNaturalType.&#xA;&#xA;Note that UnlimitedNatural is not a subclass of Integer.&#xA;"/>
<ownedOperations xmi:id="9Q9OJ" implementationClass="org.eclipse.ocl.pivot.library.numeric.UnlimitedNaturalMaxOperation" name="max"
type="#3kMFL">
<ownedComments body="The maximum of oclText[self] an i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="rU9OJ" implementationClass="org.eclipse.ocl.pivot.library.numeric.UnlimitedNaturalMinOperation" name="min"
type="#3kMFL">
<ownedComments body="The minimum of oclText[self] an i.&#xA;"/>
<ownedParameters isRequired="false" name="i" type="#zlfMH"/>
</ownedOperations>
<ownedOperations xmi:id="1y1Tw" implementationClass="org.eclipse.ocl.pivot.library.numeric.UnlimitedNaturalOclAsTypeOperation" isInvalidating="true"
isRequired="false" name="oclAsType" type="#rdyWQ">
<ownedComments body="Evaluates to oclText[self], where oclText[self] is of the type identified by T.&#xA;The type T may be any classifier defined in the UML model;&#xA;if the actual type of oclText[self] at evaluation time does not conform to T,&#xA;then the oclAsType operation evaluates to oclText[invalid].&#xA;&#xA;The standard behavior is redefined for UnlimitedNatural. Numeric values may be converted to&#xA;Real or Integer, but the e[unlimited] value may not.&#xA;Conversion of e[unlimited] to Real or Integer returns oclText[invalid].&#xA;&#xA;"/>
<ownedParameters isRequired="false" isTypeof="true" name="type" type="#rdyWQ"/>
<ownedSignature>
<ownedParameters xmi:id="rdyWQ" name="TT"/>
</ownedSignature>
</ownedOperations>
<ownedOperations xmi:id="TjSmF" implementationClass="org.eclipse.ocl.pivot.library.numeric.UnlimitedNaturalToIntegerOperation" isInvalidating="true"
name="toInteger" type="#tYtCd">
<ownedComments body="Converts oclText[self] to an Integer value unless oclText[self] is e[unlimited] in which case oclText[self] is converted to oclText[invalid].&#xA;"/>
</ownedOperations>
</ownedClasses>
<ownedComments body="This clause describes the OCL Standard Library of predefined types, their operations, and predefined expression templates in the OCL.&#xA;This sub clause contains all standard types defined within OCL, including all the operations defined on those types.&#xA;For each operation the signature and a description of the semantics is given.&#xA;Within the description, the reserved word ‘result’ is used to refer to the value that results from evaluating the operation.&#xA;In several places, post conditions are used to describe properties of the result.&#xA;When there is more than one postcondition, all postconditions must be true.&#xA;A similar thing is true for multiple preconditions.&#xA;If these are used, the operation is only defined if all preconditions evaluate to oclText[true].&#xA;&#xA;heading:1[Introduction]&#xA;&#xA;The structure, syntax, and semantics of the OCL is defined in Clauses 8 (“Abstract Syntax”), 9 (“Concrete Syntax”),&#xA;and 10 (“Semantics Described using UML”).&#xA;This sub clause adds another part to the OCL definition: a library of predefined types and operations.&#xA;Any implementation of OCL must include this library package. This approach has also been taken by e.g., the Java definition,&#xA;where the language definition and the standard libraries are both mandatory parts of the complete language definition.&#xA;&#xA;The OCL standard library defines a number of types.&#xA;It includes several primitive types: UnlimitedNatural, Integer, Real, String, and Boolean.&#xA;These are familiar from many other languages. The second part of the standard library consists of the collection types.&#xA;They are Bag, Set, Sequence, and Collection where Collection is an abstract type.&#xA;Note that all types defined in the OCL standard library are instances of an abstract syntax class.&#xA;The OCL standard library exists at the modeling level, also referred to as the M1 level, where the abstract syntax is the metalevel or M2 level.&#xA;&#xA;Next to definitions of types the OCL standard library defines a number of template expressions.&#xA;Many operations defined on collections map not on the abstract syntax metaclass FeatureCallExp, but on the IteratorExp.&#xA;For each of these a template expression that defines the name and format of the expression is defined in 11.8, Predefined Iterator Expressions.&#xA;&#xA;The Standard Library may be extended with new types, new operations and new iterators.&#xA;In particular new operations can be defined for collections.&#xA;&#xA;Certain String operations depend on the prevailing locale to ensure that Strings are collated and characters are case-converted&#xA;in an appropriate fashion.&#xA;A locale is defined as a concatenation of up to three character sequences separated by underscores,&#xA;with the first sequence identifying the language and the second sequence identifying the country.&#xA;The third sequence is empty but may encode an implementation-specific variant.&#xA;Trailing empty strings and separators may be omitted.&#xA;&#xA;The character sequences for languages are defined by ISO 639.&#xA;&#xA;The character sequences for countries are defined by ISO 3166.&#xA;&#xA;‘fr_CA’ therefore identifies the locale for the French language in the Canada country.&#xA;&#xA;Comparison of strings and consequently the collation order of Collection::sortedBy()&#xA;conforms to the Unicode Collation algorithm defined by Unicode Technical Standard#10.&#xA;&#xA;The locale is ‘en_us’ by default but may be configured by a property constraint on OclAny::oclLocale.&#xA;&#xA;The prevailing locale is defined by the prevailing value of oclLocale within the current environment;&#xA;it may therefore be changed temporarily by using a Let expression.&#xA;let oclLocale : String = ‘fr_CA’ in aString.toUpperCase()&#xA;&#xA;heading:1[Iterators]&#xA;&#xA;This sub clause defines the standard OCL iterator expressions.&#xA;In the abstract syntax these are all instances of IteratorExp.&#xA;These iterator expressions always have a collection expression as their source,&#xA;as is defined in the well-formedness rules in Clause 8 (“Abstract Syntax”).&#xA;The defined iterator expressions are shown per source collection type.&#xA;The semantics of each iterator expression is defined through a mapping from the iterator to the ‘iterate’ construct.&#xA;This means that the semantics of the iterator expressions do not need to be defined separately in the semantics sub clauses.&#xA;&#xA;In all of the following OCL expressions, the lefthand side of the equals sign is the IteratorExp to be defined,&#xA;and the righthand side of the equals sign is the equivalent as an IterateExp.&#xA;The names source, body, and iterator refer to the role names in the abstract syntax:&#xA;&#xA;source&#x9;The source expression of the IteratorExp.&#xA;&#xA;body&#x9;The body expression of the IteratorExp.&#xA;&#xA;iterator&#x9;The iterator variable of the IteratorExp.&#xA;&#xA;result&#x9;The result variable of the IterateExp.&#xA;&#xA;heading:2[Extending the Standard Library with Iterator Expressions]&#xA;&#xA;It is possible to add new iterator expressions in the standard library.&#xA;If this is done the semantics of a new iterator should be defined by mapping it to existing constructs,&#xA;in the same way the semantics of pre-defined iterators is done (see sub clause 11.9)&#xA;&#xA;"/>
<ownedPrecedences name="NAVIGATION"/>
<ownedPrecedences xmi:id="tgQwH" name="UNARY"/>
<ownedPrecedences xmi:id="0NX0o" name="MULTIPLICATIVE"/>
<ownedPrecedences xmi:id="qLHeo" name="ADDITIVE"/>
<ownedPrecedences xmi:id="FpitR" name="RELATIONAL"/>
<ownedPrecedences xmi:id="YwCPU" name="EQUALITY"/>
<ownedPrecedences xmi:id="VT87C" name="AND"/>
<ownedPrecedences xmi:id="BEt7C" name="OR"/>
<ownedPrecedences xmi:id="ZtB8C" name="XOR"/>
<ownedPrecedences xmi:id="1Odhg" name="IMPLIES"/>
</ownedPackages>
<ownedPackages URI="http://www.eclipse.org/ocl/2015/Orphanage" name="$$" nsPrefix="orphanage">
<ownedClasses xsi:type="pivot:BagType" xmi:id="ATAYr" name="Bag" superClasses="#WuoZ6">
<ownedBindings>
<ownedSubstitutions actual="#28WYD" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="158KG" name="Bag" superClasses="#LVlMV">
<ownedBindings>
<ownedSubstitutions actual="#zfDWR" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="IeoaH" name="Bag" superClasses="#e5QcW">
<ownedBindings>
<ownedSubstitutions actual="#+8+by" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="4eSgX" name="Bag" superClasses="#O66hm">
<ownedBindings>
<ownedSubstitutions actual="#urQRp" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="ZxUl9" isNullFree="true" name="Bag" superClasses="#qN9mM">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="OLliK" isNullFree="true" name="Bag" superClasses="#fnNkZ">
<ownedBindings>
<ownedSubstitutions actual="#n6+jq" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="kYj3+" isNullFree="true" name="Bag" superClasses="#10L5N">
<ownedBindings>
<ownedSubstitutions actual="#tHLI9" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="KCu19" isNullFree="true" name="Bag" superClasses="#beW3M">
<ownedBindings>
<ownedSubstitutions actual="#DLB0P" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="tNfy1" isNullFree="true" name="Bag" superClasses="#+pH0E">
<ownedBindings>
<ownedSubstitutions actual="#ehjJ6" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="kj8x0" isNullFree="true" name="Bag" superClasses="#1,kzD">
<ownedBindings>
<ownedSubstitutions actual="#tKoqz" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="uivet" isNullFree="true" name="Bag" superClasses="#,+Xg8">
<ownedBindings>
<ownedSubstitutions actual="#HeAuH" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="f6RAK" isNullFree="true" name="Bag" superClasses="#wW6BZ">
<ownedBindings>
<ownedSubstitutions actual="#gbWpi" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:BagType" xmi:id="WQv,I" isNullFree="true" name="Bag" superClasses="#nsXBY">
<ownedBindings>
<ownedSubstitutions actual="#vEbKc" formal="#k2OA6"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="PdAyF" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#Xml8E" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="WuoZ6" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#28WYD" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="1d1Sm" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#tYtCd" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="jNn4z" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#+Zdec" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="xb2wa" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#8Set+" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="svXg8" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#8dAuH" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="AaA3o" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#jbMkR" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="7aA3o" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#jbMkR" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="LVlMV" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#zfDWR" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="e5QcW" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#+8+by" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="O66hm" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#urQRp" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Lrp5N" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#zlfMH" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="QkRyc" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#AlwVZ" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Z+X23" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#k2OA6" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="cfVYj" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#feFHs" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="m0JrX" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#53+C2" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="ymK8p" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#l1i6D" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="zk+UU" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#ODsm5" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="AMe4i" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#jdfjE" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="wPdfw" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#THtXS" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="ibDmk" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#V4fY9" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="+dsXX" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#RAum0" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="3GM3z" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#yzGsR" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="fnNkZ" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#n6+jq" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="4UbjG" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#oGEci" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="U+78f" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#kNz0x" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="RUAyt" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#p0xDT" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="4oB7Y" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#bFs8P" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="eSM5X" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#xIioi" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="10L5N" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#tHLI9" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="beW3M" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#DLB0P" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="OiZ46" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#uTQA1" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="0Lk25" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#EXGsH" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="qL6RU" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#qa,YE" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Q1EQT" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#Ae1EX" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="nh+Gi" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#vB+nl" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="NLJFh" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#FF0T4" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="qN9mM" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="h1JrX" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#53+C2" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="tnK8p" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#l1i6D" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="ul+UU" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#ODsm5" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="U,X23" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#k2OA6" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="7Me4i" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#jdfjE" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="3vsZ2" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#,5eVD" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Be91P" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#MfE+M" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="4za1O" isNullFree="true" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#bIJfG" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="+pH0E" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#ehjJ6" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="1,kzD" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#tKoqz" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id=",+Xg8" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#HeAuH" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="wW6BZ" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#gbWpi" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="nsXBY" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#vEbKc" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="XXVzx" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#ftoBy" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Otyyw" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#uWtir" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="zA2ML" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#b0XaB" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="qWTMK" name="Collection" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#qdc76" formal="#qs59R"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="TVxB," contextType="#k2OA6" name="Lambda" resultType="#XEMMs" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="9VTck" contextType="#qs59R" name="Lambda" resultType="#XEMMs" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="mzCFm" contextType="#53+C2" name="Lambda" resultType="#XEMMs" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="aP8t+" contextType="#l1i6D" name="Lambda" resultType="#XEMMs" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="5XKsi" contextType="#ODsm5" name="Lambda" resultType="#XEMMs" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="H9NqH" contextType="#k2OA6" name="Lambda" resultType="#jbMkR" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="x9vEt" contextType="#qs59R" name="Lambda" resultType="#jbMkR" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="abftu" contextType="#53+C2" name="Lambda" resultType="#jbMkR" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="O3YWH" contextType="#l1i6D" name="Lambda" resultType="#jbMkR" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="t,mUr" contextType="#ODsm5" name="Lambda" resultType="#jbMkR" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="ANpx0" contextType="#jdfjE" name="Lambda" resultType="#jbMkR" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="e5sKD" contextType="#53+C2" name="Lambda" resultType="#fIXUp" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="Vf8OR" contextType="#l1i6D" name="Lambda" resultType="#JPdH," superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="xv1ql" contextType="#k2OA6" name="Lambda" resultType="#dkz0o" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="Uo45T" contextType="#ODsm5" name="Lambda" resultType="#MGgHF" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="vUOyu" contextType="#qs59R" name="Lambda" resultType="#FfSe4" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="8QuxN" contextType="#k2OA6" name="Lambda" resultType="#ehjJ6" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="dKdmN" contextType="#k2OA6" name="Lambda" resultType="#tKoqz" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="Yd8AC" contextType="#qs59R" name="Lambda" resultType="#MfE+M" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="5Wr1B" contextType="#qs59R" name="Lambda" resultType="#bIJfG" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="ekZDz" contextType="#53+C2" name="Lambda" resultType="#ftoBy" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id=",dI4y" contextType="#53+C2" name="Lambda" resultType="#uWtir" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="WkcOL" contextType="#l1i6D" name="Lambda" resultType="#b0XaB" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="3dLDL" contextType="#l1i6D" name="Lambda" resultType="#qdc76" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="A88rw" contextType="#ODsm5" name="Lambda" resultType="#gbWpi" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:LambdaType" xmi:id="h1rgw" contextType="#ODsm5" name="Lambda" resultType="#vEbKc" superClasses="#ufpqK"/>
<ownedClasses xsi:type="pivot:MapType" xmi:id="ILFp8" name="Map" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#0oyuu" formal="#8dAuH"/>
<ownedSubstitutions actual="#Juyuu" formal="#HeAuH"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:MapType" xmi:id="MFAWn" name="Map" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#GNWcV" formal="#8dAuH"/>
<ownedSubstitutions actual="#bSWcV" formal="#HeAuH"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:MapType" xmi:id="knjZK" name="Map" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#yhz9Q" formal="#8dAuH"/>
<ownedSubstitutions actual="#Hnz9Q" formal="#HeAuH"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:MapType" xmi:id="w2v0R" name="Map" superClasses="#jbMkR">
<ownedBindings>
<ownedSubstitutions actual="#Izxt6" formal="#8dAuH"/>
<ownedSubstitutions actual="#d4xt6" formal="#HeAuH"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="ct1I8" name="OrderedCollection" superClasses="#PdAyF">
<ownedBindings>
<ownedSubstitutions actual="#Xml8E" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Cuqpc" name="OrderedCollection" superClasses="#1d1Sm">
<ownedBindings>
<ownedSubstitutions actual="#tYtCd" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="d0GJT" name="OrderedCollection" superClasses="#QkRyc">
<ownedBindings>
<ownedSubstitutions actual="#AlwVZ" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="zE,BO" isNullFree="true" name="OrderedCollection" superClasses="#h1JrX">
<ownedBindings>
<ownedSubstitutions actual="#53+C2" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id=",2,Sg" isNullFree="true" name="OrderedCollection" superClasses="#tnK8p">
<ownedBindings>
<ownedSubstitutions actual="#l1i6D" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="FlQ68" name="OrderedCollection" superClasses="#4UbjG">
<ownedBindings>
<ownedSubstitutions actual="#oGEci" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="hOxTW" name="OrderedCollection" superClasses="#U+78f">
<ownedBindings>
<ownedSubstitutions actual="#kNz0x" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="byOPx" name="OrderedCollection" superClasses="#OiZ46">
<ownedBindings>
<ownedSubstitutions actual="#uTQA1" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="BcZNw" name="OrderedCollection" superClasses="#0Lk25">
<ownedBindings>
<ownedSubstitutions actual="#EXGsH" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="3bvoK" name="OrderedCollection" superClasses="#qL6RU">
<ownedBindings>
<ownedSubstitutions actual="#qa,YE" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="dF6mJ" name="OrderedCollection" superClasses="#Q1EQT">
<ownedBindings>
<ownedSubstitutions actual="#Ae1EX" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="hPNNu" name="OrderedCollection" superClasses="#U,X23">
<ownedBindings>
<ownedSubstitutions actual="#k2OA6" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="3dy9C" name="OrderedCollection" superClasses="#qN9mM">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="63,Sg" name="OrderedCollection" superClasses="#tnK8p">
<ownedBindings>
<ownedSubstitutions actual="#l1i6D" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="71zrK" name="OrderedCollection" superClasses="#ul+UU">
<ownedBindings>
<ownedSubstitutions actual="#ODsm5" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="IdTPZ" name="OrderedCollection" superClasses="#7Me4i">
<ownedBindings>
<ownedSubstitutions actual="#jdfjE" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="knKKo" name="OrderedCollection" superClasses="#XXVzx">
<ownedBindings>
<ownedSubstitutions actual="#ftoBy" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="b9nJn" name="OrderedCollection" superClasses="#Otyyw">
<ownedBindings>
<ownedSubstitutions actual="#uWtir" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="ARrjB" name="OrderedCollection" superClasses="#zA2ML">
<ownedBindings>
<ownedSubstitutions actual="#b0XaB" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="3mIjA" name="OrderedCollection" superClasses="#qWTMK">
<ownedBindings>
<ownedSubstitutions actual="#qdc76" formal="#feFHs"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="rET9a" isNullFree="true" name="OrderedSet" superClasses="#ct1I8 #AYwt1">
<ownedBindings>
<ownedSubstitutions actual="#Xml8E" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="G1Pyh" isNullFree="true" name="OrderedSet" superClasses="#3dy9C #bIti8">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="JPdH," isNullFree="true" name="OrderedSet" superClasses="#63,Sg #ei63Z">
<ownedBindings>
<ownedSubstitutions actual="#l1i6D" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="KNRgp" isNullFree="true" name="OrderedSet" superClasses="#71zrK #fguQE">
<ownedBindings>
<ownedSubstitutions actual="#ODsm5" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="X0wD4" isNullFree="true" name="OrderedSet" superClasses="#IdTPZ #sHO0S">
<ownedBindings>
<ownedSubstitutions actual="#jdfjE" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="U8tub" isNullFree="true" name="OrderedSet" superClasses="#FlQ68 #pPLf2">
<ownedBindings>
<ownedSubstitutions actual="#oGEci" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="qJsDQ" isNullFree="true" name="OrderedSet" superClasses="#byOPx #,cJ0q">
<ownedBindings>
<ownedSubstitutions actual="#uTQA1" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:OrderedSetType" xmi:id="Qz2BP" isNullFree="true" name="OrderedSet" superClasses="#BcZNw #lGUyp">
<ownedBindings>
<ownedSubstitutions actual="#EXGsH" formal="#53+C2"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="dhqjr" isNullFree="true" name="Sequence" superClasses="#Cuqpc">
<ownedBindings>
<ownedSubstitutions actual="#tYtCd" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="4nGDi" isNullFree="true" name="Sequence" superClasses="#d0GJT">
<ownedBindings>
<ownedSubstitutions actual="#AlwVZ" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="8CNH9" isNullFree="true" name="Sequence" superClasses="#hPNNu">
<ownedBindings>
<ownedSubstitutions actual="#k2OA6" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="SRy3R" isNullFree="true" name="Sequence" superClasses="#3dy9C">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="8BxNl" isNullFree="true" name="Sequence" superClasses="#hOxTW">
<ownedBindings>
<ownedSubstitutions actual="#kNz0x" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="SPviZ" isNullFree="true" name="Sequence" superClasses="#3bvoK">
<ownedBindings>
<ownedSubstitutions actual="#qa,YE" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="445gY" isNullFree="true" name="Sequence" superClasses="#dF6mJ">
<ownedBindings>
<ownedSubstitutions actual="#Ae1EX" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id=",aKE3" isNullFree="true" name="Sequence" superClasses="#knKKo">
<ownedBindings>
<ownedSubstitutions actual="#ftoBy" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="2wnD2" isNullFree="true" name="Sequence" superClasses="#b9nJn">
<ownedBindings>
<ownedSubstitutions actual="#uWtir" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="bErdQ" isNullFree="true" name="Sequence" superClasses="#ARrjB">
<ownedBindings>
<ownedSubstitutions actual="#b0XaB" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SequenceType" xmi:id="SaIdP" isNullFree="true" name="Sequence" superClasses="#3mIjA">
<ownedBindings>
<ownedSubstitutions actual="#qdc76" formal="#l1i6D"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="1Uzet" isNullFree="true" name="Set" superClasses="#dqHcs">
<ownedBindings>
<ownedSubstitutions actual="#8dAuH" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="U6ALG" isNullFree="true" name="Set" superClasses="#8PVIF">
<ownedBindings>
<ownedSubstitutions actual="#zfDWR" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="UQF4+" isNullFree="true" name="Set" superClasses="#8lZ19">
<ownedBindings>
<ownedSubstitutions actual="#zlfMH" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="PRF4+" name="Set" superClasses="#8lZ19">
<ownedBindings>
<ownedSubstitutions actual="#zlfMH" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="dkz0o" isNullFree="true" name="Set" superClasses="#F6Hyn">
<ownedBindings>
<ownedSubstitutions actual="#k2OA6" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="zyYl9" isNullFree="true" name="Set" superClasses="#bIti8">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="Ey52T" isNullFree="true" name="Set" superClasses="#sHO0S">
<ownedBindings>
<ownedSubstitutions actual="#jdfjE" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="a5bwe" isNullFree="true" name="Set" superClasses="#CPwtd">
<ownedBindings>
<ownedSubstitutions actual="#p0xDT" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="wGaFT" isNullFree="true" name="Set" superClasses="#YcuCS">
<ownedBindings>
<ownedSubstitutions actual="#vB+nl" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="WwkDS" isNullFree="true" name="Set" superClasses="#+F5AR">
<ownedBindings>
<ownedSubstitutions actual="#FF0T4" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:SetType" xmi:id="AVIYn" isNullFree="true" name="Set" superClasses="#oqcVm">
<ownedBindings>
<ownedSubstitutions actual="#,5eVD" formal="#ODsm5"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:TupleType" xmi:id=",5eVD" name="Tuple" superClasses="#,qHxF">
<ownedProperties xmi:id="Lv1aA" name="first" type="#qs59R"/>
<ownedProperties xmi:id="P28lE" name="second" type="#yzGsR"/>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="AYwt1" name="UniqueCollection" superClasses="#PdAyF">
<ownedBindings>
<ownedSubstitutions actual="#Xml8E" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="dqHcs" name="UniqueCollection" superClasses="#svXg8">
<ownedBindings>
<ownedSubstitutions actual="#8dAuH" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="xUwyY" isNullFree="true" name="UniqueCollection" superClasses="#7aA3o">
<ownedBindings>
<ownedSubstitutions actual="#jbMkR" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="8PVIF" name="UniqueCollection" superClasses="#LVlMV">
<ownedBindings>
<ownedSubstitutions actual="#zfDWR" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="8lZ19" name="UniqueCollection" superClasses="#Lrp5N">
<ownedBindings>
<ownedSubstitutions actual="#zlfMH" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="gHti8" isNullFree="true" name="UniqueCollection" superClasses="#qN9mM">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="Xv5mH" isNullFree="true" name="UniqueCollection" superClasses="#h1JrX">
<ownedBindings>
<ownedSubstitutions actual="#53+C2" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="kfuQE" isNullFree="true" name="UniqueCollection" superClasses="#ul+UU">
<ownedBindings>
<ownedSubstitutions actual="#ODsm5" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="pPLf2" name="UniqueCollection" superClasses="#4UbjG">
<ownedBindings>
<ownedSubstitutions actual="#oGEci" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="CPwtd" name="UniqueCollection" superClasses="#RUAyt">
<ownedBindings>
<ownedSubstitutions actual="#p0xDT" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id=",cJ0q" name="UniqueCollection" superClasses="#OiZ46">
<ownedBindings>
<ownedSubstitutions actual="#uTQA1" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="lGUyp" name="UniqueCollection" superClasses="#0Lk25">
<ownedBindings>
<ownedSubstitutions actual="#EXGsH" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="YcuCS" name="UniqueCollection" superClasses="#nh+Gi">
<ownedBindings>
<ownedSubstitutions actual="#vB+nl" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="+F5AR" name="UniqueCollection" superClasses="#NLJFh">
<ownedBindings>
<ownedSubstitutions actual="#FF0T4" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="F6Hyn" name="UniqueCollection" superClasses="#U,X23">
<ownedBindings>
<ownedSubstitutions actual="#k2OA6" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="bIti8" name="UniqueCollection" superClasses="#qN9mM">
<ownedBindings>
<ownedSubstitutions actual="#qs59R" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="ei63Z" name="UniqueCollection" superClasses="#tnK8p">
<ownedBindings>
<ownedSubstitutions actual="#l1i6D" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="fguQE" name="UniqueCollection" superClasses="#ul+UU">
<ownedBindings>
<ownedSubstitutions actual="#ODsm5" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="sHO0S" name="UniqueCollection" superClasses="#7Me4i">
<ownedBindings>
<ownedSubstitutions actual="#jdfjE" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
<ownedClasses xsi:type="pivot:CollectionType" xmi:id="oqcVm" name="UniqueCollection" superClasses="#3vsZ2">
<ownedBindings>
<ownedSubstitutions actual="#,5eVD" formal="#jdfjE"/>
</ownedBindings>
</ownedClasses>
</ownedPackages>
</pivot:Model>