<?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_CO"/>
<org.eventb.core.variable name="internal_element1" org.eventb.core.identifier="validCard"/>
<org.eventb.core.variable name="internal_element2" org.eventb.core.identifier="cardInAtm"/>
<org.eventb.core.variable name="internal_element3" org.eventb.core.identifier="trAmount"/>
<org.eventb.core.variable name="internal_element4" org.eventb.core.identifier="transOkAtm"/>
<org.eventb.core.variable name="internal_element5" org.eventb.core.identifier="srcAcc"/>
<org.eventb.core.variable name="internal_element6" org.eventb.core.identifier="destAcc"/>
<org.eventb.core.variable name="internal_element7" org.eventb.core.identifier="recvRespTransferOk"/>
<org.eventb.core.variable name="internal_element8" org.eventb.core.identifier="recvRespTransferFail"/>
<org.eventb.core.variable name="internal_element9" org.eventb.core.identifier="trans"/>
<org.eventb.core.variable name="internal_element10" org.eventb.core.identifier="accBalOnAtm"/>
<org.eventb.core.variable name="internal_element11" org.eventb.core.identifier="atmCashA"/>
<org.eventb.core.variable name="internal_element12" org.eventb.core.identifier="atmDepAm"/>
<org.eventb.core.variable name="internal_element13" org.eventb.core.identifier="recvRespDep"/>
<org.eventb.core.invariant name="internal_element1" org.eventb.core.label="mATM_T.typing_trans" org.eventb.core.predicate="trans ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element2" org.eventb.core.label="mATM_T.typing_recvRespTransferOk" org.eventb.core.predicate="recvRespTransferOk ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element3" org.eventb.core.label="mATM_T.typing_recvRespTransferFail" org.eventb.core.predicate="recvRespTransferFail ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element4" org.eventb.core.label="mATM_T.typing_validCard" org.eventb.core.predicate="validCard ∈ ℙ(CARD)"/>
<org.eventb.core.invariant name="internal_element5" org.eventb.core.label="mATM_T.BalTransfer_0_IntegralATM_0_inv4" org.eventb.core.predicate="validCard ⊆  CARD"/>
<org.eventb.core.invariant name="internal_element6" org.eventb.core.label="mATM_T.BalTransfer_1_inv10" org.eventb.core.predicate="cardInAtm ∈  ATM ⇸ CARD"/>
<org.eventb.core.invariant name="internal_element7" org.eventb.core.label="mATM_T.BalTransfer_2_inv8" org.eventb.core.predicate="trAmount ∈ ATM ⇸ ℕ1"/>
<org.eventb.core.invariant name="internal_element8" org.eventb.core.label="mATM_T.BalTransfer_2_inv11" org.eventb.core.predicate="transOkAtm ∈ ATM ⇸ BOOL"/>
<org.eventb.core.invariant name="internal_element9" org.eventb.core.label="mATM_T.BalTransfer_2_inv12" org.eventb.core.predicate="srcAcc ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element10" org.eventb.core.label="mATM_T.BalTransfer_2_inv13" org.eventb.core.predicate="destAcc ∈ ATM ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="internal_element11" org.eventb.core.label="mATM_T.BalTransfer_2_inv17" org.eventb.core.predicate="∀ c · c ∈ ran(cardInAtm) ⇒ c ∈ validCard"/>
<org.eventb.core.invariant name="internal_element12" org.eventb.core.label="mATM_D.typing_recvRespDep" org.eventb.core.predicate="recvRespDep ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element13" org.eventb.core.label="mATM_D.Deposit_2_inv8" org.eventb.core.predicate="atmDepAm ∈ ATM ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element14" org.eventb.core.label="mATM_D.Deposit_2_inv10" org.eventb.core.predicate="atmCashA ∈ ATM → ℕ"/>
<org.eventb.core.invariant name="internal_element15" org.eventb.core.label="mATM_D.Deposit_2_inv11" org.eventb.core.predicate="accBalOnAtm ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name="internal_element16" org.eventb.core.label="mATM_D.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="destAcc ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act23"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="trAmount ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act18"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="recvRespTransferOk ≔  ∅" org.eventb.core.label="mATM_T.INITIALISATION.act24"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="recvRespTransferFail ≔  ∅" org.eventb.core.label="mATM_T.INITIALISATION.act26"/>
<org.eventb.core.action name="internal_element5" org.eventb.core.assignment="transOkAtm ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act21"/>
<org.eventb.core.action name="internal_element6" org.eventb.core.assignment="trans ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act30"/>
<org.eventb.core.action name="internal_element7" org.eventb.core.assignment="srcAcc ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act22"/>
<org.eventb.core.action name="internal_element8" org.eventb.core.assignment="cardInAtm ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act7"/>
<org.eventb.core.action name="internal_element9" org.eventb.core.assignment="recvRespDep ≔ ∅" org.eventb.core.label="mATM_D.INITIALISATION.act20"/>
<org.eventb.core.action name="internal_element10" org.eventb.core.assignment="accBalOnAtm ≔ ∅" org.eventb.core.label="mATM_D.INITIALISATION.act11"/>
<org.eventb.core.action name="internal_element11" org.eventb.core.assignment="validCard ≔ ∅" org.eventb.core.label="mATM_T.INITIALISATION.act4"/>
<org.eventb.core.action name="internal_element12" org.eventb.core.assignment="atmCashA ≔ ATM × {0}" org.eventb.core.label="mATM_D.INITIALISATION.act21"/>
<org.eventb.core.action name="internal_element13" org.eventb.core.assignment="atmDepAm ≔ ∅" org.eventb.core.label="mATM_D.INITIALISATION.act14"/>
</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="SendReqTransfer">
<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="mATM_T.SendReqTransfer.grd8" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_T.SendReqTransfer.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mATM_T.SendReqTransfer.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mATM_T.SendReqTransfer.grd3" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mATM_T.SendReqTransfer.grd11" org.eventb.core.predicate="a ∉ trans"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="mATM_T.SendReqTransfer.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="mATM_T.SendReqTransfer.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="mATM_T.SendReqTransfer.grd7" org.eventb.core.predicate="a ↦ c ∈ cardInAtm"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="mATM_T.SendReqTransfer.grd4" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="mATM_T.SendReqTransfer.grd5" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="destAcc(a) ≔ dest_ac" org.eventb.core.label="mATM_T.SendReqTransfer.act4"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="srcAcc(a) ≔ src_ac" org.eventb.core.label="mATM_T.SendReqTransfer.act3"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="trAmount(a) ≔ am" org.eventb.core.label="mATM_T.SendReqTransfer.act2"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="trans ≔ trans ∪ {a}" org.eventb.core.label="mATM_T.SendReqTransfer.act11"/>
</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="RecvRespTransferOk">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mATM_T.RecvRespTransferOk.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="recvRespTransferOk ≔  recvRespTransferOk ∪ {a}" org.eventb.core.label="mATM_T.RecvRespTransferOk.act1"/>
</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="RecvRespTransferFail">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mATM_T.RecvRespTransferFail.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="recvRespTransferFail ≔  recvRespTransferFail ∪ {a}" org.eventb.core.label="mATM_T.RecvRespTransferFail.act1"/>
</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="TransferOKAtm">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mATM_T.TransferOKAtm.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_T.TransferOKAtm.grd11" org.eventb.core.predicate="a ∈ recvRespTransferOk"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="recvRespTransferOk ≔ recvRespTransferOk ∖ {a}" org.eventb.core.label="mATM_T.TransferOKAtm.act6"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="trans ≔ trans ∖ {a}" org.eventb.core.label="mATM_T.TransferOKAtm.act7"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="transOkAtm(a) ≔  TRUE" org.eventb.core.label="mATM_T.TransferOKAtm.act1"/>
</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="TransferFailsAtm">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mATM_T.TransferFailsAtm.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_T.TransferFailsAtm.grd11" org.eventb.core.predicate="a ∈ recvRespTransferFail"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transOkAtm(a) ≔  FALSE" org.eventb.core.label="mATM_T.TransferFailsAtm.act1"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="trans ≔ trans ∖ {a}" org.eventb.core.label="mATM_T.TransferFailsAtm.act7"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="recvRespTransferFail ≔ recvRespTransferFail ∖ {a}" org.eventb.core.label="mATM_T.TransferFailsAtm.act6"/>
</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="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.guard name="internal_element1" org.eventb.core.label="mATM_T.Deposit.grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_T.Deposit.grd3" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mATM_T.Deposit.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mATM_T.Deposit.grd4" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mATM_T.Deposit.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
</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="sendReqDeposit">
<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="mATM_D.sendReqDeposit.grd2" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_D.sendReqDeposit.grd6" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mATM_D.sendReqDeposit.grd4" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mATM_D.sendReqDeposit.grd5" org.eventb.core.predicate="cardInAtm(a) = c"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mATM_D.sendReqDeposit.grd3" org.eventb.core.predicate="c ∈ ran(cardInAtm)"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="mATM_D.sendReqDeposit.grd9" org.eventb.core.predicate="a ∉ trans"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="mATM_D.sendReqDeposit.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="mATM_D.sendReqDeposit.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="mATM_D.sendReqDeposit.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmDepAm(a) ≔ am" org.eventb.core.label="mATM_D.sendReqDeposit.act3"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="trans ≔ trans ∪ {a}" org.eventb.core.label="mATM_D.sendReqDeposit.act2"/>
</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="recvRespDeposit">
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="mATM_D.recvRespDeposit.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="recvRespDep ≔ recvRespDep ∪ {a}" org.eventb.core.label="mATM_D.recvRespDeposit.act4"/>
</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="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_element1" org.eventb.core.label="mATM_D.depositATM.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_D.depositATM.grd12" org.eventb.core.predicate="a ∈ recvRespDep"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mATM_D.depositATM.grd9" org.eventb.core.predicate="a ∈ dom (atmDepAm)"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mATM_D.depositATM.grd10" org.eventb.core.predicate="atmDepAm(a) = am"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mATM_D.depositATM.typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmCashA(a) ≔ atmCashA(a) + am" org.eventb.core.label="mATM_D.depositATM.act2"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="recvRespDep ≔ recvRespDep ∖ {a}" org.eventb.core.label="mATM_D.depositATM.act6"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="trans ≔ trans ∖ {a}" org.eventb.core.label="mATM_D.depositATM.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="Transfer">
<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.guard name="internal_element1" org.eventb.core.label="mATM_D.Transfer.typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="mATM_D.Transfer.typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="mATM_D.Transfer.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="mATM_D.Transfer.grd3" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="mATM_D.Transfer.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="mATM_D.Transfer.grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="mATM_D.Transfer.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
</org.eventb.core.event>
</org.eventb.core.machineFile>
