<?xml version="1.0" encoding="UTF-8"?>
<!-- Meta-model for PNML specification -->
<!-- Provided by www.pnml.org -->
<ecore:EPackage xmi:version="2.0"
    xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="integers"
    nsURI="http:///symmetricnet.integers.ecore" nsPrefix="integers">
  <eClassifiers xsi:type="ecore:EClass" name="HLPNNumber" abstract="true" eSuperTypes="terms.ecore#//BuiltInSort">
    <eAnnotations source="http://www.pnml.org/models/methods/SORT">
      <details key="signature" value="boolean equalSorts(Sort sort)"/>
      <details key="body" value="boolean isEqual = false;&#xA;&#x9;&#x9;if (this.eClass().getName().equalsIgnoreCase(sort.eClass().getName())) {&#xA;&#x9;&#x9;    //by default they are the same sort, unless they have been named.&#xA;&#x9;&#x9;  &#x9;isEqual = true;&#xA;&#x9;&#x9;  &#x9;if (this.getContainerNamedSort() != null&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&amp;&amp; sort.getContainerNamedSort() != null) {&#xA;&#x9;&#x9;&#x9;&#x9;// we test them if they have been explicitly named.&#xA;&#x9;&#x9;&#x9;&#x9;isEqual = this.getContainerNamedSort().getName()&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;.equalsIgnoreCase(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;sort.getContainerNamedSort().getName());&#xA;&#x9;&#x9;&#x9;}// otherwise, keep the default.&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return isEqual;"/>
      <details key="documentation" value="/**&#xA; * Returns true if this sort and argument sort are actually &#xA; * semantically the same sort, even in two different objects.&#xA; * Ex: two FiniteEnumerations or two Integers.&#xA; * @return true if so. &#xA; * @param sort the sort to which we compare this one. &#xA; */"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EReference" name="containerNumberConstant"
        eType="#//NumberConstant" eOpposite="#//NumberConstant/type"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Natural" eSuperTypes="#//HLPNNumber"/>
  <eClassifiers xsi:type="ecore:EClass" name="Positive" eSuperTypes="#//HLPNNumber"/>
  <eClassifiers xsi:type="ecore:EClass" name="HLInteger" eSuperTypes="#//HLPNNumber"/>
  <eClassifiers xsi:type="ecore:EClass" name="NumberConstant" eSuperTypes="terms.ecore#//BuiltInConstant">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="typeType" value="self.input->size() = 0 and self.type.oclIsTypeOf(Natural) implies self.value >= 0 and self.type.oclIsTypeOf(Positive) implies self.value > 0"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="typeType"/>
    </eAnnotations>
    <eStructuralFeatures xsi:type="ecore:EReference" name="type" lowerBound="1" eType="#//HLPNNumber"
        containment="true" eOpposite="#//HLPNNumber/containerNumberConstant"/>
    <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" lowerBound="1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject"/>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="IntegerOperator" abstract="true" eSuperTypes="terms.ecore#//BuiltInOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="inputType" value="self.input->size() = 2 and self.input->forAll{c | c.oclIsKindOf(Number)}"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="inputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Addition" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsKindOf(Number)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Subtraction" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsKindOf(Number)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Multiplication" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsKindOf(Number)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Division" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsKindOf(Number)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="Modulo" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsKindOf(Number)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="GreaterThan" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsTypeOf(booleans::Bool)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="GreaterThanOrEqual" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsTypeOf(booleans::Bool)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LessThan" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsTypeOf(booleans::Bool)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
  <eClassifiers xsi:type="ecore:EClass" name="LessThanOrEqual" eSuperTypes="#//IntegerOperator">
    <eAnnotations source="http://www.pnml.org/models/OCL">
      <details key="outputType" value="self.output.oclIsTypeOf(booleans::Bool)"/>
    </eAnnotations>
    <eAnnotations source="http://www.eclipse.org/emf/2002/Ecore">
      <details key="constraints" value="outputType"/>
    </eAnnotations>
  </eClassifiers>
</ecore:EPackage>

