<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.machineFile ch.ethz.eventb.decomposition.decomposed="false" 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="bal"/>
<org.eventb.core.variable name="(" org.eventb.core.identifier="cardAcct"/>
<org.eventb.core.variable name=")" org.eventb.core.identifier="transferOk"/>
<org.eventb.core.variable name="*" org.eventb.core.identifier="transferFail"/>
<org.eventb.core.variable name="+" org.eventb.core.identifier="trAmountB"/>
<org.eventb.core.variable name="," org.eventb.core.identifier="cardInAtmB"/>
<org.eventb.core.variable name="-" org.eventb.core.identifier="srcAccB"/>
<org.eventb.core.variable name="." org.eventb.core.identifier="destAccB"/>
<org.eventb.core.variable name="/" org.eventb.core.identifier="recvReqTransfer"/>
<org.eventb.core.invariant name="0" org.eventb.core.label="typing_srcAccB" org.eventb.core.predicate="srcAccB ∈ ℙ(ATM × ACCOUNT)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="1" org.eventb.core.label="typing_recvReqTransfer" org.eventb.core.predicate="recvReqTransfer ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="2" org.eventb.core.label="typing_bal" org.eventb.core.predicate="bal ∈ ℙ(ACCOUNT × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="3" org.eventb.core.label="typing_transferOk" org.eventb.core.predicate="transferOk ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="4" org.eventb.core.label="typing_cardInAtmB" org.eventb.core.predicate="cardInAtmB ∈ ℙ(ATM × CARD)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="5" org.eventb.core.label="typing_transferFail" org.eventb.core.predicate="transferFail ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="6" org.eventb.core.label="typing_destAccB" org.eventb.core.predicate="destAccB ∈ ℙ(ATM × ACCOUNT)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="7" org.eventb.core.label="typing_trAmountB" org.eventb.core.predicate="trAmountB ∈ ℙ(ATM × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="8" org.eventb.core.label="typing_cardAcct" org.eventb.core.predicate="cardAcct ∈ ℙ(CARD × ACCOUNT)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="9" org.eventb.core.label="BalTransfer_0_IntegralATM_0_inv1" org.eventb.core.predicate="bal ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name=":" org.eventb.core.label="BalTransfer_0_IntegralATM_0_inv2" org.eventb.core.predicate="cardAcct ∈ CARD ⇸ ACCOUNT"/>
<org.eventb.core.invariant name=";" org.eventb.core.label="BalTransfer_4_inv23" org.eventb.core.predicate="srcAccB ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="=" org.eventb.core.label="BalTransfer_4_inv24" org.eventb.core.predicate="destAccB ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="&gt;" org.eventb.core.label="BalTransfer_4_inv5" org.eventb.core.predicate="cardInAtmB ∈ ATM ⇸ CARD"/>
<org.eventb.core.invariant name="?" org.eventb.core.label="BalTransfer_4_inv6" org.eventb.core.predicate="trAmountB ∈ ATM ⇸ ℕ1"/>
<org.eventb.core.event name="@" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="INITIALISATION">
<org.eventb.core.action name="'" org.eventb.core.assignment="bal ≔ ∅" org.eventb.core.label="act1"/>
<org.eventb.core.action name="(" org.eventb.core.assignment="cardAcct ≔ ∅" org.eventb.core.label="act2"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="transferOk ≔ ∅" org.eventb.core.label="act14"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="transferFail ≔ ∅" org.eventb.core.label="act15"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="recvReqTransfer ≔  ∅" org.eventb.core.label="act28"/>
<org.eventb.core.action name="," org.eventb.core.assignment="cardInAtmB ≔ ∅" org.eventb.core.label="act31"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="trAmountB ≔ ∅" org.eventb.core.label="act32"/>
<org.eventb.core.action name="." org.eventb.core.assignment="srcAccB≔ ∅" org.eventb.core.label="act42"/>
<org.eventb.core.action name="/" org.eventb.core.assignment="destAccB  ≔ ∅" org.eventb.core.label="act43"/>
</org.eventb.core.event>
<org.eventb.core.event name="A" 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.action name="4" org.eventb.core.assignment="recvReqTransfer ≔ recvReqTransfer ∪ {a}" org.eventb.core.label="act4"/>
<org.eventb.core.action name="5" org.eventb.core.assignment="trAmountB(a) ≔ am" org.eventb.core.label="act6"/>
<org.eventb.core.action name="6" org.eventb.core.assignment="cardInAtmB(a) ≔ c" org.eventb.core.label="act8"/>
<org.eventb.core.action name="7" org.eventb.core.assignment="srcAccB(a) ≔ src_ac" org.eventb.core.label="act9"/>
<org.eventb.core.action name="8" org.eventb.core.assignment="destAccB(a) ≔ dest_ac" org.eventb.core.label="act10"/>
<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="typing_src_ac" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="=" org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="&gt;" org.eventb.core.label="typing_dest_ac" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
</org.eventb.core.event>
<org.eventb.core.event name="B" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="TransferOK">
<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="c"/>
<org.eventb.core.parameter name="+" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="A" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="B" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="C" 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="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="grd4" org.eventb.core.predicate="c ↦ src_ac ∈ cardAcct"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="0" org.eventb.core.label="grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="1" org.eventb.core.label="grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="2" org.eventb.core.label="grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="3" org.eventb.core.label="grd9" org.eventb.core.predicate="am &lt; bal(src_ac)"/>
<org.eventb.core.guard name="4" org.eventb.core.label="grd11" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="5" org.eventb.core.label="grd12" org.eventb.core.predicate="c = cardInAtmB(a)"/>
<org.eventb.core.guard name="6" org.eventb.core.label="grd13" org.eventb.core.predicate="a ∈ dom(trAmountB)"/>
<org.eventb.core.guard name="7" org.eventb.core.label="grd20" org.eventb.core.predicate="a ∈ dom(srcAccB)"/>
<org.eventb.core.guard name="8" org.eventb.core.label="grd21" org.eventb.core.predicate="a ∈ dom(destAccB)"/>
<org.eventb.core.guard name="9" org.eventb.core.label="grd14" org.eventb.core.predicate="src_ac = srcAccB(a)"/>
<org.eventb.core.guard name=":" org.eventb.core.label="grd15" org.eventb.core.predicate="dest_ac = destAccB(a)"/>
<org.eventb.core.guard name=";" org.eventb.core.label="grd16" org.eventb.core.predicate="am = trAmountB(a)"/>
<org.eventb.core.guard name="=" org.eventb.core.label="grd24" org.eventb.core.predicate="a ∈ recvReqTransfer"/>
<org.eventb.core.action name="&gt;" org.eventb.core.assignment="bal ≔  bal  {dest_ac ↦ (bal(dest_ac) + am), src_ac ↦(bal(src_ac) − am)}" org.eventb.core.label="act1"/>
<org.eventb.core.action name="?" org.eventb.core.assignment="transferOk ≔ transferOk ∪ {a}" org.eventb.core.label="act5"/>
<org.eventb.core.action name="@" org.eventb.core.assignment="recvReqTransfer ≔ recvReqTransfer ∖ {a}" org.eventb.core.label="act6"/>
</org.eventb.core.event>
<org.eventb.core.event name="C" 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.guard name="." org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="(" org.eventb.core.label="grd2" org.eventb.core.predicate="a ∈ transferOk"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="transferOk ≔  transferOk ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="trAmountB ≔ {a} ⩤ trAmountB" org.eventb.core.label="act9"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="act11"/>
<org.eventb.core.action name="," org.eventb.core.assignment="srcAccB ≔  {a} ⩤ srcAccB" org.eventb.core.label="act12"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="destAccB ≔  {a} ⩤ destAccB" org.eventb.core.label="act13"/>
</org.eventb.core.event>
<org.eventb.core.event name="D" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="TransferFails">
<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="c"/>
<org.eventb.core.parameter name="+" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="?" 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="A" 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="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="grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="0" org.eventb.core.label="grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="1" org.eventb.core.label="grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="2" org.eventb.core.label="grd9" org.eventb.core.predicate="am &gt; bal(src_ac) ∨  c ↦ src_ac ∉ cardAcct"/>
<org.eventb.core.guard name="3" org.eventb.core.label="grd11" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="4" org.eventb.core.label="grd12" org.eventb.core.predicate="c = cardInAtmB(a)"/>
<org.eventb.core.guard name="5" org.eventb.core.label="grd13" org.eventb.core.predicate="a ∈ dom(trAmountB)"/>
<org.eventb.core.guard name="6" org.eventb.core.label="grd21" org.eventb.core.predicate="a ∈ dom(destAccB)"/>
<org.eventb.core.guard name="7" org.eventb.core.label="grd20" org.eventb.core.predicate="a ∈ dom(srcAccB)"/>
<org.eventb.core.guard name="8" org.eventb.core.label="grd14" org.eventb.core.predicate="src_ac = srcAccB(a)"/>
<org.eventb.core.guard name="9" org.eventb.core.label="grd15" org.eventb.core.predicate="dest_ac = destAccB(a)"/>
<org.eventb.core.guard name=":" org.eventb.core.label="grd16" org.eventb.core.predicate="am = trAmountB(a)"/>
<org.eventb.core.guard name=";" org.eventb.core.label="grd22" org.eventb.core.predicate="a ∈ recvReqTransfer"/>
<org.eventb.core.action name="=" org.eventb.core.assignment="transferFail ≔  transferFail ∪ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="&gt;" org.eventb.core.assignment="recvReqTransfer ≔ recvReqTransfer ∖ {a}" org.eventb.core.label="act3"/>
</org.eventb.core.event>
<org.eventb.core.event name="E" 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.guard name="." org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="(" org.eventb.core.label="grd2" org.eventb.core.predicate="a ∈ transferFail"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="transferFail ≔  transferFail ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="trAmountB ≔ {a} ⩤ trAmountB" org.eventb.core.label="act9"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="act11"/>
<org.eventb.core.action name="," org.eventb.core.assignment="srcAccB ≔  {a} ⩤ srcAccB" org.eventb.core.label="act12"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="destAccB ≔  {a} ⩤ destAccB" org.eventb.core.label="act13"/>
</org.eventb.core.event>
<org.eventb.core.event ch.ethz.eventb.decomposition.external="true" name="F" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="Deposit">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="acc"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name=")" org.eventb.core.identifier="c"/>
<org.eventb.core.guard name="0" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="1" 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="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="+" org.eventb.core.label="grd2" org.eventb.core.predicate="acc ∈ dom(bal)"/>
<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="c ↦ acc ∈ cardAcct"/>
<org.eventb.core.action name="/" org.eventb.core.assignment="bal(acc) ≔ bal(acc) + am" org.eventb.core.label="act1"/>
</org.eventb.core.event>
<org.eventb.core.seesContext name="G" org.eventb.core.target="Context_mBank_T"/>
</org.eventb.core.machineFile>
