<?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_1_CO"/>
<org.eventb.core.refinesMachine name="internal_element1" org.eventb.core.target="ATM_TD_0"/>
<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="transferOkA"/>
<org.eventb.core.variable name="internal_element5" org.eventb.core.identifier="transferFailA"/>
<org.eventb.core.variable name="internal_element6" org.eventb.core.identifier="cardInAtm"/>
<org.eventb.core.variable name="internal_element7" org.eventb.core.identifier="atmCash"/>
<org.eventb.core.invariant name="internal_element1" org.eventb.core.label="BalTransfer_1.inv9" org.eventb.core.predicate="transferOkA ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element2" org.eventb.core.label="BalTransfer_1.in10" org.eventb.core.predicate="transferFailA ∈ ℙ(ATM)"/>
<org.eventb.core.invariant name="internal_element3" org.eventb.core.label="BalTransfer_1.inv10" org.eventb.core.predicate="cardInAtm ∈  ATM ⇸ CARD"/>
<org.eventb.core.invariant name="internal_element4" org.eventb.core.label="Deposit_1.inv2" org.eventb.core.predicate="atmCash ∈ 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="__COKMTqkEeCEXI9UeGRwrw" org.eventb.core.assignment="bal ≔ ∅" org.eventb.core.label="act1"/>
<org.eventb.core.action name="_RPaLxD24EeCAYsu3bd3gpA" org.eventb.core.assignment="cardAcct ≔ ∅" org.eventb.core.label="act2"/>
<org.eventb.core.action name="_RPay0j24EeCAYsu3bd3gpA" org.eventb.core.assignment="validCard ≔ ∅" org.eventb.core.label="act4"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transferFailA ≔ ∅" org.eventb.core.label="BalTransfer_1.INITIALISATION.act6"/>
<org.eventb.core.action name="internal_element2" org.eventb.core.assignment="transferOkA ≔ ∅" org.eventb.core.label="BalTransfer_1.INITIALISATION.act5"/>
<org.eventb.core.action name="internal_element3" org.eventb.core.assignment="atmCash ≔ ATM × {0}" org.eventb.core.label="Deposit_1.INITIALISATION.act6"/>
<org.eventb.core.action name="internal_element4" org.eventb.core.assignment="cardInAtm ≔ ∅" org.eventb.core.label="BalTransfer_1.INITIALISATION.act7"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element2" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="transferOK">
<org.eventb.core.refinesEvent name="internal_element1" org.eventb.core.target="Transfer"/>
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="BalTransfer_1.transferOK.grd11" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transferOkA ≔  transferOkA ∪ {a}" org.eventb.core.label="BalTransfer_1.transferOK.act2"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_1.transferOK.grd12" org.eventb.core.predicate="c = cardInAtm(a)"/>
</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="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="BalTransfer_1.transferFails.grd11" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="BalTransfer_1.transferFails.grd12" org.eventb.core.predicate="c = cardInAtm(a)"/>
<org.eventb.core.guard name="internal_element7" org.eventb.core.label="BalTransfer_1.transferFails.grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="BalTransfer_1.transferFails.grd9" org.eventb.core.predicate="am &gt; bal(src_ac) ∨ c ↦ src_ac ∉ cardAcct "/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="BalTransfer_1.transferFails.grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="internal_element5" org.eventb.core.label="BalTransfer_1.transferFails.grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="internal_element6" org.eventb.core.label="BalTransfer_1.transferFails.grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="internal_element8" org.eventb.core.label="BalTransfer_1.transferFails.grd3" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="internal_element9" org.eventb.core.label="BalTransfer_1.transferFails.grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="internal_element10" org.eventb.core.label="BalTransfer_1.transferFails.grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="transferFailA ≔  transferFailA ∪ {a}" org.eventb.core.label="BalTransfer_1.transferFails.act2"/>
</org.eventb.core.event>
<org.eventb.core.event name="internal_element4" org.eventb.core.convergence="0" org.eventb.core.extended="true" org.eventb.core.label="Deposit">
<org.eventb.core.refinesEvent name="internal_element1" org.eventb.core.target="Deposit"/>
<org.eventb.core.parameter name="internal_element1" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="internal_element4" org.eventb.core.label="Deposit_1.Deposit.grd6" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="internal_element1" org.eventb.core.assignment="atmCash(a) ≔ atmCash(a) + am" org.eventb.core.label="Deposit_1.Deposit.act2"/>
<org.eventb.core.guard name="internal_element2" org.eventb.core.label="Deposit_1.Deposit.grd7" org.eventb.core.predicate="a ∈ dom(atmCash)"/>
<org.eventb.core.guard name="internal_element3" org.eventb.core.label="Deposit_1.Deposit.grd8" org.eventb.core.predicate="a ∈ dom(cardInAtm)"/>
<org.eventb.core.guard name="internal_element1" org.eventb.core.label="Deposit_1.Deposit.grd9" org.eventb.core.predicate="cardInAtm(a) = c"/>
</org.eventb.core.event>
</org.eventb.core.machineFile>
