<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.machineFile ch.ethz.eventb.decomposition.decomposed="true" org.eventb.core.configuration="ch.ethz.eventb.decomposition.mchBase" org.eventb.core.generated="true" version="5">
<org.eventb.core.variable name="'" org.eventb.core.identifier="trAmountM"/>
<org.eventb.core.variable name="(" org.eventb.core.identifier="cardInAtmM"/>
<org.eventb.core.variable name=")" org.eventb.core.identifier="srcAccM"/>
<org.eventb.core.variable name="*" org.eventb.core.identifier="destAccM"/>
<org.eventb.core.variable name="+" org.eventb.core.identifier="sendReqTransfer"/>
<org.eventb.core.variable name="," org.eventb.core.identifier="sendRespTransferOk"/>
<org.eventb.core.variable name="-" org.eventb.core.identifier="sendRespTransferFail"/>
<org.eventb.core.invariant name="." org.eventb.core.label="typing_sendRespTransferFail" org.eventb.core.predicate="sendRespTransferFail ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="/" org.eventb.core.label="typing_sendRespTransferOk" org.eventb.core.predicate="sendRespTransferOk ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="0" org.eventb.core.label="typing_cardInAtmM" org.eventb.core.predicate="cardInAtmM ∈ ℙ(ATM × CARD)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="1" org.eventb.core.label="typing_destAccM" org.eventb.core.predicate="destAccM ∈ ℙ(ATM × ACCOUNT)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="2" org.eventb.core.label="typing_sendReqTransfer" org.eventb.core.predicate="sendReqTransfer ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="3" org.eventb.core.label="typing_trAmountM" org.eventb.core.predicate="trAmountM ∈ ℙ(ATM × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="4" org.eventb.core.label="typing_srcAccM" org.eventb.core.predicate="srcAccM ∈ ℙ(ATM × ACCOUNT)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="5" org.eventb.core.label="BalTransfer_4_inv2" org.eventb.core.predicate="cardInAtmM ∈ ATM ⇸ CARD"/>
<org.eventb.core.invariant name="6" org.eventb.core.label="BalTransfer_4_inv3" org.eventb.core.predicate="trAmountM ∈ ATM ⇸ ℕ1"/>
<org.eventb.core.invariant name="7" org.eventb.core.label="BalTransfer_4_inv21" org.eventb.core.predicate="srcAccM ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="8" org.eventb.core.label="BalTransfer_4_inv22" org.eventb.core.predicate="destAccM ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.event name="9" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="INITIALISATION">
<org.eventb.core.action name="'" org.eventb.core.assignment="sendReqTransfer ≔  ∅" org.eventb.core.label="act27"/>
<org.eventb.core.action name="(" org.eventb.core.assignment="sendRespTransferOk ≔  ∅" org.eventb.core.label="act29"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="sendRespTransferFail ≔  ∅" org.eventb.core.label="act25"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="cardInAtmM ≔ ∅" org.eventb.core.label="act36"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="trAmountM ≔ ∅" org.eventb.core.label="act38"/>
<org.eventb.core.action name="," org.eventb.core.assignment="srcAccM ≔ ∅" org.eventb.core.label="act40"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="destAccM≔ ∅" org.eventb.core.label="act41"/>
</org.eventb.core.event>
<org.eventb.core.event name=":" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendReqTransfer">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name=")" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.parameter name="*" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="+" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="9" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name=":" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="-" org.eventb.core.label="grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="." org.eventb.core.label="grd3" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd5" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="2" org.eventb.core.label="grd8" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="4" org.eventb.core.assignment="sendReqTransfer ≔ sendReqTransfer ∪ {a}" org.eventb.core.label="act1"/>
<org.eventb.core.action name="5" org.eventb.core.assignment="trAmountM(a) ≔ am" org.eventb.core.label="act6"/>
<org.eventb.core.action name="6" org.eventb.core.assignment="srcAccM(a) ≔ src_ac" org.eventb.core.label="act7"/>
<org.eventb.core.action name="7" org.eventb.core.assignment="destAccM(a) ≔ dest_ac" org.eventb.core.label="act8"/>
<org.eventb.core.action name="8" org.eventb.core.assignment="cardInAtmM(a) ≔ c" org.eventb.core.label="act10"/>
</org.eventb.core.event>
<org.eventb.core.event name=";" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvReqTransfer">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name=")" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="*" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name="+" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.guard name="5" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="6" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="7" org.eventb.core.label="typing_src_ac" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="8" org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="9" org.eventb.core.label="typing_dest_ac" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd1" org.eventb.core.predicate="a ∈ sendReqTransfer"/>
<org.eventb.core.guard name="-" org.eventb.core.label="grd2" org.eventb.core.predicate="a ∈ dom(trAmountM)"/>
<org.eventb.core.guard name="." org.eventb.core.label="grd3" org.eventb.core.predicate="am = trAmountM(a)"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd5" org.eventb.core.predicate="a ↦ c ∈ cardInAtmM"/>
<org.eventb.core.guard name="0" org.eventb.core.label="grd8" org.eventb.core.predicate="a ∈ dom(srcAccM)"/>
<org.eventb.core.guard name="1" org.eventb.core.label="grd9" org.eventb.core.predicate="a ∈ dom(destAccM)"/>
<org.eventb.core.guard name="2" org.eventb.core.label="grd6" org.eventb.core.predicate="srcAccM(a) = src_ac"/>
<org.eventb.core.guard name="3" org.eventb.core.label="grd7" org.eventb.core.predicate="destAccM(a) = dest_ac"/>
<org.eventb.core.action name="4" org.eventb.core.assignment="sendReqTransfer ≔ sendReqTransfer ∖ {a}" org.eventb.core.label="act5"/>
</org.eventb.core.event>
<org.eventb.core.event name="=" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespTransferOk">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="sendRespTransferOk ≔  sendRespTransferOk ∪ {a}" org.eventb.core.label="act3"/>
<org.eventb.core.guard name="*" org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
</org.eventb.core.event>
<org.eventb.core.event name="&gt;" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvRespTransferOk">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="." org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="(" org.eventb.core.label="grd1" org.eventb.core.predicate="a ∈ sendRespTransferOk"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="sendRespTransferOk ≔  sendRespTransferOk ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="trAmountM ≔ {a} ⩤ trAmountM" org.eventb.core.label="act9"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="cardInAtmM ≔ {a} ⩤ cardInAtmM" org.eventb.core.label="act11"/>
<org.eventb.core.action name="," org.eventb.core.assignment="srcAccM ≔  {a} ⩤ srcAccM" org.eventb.core.label="act12"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="destAccM ≔  {a} ⩤ destAccM" org.eventb.core.label="act13"/>
</org.eventb.core.event>
<org.eventb.core.event name="?" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespTransferFail">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="sendRespTransferFail ≔  sendRespTransferFail ∪ {a}" org.eventb.core.label="act3"/>
<org.eventb.core.guard name="*" org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
</org.eventb.core.event>
<org.eventb.core.event name="@" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvRespTransferFail">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="." org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="(" org.eventb.core.label="grd1" org.eventb.core.predicate="a ∈ sendRespTransferFail"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="sendRespTransferFail ≔  sendRespTransferFail ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="trAmountM ≔ {a} ⩤ trAmountM" org.eventb.core.label="act9"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="cardInAtmM ≔ {a} ⩤ cardInAtmM" org.eventb.core.label="act11"/>
<org.eventb.core.action name="," org.eventb.core.assignment="srcAccM ≔  {a} ⩤ srcAccM" org.eventb.core.label="act12"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="destAccM ≔  {a} ⩤ destAccM" org.eventb.core.label="act13"/>
</org.eventb.core.event>
<org.eventb.core.seesContext name="A" org.eventb.core.target="Context_mMW_T"/>
</org.eventb.core.machineFile>
