<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.machineFile org.eventb.core.configuration="org.eventb.core.fwd" version="5">
<org.eventb.core.seesContext name="sees1" org.eventb.core.target="Bank_TDW_CO"/>
<org.eventb.core.variable name="internal_element1" org.eventb.core.identifier="bal"/>
<org.eventb.core.variable name="internal_element2" org.eventb.core.identifier="cardAcct"/>
<org.eventb.core.variable name="internal_element3" org.eventb.core.identifier="transferOk"/>
<org.eventb.core.variable name="internal_element4" org.eventb.core.identifier="transferFail"/>
<org.eventb.core.variable name="internal_element5" org.eventb.core.identifier="trAmountB"/>
<org.eventb.core.variable name="internal_element6" org.eventb.core.identifier="cardInAtmB"/>
<org.eventb.core.variable name="internal_element7" org.eventb.core.identifier="srcAccB"/>
<org.eventb.core.variable name="internal_element8" org.eventb.core.identifier="destAccB"/>
<org.eventb.core.variable name="internal_element9" org.eventb.core.identifier="recvReqTransfer"/>
<org.eventb.core.variable name="internal_element10" org.eventb.core.identifier="atmCash"/>
<org.eventb.core.variable name="internal_element11" org.eventb.core.identifier="processedDep"/>
<org.eventb.core.variable name="internal_element12" org.eventb.core.identifier="atmDepAmB"/>
<org.eventb.core.variable name="internal_element13" org.eventb.core.identifier="recvReqDep"/>
<org.eventb.core.variable name="internal_element14" org.eventb.core.identifier="withdrawOk"/>
<org.eventb.core.variable name="internal_element15" org.eventb.core.identifier="withdrawFail"/>
<org.eventb.core.variable name="internal_element16" org.eventb.core.identifier="atmWDAmB"/>
<org.eventb.core.variable name="internal_element17" org.eventb.core.identifier="recvReqWD"/>
<org.eventb.core.invariant name="internal_element1" org.eventb.core.label="mBank_T.typing_recvReqTransfer" org.eventb.core.predicate="recvReqTransfer ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element2" org.eventb.core.label="mBank_T.typing_transferOk" org.eventb.core.predicate="transferOk ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element3" org.eventb.core.label="mBank_T.typing_transferFail" org.eventb.core.predicate="transferFail ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element4" org.eventb.core.label="mBank_T.BalTransfer_0_IntegralATM_0_inv1" org.eventb.core.predicate="bal ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element5" org.eventb.core.label="mBank_T.BalTransfer_0_IntegralATM_0_inv2" org.eventb.core.predicate="cardAcct ∈ CARD ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element6" org.eventb.core.label="mBank_T.BalTransfer_4_inv23" org.eventb.core.predicate="srcAccB ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element7" org.eventb.core.label="mBank_T.BalTransfer_4_inv24" org.eventb.core.predicate="destAccB ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element8" org.eventb.core.label="mBank_T.BalTransfer_4_inv5" org.eventb.core.predicate="cardInAtmB ∈ ATM ⇸ CARD"/>
<org.eventb.core.invariant name="internal_element9" org.eventb.core.label="mBank_T.BalTransfer_4_inv6" org.eventb.core.predicate="trAmountB ∈ ATM ⇸ ℕ1"/>
<org.eventb.core.invariant name="internal_element10" org.eventb.core.label="mBank_D.typing_recvReqDep" org.eventb.core.predicate="recvReqDep ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element11" org.eventb.core.label="mBank_D.typing_processedDep" org.eventb.core.predicate="processedDep ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element12" org.eventb.core.label="mBank_D.Deposit_1_inv2" org.eventb.core.predicate="atmCash ∈ ATM → ℕ"/>
<org.eventb.core.invariant name="internal_element13" org.eventb.core.label="mBank_D.Deposit_4_inv5" org.eventb.core.predicate="atmDepAmB ∈ ATM ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element14" org.eventb.core.label="BANK_W.typing_recvReqWD" org.eventb.core.predicate="recvReqWD ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element15" org.eventb.core.label="BANK_W.typing_withdrawOk" org.eventb.core.predicate="withdrawOk ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element16" org.eventb.core.label="BANK_W.typing_withdrawFail" org.eventb.core.predicate="withdrawFail ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element17" org.eventb.core.label="BANK_W.Withdraw_4_inv5" org.eventb.core.predicate="atmWDAmB ∈ ATM ⇸ ℕ"/>
<org.eventb.core.event name="internal_element1" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="INITIALISATION">
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmDepAmB ≔ ∅" org.eventb.core.label="mBank_D.INITIALISATION.act27"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="recvReqWD ≔  ∅" org.eventb.core.label="BANK_W.INITIALISATION.act21"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="withdrawOk ≔ ∅" org.eventb.core.label="BANK_W.INITIALISATION.act18"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="withdrawFail ≔ ∅" org.eventb.core.label="BANK_W.INITIALISATION.act19"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="processedDep ≔ ∅" org.eventb.core.label="mBank_D.INITIALISATION.act15"/>
<org.eventb.core.action name="internal_element6" org.eventb.core.assignment="atmWDAmB ≔ ∅" org.eventb.core.label="BANK_W.INITIALISATION.act30"/>
<org.eventb.core.action name="internal_element7" org.eventb.core.assignment="trAmountB ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act32"/>
<org.eventb.core.action name="internal_element8" org.eventb.core.assignment="srcAccB≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act42"/>
<org.eventb.core.action name="internal_element9" org.eventb.core.assignment="destAccB  ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act43"/>
<org.eventb.core.action name="internal_element10" org.eventb.core.assignment="cardInAtmB ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act31"/>
<org.eventb.core.action name="internal_element11" org.eventb.core.assignment="transferFail ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act15"/>
<org.eventb.core.action name="internal_element12" org.eventb.core.assignment="atmCash ≔ ATM × {0}" org.eventb.core.label="mBank_D.INITIALISATION.act4"/>
<org.eventb.core.action name="internal_element13" org.eventb.core.assignment="transferOk ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act14"/>
<org.eventb.core.action name="internal_element14" org.eventb.core.assignment="recvReqTransfer ≔  ∅" org.eventb.core.label="mBank_T.INITIALISATION.act28"/>
<org.eventb.core.action name="internal_element15" org.eventb.core.assignment="bal ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act1"/>
<org.eventb.core.action name="internal_element16" org.eventb.core.assignment="cardAcct ≔ ∅" org.eventb.core.label="mBank_T.INITIALISATION.act2"/>
<org.eventb.core.action name="internal_element17" org.eventb.core.assignment="recvReqDep ≔ ∅" org.eventb.core.label="mBank_D.INITIALISATION.act18"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element2" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvReqTransfer">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name="internal_element5" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_T.RecvReqTransfer.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_T.RecvReqTransfer.typing_src_ac" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mBank_T.RecvReqTransfer.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mBank_T.RecvReqTransfer.typing_dest_ac" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mBank_T.RecvReqTransfer.typing_am" org.eventb.core.predicate="am ∈ ℕ1 "/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="destAccB(a) ≔ dest_ac" org.eventb.core.label="mBank_T.RecvReqTransfer.act10"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="recvReqTransfer ≔ recvReqTransfer ∪ {a}" org.eventb.core.label="mBank_T.RecvReqTransfer.act4"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="trAmountB(a) ≔ am" org.eventb.core.label="mBank_T.RecvReqTransfer.act6"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="srcAccB(a) ≔ src_ac" org.eventb.core.label="mBank_T.RecvReqTransfer.act9"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="cardInAtmB(a) ≔ c" org.eventb.core.label="mBank_T.RecvReqTransfer.act8"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element3" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="TransferOK">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element5" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_T.TransferOK.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_T.TransferOK.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mBank_T.TransferOK.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mBank_T.TransferOK.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mBank_T.TransferOK.grd4" org.eventb.core.predicate="c ↦ src_ac ∈ cardAcct"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="mBank_T.TransferOK.grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="mBank_T.TransferOK.grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="mBank_T.TransferOK.grd9" org.eventb.core.predicate="am &lt; bal(src_ac)"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="mBank_T.TransferOK.grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="mBank_T.TransferOK.grd13" org.eventb.core.predicate="a ∈ dom(trAmountB)"/>
<org.eventb.core.guard name="internal_element15" org.eventb.core.label="mBank_T.TransferOK.grd20" org.eventb.core.predicate="a ∈ dom(srcAccB)"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="mBank_T.TransferOK.grd14" org.eventb.core.predicate="src_ac = srcAccB(a)"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="mBank_T.TransferOK.grd24" org.eventb.core.predicate="a ∈ recvReqTransfer"/>
<org.eventb.core.guard name="internal_element17" org.eventb.core.label="mBank_T.TransferOK.grd21" org.eventb.core.predicate="a ∈ dom(destAccB)"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="mBank_T.TransferOK.grd15" org.eventb.core.predicate="dest_ac = destAccB(a)"/>
<org.eventb.core.guard name="internal_element14" org.eventb.core.label="mBank_T.TransferOK.grd16" org.eventb.core.predicate="am = trAmountB(a)"/>
<org.eventb.core.guard name="internal_element16" org.eventb.core.label="mBank_T.TransferOK.grd11" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element18" org.eventb.core.label="mBank_T.TransferOK.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element19" org.eventb.core.label="mBank_T.TransferOK.grd12" org.eventb.core.predicate="c = cardInAtmB(a)"/>
<org.eventb.core.guard name="internal_element20" org.eventb.core.label="mBank_T.TransferOK.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="bal ≔  bal  {dest_ac ↦ (bal(dest_ac) + am), src_ac ↦(bal(src_ac) − am)}" org.eventb.core.label="mBank_T.TransferOK.act1"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transferOk ≔ transferOk ∪ {a}" org.eventb.core.label="mBank_T.TransferOK.act5"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="recvReqTransfer ≔ recvReqTransfer ∖ {a}" org.eventb.core.label="mBank_T.TransferOK.act6"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element4" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespTransferOk">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_T.SendRespTransferOk.grd2" org.eventb.core.predicate="a ∈ transferOk"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_T.SendRespTransferOk.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="trAmountB ≔ {a} ⩤ trAmountB" org.eventb.core.label="mBank_T.SendRespTransferOk.act9"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transferOk ≔  transferOk ∖ {a}" org.eventb.core.label="mBank_T.SendRespTransferOk.act2"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="mBank_T.SendRespTransferOk.act11"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="srcAccB ≔  {a} ⩤ srcAccB" org.eventb.core.label="mBank_T.SendRespTransferOk.act12"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="destAccB ≔  {a} ⩤ destAccB" org.eventb.core.label="mBank_T.SendRespTransferOk.act13"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element5" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="TransferFails">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element5" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_T.TransferFails.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="mBank_T.TransferFails.grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mBank_T.TransferFails.grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mBank_T.TransferFails.grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mBank_T.TransferFails.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="mBank_T.TransferFails.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_T.TransferFails.grd9" org.eventb.core.predicate="am &gt; bal(src_ac) ∨  c ↦ src_ac ∉ cardAcct"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="mBank_T.TransferFails.grd11" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="mBank_T.TransferFails.grd21" org.eventb.core.predicate="a ∈ dom(destAccB)"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="mBank_T.TransferFails.grd12" org.eventb.core.predicate="c = cardInAtmB(a)"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="mBank_T.TransferFails.grd13" org.eventb.core.predicate="a ∈ dom(trAmountB)"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="mBank_T.TransferFails.grd22" org.eventb.core.predicate="a ∈ recvReqTransfer"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="mBank_T.TransferFails.grd20" org.eventb.core.predicate="a ∈ dom(srcAccB)"/>
<org.eventb.core.guard name="internal_element14" org.eventb.core.label="mBank_T.TransferFails.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element15" org.eventb.core.label="mBank_T.TransferFails.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element16" org.eventb.core.label="mBank_T.TransferFails.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element17" org.eventb.core.label="mBank_T.TransferFails.grd14" org.eventb.core.predicate="src_ac = srcAccB(a)"/>
<org.eventb.core.guard name="internal_element18" org.eventb.core.label="mBank_T.TransferFails.grd15" org.eventb.core.predicate="dest_ac = destAccB(a)"/>
<org.eventb.core.guard name="internal_element19" org.eventb.core.label="mBank_T.TransferFails.grd16" org.eventb.core.predicate="am = trAmountB(a)"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transferFail ≔  transferFail ∪ {a}" org.eventb.core.label="mBank_T.TransferFails.act2"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="recvReqTransfer ≔ recvReqTransfer ∖ {a}" org.eventb.core.label="mBank_T.TransferFails.act3"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element6" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespTransferFail">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_T.SendRespTransferFail.grd2" org.eventb.core.predicate="a ∈ transferFail"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_T.SendRespTransferFail.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="trAmountB ≔ {a} ⩤ trAmountB" org.eventb.core.label="mBank_T.SendRespTransferFail.act9"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="destAccB ≔  {a} ⩤ destAccB" org.eventb.core.label="mBank_T.SendRespTransferFail.act13"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="srcAccB ≔  {a} ⩤ srcAccB" org.eventb.core.label="mBank_T.SendRespTransferFail.act12"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="mBank_T.SendRespTransferFail.act11"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="transferFail ≔  transferFail ∖ {a}" org.eventb.core.label="mBank_T.SendRespTransferFail.act2"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element7" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="recvReqDeposit">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="c"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_D.recvReqDeposit.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_D.recvReqDeposit.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mBank_D.recvReqDeposit.typing_am" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmDepAmB(a) ≔ am" org.eventb.core.label="mBank_D.recvReqDeposit.act5"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="cardInAtmB(a) ≔ c" org.eventb.core.label="mBank_D.recvReqDeposit.act6"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="recvReqDep ≔ recvReqDep ∪ {a}" org.eventb.core.label="mBank_D.recvReqDeposit.act1"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element8" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="depositB">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="acc"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_D.depositB.grd13" org.eventb.core.predicate="a ∈ recvReqDep"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_D.depositB.grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="mBank_D.depositB.grd11" org.eventb.core.predicate="a ∈ dom(atmDepAmB)"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmCash(a) ≔ atmCash(a) + am" org.eventb.core.label="mBank_D.depositB.act2"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="bal(acc) ≔ bal(acc) + am" org.eventb.core.label="mBank_D.depositB.act1"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="processedDep ≔ processedDep ∪ {a}" org.eventb.core.label="mBank_D.depositB.act5"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mBank_D.depositB.grd12" org.eventb.core.predicate="atmDepAmB(a) = am"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mBank_D.depositB.grd2" org.eventb.core.predicate="acc ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mBank_D.depositB.grd3" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="mBank_D.depositB.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="mBank_D.depositB.grd5" org.eventb.core.predicate="c ↦ acc ∈ cardAcct"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="mBank_D.depositB.grd6" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="mBank_D.depositB.grd7" org.eventb.core.predicate="a ∈ dom(atmCash)"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="mBank_D.depositB.grd8" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="mBank_D.depositB.grd9" org.eventb.core.predicate="cardInAtmB(a) = c"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="mBank_D.depositB.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element9" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="sendRespDeposit">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mBank_D.sendRespDeposit.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mBank_D.sendRespDeposit.grd6" org.eventb.core.predicate="a ∈ recvReqDep"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mBank_D.sendRespDeposit.grd1" org.eventb.core.predicate="a ∈ processedDep"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mBank_D.sendRespDeposit.grd2" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mBank_D.sendRespDeposit.grd4" org.eventb.core.predicate="a ∈ dom(atmDepAmB)"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmDepAmB ≔ {a} ⩤ atmDepAmB" org.eventb.core.label="mBank_D.sendRespDeposit.act8"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="mBank_D.sendRespDeposit.act9"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="processedDep ≔ processedDep ∖ {a}" org.eventb.core.label="mBank_D.sendRespDeposit.act2"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="recvReqDep ≔ recvReqDep ∖ {a}" org.eventb.core.label="mBank_D.sendRespDeposit.act10"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element10" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvReqWD">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="am"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BANK_W.RecvReqWD.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BANK_W.RecvReqWD.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BANK_W.RecvReqWD.typing_am" org.eventb.core.predicate="am ∈ ℕ1 "/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="cardInAtmB(a) ≔ c" org.eventb.core.label="BANK_W.RecvReqWD.act8"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="atmWDAmB(a) ≔ am" org.eventb.core.label="BANK_W.RecvReqWD.act6"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="recvReqWD ≔ recvReqWD ∪ {a}" org.eventb.core.label="BANK_W.RecvReqWD.act4"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element11" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="withdrawOK">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="acc"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="BANK_W.withdrawOK.grd3" org.eventb.core.predicate="acc ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BANK_W.withdrawOK.grd17" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BANK_W.withdrawOK.grd16" org.eventb.core.predicate="c = cardInAtmB(a)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BANK_W.withdrawOK.grd18" org.eventb.core.predicate="a ∉ withdrawOk"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BANK_W.withdrawOK.grd19" org.eventb.core.predicate="a ∈ recvReqWD"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BANK_W.withdrawOK.grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="BANK_W.withdrawOK.grd2" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="BANK_W.withdrawOK.grd4" org.eventb.core.predicate="bal(acc) ≥ am"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="BANK_W.withdrawOK.grd5" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="BANK_W.withdrawOK.grd6" org.eventb.core.predicate="atmCash(a) ≥ am"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="BANK_W.withdrawOK.grd8" org.eventb.core.predicate="a ∈ dom(atmWDAmB)"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="BANK_W.withdrawOK.grd9" org.eventb.core.predicate="am = atmWDAmB(a)"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="BANK_W.withdrawOK.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element14" org.eventb.core.label="BANK_W.withdrawOK.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element15" org.eventb.core.label="BANK_W.withdrawOK.grd15" org.eventb.core.predicate="a ∈ recvReqWD"/>
<org.eventb.core.guard name="internal_element16" org.eventb.core.label="BANK_W.withdrawOK.grd14" org.eventb.core.predicate="c ↦ acc ∈ cardAcct"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="withdrawOk ≔ withdrawOk ∪  {a}" org.eventb.core.label="BANK_W.withdrawOK.act3"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="atmCash(a) ≔ atmCash(a) − am" org.eventb.core.label="BANK_W.withdrawOK.act2"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="bal(acc) ≔ bal(acc) − am" org.eventb.core.label="BANK_W.withdrawOK.act1"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element12" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespWDok">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BANK_W.SendRespWDok.grd1" org.eventb.core.predicate="a ∈ withdrawOk"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BANK_W.SendRespWDok.grd2" org.eventb.core.predicate="a ∈ recvReqWD"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BANK_W.SendRespWDok.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="withdrawOk ≔ withdrawOk ∖ {a}" org.eventb.core.label="BANK_W.SendRespWDok.act3"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="atmWDAmB ≔ {a} ⩤ atmWDAmB" org.eventb.core.label="BANK_W.SendRespWDok.act4"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="BANK_W.SendRespWDok.act6"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="recvReqWD ≔ recvReqWD ∖ {a}" org.eventb.core.label="BANK_W.SendRespWDok.act2"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element13" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="withdrawFail">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="acc"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="c"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BANK_W.withdrawFail.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="BANK_W.withdrawFail.grd3" org.eventb.core.predicate="acc ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BANK_W.withdrawFail.grd16" org.eventb.core.predicate="a ∈ recvReqWD"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BANK_W.withdrawFail.grd10" org.eventb.core.predicate="a ∈ dom(atmWDAmB)"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BANK_W.withdrawFail.grd11" org.eventb.core.predicate="am = atmWDAmB(a)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BANK_W.withdrawFail.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="BANK_W.withdrawFail.grd12" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="BANK_W.withdrawFail.grd13" org.eventb.core.predicate="cardInAtmB(a) = c"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="BANK_W.withdrawFail.grd4" org.eventb.core.predicate="am &gt; bal(acc)"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="BANK_W.withdrawFail.grd2" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="BANK_W.withdrawFail.grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="BANK_W.withdrawFail.grd8" org.eventb.core.predicate="am ≤ atmCash(a)"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="BANK_W.withdrawFail.grd7" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element14" org.eventb.core.label="BANK_W.withdrawFail.grd6" org.eventb.core.predicate="c ↦ acc ∈ cardAcct"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="withdrawFail ≔ withdrawFail ∪  {a}" org.eventb.core.label="BANK_W.withdrawFail.act4"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element14" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespWDfail">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BANK_W.SendRespWDfail.grd2" org.eventb.core.predicate="a ∈ recvReqWD"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BANK_W.SendRespWDfail.grd1" org.eventb.core.predicate="a ∈ withdrawFail"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BANK_W.SendRespWDfail.grd7" org.eventb.core.predicate="a ∈ dom(atmWDAmB)"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BANK_W.SendRespWDfail.grd5" org.eventb.core.predicate="a ∈ dom(cardInAtmB)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BANK_W.SendRespWDfail.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="recvReqWD ≔ recvReqWD ∖ {a}" org.eventb.core.label="BANK_W.SendRespWDfail.act2"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="withdrawFail ≔ withdrawFail ∖ {a}" org.eventb.core.label="BANK_W.SendRespWDfail.act3"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="atmWDAmB ≔ {a} ⩤ atmWDAmB" org.eventb.core.label="BANK_W.SendRespWDfail.act4"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="cardInAtmB ≔ {a} ⩤ cardInAtmB" org.eventb.core.label="BANK_W.SendRespWDfail.act6"/>
</org.eventb.core.event>
</org.eventb.core.machineFile>
