<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.prFile version="1">
<org.eventb.core.prProof name="withdrawFail/withdrawFail.Guard4/WD"/>
<org.eventb.core.prProof name="INITIALISATION/inv2/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(ACCOUNT×ℤ))∈ACCOUNT ⇸ ℕ"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv11/INV"/>
<org.eventb.core.prProof name="INITIALISATION/inv3/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="ATM">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="ATM × {0}∈ATM → ℕ"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv4/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM))⊆(∅ ⦂ ℙ(ATM))"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv5/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM))⊆(∅ ⦂ ℙ(ATM))"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/withdrawOK.Guard2/WD"/>
<org.eventb.core.prProof name="withdrawFail/withdrawFail.Guard2/WD"/>
<org.eventb.core.prProof name="withdrawOK/withdrawOK.Guard5/WD"/>
<org.eventb.core.prProof name="withdrawOK/grd7/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p2,p6,p11,p12,p10,p4,p3,p13,p7,p8,p9,p1">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(cardInAtm)∧cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd9/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p2,p6,p13,p14,p11,p4,p3,p15,p7,p8,p9,p1,p12,p16,p10">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm(a)=c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/inv3/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p19"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p11,p8,p6,p10,p9,p3,p7,p2,p12,p4,p5">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)">
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="am≤atmCash(a)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c∈validCard"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="atmCash{a ↦ atmCash(a) − am}∈ATM → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="am≤bal(acc)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)">
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/act3/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p3,p7,p13,p2,p12,p5,p4,p14,p8,p9,p10,p15,p1,p11">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/inv2/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p3,p7,p13,p2,p12,p5,p4,p14,p8,p9,p10,p15,p1,p11">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="AccBalOnAtm{acc ↦ bal(acc) − am}∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/act2/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="ATM">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p3">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p3" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd7/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p7,p4,p9,p11,p6,p10,p8,p3,p5,p2">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(cardInAtm)∧cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd9/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p2,p6,p10,p12,p9,p4,p3,p7,p8,p1,p11,p13">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm(a)=c"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd4/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p3">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p3" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/inv2/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p3,p7,p12,p2,p11,p5,p4,p14,p13,p8,p9,p15,p1,p10">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="AccBalOnAtm{acc ↦ bal(acc)}∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/act2/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p3,p8,p13,p17,p12,p5,p4,p9,p11,p1,p14,p19,p18,p2,p10,p16,p15,p7">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardInAtm(a)=c"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv6/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM×CARD))∈ATM ⇸ CARD"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd6/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1,p9,p6,p8,p10,p7,p11,p5,p4,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="acc∈dom(bal)"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/inv4/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p1,p12,p11,p3,p5,p4,p13,p7,p8,p9,p14,p2,p10">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawOkA∪{a}⊆atm"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd6/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p7,p4,p9,p5,p6,p10,p8,p12,p11,p3,p2">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="withdrawOkA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawFailA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="acc∈dom(bal)"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/inv5/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2,p1,p8,p5,p7,p9,p6,p11,p10,p4,p3">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawFailA∪{a}⊆atm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/act1/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15" org.eventb.core.prSets="ACCOUNT,ATM">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalML:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p3,p7,p12,p2,p11,p5,p4,p14,p13,p8,p9,p15,p1,p10">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="0;1:500"/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="AccBalOnAtm" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/act1/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p3">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p3" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="deposit/act1/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p3">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p3" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="transfer/act1/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p5" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p7" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="dest_ac" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="src_ac" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="dest_ac∈dom(bal)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dest_ac∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ∧src_ac∈dom(bal)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬src_ac=dest_ac"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="src_ac≠dest_ac"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="src_ac∈dom(bal)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd4/WD"/>
<org.eventb.core.prProof name="withdrawOK/grd2/GRD"/>
<org.eventb.core.prProof name="withdrawOK/grd4/GRD"/>
<org.eventb.core.prProof name="withdrawOK/grd5/GRD"/>
<org.eventb.core.prProof name="withdrawOK/grd6/GRD"/>
<org.eventb.core.prProof name="INITIALISATION/act2/SIM"/>
<org.eventb.core.prProof name="INITIALISATION/act4/SIM"/>
<org.eventb.core.prProof name="withdrawOK/grd8/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="ATM">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)">
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="validCard⊆CARD">
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="validCard∈ℙ(CARD)">
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)">
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="ATM"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd8/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="ATM">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p10">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p10" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p9" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p11">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p11" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue="1"/>
<org.eventb.core.prExprRef name=".subst" org.eventb.core.prRef="e0"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p12">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p12" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)">
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="validCard⊆CARD">
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="validCard∈ℙ(CARD)">
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)">
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prExpr name="e0" org.eventb.core.expression="ATM"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="Deposit/act1/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p3">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p3" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="Transfer/act1/WD" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3" org.eventb.core.prSets="ACCOUNT">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="generalized MP" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p4">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p4" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p7">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p5" org.eventb.core.prInfHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p7" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="dest_ac" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="src_ac" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="dest_ac∈dom(bal)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="dest_ac∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ∧src_ac∈dom(bal)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="⊤∧⊤∧⊤"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="¬src_ac=dest_ac"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="src_ac≠dest_ac"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="src_ac∈dom(bal)"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
</org.eventb.core.prProof>
</org.eventb.core.prFile>
