<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.machineFile ch.ethz.eventb.decomposition.decomposed="false" org.eventb.core.configuration="ch.ethz.eventb.decomposition.mchBase" org.eventb.core.generated="true" version="5">
<org.eventb.core.variable name="'" org.eventb.core.identifier="validCard"/>
<org.eventb.core.variable name="(" org.eventb.core.identifier="cardInAtm"/>
<org.eventb.core.variable name=")" org.eventb.core.identifier="atmWDAm"/>
<org.eventb.core.variable name="*" org.eventb.core.identifier="trans"/>
<org.eventb.core.variable name="+" org.eventb.core.identifier="atmCashA"/>
<org.eventb.core.variable name="," org.eventb.core.identifier="withdrawOkMsg"/>
<org.eventb.core.variable name="-" org.eventb.core.identifier="withdrawFailMsg"/>
<org.eventb.core.variable name="." org.eventb.core.identifier="recvRespWDOk"/>
<org.eventb.core.variable name="/" org.eventb.core.identifier="recvRespWDFail"/>
<org.eventb.core.invariant name="0" org.eventb.core.label="typing_atmCashA" org.eventb.core.predicate="atmCashA ∈ ℙ(ATM × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="1" org.eventb.core.label="typing_atmWDAm" org.eventb.core.predicate="atmWDAm ∈ ℙ(ATM × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="2" org.eventb.core.label="typing_cardInAtm" org.eventb.core.predicate="cardInAtm ∈ ℙ(ATM × CARD)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="3" org.eventb.core.label="typing_trans" org.eventb.core.predicate="trans ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="4" org.eventb.core.label="typing_recvRespWDOk" org.eventb.core.predicate="recvRespWDOk ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="5" org.eventb.core.label="typing_recvRespWDFail" org.eventb.core.predicate="recvRespWDFail ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="6" org.eventb.core.label="typing_withdrawOkMsg" org.eventb.core.predicate="withdrawOkMsg ∈ ℙ(ATM × BOOL)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="7" org.eventb.core.label="typing_withdrawFailMsg" org.eventb.core.predicate="withdrawFailMsg ∈ ℙ(ATM × BOOL)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="8" org.eventb.core.label="typing_validCard" org.eventb.core.predicate="validCard ∈ ℙ(CARD)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="9" org.eventb.core.label="Withdraw_0_IntegralATM_0_inv4" org.eventb.core.predicate="validCard ⊆  CARD"/>
<org.eventb.core.invariant name=":" org.eventb.core.label="Withdraw_2_inv9" org.eventb.core.predicate="atmWDAm ∈ ATM ⇸ ℕ"/>
<org.eventb.core.invariant name=";" org.eventb.core.label="Withdraw_2_inv11" org.eventb.core.predicate="atmCashA ∈ ATM → ℕ"/>
<org.eventb.core.invariant name="=" org.eventb.core.label="Withdraw_2_inv13" org.eventb.core.predicate="withdrawOkMsg ∈ ATM ⇸ BOOL"/>
<org.eventb.core.invariant name="&gt;" org.eventb.core.label="Withdraw_2_inv14" org.eventb.core.predicate="withdrawFailMsg ∈ ATM ⇸ BOOL"/>
<org.eventb.core.invariant name="?" org.eventb.core.label="Withdraw_2_inv21" org.eventb.core.predicate="cardInAtm ∈ ATM ⇸ CARD"/>
<org.eventb.core.invariant name="@" org.eventb.core.label="Withdraw_2_inv22" org.eventb.core.predicate="∀ c · c ∈ ran(cardInAtm) ⇒ c ∈ validCard"/>
<org.eventb.core.event name="A" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="INITIALISATION">
<org.eventb.core.action name="'" org.eventb.core.assignment="validCard ≔ ∅" org.eventb.core.label="act2"/>
<org.eventb.core.action name="(" org.eventb.core.assignment="cardInAtm ≔ ∅" org.eventb.core.label="act5"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="atmWDAm ≔ ∅" org.eventb.core.label="act12"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="trans ≔ ∅" org.eventb.core.label="act13"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="atmCashA ≔ ATM × {0}" org.eventb.core.label="act14"/>
<org.eventb.core.action name="," org.eventb.core.assignment="withdrawOkMsg  ≔ ∅" org.eventb.core.label="act16"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="withdrawFailMsg ≔ ∅" org.eventb.core.label="act17"/>
<org.eventb.core.action name="." org.eventb.core.assignment="recvRespWDOk ≔  ∅" org.eventb.core.label="act23"/>
<org.eventb.core.action name="/" org.eventb.core.assignment="recvRespWDFail ≔  ∅" org.eventb.core.label="act25"/>
</org.eventb.core.event>
<org.eventb.core.event name="B" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendReqWithdraw">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="c"/>
<org.eventb.core.parameter name=")" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="*" org.eventb.core.identifier="acc"/>
<org.eventb.core.guard name="3" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="4" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="+" org.eventb.core.label="grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd2" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="-" org.eventb.core.label="grd3" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="." org.eventb.core.label="grd4" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd5" org.eventb.core.predicate="a ↦ c ∈ cardInAtm"/>
<org.eventb.core.guard name="0" org.eventb.core.label="grd8" org.eventb.core.predicate="am ≤ atmCashA(a)"/>
<org.eventb.core.guard name="1" org.eventb.core.label="grd7" org.eventb.core.predicate="a ∉ trans"/>
<org.eventb.core.action name="2" org.eventb.core.assignment="atmWDAm(a) ≔ am" org.eventb.core.label="act2"/>
</org.eventb.core.event>
<org.eventb.core.event name="C" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvRespWDOk">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="recvRespWDOk ≔  recvRespWDOk ∪ {a}" org.eventb.core.label="act1"/>
<org.eventb.core.guard name="," org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
</org.eventb.core.event>
<org.eventb.core.event name="D" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvRespWDFail">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="recvRespWDFail ≔  recvRespWDFail ∪ {a}" org.eventb.core.label="act1"/>
<org.eventb.core.guard name="," org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
</org.eventb.core.event>
<org.eventb.core.event name="E" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="withdrawOKAtm">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="am"/>
<org.eventb.core.guard name="1" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="2" org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name=")" org.eventb.core.label="grd4" org.eventb.core.predicate="a ∈ dom (atmCashA)"/>
<org.eventb.core.guard name="*" org.eventb.core.label="grd10" org.eventb.core.predicate="am ∈ ℕ1 "/>
<org.eventb.core.guard name="+" org.eventb.core.label="grd11" org.eventb.core.predicate="am ≤ atmCashA(a)"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd9" org.eventb.core.predicate="a ∈ recvRespWDOk"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="atmCashA(a) ≔ atmCashA(a) − am" org.eventb.core.label="act1"/>
<org.eventb.core.action name="." org.eventb.core.assignment="withdrawOkMsg(a) ≔  TRUE" org.eventb.core.label="act3"/>
<org.eventb.core.action name="/" org.eventb.core.assignment="recvRespWDOk ≔ recvRespWDOk ∖ {a}" org.eventb.core.label="act4"/>
<org.eventb.core.action name="0" org.eventb.core.assignment="trans ≔ trans ∖ {a}" org.eventb.core.label="act5"/>
</org.eventb.core.event>
<org.eventb.core.event name="F" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="withdrawFailsAtm">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.guard name="," org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="(" org.eventb.core.label="grd1" org.eventb.core.predicate="a ∈ recvRespWDFail"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="withdrawFailMsg(a) ≔  TRUE" org.eventb.core.label="act1"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="recvRespWDFail ≔ recvRespWDFail ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="trans ≔ trans ∖ {a}" org.eventb.core.label="act3"/>
</org.eventb.core.event>
<org.eventb.core.event name="G" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="Deposit">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="acc"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name=")" org.eventb.core.identifier="c"/>
<org.eventb.core.guard name="." org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="/" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="*" org.eventb.core.label="grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd3" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="-" org.eventb.core.label="grd4" org.eventb.core.predicate="c ∈ validCard"/>
</org.eventb.core.event>
<org.eventb.core.event name="H" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="Transfer">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="src_ac"/>
<org.eventb.core.parameter name="(" org.eventb.core.identifier="dest_ac"/>
<org.eventb.core.parameter name=")" org.eventb.core.identifier="am"/>
<org.eventb.core.parameter name="*" org.eventb.core.identifier="c"/>
<org.eventb.core.guard name="3" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="4" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="+" org.eventb.core.label="grd1" org.eventb.core.predicate="src_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd2" org.eventb.core.predicate="dest_ac ∈ ACCOUNT"/>
<org.eventb.core.guard name="-" org.eventb.core.label="grd3" org.eventb.core.predicate="c ∈ validCard"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="2" org.eventb.core.label="grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
</org.eventb.core.event>
<org.eventb.core.seesContext name="I" org.eventb.core.target="Context_mATM_W"/>
</org.eventb.core.machineFile>
