<?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 ch.ethz.eventb.decomposition.nature="1" name="'" org.eventb.core.comment="Shared variable, DO NOT REFINE" org.eventb.core.identifier="bal"/>
<org.eventb.core.variable ch.ethz.eventb.decomposition.nature="1" name="(" org.eventb.core.comment="Shared variable, DO NOT REFINE" org.eventb.core.identifier="validCard"/>
<org.eventb.core.variable ch.ethz.eventb.decomposition.nature="1" name=")" org.eventb.core.comment="Shared variable, DO NOT REFINE" org.eventb.core.identifier="cardAcct"/>
<org.eventb.core.invariant name="*" org.eventb.core.label="typing_bal" org.eventb.core.predicate="bal ∈ ℙ(ACCOUNT × ℤ)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="+" org.eventb.core.label="typing_validCard" org.eventb.core.predicate="validCard ∈ ℙ(CARD)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="," org.eventb.core.label="typing_cardAcct" org.eventb.core.predicate="cardAcct ∈ ℙ(CARD × ACCOUNT)" org.eventb.core.theorem="true"/>
<org.eventb.core.invariant name="-" org.eventb.core.label="IntegralATM_0_inv1" org.eventb.core.predicate="bal ∈ ACCOUNT ⇸ ℕ"/>
<org.eventb.core.invariant name="." org.eventb.core.label="IntegralATM_0_inv2" org.eventb.core.predicate="cardAcct ∈ CARD ⇸ ACCOUNT"/>
<org.eventb.core.invariant name="/" org.eventb.core.label="IntegralATM_0_inv4" org.eventb.core.predicate="validCard ⊆  CARD"/>
<org.eventb.core.event name="0" org.eventb.core.convergence="0" org.eventb.core.extended="false" org.eventb.core.label="INITIALISATION">
<org.eventb.core.action name="'" org.eventb.core.assignment="bal ≔ ∅" org.eventb.core.label="act1"/>
<org.eventb.core.action name="(" org.eventb.core.assignment="cardAcct ≔ ∅" org.eventb.core.label="act2"/>
<org.eventb.core.action name=")" org.eventb.core.assignment="validCard ≔ ∅" org.eventb.core.label="act4"/>
</org.eventb.core.event>
<org.eventb.core.event name="1" 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="+" 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="grd4" org.eventb.core.predicate="c ↦ src_ac ∈ cardAcct"/>
<org.eventb.core.guard name="/" org.eventb.core.label="grd5" org.eventb.core.predicate="am ∈ ℕ1"/>
<org.eventb.core.guard name="0" org.eventb.core.label="grd6" org.eventb.core.predicate="src_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="1" org.eventb.core.label="grd7" org.eventb.core.predicate="dest_ac ∈ dom(bal)"/>
<org.eventb.core.guard name="2" org.eventb.core.label="grd8" org.eventb.core.predicate="src_ac ≠ dest_ac"/>
<org.eventb.core.guard name="3" org.eventb.core.label="grd9" org.eventb.core.predicate="am ≤ bal(src_ac)"/>
<org.eventb.core.action name="4" org.eventb.core.assignment="bal ≔  bal  {dest_ac ↦ (bal(dest_ac) + am), src_ac ↦(bal(src_ac) − am)}" org.eventb.core.label="act1"/>
</org.eventb.core.event>
<org.eventb.core.event ch.ethz.eventb.decomposition.external="true" name="2" org.eventb.core.comment="External event, DO NOT REFINE" 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="grd1" org.eventb.core.predicate="acc ∈ ACCOUNT"/>
<org.eventb.core.guard name="+" org.eventb.core.label="grd2" org.eventb.core.predicate="acc ∈ dom(bal)"/>
<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.guard name="." org.eventb.core.label="grd5" org.eventb.core.predicate="c ↦ acc ∈ cardAcct"/>
<org.eventb.core.action name="/" org.eventb.core.assignment="bal(acc) ≔ bal(acc) + am" org.eventb.core.label="act1"/>
</org.eventb.core.event>
<org.eventb.core.seesContext name="3" org.eventb.core.target="BalTransfer_CO"/>
</org.eventb.core.machineFile>
