<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<org.eventb.core.prFile version="1">
<org.eventb.core.prProof name="INITIALISATION/inv1/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="reqWithdraw/inv1/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,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25" 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="p18,p1,p23,p20,p3,p16,p14,p4,p8,p25,p5,p11,p2,p10,p13,p21,p17,p22,p19,p6,p15,p7,p9,p12,p24">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c∈CARD"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a ↦ c∈cardInAtm"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="reqWD∪{a}⊆atm"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="a∉reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv10/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="ACCOUNT,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×ACCOUNT))∈ATM ⇸ ACCOUNT"/>
<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/inv12/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="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="">
<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.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv6/INV"/>
<org.eventb.core.prProof name="INITIALISATION/inv9/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×ℤ))∈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="reqWithdraw/inv10/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,p16,p17,p18" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p8" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prRule name="r1" 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="p20"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p9,p17,p15,p5,p3,p4,p1,p16,p7,p11,p18,p13,p14,p12,p6,p2,p10,p19">
<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.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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="am≤atmCash(a)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="respWDok∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∉trans"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a ↦ c∈cardInAtm"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="¬a∈trans"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈validCard"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="atmWDAcc{a ↦ acc}∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="reqWD∈ℙ(ATM)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="respWDfail∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="reqWithdraw/inv12/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,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25" 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="p18,p1,p23,p20,p3,p16,p14,p4,p8,p25,p5,p11,p2,p10,p13,p21,p17,p22,p19,p6,p15,p7,p9,p12,p24">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c∈CARD"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a ↦ c∈cardInAtm"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="a∉reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="activeCard{a ↦ c}∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="reqWithdraw/inv9/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,p16,p17,p18,p19" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p20,p21,p22,p23"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p8" org.eventb.core.prInfHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prRule name="r2" 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="p25"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prHyps="p20">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p24" org.eventb.core.prInfHyps="p38"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p9,p18,p15,p5,p3,p1,p16,p7,p10,p19,p13,p11,p14,p12,p2,p6,p4,p20,p21,p22,p23,p24,p38">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="atmWDAm{a ↦ am}∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∉trans"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a ↦ c∈cardInAtm"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="¬a∈trans"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="¬a∈reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈validCard"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="am≤atmCashA(a)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv7/INV"/>
<org.eventb.core.prProof name="INITIALISATION/inv8/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/inv11/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/inv2/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/inv3/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/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="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,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36" 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="p25,p5,p26,p32,p18,p31,p13,p9,p4,p1,p35,p11,p34,p7,p16,p2,p15,p10,p14,p19,p20,p21,p27,p28,p33,p24,p17,p12,p30,p36,p22,p29,p23,p6,p8,p3">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="activeCard∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∉processedWDok"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="processedWDok∪{a}∈ℙ(atm)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<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,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26" 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="p18,p4,p19,p23,p13,p22,p9,p6,p3,p1,p26,p8,p25,p5,p12,p2,p11,p7,p10,p14,p15,p16,p20,p21,p24,p17">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(activeCard)∧activeCard∈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" 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">
<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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmWDAm)∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<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.prProof>
<org.eventb.core.prProof name="withdrawOK/grd5/GRD" 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,p20,p21,p22,p23,p24,p25,p26,p27" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p28,p29,p30,p31"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p28,p29,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r2" 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="p33"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p43"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p45"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with am=atmWDAm(a)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p22" org.eventb.core.prInfHyps="p46"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p47"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p26" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p22,p18,p26"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c=cardInAtm(a)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p7">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p50">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p49"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p50" org.eventb.core.prHyps="p16,p27,p24,p14,p3,p12,p6,p15,p21,p11,p5,p22,p10,p18,p19,p26,p13,p20,p23,p9,p4,p8,p2,p7,p1,p28,p29,p30,p31,p32,p46,p47,p48,p49">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈validCard"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="¬a∈withdrawOk"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="cardInAtm(a) ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="atmCash(a)≥am"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="cardInAtm(a)∈validCard"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c=cardInAtm(a)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="atmWDAm(a)∈ℕ1"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∉withdrawOk"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDok/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,p16,p17,p18,p19,p20,p21" 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="p10,p1,p18,p14,p3,p6,p21,p4,p8,p19,p5,p17,p2,p13,p20,p16,p7,p15,p11,p9,p12">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈withdrawOk"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="respWDok∪{a}⊆atm"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a∉respWDok"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok⊆atm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDok/inv1/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,p16,p17,p18,p19,p20,p21" 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="p10,p1,p18,p14,p3,p6,p21,p4,p8,p19,p5,p17,p2,p13,p20,p16,p7,p15,p11,p9,p12">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="reqWD ∖ {a}⊆atm"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈withdrawOk"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a∉respWDok"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok⊆atm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDok/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,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="p9,p5,p11,p16,p19,p14,p10,p7,p4,p1,p18,p8,p17,p6,p15,p2,p13,p3,p12">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∈processedWDok"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="processedWDok ∖ {a}∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a∉respWDok"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDfail/inv1/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,p16,p17,p18,p19,p20,p21" 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="p10,p1,p18,p13,p4,p7,p21,p5,p9,p19,p6,p17,p3,p12,p20,p16,p8,p15,p11,p2,p14">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈withdrawFail"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="reqWD ∖ {a}⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∉respWDfail"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok⊆atm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDfail/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,p13,p14,p15,p16,p17,p18,p19,p20,p21" 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="p10,p1,p18,p13,p4,p7,p21,p5,p9,p19,p6,p17,p3,p12,p20,p16,p8,p15,p11,p2,p14">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈withdrawFail"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="respWDfail∪{a}⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∉respWDfail"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok⊆atm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDfail/inv8/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,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="p8,p4,p10,p16,p19,p13,p9,p6,p3,p1,p18,p7,p17,p5,p15,p2,p11,p14,p12">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="processedWDfail ∖ {a}∈ℙ(atm)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a∉respWDfail"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∈processedWDfail"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/inv8/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,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36,p37,p38,p39" 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="p28,p5,p30,p35,p24,p32,p13,p9,p4,p1,p38,p11,p37,p7,p18,p2,p16,p22,p33,p27,p34,p10,p25,p23,p39,p29,p15,p36,p21,p14,p20,p8,p6,p3,p26,p19,p12,p31,p17">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="activeCard∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∉processedWDfail"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawOkA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="withdrawFailA∈ℙ(atm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="processedWDfail∪{a}∈ℙ(atm)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFailsAtm/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,p13,p14,p15,p16,p17,p18,p19,p20" 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="p9,p1,p17,p13,p3,p6,p20,p4,p8,p18,p5,p16,p2,p12,p19,p15,p7,p14,p10,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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="a∈respWDfail"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="respWDfail ∖ {a}⊆atm"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="respWDok⊆atm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/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,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34" 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="p27,p1,p32,p29,p3,p25,p20,p4,p10,p33,p5,p14,p2,p12,p18,p30,p26,p31,p28,p7,p22,p23,p6,p34,p19,p11,p17,p13,p16,p15,p9,p24,p8,p21">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="AccBalOnAtm(acc)≥am"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="acc∈dom(AccBalOnAtm)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCashA(a)≥am"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="respWDok ∖ {a}⊆atm"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="a ↦ acc∈atmWDAcc"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv13/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×BOOL))∈ATM ⇸ BOOL"/>
<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/inv14/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×BOOL))∈ATM ⇸ BOOL"/>
<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="withdrawOKAtm/inv13/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,p16,p17" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p18,p19,p20,p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" 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="p22"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p8,p16,p12,p5,p3,p1,p13,p6,p9,p17,p11,p7,p14,p10,p2,p4,p18,p19,p20,p21">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawOkMsg{a ↦ TRUE}∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="am≤atmCashA(a)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFailsAtm/inv14/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" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p11" org.eventb.core.prInfHyps="p14,p15,p16,p17"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p14,p15,p16,p17"/>
<org.eventb.core.prRule name="r1" 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="p18"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p19"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p13,p9,p3,p2,p1,p10,p4,p7,p12,p8,p6,p14,p15,p16,p17">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawFailMsg{a ↦ TRUE}∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈respWDfail"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</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,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23" 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="p12,p5,p14,p19,p23,p17,p18,p13,p10,p4,p2,p22,p11,p21,p7,p3,p16,p1,p9,p6,p20,p15,p8">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(activeCard)∧activeCard∈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,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27" 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="p18,p1,p24,p21,p3,p16,p14,p4,p7,p26,p5,p10,p2,p9,p12,p22,p17,p23,p19,p6,p15,p13,p27,p20,p8,p25,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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmWDAm)∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal(acc)&lt;am"/>
</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,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29" 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="p20,p5,p21,p25,p16,p24,p13,p10,p7,p4,p2,p28,p9,p27,p6,p3,p12,p1,p8,p18,p26,p23,p19,p14,p11,p29,p17,p22,p15">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(bal)∧bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="activeCard∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd5/GRD" 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,p20,p21,p22,p23,p24,p25,p26" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p27,p28,p29,p30"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p27,p28,p29,p30"/>
<org.eventb.core.prRule name="r1" 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="p31"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p43"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with am=atmWDAm(a)" org.eventb.core.prHyps="p5">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p22" org.eventb.core.prInfHyps="p44"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p45"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p46"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p22,p19,p4"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c=cardInAtm(a)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p8">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p48">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p47"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p48" org.eventb.core.prHyps="p17,p26,p24,p15,p3,p13,p7,p16,p21,p12,p6,p22,p9,p19,p18,p1,p4,p14,p20,p23,p10,p5,p11,p2,p8,p27,p28,p29,p30,p44,p45,p46,p47">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am≤atmCash(a)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="atmWDAm(a)&gt;bal(acc)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="c∈validCard"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="cardInAtm(a) ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="atmWDAm(a)≤atmCash(a)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="cardInAtm(a)∈validCard"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="c=cardInAtm(a)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="atmWDAm(a)∈ℕ1"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="am&gt;bal(acc)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd2/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,p20,p21" 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="p10,p5,p12,p16,p21,p14,p15,p11,p8,p4,p2,p19,p9,p18,p6,p3,p13,p1,p7,p17,p20">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmWDAm)∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<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.prProof>
<org.eventb.core.prProof name="withdrawOK/grd11/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,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="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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×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="p0" org.eventb.core.predicate="a∈dom(atmWDAcc)∧atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd2/GRD" 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,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36" 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="p25,p5,p26,p32,p18,p31,p13,p9,p4,p1,p35,p11,p34,p7,p16,p2,p15,p10,p14,p19,p20,p21,p27,p28,p33,p24,p17,p12,p30,p36,p22,p29,p23,p6,p8,p3">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="activeCard∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∉processedWDok"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd6/GRD" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="p0,p1,p2">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p3" org.eventb.core.prInfHyps="p4"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (am=atmWDAm(a))" org.eventb.core.prHyps="p0">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p8" org.eventb.core.prInfHyps="p9"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p10" org.eventb.core.prInfHyps="p11"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p8,p10"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (acc=atmWDAcc(a))" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p13"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p14" org.eventb.core.prInfHyps="p15"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p16"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p12,p14,p9"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.he" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he (activeCard(a)=c)" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p17"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p15"/>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p0"/>
</org.eventb.core.prRule>
</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="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard(a) ↦ atmWDAcc(a)∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∉processedWDok">
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="¬a∈processedWDok">
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="c ↦ atmWDAcc(a)∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)">
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="bal(atmWDAcc(a))≥atmWDAm(a)">
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)">
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal(acc)≥am">
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmWDAcc(a)∈dom(bal)">
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="acc∈dom(bal)">
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash(a)≥am">
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
</org.eventb.core.prPred>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd7/GRD" 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,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p24" org.eventb.core.prInfHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (am=atmWDAm(a))" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p28" org.eventb.core.prInfHyps="p41"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p36" org.eventb.core.prInfHyps="p42"/>
<org.eventb.core.prHypAction name="DESELECT2" org.eventb.core.prHyps="p28,p36"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (acc=atmWDAcc(a))" org.eventb.core.prHyps="p6">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p21" org.eventb.core.prInfHyps="p43"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p30" org.eventb.core.prInfHyps="p44"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p41" org.eventb.core.prInfHyps="p45"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p21,p30,p41"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.he" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he (activeCard(a)=c)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p17">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p47">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p44" org.eventb.core.prInfHyps="p46"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalPP:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p47" org.eventb.core.prHyps="p26,p29,p32,p18,p12,p10,p5,p2,p35,p11,p34,p8,p16,p3,p15,p7,p19,p14,p20,p9,p6,p4,p21,p28,p27,p33,p25,p17,p13,p30,p36,p23,p31,p1,p22,p37,p41,p42,p43,p44,p45,p46">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="2000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p17"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p6"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p14"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="activeCard(a) ↦ atmWDAcc(a)∈cardAccount"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="∀a⦂ATM,c⦂CARD·a ↦ c∈cardInAtm∧a∈reqWD⇒a ↦ c∈activeCard"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="¬a∈processedWDok"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="c ↦ atmWDAcc(a)∈cardAccount"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="bal(atmWDAcc(a))≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="activeCard∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="cardInAtm(a)=activeCard(a)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="cardInAtm(a)=c"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="a∉processedWDok"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="c ↦ acc∈cardAccount"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="atmWDAcc(a)∈dom(bal)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="" org.eventb.core.prSets="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="">
<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.prProof>
<org.eventb.core.prProof name="reqWithdraw/inv15/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="a0,c0" 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,p20" org.eventb.core.prSets="ACCOUNT,CARD">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.allI" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∀ goal (frees a0,c0)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p26">
<org.eventb.core.prIdent name="a0" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="c0" org.eventb.core.type="CARD"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.impI" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⇒ goal" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p27,p28">
<org.eventb.core.prRule name="com.clearsy.atelierb.provers.core.externalPP:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p9,p12,p16,p20,p10,p7,p3,p1,p19,p8,p18,p6,p15,p2,p13,p5,p4,p11,p14,p21,p27,p28">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="2000"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="¬a∈reqWD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀a⦂ATM,c⦂CARD·a ↦ c∈cardInAtm∧a∈reqWD⇒a ↦ c∈activeCard"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="a0∈reqWD∪{a}">
<org.eventb.core.prIdent name="a0" org.eventb.core.type="ATM"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="c∈CARD"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="a0 ↦ c0∈cardInAtm">
<org.eventb.core.prIdent name="a0" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="c0" org.eventb.core.type="CARD"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="a0 ↦ c0∈activeCard{a ↦ c}">
<org.eventb.core.prIdent name="a0" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="c0" org.eventb.core.type="CARD"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a ↦ c∈cardInAtm"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="a0 ↦ c0∈cardInAtm∧a0∈reqWD∪{a}⇒a0 ↦ c0∈activeCard{a ↦ c}">
<org.eventb.core.prIdent name="a0" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="c0" org.eventb.core.type="CARD"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀a0⦂ATM,c0⦂CARD·a0 ↦ c0∈cardInAtm∧a0∈reqWD∪{a}⇒a0 ↦ c0∈activeCard{a ↦ c}"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∉reqWD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDok/inv15/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,p16,p17,p18,p19,p20" 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="p10,p5,p12,p17,p20,p15,p11,p8,p4,p1,p19,p9,p18,p7,p16,p2,p14,p6,p3,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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀a0⦂ATM,c⦂CARD·a0 ↦ c∈cardInAtm∧a0∈reqWD ∖ {a}⇒a0 ↦ c∈activeCard"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∈processedWDok"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="∀a⦂ATM,c⦂CARD·a ↦ c∈cardInAtm∧a∈reqWD⇒a ↦ c∈activeCard"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∉respWDok"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDfail/inv15/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,p16,p17,p18,p19,p20" 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="p9,p4,p11,p17,p20,p14,p10,p7,p3,p1,p19,p8,p18,p6,p16,p2,p12,p5,p15,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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀a0⦂ATM,c⦂CARD·a0 ↦ c∈cardInAtm∧a0∈reqWD ∖ {a}⇒a0 ↦ c∈activeCard"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="processedWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="respWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀a⦂ATM,c⦂CARD·a ↦ c∈cardInAtm∧a∈reqWD⇒a ↦ c∈activeCard"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="respWDok∈ℙ(atm)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="reqWD∈ℙ(atm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∉respWDfail"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="a∈processedWDfail"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="processedWDfail∈ℙ(atm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/grd2/WD" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1" org.eventb.core.prSets="ATM">
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<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.prRule name="org.eventb.core.seqprover.conj" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="∧ goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p4"/>
<org.eventb.core.prAnte name="1" org.eventb.core.prGoal="p5">
<org.eventb.core.prRule name="org.eventb.core.seqprover.isFunGoal" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p5" 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="atm" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atm∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmWDAm)∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/inv11/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,p16,p17" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p18,p19,p20,p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r1" 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="p22"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p8,p16,p12,p5,p3,p1,p13,p6,p9,p17,p11,p7,p14,p10,p2,p4,p18,p19,p20,p21">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="am≤atmCashA(a)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="atmCashA{a ↦ atmCashA(a) − am}∈ATM → ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/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="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">
<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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCashA)∧atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<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.prProof>
<org.eventb.core.prProof name="reqWithdraw/activeCard/EQL" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p0" org.eventb.core.prInfHyps="p1"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p0"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="¬a∈reqWD">
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∉reqWD">
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="c∈CARD">
<org.eventb.core.prIdent name="CARD" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" 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.prProof>
<org.eventb.core.prProof name="INITIALISATION/act5/SIM"/>
<org.eventb.core.prProof name="withdrawFail/grd6/GRD" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prHyps="p0">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p2"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.he" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he (activeCard(a)=c)" org.eventb.core.prHyps="p0">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p6" org.eventb.core.prInfHyps="p7"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p6"/>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p0"/>
</org.eventb.core.prRule>
</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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="c ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="¬a∈processedWDfail">
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="activeCard(a) ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∉processedWDfail">
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p5" 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.prProof>
<org.eventb.core.prProof name="withdrawFail/grd7/GRD" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p2" org.eventb.core.prInfHyps="p3"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p2"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.he" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he (activeCard(a)=c)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p9">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p7" org.eventb.core.prInfHyps="p8"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p7"/>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p1"/>
</org.eventb.core.prRule>
</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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="c" org.eventb.core.type="CARD"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="cardInAtm(a)=activeCard(a)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="¬a∈processedWDfail">
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="activeCard(a) ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∉processedWDfail">
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="cardInAtm(a)=c"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p6" 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.prProof>
<org.eventb.core.prProof name="withdrawFail/act1/SIM" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (am=atmWDAm(a))" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p11" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p9,p11,p13"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (acc=atmWDAcc(a))" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p20">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p16"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p18"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p15,p17,p12"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.he" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he (activeCard(a)=c)" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p21"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p18"/>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prPred name="p20" org.eventb.core.predicate="AccBalOnAtm=AccBalOnAtm{atmWDAcc(a) ↦ bal(atmWDAcc(a))}"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="activeCard(a) ↦ atmWDAcc(a)∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="bal(acc)&lt;atmWDAm(a)"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmWDAm(a)∈ℕ"/>
<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.prPred>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c ↦ atmWDAcc(a)∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)">
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="AccBalOnAtm=AccBalOnAtm{acc ↦ bal(acc)}"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal(atmWDAcc(a))&lt;atmWDAm(a)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="c ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬a∈processedWDfail">
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="a∉processedWDfail">
<org.eventb.core.prIdent name="processedWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="atmWDAcc(a)∈dom(bal)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="bal(acc)&lt;am"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmCash(a)≥am">
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
</org.eventb.core.prPred>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd13/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,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34,p35,p36" 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="p25,p1,p33,p30,p4,p23,p19,p6,p10,p35,p7,p14,p2,p13,p17,p31,p24,p32,p26,p9,p21,p18,p27,p28,p12,p36,p20,p29,p34,p16,p11,p15,p8,p5,p3,p22">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a∈atm"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(activeCard)∧activeCard∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="atmCash(a)≥am"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd13/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,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="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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×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="p0" org.eventb.core.predicate="a∈dom(atmWDAcc)∧atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmWDAcc∈ATM ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd11/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">
<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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmWDAm)∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<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.prProof>
<org.eventb.core.prProof name="INITIALISATION/act6/SIM"/>
<org.eventb.core.prProof name="withdrawOK/act4/SIM"/>
<org.eventb.core.prProof name="withdrawFail/act2/SIM"/>
<org.eventb.core.prProof name="INITIALISATION/inv17/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p1" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM))⊆(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv18/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p1" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM))⊆(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/inv17/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,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p28,p29,p30,p31"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p28,p29,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p33">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r2" 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="p34"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p43"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p45"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p46"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with am=atmWDAm(a)" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p22" org.eventb.core.prInfHyps="p47"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p26" org.eventb.core.prInfHyps="p49"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p22,p18,p26"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c=cardInAtm(a)" org.eventb.core.prHyps="p7">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p50"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p16,p27,p24,p14,p3,p12,p6,p15,p21,p11,p5,p22,p10,p18,p19,p26,p13,p20,p23,p9,p4,p8,p2,p7,p1,p28,p29,p30,p31,p32,p47,p48,p49,p50">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="¬a∈withdrawOk"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="cardInAtm(a) ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawOk∪{a}⊆withdrawOkA∪{a}"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="withdrawOk⊆withdrawOkA∪{a}"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="atmCash(a)≥am"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c=cardInAtm(a)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="atmWDAm(a)∈ℕ1"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∉withdrawOk"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/inv18/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,p16,p17,p18,p19,p20,p21,p22,p23,p24" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p25,p26,p27,p28"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p19"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p25,p26,p27,p28"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p29">
<org.eventb.core.prRule name="r2" 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="p30"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with am=atmWDAm(a)" org.eventb.core.prHyps="p9">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p14" org.eventb.core.prInfHyps="p43"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p44"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p7" org.eventb.core.prInfHyps="p45"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p14,p12,p7"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p29" org.eventb.core.prHyps="p8,p23,p17,p5,p4,p2,p18,p6,p13,p24,p15,p14,p22,p12,p10,p1,p7,p3,p11,p16,p21,p9,p20,p25,p26,p27,p28,p43,p44,p45">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="am≤atmCash(a)"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="atmWDAm(a)&gt;bal(acc)"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawFail∪{a}⊆withdrawFailA∪{a}"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="withdrawFail⊆withdrawFailA∪{a}"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="atmWDAm(a)∈ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="atmWDAm(a)≤atmCash(a)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="am&gt;bal(acc)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/act2/SIM" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1,p2,p3">
<org.eventb.core.prRule name="org.eventb.core.seqprover.autoRewritesL1:0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="HIDE0" org.eventb.core.prHyps="p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p7"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (am=atmWDAm(a))" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p15">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p10"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p11" org.eventb.core.prInfHyps="p12"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p13" org.eventb.core.prInfHyps="p14"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p9,p11,p13"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (acc=atmWDAcc(a))" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p2">
<org.eventb.core.prAnte name="0" org.eventb.core.prGoal="p21">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p16" org.eventb.core.prInfHyps="p17"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p19"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p20"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p16,p18,p12"/>
<org.eventb.core.prRule name="org.eventb.core.seqprover.he" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="he (activeCard(a)=c)" org.eventb.core.prHyps="p3">
<org.eventb.core.prAnte name="0">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p19" org.eventb.core.prInfHyps="p22"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p19"/>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p3"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p2"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="am" org.eventb.core.type="ℤ"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prPred name="p22" org.eventb.core.predicate="activeCard(a) ↦ atmWDAcc(a)∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="AccBalOnAtm=AccBalOnAtm{acc ↦ bal(acc) − atmWDAm(a)}"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="a∉processedWDok">
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="acc=atmWDAcc(a)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="¬a∈processedWDok">
<org.eventb.core.prIdent name="processedWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmWDAm(a)∈ℕ"/>
<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.prPred>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="c ↦ atmWDAcc(a)∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)">
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="bal(atmWDAcc(a))≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="c ↦ acc∈cardAccount">
<org.eventb.core.prIdent name="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="AccBalOnAtm=AccBalOnAtm{atmWDAcc(a) ↦ bal(atmWDAcc(a)) − atmWDAm(a)}"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmWDAcc(a)∈dom(bal)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="activeCard(a)=c"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="AccBalOnAtm=AccBalOnAtm{acc ↦ bal(acc) − am}"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="atmCash(a)≥am">
<org.eventb.core.prIdent name="atmCash" org.eventb.core.type="ℙ(ATM×ℤ)"/>
</org.eventb.core.prPred>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/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,p14,p15,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25" 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="p18,p1,p23,p20,p3,p16,p13,p4,p8,p24,p5,p10,p2,p9,p11,p21,p17,p22,p19,p7,p14,p15,p6,p25,p12">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmWDAm)∧atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="a ↦ acc∈atmWDAcc"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/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,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34" 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="p27,p1,p32,p29,p3,p25,p20,p4,p10,p33,p5,p14,p2,p12,p18,p30,p26,p31,p28,p7,p22,p23,p6,p34,p19,p11,p17,p13,p16,p15,p9,p24,p8,p21">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="AccBalOnAtm(acc)≥am"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="acc∈dom(AccBalOnAtm)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCashA(a)≥am"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="acc∈dom(AccBalOnAtm)∧AccBalOnAtm∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="a ↦ acc∈atmWDAcc"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/AccBalOnAtm/EQL" org.eventb.core.confidence="0" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prRule name="org.eventb.core.seqprover.typeRewrites:1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="0">
<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.prRule name="org.eventb.core.seqprover.eq" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh (am=atmWDAm(a))" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="0" 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="DESELECT1" org.eventb.core.prHyps="p5"/>
</org.eventb.core.prAnte>
<org.eventb.core.prPredRef name=".pred" org.eventb.core.prRef="p1"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</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="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="AccBalOnAtm{acc ↦ AccBalOnAtm(acc) − atmWDAm(a)}=AccBalOnAtm"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="cardAccount∈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="cardAccount" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atm∈ℙ(ATM)">
<org.eventb.core.prIdent name="ATM" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="atm" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="atmWDAm(a)∈ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="ACCOUNT" org.eventb.core.type="ℙ(ACCOUNT)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="AccBalOnAtm{acc ↦ AccBalOnAtm(acc) − am}=AccBalOnAtm"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd6/WD"/>
<org.eventb.core.prProof name="INITIALISATION/inv19/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="withdrawOKAtm/inv19/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,p16,p17,p18,p19,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29,p30,p31,p32,p33,p34" 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="p27,p1,p32,p29,p3,p25,p20,p4,p10,p33,p5,p14,p2,p12,p18,p30,p26,p31,p28,p7,p22,p23,p6,p34,p19,p11,p17,p13,p16,p15,p9,p24,p8,p21">
<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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="AccBalOnAtm{acc ↦ AccBalOnAtm(acc) − am}∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="AccBalOnAtm(acc)≥am"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="acc∈dom(AccBalOnAtm)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCashA(a)≥am"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="a ↦ acc∈atmWDAcc"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/grd10/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,p20,p21,p22,p23,p24,p25,p26,p27,p28,p29" 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="p22,p1,p27,p24,p3,p20,p17,p4,p8,p28,p5,p12,p2,p10,p15,p25,p21,p26,p23,p7,p18,p19,p6,p29,p16,p9,p14,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="activeCard" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAcc" org.eventb.core.type="ℙ(ATM×ACCOUNT)"/>
<org.eventb.core.prIdent name="atmWDAm" 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.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atm⊆ATM"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="withdrawOkMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="withdrawFailA⊆atm"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="respWDfail⊆atm"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmCashA∈atm → ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmWDAcc)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈atm ⇸ ℕ"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCashA)∧atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFailMsg∈atm ⇸ BOOL"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="activeCard∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="acc∈dom(AccBalOnAtm)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="cardInAtm∈atm ⇸ CARD"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="respWDok⊆atm"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="am∈ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="a∈dom(activeCard)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="reqWD⊆atm"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="AccBalOnAtm∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawOkA⊆atm"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="cardAccount∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="atmCash∈atm → ℕ"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="atmWDAcc∈atm ⇸ ACCOUNT"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="a ↦ acc∈atmWDAcc"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/grd11/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">
<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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCashA)∧atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="⊤∧atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<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.prProof>
<org.eventb.core.prProof name="respWDok/inv17/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,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p15,p16,p17,p18"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p15,p16,p17,p18"/>
<org.eventb.core.prRule name="r1" 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="p19"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p5,p13,p10,p3,p2,p1,p11,p4,p7,p14,p8,p6,p9,p15,p16,p17,p18">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawOk ∖ {a}⊆withdrawOkA"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈withdrawOk"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDfail/inv18/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,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p15,p16,p17,p18"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p15,p16,p17,p18"/>
<org.eventb.core.prRule name="r1" 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="p19"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p6,p13,p10,p4,p3,p1,p11,p5,p7,p14,p8,p2,p9,p15,p16,p17,p18">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈withdrawFail"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="withdrawFail ∖ {a}⊆withdrawFailA"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</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="p6">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p6" 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="p6" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="a∉withdrawOk">
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<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.prPred name="p5" org.eventb.core.predicate="¬a∈withdrawOk">
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</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="p6">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p4" org.eventb.core.prInfHyps="p5"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p4"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p6" 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="p6" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="a∉withdrawOk">
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<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.prPred name="p5" org.eventb.core.predicate="¬a∈withdrawOk">
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="deposit/act1/WD"/>
<org.eventb.core.prProof name="transfer/act1/WD"/>
<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" 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.prHypAction name="HIDE8" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p14"/>
<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="p15">
<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="p15" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p14">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p14" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p16">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p16" 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="p17">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p17" 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="p16" 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="p8" org.eventb.core.predicate="reqWD∈ℙ(ATM)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="a∈dom(atmCash)"/>
<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="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="p13" 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="p9" org.eventb.core.predicate="respWDok∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="trans∈ℙ(ATM)">
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<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.prPred name="p10" org.eventb.core.predicate="respWDfail∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" 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.prExpr name="e0" org.eventb.core.expression="ATM"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/act7/SIM"/>
<org.eventb.core.prProof name="withdrawOK/grd4/GRD" 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,p20,p21,p22,p23,p24,p25,p26,p27" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p28,p29,p30,p31"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p28,p29,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r2" 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="p33"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p43"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p45"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with am=atmWDAm(a)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p22" org.eventb.core.prInfHyps="p46"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p47"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p26" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p22,p18,p26"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c=cardInAtm(a)" org.eventb.core.prHyps="p7">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p50"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p16,p27,p24,p14,p3,p12,p6,p15,p21,p11,p5,p22,p10,p18,p19,p26,p13,p20,p23,p9,p4,p8,p2,p7,p1,p28,p29,p30,p31,p32,p46,p47,p48,p50">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="atmWDAm(a)≤bal(acc)"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="¬a∈withdrawOk"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="cardInAtm(a) ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="atmCash(a)≥am"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c=cardInAtm(a)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="atmWDAm(a)∈ℕ1"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∉withdrawOk"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="am≤bal(acc)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd2/GRD"/>
<org.eventb.core.prProof name="withdrawFail/grd4/GRD"/>
<org.eventb.core.prProof name="withdrawOK/grd9/GRD"/>
<org.eventb.core.prProof name="withdrawFail/grd9/GRD"/>
<org.eventb.core.prProof name="withdrawOK/grd8/GRD" 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,p20,p21,p22,p23,p24,p25,p26,p27" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p28,p29,p30,p31"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p28,p29,p30,p31"/>
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prRule name="r2" 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="p33"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p40"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p41"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p42"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p43"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p44"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p45"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with am=atmWDAm(a)" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="p4">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p49">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p22" org.eventb.core.prInfHyps="p46"/>
<org.eventb.core.prHypAction name="FORWARD_INF1" org.eventb.core.prHyps="p18" org.eventb.core.prInfHyps="p47"/>
<org.eventb.core.prHypAction name="FORWARD_INF2" org.eventb.core.prHyps="p26" org.eventb.core.prInfHyps="p48"/>
<org.eventb.core.prHypAction name="DESELECT3" org.eventb.core.prHyps="p22,p18,p26"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with c=cardInAtm(a)" org.eventb.core.prHyps="p7">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p1" org.eventb.core.prInfHyps="p50"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p1"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p49" org.eventb.core.prHyps="p16,p27,p24,p14,p3,p12,p6,p15,p21,p11,p5,p22,p10,p18,p19,p26,p13,p20,p23,p9,p4,p8,p2,p7,p1,p28,p29,p30,p31,p32,p46,p47,p48,p50">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="c ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="am≤atmCash(a)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="acc∈dom(bal)"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="¬a∈withdrawOk"/>
<org.eventb.core.prPred name="p50" org.eventb.core.predicate="cardInAtm(a) ↦ acc∈cardAcct"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p49" org.eventb.core.predicate="atmWDAm(a)≤atmCash(a)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p48" org.eventb.core.predicate="atmCash(a)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p47" org.eventb.core.predicate="bal(acc)≥atmWDAm(a)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℤ"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="atmCash(a)≥am"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p44" org.eventb.core.predicate="acc∈ACCOUNT"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="am=atmWDAm(a)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="c=cardInAtm(a)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈dom(atmWDAm)"/>
<org.eventb.core.prPred name="p46" org.eventb.core.predicate="atmWDAm(a)∈ℕ1"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p45" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="a∉withdrawOk"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="bal(acc)≥am"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd8/GRD"/>
<org.eventb.core.prProof name="INITIALISATION/act8/SIM"/>
<org.eventb.core.prProof name="reqWithdraw/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="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p2" org.eventb.core.prInfHyps="p3,p4,p5,p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p2"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p3,p4,p5,p6"/>
<org.eventb.core.prRule name="r1" 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="p7"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p19"/>
<org.eventb.core.prRule name="r2" 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="p20">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p21" 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="p22">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="reqWD∈ℙ(ATM)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" 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="p19" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p9" 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="p4" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" 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="p1" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p18" 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="p22" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" 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="p20" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="respWDok∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCashA)∧atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="trans∈ℙ(ATM)">
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="respWDfail∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" 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="p12" 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="p16" 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.prExpr name="e0" org.eventb.core.expression="ATM"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/act4/SIM"/>
<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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<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.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="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="reqWithdraw/cardInAtm/EQL"/>
<org.eventb.core.prProof name="INITIALISATION/inv21/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="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="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p2" org.eventb.core.prInfHyps="p3,p4,p5,p6"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p2"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p3,p4,p5,p6"/>
<org.eventb.core.prRule name="r1" 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="p7"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p8"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p10"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p13"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p14"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p16"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p18"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p19"/>
<org.eventb.core.prRule name="r2" 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="p20">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="total function dom substitution in goal" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p1">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="type rewrites" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p21">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p21" 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="p22">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="functional goal" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="p1"/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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="p21" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="reqWD∈ℙ(ATM)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p11" 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="p19" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="a∈dom(atmCash)"/>
<org.eventb.core.prPred name="p9" 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="p4" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p10" 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="p18" 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="p7" 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="p3" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="respWDok∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="trans∈ℙ(ATM)">
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(atmCash)∧atmCash∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="respWDfail∈ℙ(ATM)">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p8" 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="p12" 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="p16" 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.prExpr name="e0" org.eventb.core.expression="ATM"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.isFunGoal"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.conj:0"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.totalDom:2"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv22/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p1" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="∀c⦂CARD·c∈ran(∅ ⦂ ℙ(ATM×CARD))⇒c∈(∅ ⦂ ℙ(CARD))"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOK/grd16/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,CARD">
<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="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<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="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(cardInAtm)∧cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="INITIALISATION/inv23/INV" org.eventb.core.confidence="1000" org.eventb.core.prFresh="" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p1">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p1" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p2">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p2" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<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="p2">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p2" 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=""/>
</org.eventb.core.prRule>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM))∩(∅ ⦂ ℙ(ATM))=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="(∅ ⦂ ℙ(ATM))=(∅ ⦂ ℙ(ATM))∪(∅ ⦂ ℙ(ATM))∪(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(∅ ⦂ ℙ(ATM),∅ ⦂ ℙ(ATM),∅ ⦂ ℙ(ATM),∅ ⦂ ℙ(ATM))"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="reqWithdraw/inv23/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,p16,p17,p18,p19" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p17" org.eventb.core.prInfHyps="p20,p21,p22,p23"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p17"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p20,p21,p22,p23"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p24">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p24" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p26">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r2" 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="p27"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prGoal="p26" org.eventb.core.prHyps="p20">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p41">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p41" org.eventb.core.prHyps="p11,p14,p12,p2,p20,p21,p22,p23,p40">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p42">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r2" 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="p27"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prHyps="p20">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p42" org.eventb.core.prHyps="p8,p19,p15,p5,p3,p1,p16,p6,p10,p18,p13,p11,p14,p12,p2,p7,p4,p20,p21,p22,p23,p25,p40">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p43">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p9" org.eventb.core.prInfHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p9"/>
<org.eventb.core.prRule name="r2" 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="p27"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p34"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p35"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p36"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p37"/>
<org.eventb.core.prHypAction name="HIDE11" org.eventb.core.prHyps="p38"/>
<org.eventb.core.prHypAction name="HIDE12" org.eventb.core.prHyps="p39"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prHyps="p20">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p25" org.eventb.core.prInfHyps="p40"/>
<org.eventb.core.prHypAction name="DESELECT1" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p43" org.eventb.core.prHyps="p8,p19,p15,p5,p3,p1,p16,p6,p10,p18,p13,p11,p14,p12,p2,p7,p4,p20,p21,p22,p23,p25,p40">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p23">
<org.eventb.core.prRule name="r6" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p23" org.eventb.core.prHyps="p23"/>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" 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="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(trans∪{a},reqWD∪{a},respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p43" org.eventb.core.predicate="(reqWD∪{a})∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p38" org.eventb.core.predicate="acc∈ACCOUNT">
<org.eventb.core.prIdent name="acc" org.eventb.core.type="ACCOUNT"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∉trans"/>
<org.eventb.core.prPred name="p37" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="trans∪{a}=reqWD∪{a}∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="¬a∈trans"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="a ↦ c∈cardInAtm"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p40" org.eventb.core.predicate="¬a∈reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="c∈validCard"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="am≤atmCashA(a)"/>
<org.eventb.core.prPred name="p39" org.eventb.core.predicate="a∈ATM"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="trans∪{a}=(reqWD∪{a})∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p41" org.eventb.core.predicate="reqWD∪respWDok∪respWDfail∪{a}=reqWD∪{a}∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p42" org.eventb.core.predicate="(reqWD∪{a})∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r6" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDok/inv23/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,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p15,p16,p17,p18"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p15,p16,p17,p18"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p15">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p5,p14,p10,p3,p2,p1,p11,p4,p7,p13,p8,p6,p9,p15,p16,p17,p18">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p6,p9,p15,p16,p17,p18">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p5,p14,p10,p3,p2,p1,p11,p4,p7,p13,p8,p6,p9,p15,p16,p17,p18">
<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.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p5,p14,p10,p3,p2,p1,p11,p4,p7,p13,p8,p6,p9,p15,p16,p17,p18">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="(reqWD ∖ {a})∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="(reqWD ∖ {a})∩(respWDok∪{a})=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="(respWDok∪{a})∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="trans=(reqWD ∖ {a})∪(respWDok∪{a})∪respWDfail"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="trans=(reqWD ∖ {a})∪respWDok∪{a}∪respWDfail"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈withdrawOk"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="reqWD∪respWDok∪respWDfail=(reqWD ∖ {a})∪respWDok∪{a}∪respWDfail"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(trans,reqWD ∖ {a},respWDok∪{a},respWDfail)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="respWDfail/inv23/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,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p12" org.eventb.core.prInfHyps="p15,p16,p17,p18"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p12"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p15,p16,p17,p18"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p19">
<org.eventb.core.prRule name="r1" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p19" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p20">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p15">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p6,p14,p10,p4,p3,p1,p11,p5,p7,p13,p8,p2,p9,p15,p16,p17,p18">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p33">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p33" org.eventb.core.prHyps="p6,p14,p10,p4,p3,p1,p11,p5,p7,p13,p8,p2,p9,p15,p16,p17,p18">
<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.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p2,p9,p15,p16,p17,p18">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r2" 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="p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p6,p14,p10,p4,p3,p1,p11,p5,p7,p13,p8,p2,p9,p15,p16,p17,p18">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="(reqWD ∖ {a})∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="(reqWD ∖ {a})∩(respWDfail∪{a})=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="reqWD∪respWDok∪respWDfail=(reqWD ∖ {a})∪respWDok∪respWDfail∪{a}"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="respWDok∩(respWDfail∪{a})=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(trans,reqWD ∖ {a},respWDok,respWDfail∪{a})"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="trans=(reqWD ∖ {a})∪respWDok∪(respWDfail∪{a})"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="a∈withdrawFail"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="trans=(reqWD ∖ {a})∪respWDok∪respWDfail∪{a}"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="a∈reqWD"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<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.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawOKAtm/inv23/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,p16,p17" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p15" org.eventb.core.prInfHyps="p18,p19,p20,p21"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p15"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p18,p19,p20,p21"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p22">
<org.eventb.core.prRule name="r1" 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="p23"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prGoal="p22" org.eventb.core.prHyps="p18">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p34">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="PP" org.eventb.core.prGoal="p34" org.eventb.core.prHyps="p6,p13,p10,p2,p18,p19,p20,p21">
<org.eventb.core.prString name=".arg" org.eventb.core.prSValue="R500"/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p35">
<org.eventb.core.prRule name="r1" 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="p23"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p35" org.eventb.core.prHyps="p8,p17,p12,p5,p3,p1,p14,p7,p9,p16,p11,p6,p13,p10,p2,p4,p18,p19,p20,p21">
<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.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p20">
<org.eventb.core.prRule name="r5" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p20" org.eventb.core.prHyps="p20"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p36">
<org.eventb.core.prRule name="r1" 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="p23"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p30"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p31"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p32"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p33"/>
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p36" org.eventb.core.prHyps="p8,p17,p12,p5,p3,p1,p14,p7,p9,p16,p11,p6,p13,p10,p2,p4,p18,p19,p20,p21">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<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="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(trans ∖ {a},reqWD,respWDok ∖ {a},respWDfail)"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈dom(atmCashA)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p34" org.eventb.core.predicate="(reqWD∪respWDok∪respWDfail) ∖ {a}=reqWD∪(respWDok ∖ {a})∪respWDfail"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="trans ∖ {a}=reqWD∪(respWDok ∖ {a})∪respWDfail"/>
<org.eventb.core.prPred name="p33" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="a∈respWDok"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="am≤atmCashA(a)"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="atmCashA∈ATM ⇸ ℤ"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p35" org.eventb.core.predicate="reqWD∩(respWDok ∖ {a})=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="am∈ℕ1"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p36" org.eventb.core.predicate="(respWDok ∖ {a})∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r5" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalPP:1"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFailsAtm/inv23/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" org.eventb.core.prSets="ACCOUNT,ATM,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p11" org.eventb.core.prInfHyps="p14,p15,p16,p17"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p11"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p14,p15,p16,p17"/>
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in goal" org.eventb.core.prGoal="p0" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p18">
<org.eventb.core.prRule name="r1" 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="p19"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="eh with trans=reqWD∪respWDok∪respWDfail" org.eventb.core.prGoal="p18" org.eventb.core.prHyps="p14">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p30">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p30" org.eventb.core.prHyps="p5,p13,p9,p3,p2,p1,p10,p4,p7,p12,p8,p6,p14,p15,p16,p17">
<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.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name="(" org.eventb.core.prGoal="p15">
<org.eventb.core.prRule name="r4" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="hyp" org.eventb.core.prGoal="p15" org.eventb.core.prHyps="p15"/>
</org.eventb.core.prAnte>
<org.eventb.core.prAnte name=")" org.eventb.core.prGoal="p31">
<org.eventb.core.prRule name="r1" 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="p19"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p31" org.eventb.core.prHyps="p5,p13,p9,p3,p2,p1,p10,p4,p7,p12,p8,p6,p14,p15,p16,p17">
<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.prAnte>
<org.eventb.core.prAnte name="*" org.eventb.core.prGoal="p32">
<org.eventb.core.prRule name="r1" 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="p19"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p20"/>
<org.eventb.core.prHypAction name="HIDE2" org.eventb.core.prHyps="p21"/>
<org.eventb.core.prHypAction name="HIDE3" org.eventb.core.prHyps="p22"/>
<org.eventb.core.prHypAction name="HIDE4" org.eventb.core.prHyps="p23"/>
<org.eventb.core.prHypAction name="HIDE5" org.eventb.core.prHyps="p24"/>
<org.eventb.core.prHypAction name="HIDE6" org.eventb.core.prHyps="p25"/>
<org.eventb.core.prHypAction name="HIDE7" org.eventb.core.prHyps="p26"/>
<org.eventb.core.prHypAction name="HIDE8" org.eventb.core.prHyps="p27"/>
<org.eventb.core.prHypAction name="HIDE9" org.eventb.core.prHyps="p28"/>
<org.eventb.core.prHypAction name="HIDE10" org.eventb.core.prHyps="p29"/>
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="ML" org.eventb.core.prGoal="p32" org.eventb.core.prHyps="p5,p13,p9,p3,p2,p1,p10,p4,p7,p12,p8,p6,p14,p15,p16,p17">
<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.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</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.prIdent name="atmCashA" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="atmWDAm" org.eventb.core.type="ℙ(ATM×ℤ)"/>
<org.eventb.core.prIdent name="bal" org.eventb.core.type="ℙ(ACCOUNT×ℤ)"/>
<org.eventb.core.prIdent name="cardAcct" org.eventb.core.type="ℙ(CARD×ACCOUNT)"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="validCard" org.eventb.core.type="ℙ(CARD)"/>
<org.eventb.core.prIdent name="withdrawFail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawFailMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prIdent name="withdrawOk" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkA" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="withdrawOkMsg" org.eventb.core.type="ℙ(ATM×BOOL)"/>
<org.eventb.core.prPred name="p23" org.eventb.core.predicate="withdrawOkA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p18" org.eventb.core.predicate="trans ∖ {a}=reqWD∪respWDok∪(respWDfail ∖ {a})"/>
<org.eventb.core.prPred name="p15" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="atmCashA∈ATM → ℕ"/>
<org.eventb.core.prPred name="p30" org.eventb.core.predicate="(reqWD∪respWDok∪respWDfail) ∖ {a}=reqWD∪respWDok∪(respWDfail ∖ {a})"/>
<org.eventb.core.prPred name="p19" org.eventb.core.predicate="bal∈ℙ(ACCOUNT × ℤ)"/>
<org.eventb.core.prPred name="p14" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail"/>
<org.eventb.core.prPred name="p26" org.eventb.core.predicate="respWDok∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p31" org.eventb.core.predicate="reqWD∩(respWDfail ∖ {a})=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p29" org.eventb.core.predicate="trans∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="∀c⦂CARD·c∈ran(cardInAtm)⇒c∈validCard"/>
<org.eventb.core.prPred name="p10" org.eventb.core.predicate="withdrawFailMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p24" org.eventb.core.predicate="withdrawFailA∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p12" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="withdrawOkMsg∈ATM ⇸ BOOL"/>
<org.eventb.core.prPred name="p25" org.eventb.core.predicate="reqWD∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p21" org.eventb.core.predicate="cardAcct∈ℙ(CARD × ACCOUNT)"/>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="partition(trans ∖ {a},reqWD,respWDok,respWDfail ∖ {a})"/>
<org.eventb.core.prPred name="p22" org.eventb.core.predicate="validCard⊆CARD"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="atmWDAm∈ATM ⇸ ℕ"/>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="withdrawOk⊆withdrawOkA"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="bal∈ACCOUNT ⇸ ℕ"/>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="a∈respWDfail"/>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="withdrawFail⊆withdrawFailA"/>
<org.eventb.core.prPred name="p17" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="atmCash∈ATM → ℕ"/>
<org.eventb.core.prPred name="p32" org.eventb.core.predicate="respWDok∩(respWDfail ∖ {a})=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p11" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)"/>
<org.eventb.core.prPred name="p27" org.eventb.core.predicate="respWDfail∈ℙ(ATM)"/>
<org.eventb.core.prPred name="p16" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))"/>
<org.eventb.core.prPred name="p20" org.eventb.core.predicate="validCard∈ℙ(CARD)"/>
<org.eventb.core.prPred name="p28" org.eventb.core.predicate="cardAcct∈CARD ↔ ACCOUNT"/>
<org.eventb.core.prPred name="p13" org.eventb.core.predicate="cardAcct∈CARD ⇸ ACCOUNT"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.typeRewrites:1"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r4" org.eventb.core.prRID="org.eventb.core.seqprover.hyp"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.eq:1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="com.clearsy.atelierb.provers.core.externalML:1"/>
</org.eventb.core.prProof>
<org.eventb.core.prProof name="withdrawFail/grd16/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,CARD">
<org.eventb.core.prRule name="r0" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="Partition rewrites in hyp (partition(trans,reqWD,respWDok,respWDfail))" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'">
<org.eventb.core.prHypAction name="FORWARD_INF0" org.eventb.core.prHyps="p3" org.eventb.core.prInfHyps="p4,p5,p6,p7"/>
<org.eventb.core.prHypAction name="HIDE1" org.eventb.core.prHyps="p3"/>
<org.eventb.core.prHypAction name="SELECT2" org.eventb.core.prHyps="p4,p5,p6,p7"/>
<org.eventb.core.prRule name="r1" 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="p8">
<org.eventb.core.prRule name="r2" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="simplification rewrites" org.eventb.core.prGoal="p8" org.eventb.core.prHyps="">
<org.eventb.core.prAnte name="'" org.eventb.core.prGoal="p9">
<org.eventb.core.prRule name="r3" org.eventb.core.confidence="1000" org.eventb.core.prDisplay="⊤ goal" org.eventb.core.prGoal="p9" org.eventb.core.prHyps=""/>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
</org.eventb.core.prRule>
</org.eventb.core.prAnte>
<org.eventb.core.prString name=".pos" org.eventb.core.prSValue=""/>
</org.eventb.core.prRule>
<org.eventb.core.prIdent name="a" org.eventb.core.type="ATM"/>
<org.eventb.core.prIdent name="cardInAtm" org.eventb.core.type="ℙ(ATM×CARD)"/>
<org.eventb.core.prPred name="p9" org.eventb.core.predicate="⊤"/>
<org.eventb.core.prPred name="p8" org.eventb.core.predicate="⊤∧⊤"/>
<org.eventb.core.prPred name="p1" org.eventb.core.predicate="a∈dom(cardInAtm)"/>
<org.eventb.core.prPred name="p5" org.eventb.core.predicate="reqWD∩respWDok=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p7" org.eventb.core.predicate="respWDok∩respWDfail=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p0" org.eventb.core.predicate="a∈dom(cardInAtm)∧cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prPred name="p3" org.eventb.core.predicate="partition(trans,reqWD,respWDok,respWDfail)">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p6" org.eventb.core.predicate="reqWD∩respWDfail=(∅ ⦂ ℙ(ATM))">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p4" org.eventb.core.predicate="trans=reqWD∪respWDok∪respWDfail">
<org.eventb.core.prIdent name="reqWD" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDfail" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="respWDok" org.eventb.core.type="ℙ(ATM)"/>
<org.eventb.core.prIdent name="trans" org.eventb.core.type="ℙ(ATM)"/>
</org.eventb.core.prPred>
<org.eventb.core.prPred name="p2" org.eventb.core.predicate="cardInAtm∈ATM ⇸ CARD"/>
<org.eventb.core.prReas name="r2" org.eventb.core.prRID="org.eventb.core.seqprover.autoRewritesL3:0"/>
<org.eventb.core.prReas name="r0" org.eventb.core.prRID="org.eventb.core.seqprover.partitionRewrites"/>
<org.eventb.core.prReas name="r1" org.eventb.core.prRID="org.eventb.core.seqprover.genMPL1"/>
<org.eventb.core.prReas name="r3" org.eventb.core.prRID="org.eventb.core.seqprover.trueGoal"/>
</org.eventb.core.prProof>
</org.eventb.core.prFile>
