<?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="ATM_TD_2_CO"/>
<org.eventb.core.refinesMachine name="internal_element1" org.eventb.core.target="ATM_TD_1"/>
<org.eventb.core.variable name="internal_element1" org.eventb.core.identifier="bal"/>
<org.eventb.core.variable name="internal_element2" org.eventb.core.identifier="validCard"/>
<org.eventb.core.variable name="internal_element3" org.eventb.core.identifier="cardAcct"/>
<org.eventb.core.variable name="internal_element4" org.eventb.core.identifier="reqTransfer"/>
<org.eventb.core.variable name="internal_element5" org.eventb.core.identifier="transferOk"/>
<org.eventb.core.variable name="internal_element6" org.eventb.core.identifier="transferFail"/>
<org.eventb.core.variable name="internal_element7" org.eventb.core.identifier="cardInAtm"/>
<org.eventb.core.variable name="internal_element8" org.eventb.core.identifier="respTransferOk"/>
<org.eventb.core.variable name="internal_element9" org.eventb.core.identifier="respTransferFail"/>
<org.eventb.core.variable name="internal_element10" org.eventb.core.identifier="srcAccBalAtm"/>
<org.eventb.core.variable name="internal_element11" org.eventb.core.identifier="destAccBalAtm"/>
<org.eventb.core.variable name="internal_element12" org.eventb.core.identifier="trAmount"/>
<org.eventb.core.variable name="internal_element13" org.eventb.core.identifier="transOkAtm"/>
<org.eventb.core.variable name="internal_element14" org.eventb.core.identifier="srcAcc"/>
<org.eventb.core.variable name="internal_element15" org.eventb.core.identifier="destAcc"/>
<org.eventb.core.variable name="internal_element16" org.eventb.core.identifier="transT"/>
<org.eventb.core.variable name="internal_element24" org.eventb.core.identifier="transD"/>
<org.eventb.core.variable name="internal_element17" org.eventb.core.identifier="atmCash"/>
<org.eventb.core.variable name="internal_element18" org.eventb.core.identifier="reqDep"/>
<org.eventb.core.variable name="internal_element19" org.eventb.core.identifier="respDep"/>
<org.eventb.core.variable name="internal_element20" org.eventb.core.identifier="processedDep"/>
<org.eventb.core.variable name="internal_element21" org.eventb.core.identifier="atmDepAm"/>
<org.eventb.core.variable name="internal_element22" org.eventb.core.identifier="atmCashA"/>
<org.eventb.core.variable name="internal_element23" org.eventb.core.identifier="accBalOnAtm"/>
<org.eventb.core.invariant name="internal_element1" org.eventb.core.label="BalTransfer_2.inv1" org.eventb.core.predicate="transT ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element2" org.eventb.core.label="BalTransfer_2.inv3" org.eventb.core.predicate="reqTransfer ∈ ℙ(transT)"/>
<org.eventb.core.invariant name="internal_element3" org.eventb.core.label="BalTransfer_2.inv6" org.eventb.core.predicate="respTransferOk ∈ ℙ(transT)"/>
<org.eventb.core.invariant name="internal_element4" org.eventb.core.label="BalTransfer_2.inv7" org.eventb.core.predicate="respTransferFail ∈ ℙ(transT)"/>
<org.eventb.core.invariant name="internal_element5" org.eventb.core.label="BalTransfer_2.inv8" org.eventb.core.predicate="trAmount ∈ ATM ⇸ ℕ1"/>
<org.eventb.core.invariant name="internal_element6" org.eventb.core.label="BalTransfer_2.inv9" org.eventb.core.predicate="srcAccBalAtm ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element7" org.eventb.core.label="BalTransfer_2.inv10" org.eventb.core.predicate="destAccBalAtm ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element8" org.eventb.core.label="BalTransfer_2.inv11" org.eventb.core.predicate="transOkAtm ∈ ATM ⇸ BOOL"/>
<org.eventb.core.invariant name="internal_element9" org.eventb.core.label="BalTransfer_2.inv12" org.eventb.core.predicate="srcAcc ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element10" org.eventb.core.label="BalTransfer_2.inv13" org.eventb.core.predicate="destAcc ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element11" org.eventb.core.label="BalTransfer_2.inv15" org.eventb.core.predicate="transferOk ⊆transferOkA"/>
<org.eventb.core.invariant name="internal_element12" org.eventb.core.label="BalTransfer_2.inv16" org.eventb.core.predicate="transferFail ⊆transferFailA"/>
<org.eventb.core.invariant name="internal_element13" org.eventb.core.label="BalTransfer_2.inv17" org.eventb.core.predicate="∀ c · c ∈ ran(cardInAtm) ⇒ c ∈ validCard"/>
<org.eventb.core.invariant name="internal_element14" org.eventb.core.label="BalTransfer_2.inv18" org.eventb.core.predicate="partition(transT, reqTransfer, transferOk, transferFail, respTransferOk, respTransferFail)"/>
<org.eventb.core.invariant name="internal_element25" org.eventb.core.label="inv1" org.eventb.core.predicate="transD ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element15" org.eventb.core.label="Deposit_2·inv5" org.eventb.core.predicate="reqDep ∈ ℙ(transD)"/>
<org.eventb.core.invariant name="internal_element16" org.eventb.core.label="Deposit_2.inv6" org.eventb.core.predicate="respDep ∈ ℙ(transD)"/>
<org.eventb.core.invariant name="internal_element17" org.eventb.core.label="Deposit_2.inv7" org.eventb.core.predicate="processedDep ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element18" org.eventb.core.label="Deposit_2.inv8" org.eventb.core.predicate="atmDepAm ∈ ATM ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element19" org.eventb.core.label="Deposit_2.inv9" org.eventb.core.predicate="partition(transD, reqDep, respDep)"/>
<org.eventb.core.invariant name="internal_element20" org.eventb.core.label="Deposit_2.inv10" org.eventb.core.predicate="atmCashA ∈ ATM → ℕ"/>
<org.eventb.core.invariant name="internal_element21" org.eventb.core.label="Deposit_2.inv11" org.eventb.core.predicate="accBalOnAtm ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element22" org.eventb.core.label="Deposit_2.inv12" org.eventb.core.predicate="∀c· c ∈ ran(cardInAtm) ⇒ c ∈ validCard "/>
<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="respTransferOk ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act16"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transferFail ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act15"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="transferOk ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act14"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="reqTransfer ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act13"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="transT ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act24"/>
<org.eventb.core.action name="internal_element6" org.eventb.core.assignment="srcAccBalAtm ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act19"/>
<org.eventb.core.action name="internal_element7" org.eventb.core.assignment="trAmount ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act18"/>
<org.eventb.core.action name="internal_element8" org.eventb.core.assignment="respTransferFail ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act17"/>
<org.eventb.core.action name="internal_element9" org.eventb.core.assignment="destAccBalAtm ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act20"/>
<org.eventb.core.action name="internal_element10" org.eventb.core.assignment="transOkAtm ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act21"/>
<org.eventb.core.action name="internal_element11" org.eventb.core.assignment="srcAcc ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act22"/>
<org.eventb.core.action name="internal_element12" org.eventb.core.assignment="destAcc ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act23"/>
<org.eventb.core.action name="internal_element13" org.eventb.core.assignment="bal ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act1"/>
<org.eventb.core.action name="internal_element14" org.eventb.core.assignment="cardAcct ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act2"/>
<org.eventb.core.action name="internal_element15" org.eventb.core.assignment="validCard ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act4"/>
<org.eventb.core.action name="internal_element16" org.eventb.core.assignment="cardInAtm ≔ ∅" org.eventb.core.label="BalTransfer_2.INITIALISATION.act7"/>
<org.eventb.core.action name="internal_element17" org.eventb.core.assignment="reqDep ≔  ∅" org.eventb.core.label="Deposit_2.INITIALISATION.act13"/>
<org.eventb.core.action name="internal_element24" org.eventb.core.assignment="transD ≔ ∅" org.eventb.core.label="Deposit_2·INITIALISATION·act12"/>
<org.eventb.core.action name="internal_element18" org.eventb.core.assignment="atmDepAm ≔ ∅" org.eventb.core.label="Deposit_2·INITIALISATION·act14"/>
<org.eventb.core.action name="internal_element19" org.eventb.core.assignment="processedDep ≔ ∅" org.eventb.core.label="Deposit_2.INITIALISATION.act15"/>
<org.eventb.core.action name="internal_element20" org.eventb.core.assignment="atmCash ≔ ATM × {0}" org.eventb.core.label="Deposit_2.INITIALISATION.act4"/>
<org.eventb.core.action name="internal_element21" org.eventb.core.assignment="respDep ≔ ∅" org.eventb.core.label="Deposit_2.INITIALISATION.act16"/>
<org.eventb.core.action name="internal_element22" org.eventb.core.assignment="atmCashA ≔ ATM × {0}" org.eventb.core.label="Deposit_2.INITIALISATION.act17"/>
<org.eventb.core.action name="internal_element23" org.eventb.core.assignment="accBalOnAtm ≔ ∅" org.eventb.core.label="Deposit_2.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="ReqTransfer">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name="internal_element3" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.parameter name="internal_element4" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element5" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd3" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd6" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd8" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd9" org.eventb.core.predicate="c = cardInAtm(a)"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="BalTransfer_2.ReqTransfer.grd10" org.eventb.core.predicate="a ∉ transT"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transT ≔ transT ∪ {a}" org.eventb.core.label="BalTransfer_2.ReqTransfer.act5"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="destAcc(a) ≔ dest_ac" org.eventb.core.label="BalTransfer_2.ReqTransfer.act4"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="srcAcc(a) ≔ src_ac" org.eventb.core.label="BalTransfer_2.ReqTransfer.act3"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="trAmount(a) ≔ am" org.eventb.core.label="BalTransfer_2.ReqTransfer.act2"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="reqTransfer ≔  reqTransfer ∪ {a}" org.eventb.core.label="BalTransfer_2.ReqTransfer.act1"/>
</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.refinesEvent name="internal_element1" org.eventb.core.target="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="BalTransfer_2.TransferOK.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.TransferOK.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BalTransfer_2.TransferOK.grd4" org.eventb.core.predicate="c ↦ src_ac ∈ cardAcct"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BalTransfer_2.TransferOK.grd20" org.eventb.core.predicate="a ∈ dom(srcAcc)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BalTransfer_2.TransferOK.grd11" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="BalTransfer_2.TransferOK.grd21" org.eventb.core.predicate="a ∈ dom(destAcc)"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="BalTransfer_2.TransferOK.grd12" org.eventb.core.predicate="c = cardInAtm(a)"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="BalTransfer_2.TransferOK.grd13" org.eventb.core.predicate="a ∈ dom(trAmount)"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="BalTransfer_2.TransferOK.grd14" org.eventb.core.predicate="src_ac = srcAcc(a)"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="BalTransfer_2.TransferOK.grd15" org.eventb.core.predicate="dest_ac = destAcc(a)"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="BalTransfer_2.TransferOK.grd16" org.eventb.core.predicate="am = trAmount(a)"/>
<org.eventb.core.guard name="internal_element19" org.eventb.core.label="BalTransfer_2.TransferOK.grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transferOk ≔ transferOk ∪ {a}" org.eventb.core.label="BalTransfer_2.TransferOK.act5"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="bal ≔  bal  {dest_ac ↦ (bal(dest_ac) + am), src_ac ↦(bal(src_ac) − am)}" org.eventb.core.label="BalTransfer_2.TransferOK.act1"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="reqTransfer ≔ reqTransfer ∖ {a}" org.eventb.core.label="BalTransfer_2.TransferOK.act6"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="BalTransfer_2.TransferOK.grd9" org.eventb.core.predicate="am ≤ bal(src_ac)"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="BalTransfer_2.TransferOK.grd17" org.eventb.core.predicate="a ∈ reqTransfer"/>
<org.eventb.core.guard name="internal_element14" org.eventb.core.label="BalTransfer_2.TransferOK.grd18" org.eventb.core.predicate="⊤ "/>
<org.eventb.core.guard name="internal_element15" org.eventb.core.label="BalTransfer_2.TransferOK.grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element16" org.eventb.core.label="BalTransfer_2.TransferOK.grd19" org.eventb.core.predicate="⊤ "/>
<org.eventb.core.guard name="internal_element17" org.eventb.core.label="BalTransfer_2.TransferOK.grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="internal_element18" org.eventb.core.label="BalTransfer_2.TransferOK.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
</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="RespTransferOk">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_2.RespTransferOk.grd3" org.eventb.core.predicate="a ∉ transferFail"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.RespTransferOk.grd2" org.eventb.core.predicate="a ∈ transferOk"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="respTransferOk ≔  respTransferOk ∪ {a}" org.eventb.core.label="BalTransfer_2.RespTransferOk.act1"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transferOk ≔  transferOk ∖ {a}" org.eventb.core.label="BalTransfer_2.RespTransferOk.act2"/>
</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.refinesEvent name="internal_element1" org.eventb.core.target="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_element1" org.eventb.core.label="BalTransfer_2.TransferFails.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.TransferFails.grd21" org.eventb.core.predicate="a ∈ dom(destAcc)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BalTransfer_2.TransferFails.grd11" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BalTransfer_2.TransferFails.grd12" org.eventb.core.predicate="c = cardInAtm(a)"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BalTransfer_2.TransferFails.grd20" org.eventb.core.predicate="a ∈ dom(srcAcc)"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="BalTransfer_2.TransferFails.grd14" org.eventb.core.predicate="src_ac = srcAcc(a)"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="BalTransfer_2.TransferFails.grd13" org.eventb.core.predicate="a ∈ dom(trAmount)"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="BalTransfer_2.TransferFails.grd16" org.eventb.core.predicate="am = trAmount(a)"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="BalTransfer_2.TransferFails.grd15" org.eventb.core.predicate="dest_ac = destAcc(a)"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="BalTransfer_2.TransferFails.grd18" org.eventb.core.predicate="a ∉ transferFail"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="BalTransfer_2.TransferFails.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element12" org.eventb.core.label="BalTransfer_2.TransferFails.grd17" org.eventb.core.predicate="a ∈ reqTransfer"/>
<org.eventb.core.guard name="internal_element13" org.eventb.core.label="BalTransfer_2.TransferFails.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element14" org.eventb.core.label="BalTransfer_2.TransferFails.grd19" org.eventb.core.predicate="a ∉ transferOk"/>
<org.eventb.core.guard name="internal_element15" org.eventb.core.label="BalTransfer_2.TransferFails.grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element16" org.eventb.core.label="BalTransfer_2.TransferFails.grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element17" org.eventb.core.label="BalTransfer_2.TransferFails.grd9" org.eventb.core.predicate="am &gt; bal(src_ac) ∨ c ↦ src_ac ∉ cardAcct"/>
<org.eventb.core.guard name="internal_element18" org.eventb.core.label="BalTransfer_2.TransferFails.grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transferFail ≔  transferFail ∪ {a}" org.eventb.core.label="BalTransfer_2.TransferFails.act2"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="reqTransfer ≔ reqTransfer ∖ {a}" org.eventb.core.label="BalTransfer_2.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="RespTransferFail">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_2.RespTransferFail.grd3" org.eventb.core.predicate="a ∉ transferOk"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.RespTransferFail.grd2" org.eventb.core.predicate="a ∈ transferFail"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="respTransferFail ≔  respTransferFail ∪ {a}" org.eventb.core.label="BalTransfer_2.RespTransferFail.act1"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transferFail ≔  transferFail ∖ {a}" org.eventb.core.label="BalTransfer_2.RespTransferFail.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="TransferOKAtm">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_2.TransferOKAtm.grd9" org.eventb.core.predicate="a ∉ respTransferFail"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.TransferOKAtm.grd8" org.eventb.core.predicate="a ∈ respTransferOk"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transT ≔ transT ∖ {a}" org.eventb.core.label="BalTransfer_2.TransferOKAtm.act6"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="respTransferOk ≔ respTransferOk ∖ {a}" org.eventb.core.label="BalTransfer_2.TransferOKAtm.act5"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="transOkAtm(a) ≔  TRUE" org.eventb.core.label="BalTransfer_2.TransferOKAtm.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="TransferFailsAtm">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_2.TransferFailsAtm.grd9" org.eventb.core.predicate="a ∉ respTransferOk"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_2.TransferFailsAtm.grd8" org.eventb.core.predicate="a ∈ respTransferFail"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transOkAtm(a) ≔  FALSE" org.eventb.core.label="BalTransfer_2.TransferFailsAtm.act1"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="respTransferFail ≔ respTransferFail ∖ {a}" org.eventb.core.label="BalTransfer_2.TransferFailsAtm.act5"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="transT ≔ transT ∖ {a}" org.eventb.core.label="BalTransfer_2.TransferFailsAtm.act6"/>
</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="reqDeposit">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="c"/>
<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.guard name="internal_element1" org.eventb.core.label="Deposit_2.reqDeposit.grd3" org.eventb.core.predicate="c ∈ ran(cardInAtm)"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="Deposit_2.reqDeposit.grd2" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="Deposit_2.reqDeposit.grd4" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="Deposit_2.reqDeposit.grd5" org.eventb.core.predicate="cardInAtm(a) = c"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="Deposit_2.reqDeposit.grd6" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="Deposit_2.reqDeposit.grd9" org.eventb.core.predicate="a ∉ transD"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmDepAm(a) ≔ am" org.eventb.core.label="Deposit_2.reqDeposit.act3"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transD ≔ transD ∪ {a}" org.eventb.core.label="Deposit_2.reqDeposit.act2"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="reqDep ≔ reqDep ∪ {a}" org.eventb.core.label="Deposit_2.reqDeposit.act1"/>
</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="depositB">
<org.eventb.core.refinesEvent name="internal_element1" org.eventb.core.target="Deposit"/>
<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="Deposit_2.depositB.grd8" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="Deposit_2.depositB.grd11" org.eventb.core.predicate="a ∈ dom(atmDepAm)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="Deposit_2.depositB.grd12" org.eventb.core.predicate="atmDepAm(a) = am"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="Deposit_2.depositB.grd9" org.eventb.core.predicate="cardInAtm(a) = c"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="Deposit_2.depositB.grd6" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="Deposit_2.depositB.grd10" org.eventb.core.predicate="a ∈ reqDep"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="Deposit_2.depositB.grd7" org.eventb.core.predicate="a ∈ dom(atmCash)"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="Deposit_2.depositB.grd5" org.eventb.core.predicate="c ↦ acc ∈ cardAcct"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="Deposit_2.depositB.grd2" org.eventb.core.predicate="acc ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="Deposit_2.depositB.grd3" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element11" org.eventb.core.label="Deposit_2.depositB.grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmCash(a) ≔ atmCash(a) + am" org.eventb.core.label="Deposit_2.depositB.act2"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="bal(acc) ≔ bal(acc) + am" org.eventb.core.label="Deposit_2.depositB.act1"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="processedDep ≔ processedDep ∪ {a}" org.eventb.core.label="Deposit_2.depositB.act5"/>
</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="respDeposit">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="Deposit_2.respDeposit.grd2" org.eventb.core.predicate="a ∈ reqDep"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="Deposit_2.respDeposit.grd1" org.eventb.core.predicate="a ∈ processedDep"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="processedDep ≔ processedDep ∖ {a}" org.eventb.core.label="Deposit_2.respDeposit.act3"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="reqDep ≔ reqDep ∖ {a}" org.eventb.core.label="Deposit_2.respDeposit.act4"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="respDep ≔ respDep ∪ {a}" org.eventb.core.label="Deposit_2.respDeposit.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="depositATM">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="internal_element2" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="Deposit_2.depositATM.grd9" org.eventb.core.predicate="a ∈ dom (atmDepAm)"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="Deposit_2.depositATM.grd10" org.eventb.core.predicate="atmDepAm(a) = am"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="Deposit_2.depositATM.grd8" org.eventb.core.predicate="a ∈ respDep"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="respDep ≔ respDep ∖ {a}" org.eventb.core.label="Deposit_2.depositATM.act4"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="atmCashA(a) ≔ atmCashA(a) + am" org.eventb.core.label="Deposit_2.depositATM.act2"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="transD ≔ transD ∖ {a}" org.eventb.core.label="Deposit_2.depositATM.act5"/>
</org.eventb.core.event>
</org.eventb.core.machineFile>
