<?xml version="1.0" encoding="UTF-8"?>
<machine:Machine xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:machine="http://emf.eventb.org/models/core/machine/2014" name="mPort">
  <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
    <details key="configuration" value="org.eventb.core.fwd;de.prob.units.mchBase"/>
    <details key="name" value="mPort"/>
  </annotations>
  <annotations source="http:///org/eventb/core/RodinReferenceNamesAnnotations">
    <details key="refines mProperty" value="_gbAPMADlEei-meqqkXX9bA"/>
    <details key="sees cPort" value="_0kfYMfqeEeectLZKwQfI0A"/>
  </annotations>
  <attributes key="org.eventb.texttools.text_lastmodified">
    <value type="Long" value="ACED00057372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000016272817494"/>
  </attributes>
  <attributes key="org.eventb.texttools.text_representation">
    <value type="String" value="[encoded data, 6690 characters]"/>
  </attributes>
  <refines href="../mProperty.bum#http://emf.eventb.org/models/core/machine/2014::Machine::mProperty"/>
  <sees href="../cPort.buc#http://emf.eventb.org/models/core/context/2014::Context::cPort"/>
  <variables name="components">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_QPqeEeectLZKwQfI0A"/>
      <details key="identifier" value="components"/>
    </annotations>
  </variables>
  <variables name="container">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_QfqeEeectLZKwQfI0A"/>
      <details key="identifier" value="container"/>
    </annotations>
  </variables>
  <variables name="c_multiplicity">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_QvqeEeectLZKwQfI0A"/>
      <details key="identifier" value="c_multiplicity"/>
    </annotations>
  </variables>
  <variables name="to_clone_c">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_Q_qeEeectLZKwQfI0A"/>
      <details key="identifier" value="to_clone_c"/>
    </annotations>
  </variables>
  <variables name="c_index">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_btIX4fqwEeectLZKwQfI0A"/>
      <details key="identifier" value="c_index"/>
    </annotations>
  </variables>
  <variables name="to_unfold_c">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_zYW3EPqwEeectLZKwQfI0A"/>
      <details key="identifier" value="to_unfold_c"/>
    </annotations>
  </variables>
  <variables name="to_unfold_c_in">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_ANiZwPqxEeectLZKwQfI0A"/>
      <details key="identifier" value="to_unfold_c_in"/>
    </annotations>
  </variables>
  <variables name="inst2pat_c">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_JtPOYPqxEeectLZKwQfI0A"/>
      <details key="identifier" value="inst2pat_c"/>
    </annotations>
  </variables>
  <variables name="cProperties">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_jRoOoPqxEeectLZKwQfI0A"/>
      <details key="identifier" value="cProperties"/>
    </annotations>
  </variables>
  <variables name="ports">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_oU9JIPqyEeectLZKwQfI0A"/>
      <details key="identifier" value="ports"/>
    </annotations>
  </variables>
  <variables name="p_multiplicity">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_6RL9kAA2EeictLZKwQfI0A"/>
      <details key="identifier" value="p_multiplicity"/>
    </annotations>
  </variables>
  <variables name="p_index">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_h1eCEADlEei-meqqkXX9bA"/>
      <details key="identifier" value="p_index"/>
    </annotations>
  </variables>
  <variables name="to_unfold_p_in">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_zY448AK7EeiAPf1wPUl3Gw"/>
      <details key="identifier" value="to_unfold_p_in"/>
    </annotations>
  </variables>
  <variables name="inst2pat_p">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_zY448QK7EeiAPf1wPUl3Gw"/>
      <details key="identifier" value="inst2pat_p"/>
    </annotations>
  </variables>
  <invariants name="port" predicate="ports ∈ ran(components) ↔ Port">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_RPqeEeectLZKwQfI0A"/>
      <details key="label" value="port"/>
    </annotations>
  </invariants>
  <invariants name="port_finite" predicate="∀c·finite(ports[{c}])">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_RfqeEeectLZKwQfI0A"/>
      <details key="label" value="port_finite"/>
    </annotations>
  </invariants>
  <invariants name="port_not_shared" predicate="ports∼ ∈ Port ⇸ Component">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_RvqeEeectLZKwQfI0A"/>
      <details key="label" value="port_not_shared"/>
    </annotations>
  </invariants>
  <invariants name="p_mult" predicate="p_multiplicity ∈ (components;ports)[Pattern] → ℕ">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_0kf_R_qeEeectLZKwQfI0A"/>
      <details key="label" value="p_mult"/>
    </annotations>
  </invariants>
  <invariants name="to_unfold_p_in" predicate="to_unfold_p_in ∈ (components;ports)[{Pat}] ↔ components[{Inst}]">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_btIX4vqwEeectLZKwQfI0A"/>
      <details key="label" value="to_unfold_p_in"/>
    </annotations>
  </invariants>
  <invariants name="inst2pat_p_ty" predicate="inst2pat_p ∈ (components;ports)[{Inst}] → (components;ports)[{Pat}]">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_zYW3EfqwEeectLZKwQfI0A"/>
      <details key="label" value="inst2pat_p_ty"/>
    </annotations>
  </invariants>
  <invariants name="inst2pat_commp" predicate="inst2pat_p;ports∼ = ports∼;inst2pat_c">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_F0IYkPriEeerIsS6OyYQ4w"/>
      <details key="label" value="inst2pat_commp"/>
    </annotations>
  </invariants>
  <invariants name="to_unfold_p_inst2pat" predicate="ran(to_unfold_p_in) ⊆ dom(inst2pat_c)">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_ui7VEAFGEei9ocE08JsPSw"/>
      <details key="label" value="to_unfold_p_inst2pat"/>
    </annotations>
  </invariants>
  <invariants name="to_unfold_p_in_comp" predicate="to_unfold_p_in;inst2pat_c ⊆ ports∼">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_zY448gK7EeiAPf1wPUl3Gw"/>
      <details key="label" value="to_unfold_p_in_comp"/>
    </annotations>
  </invariants>
  <invariants name="i2p_IPort" predicate="inst2pat_p[IPort] ⊆ IPort">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_22_TUALCEeiAPf1wPUl3Gw"/>
      <details key="label" value="i2p_IPort"/>
    </annotations>
  </invariants>
  <invariants name="i2p_OPort" predicate="inst2pat_p[OPort] ⊆ OPort">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_QFUfMAWQEei9ocE08JsPSw"/>
      <details key="label" value="i2p_OPort"/>
    </annotations>
  </invariants>
  <invariants name="p_index_ty" predicate="p_index ∈ dom(inst2pat_p) → ℕ">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_QFVGQAWQEei9ocE08JsPSw"/>
      <details key="label" value="p_index_ty"/>
    </annotations>
  </invariants>
  <variant expression="to_unfold_p_in">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_7pQu4Af5EeiFlqW-8GKglg"/>
    </annotations>
  </variant>
  <events name="instanciate_pattern" extended="true">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="'"/>
      <details key="label" value="instanciate_pattern"/>
    </annotations>
    <annotations source="http:///org/eventb/core/RodinReferenceNamesAnnotations">
      <details key="refines instanciate_pattern" value="_btHw0PqwEeectLZKwQfI0A"/>
    </annotations>
    <refines href="../mProperty.bum#http://emf.eventb.org/models/core/machine/2014::Event::mProperty.instanciate_pattern"/>
    <parameters name="inst_ports">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw0fqwEeectLZKwQfI0A"/>
        <details key="identifier" value="inst_ports"/>
      </annotations>
    </parameters>
    <parameters name="p_mult_others">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw0vqwEeectLZKwQfI0A"/>
        <details key="identifier" value="p_mult_others"/>
      </annotations>
    </parameters>
    <guards name="ip" predicate="inst_ports ∈ (components;ports)[{Pat}] ↔ (components;ports)[{Mdl}]">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw0_qwEeectLZKwQfI0A"/>
        <details key="label" value="ip"/>
      </annotations>
    </guards>
    <guards name="ipr" predicate="inst_ports∼ ∈ (components;ports)[{Mdl}] ⇸ (components;ports)[{Pat}]">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw1PqwEeectLZKwQfI0A"/>
        <details key="label" value="ipr"/>
      </annotations>
    </guards>
    <guards name="pm" predicate="p_mult_others ∈ (components;ports)[{Pat}] ∖ dom(inst_ports) → ℕ">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw1fqwEeectLZKwQfI0A"/>
        <details key="label" value="pm"/>
      </annotations>
    </guards>
    <guards name="thm" predicate="∀p· finite(inst_ports[{p}])" theorem="true">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw1vqwEeectLZKwQfI0A"/>
        <details key="label" value="thm"/>
      </annotations>
    </guards>
    <actions name="p_mult" action="p_multiplicity ≔ p_multiplicity  (p_mult_others  {pp·pp∈(components;ports)[{Pat}] ∣ pp ↦ card(inst_ports[{pp}])})">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btIX4PqwEeectLZKwQfI0A"/>
        <details key="label" value="p_mult"/>
      </annotations>
    </actions>
    <actions name="inst2pat_p" action="inst2pat_p ≔ ∅">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btJmA_qwEeectLZKwQfI0A"/>
        <details key="label" value="inst2pat_p"/>
      </annotations>
    </actions>
    <actions name="ports" action="ports ≔ (components[{Inst}]) ⩤ ports">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btJmCfqwEeectLZKwQfI0A"/>
        <details key="label" value="ports"/>
      </annotations>
    </actions>
    <actions name="unfold_p" action="to_unfold_p_in ≔ ∅">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btJmCvqwEeectLZKwQfI0A"/>
        <details key="label" value="unfold_p"/>
      </annotations>
    </actions>
    <actions name="p_index" action="p_index ≔ ∅">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btKNEPqwEeectLZKwQfI0A"/>
        <details key="label" value="p_index"/>
      </annotations>
    </actions>
  </events>
  <events name="unfold_root_c" extended="true">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_btIX4_qwEeectLZKwQfI0A"/>
      <details key="label" value="unfold_root_c"/>
    </annotations>
    <annotations source="http:///org/eventb/core/RodinReferenceNamesAnnotations">
      <details key="refines unfold_root_c" value="_jNxEQAKyEeiAPf1wPUl3Gw"/>
    </annotations>
    <refines href="../mProperty.bum#http://emf.eventb.org/models/core/machine/2014::Event::mProperty.unfold_root_c"/>
  </events>
  <events name="clone_c" extended="true">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_btJmBfqwEeectLZKwQfI0A"/>
      <details key="label" value="clone_c"/>
    </annotations>
    <annotations source="http:///org/eventb/core/RodinReferenceNamesAnnotations">
      <details key="refines clone_c" value="_SDieEP06Eees7pYemx4WBQ"/>
    </annotations>
    <refines href="../mProperty.bum#http://emf.eventb.org/models/core/machine/2014::Event::mProperty.clone_c"/>
    <actions name="unfold_p_in" action="to_unfold_p_in ≔ to_unfold_p_in ∪ (ports[{to_clone_c(c)}] × {c})">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btKNFfqwEeectLZKwQfI0A"/>
        <details key="label" value="unfold_p_in"/>
      </annotations>
    </actions>
  </events>
  <events name="unfold_node_c" extended="true">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_btKNEfqwEeectLZKwQfI0A"/>
      <details key="label" value="unfold_node_c"/>
    </annotations>
    <annotations source="http:///org/eventb/core/RodinReferenceNamesAnnotations">
      <details key="refines unfold_node_c" value="_YT9zsAKzEeiAPf1wPUl3Gw"/>
    </annotations>
    <refines href="../mProperty.bum#http://emf.eventb.org/models/core/machine/2014::Event::mProperty.unfold_node_c"/>
  </events>
  <events name="unfold_p" convergence="convergent" extended="false">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_btKNGPqwEeectLZKwQfI0A"/>
      <details key="label" value="unfold_p"/>
    </annotations>
    <parameters comment="port to unfold" name="p">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-8fqwEeectLZKwQfI0A"/>
        <details key="identifier" value="p"/>
        <details key="comment" value="port to unfold"/>
      </annotations>
    </parameters>
    <parameters comment="target component" name="c">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-8vqwEeectLZKwQfI0A"/>
        <details key="identifier" value="c"/>
        <details key="comment" value="target component"/>
      </annotations>
    </parameters>
    <parameters comment="replicated ports" name="new_p">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btJmB_qwEeectLZKwQfI0A"/>
        <details key="identifier" value="new_p"/>
        <details key="comment" value="replicated ports"/>
      </annotations>
    </parameters>
    <guards name="p_ty" predicate="p ↦ c ∈ to_unfold_p_in">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw1_qwEeectLZKwQfI0A"/>
        <details key="label" value="p_ty"/>
      </annotations>
    </guards>
    <guards name="new_p_ty" predicate="new_p ∈ 1‥p_multiplicity(p) ↣ Port ∖ ran(components;ports)">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw2PqwEeectLZKwQfI0A"/>
        <details key="label" value="new_p_ty"/>
      </annotations>
    </guards>
    <guards name="duplicate_IPorts_direction" predicate="p ∈ IPort ⇒ ran(new_p) ⊆ IPort">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btHw2fqwEeectLZKwQfI0A"/>
        <details key="label" value="duplicate_IPorts_direction"/>
      </annotations>
    </guards>
    <guards name="duplicate_OPorts_direction" predicate="p ∈ OPort ⇒ ran(new_p) ⊆ OPort">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-8_qwEeectLZKwQfI0A"/>
        <details key="label" value="duplicate_OPorts_direction"/>
      </annotations>
    </guards>
    <actions name="new_p_component" action="ports ≔ ports ∪ ({c} × ran(new_p))">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_GO3gcAK8EeiAPf1wPUl3Gw"/>
        <details key="label" value="new_p_component"/>
      </annotations>
    </actions>
    <actions name="dp" action="to_unfold_p_in ≔ to_unfold_p_in ∖ {p↦c}">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_YHf5cAUuEei9ocE08JsPSw"/>
        <details key="label" value="dp"/>
      </annotations>
    </actions>
    <actions name="inst2pat_p" action="inst2pat_p ≔ inst2pat_p ∪ (ran(new_p) × {p})">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_YHiVsAUuEei9ocE08JsPSw"/>
        <details key="label" value="inst2pat_p"/>
      </annotations>
    </actions>
    <actions name="p_index" action="p_index ≔ p_index ∪ new_p∼">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_YHiVsQUuEei9ocE08JsPSw"/>
        <details key="label" value="p_index"/>
      </annotations>
    </actions>
  </events>
  <events name="apply_pattern" extended="true">
    <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
      <details key="name" value="_YUG9oAKzEeiAPf1wPUl3Gw"/>
      <details key="label" value="apply_pattern"/>
    </annotations>
    <annotations source="http:///org/eventb/core/RodinReferenceNamesAnnotations">
      <details key="refines apply_pattern" value="_YUG9oQKzEeiAPf1wPUl3Gw"/>
    </annotations>
    <refines href="../mProperty.bum#http://emf.eventb.org/models/core/machine/2014::Event::mProperty.apply_pattern"/>
    <parameters name="inst_ports">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btKNE_qwEeectLZKwQfI0A"/>
        <details key="identifier" value="inst_ports"/>
      </annotations>
    </parameters>
    <parameters name="new_ports">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_LNbVcAWLEei9ocE08JsPSw"/>
        <details key="identifier" value="new_ports"/>
      </annotations>
    </parameters>
    <guards name="ip" predicate="inst_ports ∈ (components;ports)[{Inst}] ⤔ (components;ports)[{Mdl}]">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-9PqwEeectLZKwQfI0A"/>
        <details key="label" value="ip"/>
      </annotations>
    </guards>
    <guards name="mp_i" predicate="inst_ports[IPort] ⊆ IPort">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-9fqwEeectLZKwQfI0A"/>
        <details key="label" value="mp_i"/>
      </annotations>
    </guards>
    <guards name="mp_o" predicate="inst_ports[OPort] ⊆ OPort">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-9vqwEeectLZKwQfI0A"/>
        <details key="label" value="mp_o"/>
      </annotations>
    </guards>
    <guards comment="Les ports instanciés sont des ports de composants instanciés" name="ports_inst_rel_comp_inst" predicate="ports∼[dom(inst_ports)] ⊆ dom(inst_components)">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI-9_qwEeectLZKwQfI0A"/>
        <details key="label" value="ports_inst_rel_comp_inst"/>
        <details key="comment" value="Les ports instanciés sont des ports de composants instanciés"/>
      </annotations>
    </guards>
    <guards name="ports_inst_rel_port_comp" predicate="inst_ports∼;ports∼;inst_components ⊆ ports∼">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI--PqwEeectLZKwQfI0A"/>
        <details key="label" value="ports_inst_rel_port_comp"/>
      </annotations>
    </guards>
    <guards name="np" predicate="new_ports ∈ (components;ports)[{Inst}] ∖ dom(inst_ports) ↣ Port ∖ ran(components;ports)">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_btI--fqwEeectLZKwQfI0A"/>
        <details key="label" value="np"/>
      </annotations>
    </guards>
    <guards name="np_i" predicate="new_ports[IPort] ⊆ IPort">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_knJVMAK2EeiAPf1wPUl3Gw"/>
        <details key="label" value="np_i"/>
      </annotations>
    </guards>
    <guards name="np_o" predicate="new_ports[OPort] ⊆ OPort">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_OuP8ACxHEeiUbZrF94gIyA"/>
        <details key="label" value="np_o"/>
      </annotations>
    </guards>
    <actions name="c" action="ports ≔ ports ∪ ((inst_components ∪ new_components)∼;ports;(inst_ports ∪ new_ports))">
      <annotations source="http:///org/eventb/core/RodinInternalAnnotations">
        <details key="name" value="_f2PGEAspEeigQsLVMUeRQw"/>
        <details key="label" value="c"/>
      </annotations>
    </actions>
  </events>
</machine:Machine>
