<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.machineFile ch.ethz.eventb.decomposition.decomposed="true" 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="atmWDAmM"/>
<org.eventb.core.variable name="(" org.eventb.core.identifier="cardInAtmM"/>
<org.eventb.core.variable name=")" org.eventb.core.identifier="sendReqWD"/>
<org.eventb.core.variable name="*" org.eventb.core.identifier="sendRespWDOk"/>
<org.eventb.core.variable name="+" org.eventb.core.identifier="sendRespWDFail"/>
<org.eventb.core.invariant name="," org.eventb.core.label="typing_cardInAtmM" org.eventb.core.predicate="cardInAtmM ∈ ℙ(ATM × CARD)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="-" org.eventb.core.label="typing_sendRespWDOk" org.eventb.core.predicate="sendRespWDOk ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="." org.eventb.core.label="typing_sendReqWD" org.eventb.core.predicate="sendReqWD ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="/" org.eventb.core.label="typing_atmWDAmM" org.eventb.core.predicate="atmWDAmM ∈ ℙ(ATM × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="0" org.eventb.core.label="typing_sendRespWDFail" org.eventb.core.predicate="sendRespWDFail ∈ ℙ(ATM)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="1" org.eventb.core.label="Withdraw_4_inv4" org.eventb.core.predicate="cardInAtmM ∈ ATM ⇸ CARD"/>
<org.eventb.core.invariant name="2" org.eventb.core.label="Withdraw_4_inv6" org.eventb.core.predicate="atmWDAmM ∈ ATM ⇸ ℕ"/>
<org.eventb.core.event name="3" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="INITIALISATION">
<org.eventb.core.action name="'" org.eventb.core.assignment="sendReqWD ≔  ∅" org.eventb.core.label="act20"/>
<org.eventb.core.action name="(" org.eventb.core.assignment="sendRespWDOk ≔  ∅" org.eventb.core.label="act22"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="sendRespWDFail ≔  ∅" org.eventb.core.label="act24"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="cardInAtmM ≔ ∅" org.eventb.core.label="act29"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="atmWDAmM ≔ ∅" org.eventb.core.label="act31"/>
</org.eventb.core.event>
<org.eventb.core.event name="4" 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="5" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="6" 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="grd4" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.action name="2" org.eventb.core.assignment="sendReqWD ≔  sendReqWD ∪ {a}" org.eventb.core.label="act1"/>
<org.eventb.core.action name="3" org.eventb.core.assignment="atmWDAmM(a) ≔ am" org.eventb.core.label="act5"/>
<org.eventb.core.action name="4" org.eventb.core.assignment="cardInAtmM(a) ≔ c" org.eventb.core.label="act7"/>
</org.eventb.core.event>
<org.eventb.core.event name="5" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="RecvReqWD">
<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.guard name="/" org.eventb.core.label="typing_c" org.eventb.core.predicate="c ∈ CARD"/>
<org.eventb.core.guard name="0" org.eventb.core.label="typing_am" org.eventb.core.predicate="am ∈ ℤ"/>
<org.eventb.core.guard name="1" org.eventb.core.label="typing_a" org.eventb.core.predicate="a ∈ ATM"/>
<org.eventb.core.guard name="*" org.eventb.core.label="grd9" org.eventb.core.predicate="a ∈ sendReqWD"/>
<org.eventb.core.guard name="+" org.eventb.core.label="grd2" org.eventb.core.predicate="a ↦ c ∈ cardInAtmM"/>
<org.eventb.core.guard name="," org.eventb.core.label="grd4" org.eventb.core.predicate="a ∈ dom(atmWDAmM)"/>
<org.eventb.core.guard name="-" org.eventb.core.label="grd5" org.eventb.core.predicate="am = atmWDAmM(a)"/>
<org.eventb.core.action name="." org.eventb.core.assignment="sendReqWD ≔ sendReqWD ∖ {a}" org.eventb.core.label="act5"/>
</org.eventb.core.event>
<org.eventb.core.event name="6" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespWDok">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.action name="*" org.eventb.core.assignment="sendRespWDOk ≔ sendRespWDOk ∪ {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="7" 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.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 ∈ sendRespWDOk"/>
<org.eventb.core.guard name=")" org.eventb.core.label="grd2" org.eventb.core.predicate="a ∈ dom(cardInAtmM)"/>
<org.eventb.core.guard name="*" org.eventb.core.label="grd4" org.eventb.core.predicate="a ∈ dom(atmWDAmM)"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="sendRespWDOk ≔  sendRespWDOk ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="," org.eventb.core.assignment="atmWDAmM ≔ {a} ⩤ atmWDAmM" org.eventb.core.label="act6"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="cardInAtmM ≔ {a} ⩤ cardInAtmM" org.eventb.core.label="act8"/>
</org.eventb.core.event>
<org.eventb.core.event name="8" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="SendRespWDfail">
<org.eventb.core.parameter name="'" org.eventb.core.identifier="a"/>
<org.eventb.core.action name="," org.eventb.core.assignment="sendRespWDFail ≔ sendRespWDFail ∪ {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="9" 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.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 ∈ sendRespWDFail"/>
<org.eventb.core.guard name=")" org.eventb.core.label="grd2" org.eventb.core.predicate="a ∈ dom(cardInAtmM)"/>
<org.eventb.core.guard name="*" org.eventb.core.label="grd4" org.eventb.core.predicate="a ∈ dom(atmWDAmM)"/>
<org.eventb.core.action name="+" org.eventb.core.assignment="sendRespWDFail ≔  sendRespWDFail ∖ {a}" org.eventb.core.label="act2"/>
<org.eventb.core.action name="," org.eventb.core.assignment="atmWDAmM ≔ {a} ⩤ atmWDAmM" org.eventb.core.label="act6"/>
<org.eventb.core.action name="-" org.eventb.core.assignment="cardInAtmM ≔ {a} ⩤ cardInAtmM" org.eventb.core.label="act8"/>
</org.eventb.core.event>
<org.eventb.core.seesContext name=":" org.eventb.core.target="Context_MW_W"/>
</org.eventb.core.machineFile>
