<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ac.soton.emfb.compositionFile>
<ac.soton.emfb.composedMachine ac.soton.emfb.compose="true" ac.soton.emfb.name="BalTransfer_1" ac.soton.emfb.newName="BalTransfer_1" name="internal_element1">
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="bal" ac.soton.emfb.newName="bal" name="internal_element1"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="validCard" ac.soton.emfb.newName="validCard" name="internal_element2"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="cardAcct" ac.soton.emfb.newName="cardAcct" name="internal_element3"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="transferOkA" ac.soton.emfb.newName="transferOkA" name="internal_element4"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="transferFailA" ac.soton.emfb.newName="transferFailA" name="internal_element5"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="cardInAtm" ac.soton.emfb.newName="cardInAtm" name="internal_element6"/>
<ac.soton.emfb.composedInvariant ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferOkA ∈ ℙ(ATM)" ac.soton.emfb.name="inv9" ac.soton.emfb.updatedExpression="transferOkA ∈ ℙ(ATM)" name="internal_element1"/>
<ac.soton.emfb.composedInvariant ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferFailA ∈ ℙ(ATM)" ac.soton.emfb.name="in10" ac.soton.emfb.updatedExpression="transferFailA ∈ ℙ(ATM)" name="internal_element2"/>
<ac.soton.emfb.composedInvariant ac.soton.emfb.compose="true" ac.soton.emfb.expression="cardInAtm ∈  ATM ⇸ CARD" ac.soton.emfb.name="inv10" ac.soton.emfb.updatedExpression="cardInAtm ∈  ATM ⇸ CARD" name="internal_element3"/>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="BalTransfer_1" ac.soton.emfb.name="INITIALISATION" ac.soton.emfb.newName="INITIALISATION" name="internal_element1">
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferFailA ≔ ∅" ac.soton.emfb.name="act6" ac.soton.emfb.updatedExpression="transferFailA ≔ ∅" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="cardInAtm ≔ ∅" ac.soton.emfb.name="act7" ac.soton.emfb.updatedExpression="cardInAtm ≔ ∅" name="internal_element2"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferOkA ≔ ∅" ac.soton.emfb.name="act5" ac.soton.emfb.updatedExpression="transferOkA ≔ ∅" name="internal_element3"/>
</ac.soton.emfb.composedEvent>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="BalTransfer_1" ac.soton.emfb.name="transferOK" ac.soton.emfb.newName="transferOK" name="internal_element2">
<ac.soton.emfb.composedEventRefines ac.soton.emfb.compose="true" ac.soton.emfb.newName="Transfer" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferOkA ≔  transferOkA ∪ {a}" ac.soton.emfb.name="act2" ac.soton.emfb.updatedExpression="transferOkA ≔  transferOkA ∪ {a}" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="a ∈ dom(cardInAtm)" ac.soton.emfb.name="grd11" ac.soton.emfb.updatedExpression="a ∈ dom(cardInAtm)" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="c = cardInAtm(a)" ac.soton.emfb.name="grd12" ac.soton.emfb.updatedExpression="c = cardInAtm(a)" name="internal_element2"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="a" ac.soton.emfb.newName="a" name="internal_element1"/>
</ac.soton.emfb.composedEvent>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="BalTransfer_1" ac.soton.emfb.name="transferFails" ac.soton.emfb.newName="transferFails" name="internal_element3">
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferFailA ≔  transferFailA ∪ {a}" ac.soton.emfb.name="act2" ac.soton.emfb.updatedExpression="transferFailA ≔  transferFailA ∪ {a}" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="a ∈ dom(cardInAtm)" ac.soton.emfb.name="grd11" ac.soton.emfb.updatedExpression="a ∈ dom(cardInAtm)" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="am &gt; bal(src_ac) ∨ c ↦ src_ac ∉ cardAcct " ac.soton.emfb.name="grd9" ac.soton.emfb.updatedExpression="am &gt; bal(src_ac) ∨ c ↦ src_ac ∉ cardAcct " name="internal_element2"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="dest_ac ∈ dom(bal)" ac.soton.emfb.name="grd7" ac.soton.emfb.updatedExpression="dest_ac ∈ dom(bal)" name="internal_element3"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="src_ac ≠ dest_ac" ac.soton.emfb.name="grd8" ac.soton.emfb.updatedExpression="src_ac ≠ dest_ac" name="internal_element4"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="am ∈ ℕ1" ac.soton.emfb.name="grd5" ac.soton.emfb.updatedExpression="am ∈ ℕ1" name="internal_element5"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="c = cardInAtm(a)" ac.soton.emfb.name="grd12" ac.soton.emfb.updatedExpression="c = cardInAtm(a)" name="internal_element6"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="src_ac ∈ dom(bal)" ac.soton.emfb.name="grd6" ac.soton.emfb.updatedExpression="src_ac ∈ dom(bal)" name="internal_element7"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="c ∈ validCard" ac.soton.emfb.name="grd3" ac.soton.emfb.updatedExpression="c ∈ validCard" name="internal_element8"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="src_ac ∈ ACCOUNT" ac.soton.emfb.name="grd1" ac.soton.emfb.updatedExpression="src_ac ∈ ACCOUNT" name="internal_element9"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="dest_ac ∈ ACCOUNT" ac.soton.emfb.name="grd2" ac.soton.emfb.updatedExpression="dest_ac ∈ ACCOUNT" name="internal_element10"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="src_ac" ac.soton.emfb.newName="src_ac" name="internal_element1"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="dest_ac" ac.soton.emfb.newName="dest_ac" name="internal_element2"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="am" ac.soton.emfb.newName="am" name="internal_element3"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="c" ac.soton.emfb.newName="c" name="internal_element4"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="a" ac.soton.emfb.newName="a" name="internal_element5"/>
</ac.soton.emfb.composedEvent>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="false" ac.soton.emfb.machine="BalTransfer_1" ac.soton.emfb.name="Deposit" ac.soton.emfb.newName="Deposit" name="internal_element4">
<ac.soton.emfb.composedEventRefines ac.soton.emfb.compose="true" ac.soton.emfb.newName="Deposit" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="bal(acc) ≔ bal(acc) + am" ac.soton.emfb.name="act1" ac.soton.emfb.updatedExpression="bal(acc) ≔ bal(acc) + am" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="c ↦ acc ∈ cardAcct" ac.soton.emfb.name="grd5" ac.soton.emfb.updatedExpression="c ↦ acc ∈ cardAcct" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="am ∈ ℕ1" ac.soton.emfb.name="grd3" ac.soton.emfb.updatedExpression="am ∈ ℕ1" name="internal_element2"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="c ∈ validCard" ac.soton.emfb.name="grd4" ac.soton.emfb.updatedExpression="c ∈ validCard" name="internal_element3"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="acc ∈ ACCOUNT" ac.soton.emfb.name="grd1" ac.soton.emfb.updatedExpression="acc ∈ ACCOUNT" name="internal_element4"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="acc ∈ dom(bal)" ac.soton.emfb.name="grd2" ac.soton.emfb.updatedExpression="acc ∈ dom(bal)" name="internal_element5"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="acc" ac.soton.emfb.newName="acc" name="internal_element1"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="am" ac.soton.emfb.newName="am" name="internal_element2"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="c" ac.soton.emfb.newName="c" name="internal_element3"/>
</ac.soton.emfb.composedEvent>
</ac.soton.emfb.composedMachine>
<ac.soton.emfb.composedMachine ac.soton.emfb.compose="true" ac.soton.emfb.name="Deposit_1" ac.soton.emfb.newName="Deposit_1" name="internal_element2">
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="false" ac.soton.emfb.name="bal" ac.soton.emfb.newName="bal" name="internal_element1"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="false" ac.soton.emfb.name="validCard" ac.soton.emfb.newName="validCard" name="internal_element2"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="false" ac.soton.emfb.name="cardAcct" ac.soton.emfb.newName="cardAcct" name="internal_element3"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="true" ac.soton.emfb.name="atmCash" ac.soton.emfb.newName="atmCash" name="internal_element4"/>
<ac.soton.emfb.composedVariable ac.soton.emfb.compose="false" ac.soton.emfb.name="cardInAtm" ac.soton.emfb.newName="cardInAtm" name="internal_element5"/>
<ac.soton.emfb.composedInvariant ac.soton.emfb.compose="true" ac.soton.emfb.expression="atmCash ∈ ATM → ℕ" ac.soton.emfb.name="inv2" ac.soton.emfb.updatedExpression="atmCash ∈ ATM → ℕ" name="internal_element1"/>
<ac.soton.emfb.composedInvariant ac.soton.emfb.compose="false" ac.soton.emfb.expression="cardInAtm ∈ ATM ⇸ CARD" ac.soton.emfb.name="inv3" ac.soton.emfb.updatedExpression="cardInAtm ∈ ATM ⇸ CARD" name="internal_element2"/>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="Deposit_1" ac.soton.emfb.name="INITIALISATION" ac.soton.emfb.newName="INITIALISATION" name="internal_element1">
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="atmCash ≔ ATM × {0}" ac.soton.emfb.name="act6" ac.soton.emfb.updatedExpression="atmCash ≔ ATM × {0}" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="false" ac.soton.emfb.expression="cardInAtm ≔ ∅" ac.soton.emfb.name="act7" ac.soton.emfb.updatedExpression="cardInAtm ≔ ∅" name="internal_element2"/>
</ac.soton.emfb.composedEvent>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="Deposit_1" ac.soton.emfb.name="Deposit" ac.soton.emfb.newName="Deposit" name="internal_element2">
<ac.soton.emfb.composedEventRefines ac.soton.emfb.compose="true" ac.soton.emfb.newName="Deposit" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="atmCash(a) ≔ atmCash(a) + am" ac.soton.emfb.name="act2" ac.soton.emfb.updatedExpression="atmCash(a) ≔ atmCash(a) + am" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="cardInAtm(a) = c" ac.soton.emfb.name="grd9" ac.soton.emfb.updatedExpression="cardInAtm(a) = c" name="internal_element1"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="a ∈ dom(atmCash)" ac.soton.emfb.name="grd7" ac.soton.emfb.updatedExpression="a ∈ dom(atmCash)" name="internal_element2"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="a ∈ dom(cardInAtm)" ac.soton.emfb.name="grd8" ac.soton.emfb.updatedExpression="a ∈ dom(cardInAtm)" name="internal_element3"/>
<ac.soton.emfb.composedGuard ac.soton.emfb.compose="true" ac.soton.emfb.expression="a ∈ ATM" ac.soton.emfb.name="grd6" ac.soton.emfb.updatedExpression="a ∈ ATM" name="internal_element4"/>
<ac.soton.emfb.composedParameter ac.soton.emfb.compose="true" ac.soton.emfb.name="a" ac.soton.emfb.newName="a" name="internal_element1"/>
</ac.soton.emfb.composedEvent>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="false" ac.soton.emfb.machine="Deposit_1" ac.soton.emfb.name="Transfer" ac.soton.emfb.newName="Transfer" name="internal_element3">
<ac.soton.emfb.composedEventRefines ac.soton.emfb.compose="true" ac.soton.emfb.newName="Transfer" name="internal_element1"/>
</ac.soton.emfb.composedEvent>
</ac.soton.emfb.composedMachine>
<ac.soton.emfb.composedContext ac.soton.emfb.compose="true" ac.soton.emfb.name="BalTransfer_CO1" name="internal_element1">
<ac.soton.emfb.composedSet ac.soton.emfb.compose="true" ac.soton.emfb.name="ATM" ac.soton.emfb.newName="ATM" name="internal_element1"/>
</ac.soton.emfb.composedContext>
<ac.soton.emfb.composedContext ac.soton.emfb.compose="true" ac.soton.emfb.name="Deposit_CO1" name="internal_element2">
<ac.soton.emfb.composedAxiom ac.soton.emfb.compose="true" ac.soton.emfb.expression="MIN_CASH ∈ ℕ" ac.soton.emfb.name="MIN_CASH.type" ac.soton.emfb.updatedExpression="MIN_CASH ∈ ℕ" name="internal_element1"/>
<ac.soton.emfb.composedAxiom ac.soton.emfb.compose="true" ac.soton.emfb.expression="MAX_CASH ∈ ℕ" ac.soton.emfb.name="MAX_CASH.type" ac.soton.emfb.updatedExpression="MAX_CASH ∈ ℕ" name="internal_element2"/>
<ac.soton.emfb.composedAxiom ac.soton.emfb.compose="true" ac.soton.emfb.expression="MAX_CASH &gt; MIN_CASH" ac.soton.emfb.name="Axiom1" ac.soton.emfb.updatedExpression="MAX_CASH &gt; MIN_CASH" name="internal_element3"/>
<ac.soton.emfb.composedConstant ac.soton.emfb.compose="true" ac.soton.emfb.name="MIN_CASH" ac.soton.emfb.newName="MIN_CASH" name="internal_element1"/>
<ac.soton.emfb.composedConstant ac.soton.emfb.compose="true" ac.soton.emfb.name="MAX_CASH" ac.soton.emfb.newName="MAX_CASH" name="internal_element2"/>
<ac.soton.emfb.composedSet ac.soton.emfb.compose="false" ac.soton.emfb.name="ATM" ac.soton.emfb.newName="ATM" name="internal_element1"/>
</ac.soton.emfb.composedContext>
<ac.soton.emfb.eventComposition ac.soton.emfb.compose="true" ac.soton.emfb.name="INITIALISATION" name="internal_element1">
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="BalTransfer_1" ac.soton.emfb.name="INITIALISATION" ac.soton.emfb.newName="INITIALISATION" name="internal_element1">
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferFailA ≔ ∅" ac.soton.emfb.name="act6" ac.soton.emfb.updatedExpression="transferFailA ≔ ∅" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="cardInAtm ≔ ∅" ac.soton.emfb.name="act7" ac.soton.emfb.updatedExpression="cardInAtm ≔ ∅" name="internal_element2"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="transferOkA ≔ ∅" ac.soton.emfb.name="act5" ac.soton.emfb.updatedExpression="transferOkA ≔ ∅" name="internal_element3"/>
</ac.soton.emfb.composedEvent>
<ac.soton.emfb.composedEvent ac.soton.emfb.compose="true" ac.soton.emfb.machine="Deposit_1" ac.soton.emfb.name="INITIALISATION" ac.soton.emfb.newName="INITIALISATION" name="internal_element2">
<ac.soton.emfb.composedAction ac.soton.emfb.compose="true" ac.soton.emfb.expression="atmCash ≔ ATM × {0}" ac.soton.emfb.name="act6" ac.soton.emfb.updatedExpression="atmCash ≔ ATM × {0}" name="internal_element1"/>
<ac.soton.emfb.composedAction ac.soton.emfb.compose="false" ac.soton.emfb.expression="cardInAtm ≔ ∅" ac.soton.emfb.name="act7" ac.soton.emfb.updatedExpression="cardInAtm ≔ ∅" name="internal_element2"/>
</ac.soton.emfb.composedEvent>
</ac.soton.emfb.eventComposition>
<ac.soton.emfb.composedRefines ac.soton.emfb.compose="false" ac.soton.emfb.name="ATM_TD_0" name="internal_element1"/>
</ac.soton.emfb.compositionFile>
